Обновить
102
Роман Смирнов@Source

Head of Elixir at Ecom.tech

0,2
Рейтинг
52
Подписчики
Отправить сообщение
Я Scheme тоже отношу к LISP-семейству, как и все остальные диалекты.
Я немного знаком с CL и мне кажется очень похоже в плане макросов с Elixir. Да, в CL для гигиеничности нужно использовать gensym, а в Elixir для нарушения гигиеничности var!.. Т.е. в этом плане поведение по умолчанию отличается, но в остальном… те же quote(`), unquote(,), unquote_splicing(@,), те же манипуляции с AST при необходимости.
Со Scheme я не настолько знаком, чтобы всерьёз о нём рассуждать, но Racket, на мой взгляд, выглядит очень круто.

Что касается границ гибкости макросов Elixir, они пролегают по территории довольно редкой для практического применения, например, Вы не можете расширять синтаксис языка произвольным образом, т.к. разрешенный набор небуквенных символов ограничен. Если хотите принципиально кастомный синтаксис, то придётся оборачивать весь код, который будет его использовать, в один вызов макроса, внутри которого можно будет преобразовывать AST как угодно. Но это, в принципе, не велика проблема, т.к. для таких преобразований есть очень удобные средства типа Macro.prewalk/3.
А вот единственным принципиальным ограничением, в которое я однажды упёрся, было то, что в общем случае невозможно внутрь quote подставить кусочек сырого AST (кому интересно, могу в личку скинуть подробное описание этого случая). Это вытекает из двойственного представления кода, тогда как в LISP кроме AST другой записи кода нет. Но это реально очень экзотические случаи.

P.S. Вообще тема интересная, надо Rust и Racket поглубже копнуть )
С тем, что ErlangVM — не язык, и приписывать преимущества виртуальной машины тридцатилетнего возраста эликсиру — довольно странно.

Разумеется, преимущества BEAM — это не заслуга Elixir, но ведь он позволяет ими пользоваться. А таких языков не так уж и много, я осведомлён только об Erlang, Elixir и LFE. Вот и получается, что отличительными особенностями этих 3 языков являются преимущества BEAM :-)


Это из той же серии, что отличительные черты Kotlin — это преимущества JVM и возможность использовать Java-библиотеки. У Rust и Crystal — возможность легко подключать сишные либы. А у Elm — встраиваться в существующие JS-проекты.


И это понятно, никому сейчас не нужен язык-бука, который тупо проигнорит текущее состояние отрасли и будет делать абсолютно всё с нуля. Сложность заключается в выборе наиболее крутых достижений прошлого, их гармоничном комбинировании и дальнейшем развитии. Elixir в этом плане сделал ставку на возможности BEAM, интероперабельность с Erlang, макросы LISP и синтаксис Ruby. На мой взгляд, первые 2 пункта выполнены на отлично. Остальные 2 взяты за ориентир, но видимо не являлись самоцелью. Поэтому синтаксис только отдалённо похож на Ruby, а макросы местами не дотягивают до гибкости LISP, но при этом являются наиболее мощными из всех известных мне языков не из LISP-семейства.

А можете про макросы Nim подробнее рассказать? При беглом взгляде на документацию выглядит действительно извращенно (но не в хорошем смысле) по сравнению с макросами аля LISP. Просто обернуть код в макрос без вереницы newCall, newIdentNode, etc. никак нельзя?

Именно по этой причине перспективными являются kotlin, go и swift — так как за ними стоит «большой» заказчик, который обеспечивает языку задачи и ресурсы для их выполнения.
По-моему только Swift может похвастаться заботливым отношением от большой компании. Google не особо запаривается поддержкой своих языков. Ну а JetBrains наверняка будет приятно, что Вы их в один ряд с Google и Apple поставили.
Я не могу сказать про все языки, но Crystal и Elixir появились именно потому, что в этом есть потребность у крупных проектов на Ruby. После чего и создатели Ruby активнее зашевелились в сторону производительности. Но, как мы знаем, обещанного 3 года ждут, а нагрузку надо держать уже сегодня и в этом Elixir отлично помогает. А кому-то возможно и Crystal уже помогает.
С отличиями всегда есть вопрос: относительно чего? По сравнению с Erlang основная отличительная особенность Elixir — это макросы, даже синтаксис и сокращение boilerplate-кода — это всё следствия. А если говорить об отличиях среди всей массы языков программирования, то они на 90% cовпадут с отличительными особенностями Erlang и это естественно.
Я просто не очень понимаю, с чем конкретно Вы не согласны в этом куске?
Для истории выпишу данные с Github по всем языкам из статьи:
Elm — 433 / 194
Rust — 5146 / 1935
Kotlin — 960 / 1541
Crystal — 150 / 52
Elixir — 2668 / 861

Через годик посмотрим динамику.
Там надо цифры в столбце слева смотреть:
5146 репозиториев и 1935 пользователей у Rust, и 5031 / 2491 — у D.
Спасибо, видимо, я его с GHCJS спутал.
Учить можно не C#, а например, весь .Net фрейворк + веб фреймворки. Я не спец, но кажется, он весьма обширен.
Вы уж определитесь, либо всё, что не нужно на текущем месте работы для текущих задач, — это непонятная ненужная хрень, либо можно не ограничивать себя одним языком/платформой.

А если очень хочется поучить непонятную ненужную хрень, то зачем ограничивать себя программированием?
А я разве писал, что нужно ограничивать себя программированием?
Ну и если Вам лично что-то непонятно или не нужно, то это не значит, что это хрень. Кстати, исторический факт: люди, подобные Вам, лет 10-12 назад носились с криками, что .NET — это никому ненужная хрень xD
Хз, может у нас разный гугл…
Я просто пробелы расставил «55 47.48916N, 37 32.94132E» без всякой конвертации и всё нормально показывает:
спойлер
image
Есть кривая, которая показывает вовлечение целевой аудитории в какое-либо дело.
Верно. Этот вопрос освещён в книге «Профессиональная разработка программного обеспечения» Макконнелла.

Причем на новаторов всего 2,5 %. Это означает, что только 2,5 из 100 программистов будет интересно учить что-то новое и «неизвестное».
А вот это уже не совсем верно. Новых технологий много, допустим, на 1 устоявшуюся приходится 10 новых, и вот уже получается, что 25 из 100 программистов интересно учить что-то новое.

Поэтому сейчас у человека выбор учить непонятную хрень, которая то ли будет работать, то ли нет. Либо можно выучить c#, который уже даст тебе работу.
Про это сказано в начале статьи… Если есть проблема с работой, то лучше бы выучить что-то из мейнстрим языков. Но для опытных программистов это уже неинтересно… Ну сколько лет можно учить C#? Там со времён C# 3.0 изменения весьма минорны, даже странно, что мажорную версию языка поднимают постоянно.

И фактически все усилия будут напрасны.
Если Вам это через силу, то не надо конечно. Учить что-то новое надо в удовольствие, потому что интересно, потому что обогащает опыт, расширяет кругозор, а не для того, чтобы в резюме больше строчек было.
С одной стороны — да, а с другой, разве не логичнее было бы компилировать не в java-байт-код, а, к примеру, в Common Lisp?
Вас послушать, так до сих пор все программировали бы исключительно на Fortran, Lisp и Algol, ну и изредка на Smalltalk, Simula и Forth.
Но почему то из этих шести на плаву только Lisp и Smalltalk, и то работу на них найти ещё сложнее, чем на Elm или Rust.
Ну и в целом, работа — это же не главная мотивация в программировании, что-то можно изучать из любви к искусству, а не только в корыстных интересах ;-)
Рядом карабкаются Ada, Pascal и Smalltalk.
И что с того? Языки, которым больше 10 лет, уже заняли свои ниши и особо никуда не двигаются. Ada и Pascal очень медленно сползают вниз, а Smalltalk начал шевелиться с появлением Pharo, но тоже с туманными пока перспективами, т.к. момент был упущен лет 15 назад.
Ага, тем более, что Go и Swift в статье упомянуты, как перспективные для перехода уже в первый, а не во второй эшелон.
Для Kotlin, Elixir, Elm и Rust есть плагины под IntelliJ IDEA, которые работают в том числе и с бесплатной Community Edition.
Также есть плагины под популярные редакторы: Sublime, Atom, VS Code. Ну и само собой под Emacs и Vim. Это уже и к Crystal относится, вот по нему инфа.
Поправил формулировки на более точные по смыслу. А вообще для этого ЛС есть ;-)
Хоть формулировки у Кристиана Нельсона и странные местами, я не вижу в них чего-то криминального и показывающего, что он не знаком с предметом.
Прирост производительности очевидно имеется в виду по сравнению с Ruby :-)
То, что Phoenix работает поверх Cowboy — это факт, но это совсем другой уровень абстракции.
Если завтра выйдет версия Phoenix, работающая поверх другого веб-сервера, Вы очень долго не заметите что что-то поменялось.
Понимаете, D уже сложно назвать молодым и перспективным… Всё-таки языки, которым больше 10 лет, уже заняли свои ниши и вероятность их бурного роста или падения не высока. Должен быть какой-то мощный фактор.
Для примера, появление Rails было фактором роста для Ruby (которому на тот момент было около 10 лет). С другой стороны в 90-x и начале 00-х пришло время бесплатных компиляторов и интерпретаторов, и очень многие хорошие ЯП (Smalltalk, Delphi, etc.) потеряли рынок, потому что их пытались продолжать продавать.
Каков же фактор для D, которому 15 лет в этом году исполнилось?

Информация

В рейтинге
3 404-й
Откуда
Россия
Работает в
Зарегистрирован
Активность