Что является высшим приоритетом в программировании?
Фрэймворки? Производительность?
На мой взгляд важнейшим являются простота ЯП и возможность посредством ЯП сохранять код
максимально простым и однозначным.
И здесь я вижу пока лишь два кандидата.
Почему lisp? потому что это первый(только подумайте) ЯП со сборщиком мусора. Только одно это убрало огромное кол-во сложности.
Второе это выражение программы в виде близком к АСТ. однозначность любой конструкции позволяет однозначно записывать любые конструкции.
Почему rust? Утверждают что компилятор раста не позволяет выполнить неправильные операции с памятью. нереально круто.
Еще в обоих ЯП мы может отделить структуры данных от методом их обработки. Это существенно упрощает код.
Ну и 3-е это конечно возможности мета-программирования. только они могут довести принцип DRY до совершенства.
еще одно приемушество перед другими ЯП что раст что лисп базируются на выражениях в противоположность инструкциям.
И пока хейтеры кричат: скобочки, каша и т.п. кто-то создает чистый код на этих ЯП.
остается лишь нерешенным вопрос: static || dynamic.
Здравствуйте, varenikAA, Вы писали:
AA>Что является высшим приоритетом в программировании? AA>Фрэймворки? Производительность? AA>На мой взгляд важнейшим являются простота ЯП и возможность посредством ЯП сохранять код AA>максимально простым и однозначным. AA>И здесь я вижу пока лишь два кандидата.
C и LUA
изучил, как там работает interop / native API или как называется та технология, которая реализует вызовы из lisp в rust и обратно ?
ТС это не нужно и неинтересно, он восхищается красотой которую видит в этих языках. К их практическому применению это не имеет никакого отношения.
Здравствуйте, varenikAA, Вы писали:
AA>Что является высшим приоритетом в программировании? AA>И здесь я вижу пока лишь два кандидата.
Неужели тухлее темы не было?? Прибежать с двумя аутсайдерами и сотрясать как идолом. Провокации — их если пишешь, в них должен быть ... интеллект какой-то что ли! А эти вбросы оставь первокурсникам. Или ты уже на втором?
Здравствуйте, varenikAA, Вы писали:
AA>Таких ЯП как си и луа вагон, а лисп и раст уникальны даже по отношению друг к другу. AA>раст кстати имеет отдельные черты оберона в части полиморфизма.
Уникальны sql, erlang, forth, prolog, brainfuck... а раст и lisp как раз совершенно обычные языки.
Просто lua собирается C компилятором, а C есть почти везде при желании можно самому поменять.
Синтаксис простой в изучении и очень гибкий.
Ни Lisp, ни Rust не являются простыми ЯП. Простой ЯП это виртовский Паскаль, например.
Теперь по поводу сложности ЯП. Суть в том, что реальность сложная. Да, порой программисты её переусложняют ещё больше, но даже если ты не привносишь ни толики дополнительной сложности, то реальность остаётся сложной. Простые задачи решать обычно не нужно. И сложность задачи неизменно выливается в сложность решения. Это можно назвать законом сохранения сложности. Нельзя решить сложную задачу просто. Если это кто-то делает, значит где-то подвох, где-то эту сложность спрятали.
К примеру есть задача менеджмента памяти. В постановке задачи часто нет ограничений на размер входных данных. Это вызывает необходимость выделять память разного размера и освобождать её. От этой сложности не уйти. Но её можно спрятать за сборщиком мусора. Таким образом сложность задачи перешла в сложность реализации рантайма.
Чаще всего и очевидней всего сложность прячется в библиотеках. Например есть сложный формат XML, но для программиста вся сложность в том, чтобы выучить, как правильно пользоваться каноничной библиотекой для работы с XML, а про всё остальное уже подумали разработчики библиотеки.
Но если всё писать на виртовском Паскале, окажется, что сама структура кода получается довольно сложной и упростить её никак не получится. Отсюда и берётся нужда в сложных ЯП. Когда сложность структуры кода переносится в сложную семантику ЯП и в результате получается простой код, который решает сложную проблему. А структурная сложность спрятана в компиляторе и рантайме, которые обеспечивают выполнение сложной задачи простым по виду кодом.
Это всё звучит довольно заумно. Поэтому попробую привести пример. К примеру есть понятие полиморфизма в ООП. Это когда у нас есть интерфейс с виртуальными методами и несколько реализаций. Во многих кодовых базах на языке C этот паттерн реализован, например в Linux kernel, Gtk. Там он реализован "просто" — есть таблица с указателями на функции, есть указатель на эту таблицу в объекте (ну или сразу указатели на функции в объекте). Понятное дело, что в C это требует множества служебного кода. Частично это можно спрятать за макросами, но очень частично. А в C++ этот паттерн встроен в язык и позволяет решать эту задачу кодом, который выглядит просто и изящно. А всю работу по этим таблицам функций и непрямым вызовам выполняет компилятор. Ещё один пример — мультиметоды. Если там нужны полиморфные функции, реализация которых зависит не от одного объекта, как в классическом ООП, а от двух и более объектов, в ООП предлагается применять паттерн визитор. Довольно много писанины. С мультиметодами всё выходит очень просто и понятно, хотя внутри будет, вероятно, примерно то же — таблица с указателями на таблицы и тд.
Но в любом случае сложность языка требует понимания этого языка. Выигрыш тут в том, что сложность языка достаточно выучить один раз, а использовать его можно в тысячах программ. Но, тем не менее, практика показывает, что бесконтрольное усложнение языка приводит к тому, что люди перестают его осиливать. Поэтому нужна золотая середина.
Собственно современные ЯП и пытаются найти эту золотую середину и проводят её в разных местах. Поэтому сложные ЯП нужны, но не слишком переусложнённые.
изучил, как там работает interop / native API или как называется та технология, которая реализует вызовы из lisp в rust и обратно ?
времени не хватает. читаю практичный лисп на лиспер.ру
Здравствуйте, varenikAA, Вы писали:
AA>Что является высшим приоритетом в программировании? AA>Фрэймворки? Производительность?
Каждый в своем пузыре сидит и, соответственно, имеет свои приоритеты. "Высшего" нет, все относительно.
Для кого-то приоритет "решение проблем заказчика максимально быстро и качественно за минимальные деньги" (см. выше), для кого-то "минимизировать количество багов любой ценой" (авиакосмическая отрасль), для кого-то "иметь принципиальную возможность выразить на языке нужные концепции" (что-нибудь с высокой сложностью/абстрактностью предметной области, математические движки условно), для кого-то "возможность быстрого создания интересной программы", для кого-то просто фан от программирования. И так далее.
Здравствуйте, Kolesiki, Вы писали:
K>Неужели тухлее темы не было?? Прибежать с двумя аутсайдерами и сотрясать как идолом. Провокации — их если пишешь, в них должен быть ... интеллект какой-то что ли! А эти вбросы оставь первокурсникам. Или ты уже на втором?
Еще не выбрал куда поступать. Тема нормальная.
Здравствуйте, varenikAA, Вы писали:
AA>с первым согласен полностью, но только вот гибкость у него такая себе(низкоуровневая, требует думать как машина).
И как думает машина?
Здравствуйте, kov_serg, Вы писали:
_>Здравствуйте, varenikAA, Вы писали:
AA>>с первым согласен полностью, но только вот гибкость у него такая себе(низкоуровневая, требует думать как машина). _>И как думает машина?
укзатели, кругом указатели и ассемблерные вставки.
Здравствуйте, varenikAA, Вы писали:
AA>Что является высшим приоритетом в программировании? AA>Фрэймворки? Производительность? AA>На мой взгляд важнейшим являются простота ЯП и возможность посредством ЯП сохранять код
Экосистема.
Rust очень сложный язык, кстати. Не концептуально, это было бы простительно, а своими синтаксическими прибабахами.