Язык, который привлекает мое внимание в последнее время всё больше и больше — Unison.
Из интересного:
1. наличие как структурной, так и номинальной типизации из коробки благодаря ключевым словам structural
и unique
:-- одинаковые типы:
⧩
structural type Maybe x = None | Just x
structural type Option x = Nothing | Some x
> Just 5 === Some 5
true-- разные типы:
unique type Maybe x = None | Just x
unique type Option x = Nothing | Some x> Just 5 === Some 5
The mismatch is because these types differ:
Option
Maybe
2. Наличие алгебраических эффектов в виде abilities:f : '{Gen} Text
f = gen.Text.ascii
g : Text -> '{IO, Exception} ()
g txt = '(printLine txt)-- abilities в композиции функций являются суммой abilities частей:
f_g : '{Gen, IO, Exception} ()
f_g = '(!(g !f))
3. Хранение кода в виде AST — что делает кэширование/мемоизацию/рефакторинг/поиск/etc гораздо более простым и мощным, нежели в случае хранения кода в виде текста. Это позволяет делать разные интересные штуки — вроде ускорения сборки кода благодаря закэшированным результатам сборки используемых частей библиотек.
Хороший обзор Unison сделал Рунар Бьярнасон в выступлении на Lambda Jam’21: https://www.youtube.com/watch?v=DF6zt0Q-pz4. Также могу смело порекомендовать отличную статью из их блога о том, как написать распределенную Spark-like структуру данных: https://www.unison-lang.org/articles/distributed-datasets.
>>Click here to continue<<
