Хочу сделать серию статей про некоторые молодые языки программирования. Написать на них что-то толковое не получится, потому что совсем небольшая экосистема и довольно высокая вероятность словить баги, но всё же в них есть интересные концепции.
Pony – язык, построенный вокруг модели акторов. Упор делается на безопасность и простую асинхронность. В начале туториала приводится довольно большой список причин, почему пони хорош: безопасная типизация (с type inference и дженериками), отсутствие исключений, гонок, блокировок.
Всё это держится на довольно большом количестве концепций, что существенно увеличивает порог входа.
- Вместо привычных с питона классов здесь классы, примитивы, акторы, интерфейсы, traits (как интерфейсы, но наследоваться в pony можно только от traits), structs. Ну и ещё алгебраические типы данных в виде type aliases и type expressions.
- Атрибуты приватные и публичные, изменяемы и не изменяемые, а ещё embedded (хранятся в одном экземпляре для всех инстансов).
- Вместо методов здесь конструкторы, функции (с неявным доступом ко всем переменным внутри класса без self или this, что несколько усложняет понимание, какие переменные откуда), reference capability (отметка, что функция может изменять атрибуты объекта), finalizers.
В общем, всё это обилие концепций, всяких символов и прочего, оставляет довольно смешанные чувства: мотивация понятная и правильная (сделать код безопасным), но как-то не хочется верить, что для этого нужно всё настолько усложнять. Все вот эти концепции, что я описал выше, в принципе, хороши и изучаются не так уж и сложно. Мне нравится иметь в языке такую вот умную типизацию, избежать адских схем наследования и видеть, какие методы могут что-то изменить в объекте, а какие нет. Однако чем глубже в это погружаешься, тем больше находишь вещей, которые не предполагают, что код будет читать человек, не вызубривший наизусть весь туториал. Я постоянно встречаю в коде, какие-то значки, типа ^
, ~
, .>
, и, прочитав только половину туториала, я вообще не понимаю, что это значит и даже как это гуглить.
А ещё компилятор этого языка называется ponyc, и я не понимаю, почему там до сих пор нет команды attack.