November 6th, 2012

glider

Насчет сложности Скалы и причем здесь макросы

Наряду с ожидаемым эффектом мой вчерашний пост вызвал дополнительную реакцию по поводу сложности Скалы. Уважаемые френды отпостились у себя в бложеках: раз, два, может, скоро будет и три.

Я не буду здесь подробно останавливаться на SIP-18 (Скала 2.10), который прячет за прагмами некоторые из фич Скалы 2.9, включая имплисит конверсии. Также только мельком упомяну про DOT, который заменяет экзистенциальные типы и типы высших порядков на симпатичную и гораздо более простую концепцию. Ну и раз шел разговор о xml-литералах, надо сказать, что многие у нас в команде уже настроены их выкинуть. Как можно видеть, уже прямо сейчас идет неиллюзорная работа по упрощению языка.

***

Но это ладно. Что меня действительно удивляет это отношение к макросам как к игрушке для психов. Мне прямо стыдно это упоминать в надцатый раз, но макросы в Скале и макросы в плюсах это совершенно разные вещи. На эту тему предлагаю пролистать наш туториал: http://scalamacros.org/documentation/gettingstarted.html.

Так вот при помощи этих самых совершенно других макросов мы уже упростили компилятор и починили две ранее едва работающие языковые фичи. Но что самое главное - с помощью макросов можно выносить фичи из языка в стандартную бибилиотеку, а это имеет потенциал упростить язык до предела.

Что я имею ввиду. Берется ядро Скалы ака DOT (вот ссылка сейчас будет реально для психов: https://github.com/namin/dot). В ядре находятся только трейты, абстрактные типы и path-dependent типы - по сути, все то, что нужно для кейк-паттерна. Остальная пачка фич реализуется на макросах при помощи дешугаринга в DOT (само собой, это идиллия, реальность будет сложнее, но здесь мы просто обсуждаем идею).

В итоге при желании можно писать на минималистичном языке, который сохраняет сущность Скалы (а сущность эта заключается в скрещивании ФП с ООП). При сильном желании можно написать что-то вроде import language.lazyVals или import language.caseClasses и радоваться жизни.