?

Log in

No account? Create an account

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

Nov. 6th, 2012

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

Previous Entry Share Next Entry

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

Я не буду здесь подробно останавливаться на 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 и радоваться жизни.

Tags:

Comments:

[User Picture]
From:diam_2003
Date:November 6th, 2012 09:20 am (UTC)
(Link)
Концепция-то понятна. Даже понятно, зачем оно надо "на самом деле" (без баззвордного глянца, который регулярно проскальзывает в папирах на родственную тематику). Есть чисто практические возражения достаточно общего характера, технологического свойства (типа "метапрограммирование затрудняет рефакторинг, отладку, ручную оптимизацию производительности и т.п.", как следствие принципа текучих абстракций).
(Reply) (Thread)
[User Picture]
From:xeno_by
Date:November 6th, 2012 09:25 am (UTC)
(Link)
У нас макросы делают первые шаги, поэтому мне трудно ответить на эти возражения. С дебаггером мы только начали экспериментировать, а для остального еще недостаточный опыт использования. А какие у вас мысли на эту тему?

Плюс интересно было бы услышать формулировку, зачем оно надо на самом деле. Всегда приятно пообщаться на тему метапрограммирования.
(Reply) (Parent) (Thread) (Expand)
From:migmit
Date:November 6th, 2012 09:21 am (UTC)
(Link)
Макросы - это не игрушка для психов, разумеется. Макросы - это признание поражения. "Наш язык оказался недостаточно хорошо, нам придётся генерировать программы на нём, чтобы продолжать притворяться, что мы пишем на нём".
(Reply) (Thread)
[User Picture]
From:xeno_by
Date:November 6th, 2012 09:28 am (UTC)
(Link)
Следуя этой логике, допуск 3rd party библиотек в экосистему языка это признание того, что стандартная библиотека недостаточно хороша.
(Reply) (Parent) (Thread) (Expand)
(Deleted comment)
[User Picture]
From:metaclass
Date:November 6th, 2012 10:11 am (UTC)
(Link)
А почему http://scalamacros.org/documentation/gettingstarted.html в исходнике макроса и в работе видно print, а в дампе - println?
(Reply) (Thread)
[User Picture]
From:xeno_by
Date:November 6th, 2012 10:56 am (UTC)
(Link)
Опечатка. Я пофикшу, когда до компа доберусь. Спасибо!
(Reply) (Parent) (Thread)
[User Picture]
From:thedeemon
Date:November 6th, 2012 10:22 am (UTC)
(Link)
Эдак у вас немерле получится.
(Reply) (Thread)
[User Picture]
From:xeno_by
Date:November 6th, 2012 10:59 am (UTC)
(Link)
Ты так говоришь как будто это что-то плохое.
(Reply) (Parent) (Thread)
[User Picture]
From:metaclass
Date:November 6th, 2012 11:03 am (UTC)
(Link)
Уже получился, по моему :)
(Reply) (Parent) (Thread)
[User Picture]
From:vit_r
Date:November 6th, 2012 11:13 am (UTC)
(Link)
Остальная пачка фич реализуется на макросах при помощи дешугаринга в DOT (само собой, это идиллия, реальность будет сложнее, но здесь мы просто обсуждаем идею).

Дьявол в деталях.

Практически деткам в руки дали не спички, а сразу тротиловые шашки. Представляю, что на этом могут построить наши индийские братья по разуму.
(Reply) (Thread)
[User Picture]
From:xeno_by
Date:November 6th, 2012 11:39 am (UTC)
(Link)
Я лично предпочитаю верить в то, что хорошего будет больше, чем плохого.
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:krlz
Date:November 6th, 2012 03:17 pm (UTC)
(Link)
То, что есть возможность включить в скале только кошерные фичи, это, конечно плюс.
То, что обезьянам дадут в руки автомат калашникова, это конечно ужасно. Некоторые скаловский либы (наприме тот же lift), и без этих мега фич ужасны. А что уж будет с макросами страшно представить.
(Reply) (Thread)
[User Picture]
From:isorecursive
Date:November 6th, 2012 04:09 pm (UTC)
(Link)
А что в lift такого ужасного c точки зрения языковых фич?
Я вот использую для мелкого проекта, вроде даже нравится.
Особенно edsl для css-selector-трансформ'ов порадовал.
(Reply) (Parent) (Thread) (Expand)
[User Picture]
From:kouzdra
Date:November 8th, 2012 04:33 am (UTC)
(Link)
Как раз С-style macro - вещь полезная, а это - неюзабельное ..., которым как известно еще с времен PL/I никто кроме маньяков пользоваться не будет

В PL/I было похоже, попроще - без синтаксических деревьев, которые это превращают в полный аллес - но даже на уровне чисто текстовой генерации это уже было неюзабельно.

Макросы не для этого нужны.
(Reply) (Thread)
[User Picture]
From:xeno_by
Date:November 8th, 2012 06:19 am (UTC)
(Link)
А для чего нужны макросы?
(Reply) (Parent) (Thread) (Expand)