scala.meta: новая платформа для метапрограммирования Скалы

Jul 05, 2014 00:16

scala.reflect - наш публичный API, появившийся в Скале версии 2.10 - оказался весьма полезным на практике. Благодаря макросам, основанным на новом API, стало возможным реализовать такие библиотеки как async (DSL для упрощения работы с асинхронностью), pickling (статически генерируемые сериализаторы с отличным перфомансом), scala-blitz (ускорялка ( Read more... )

macros, scala

Leave a comment

Comments 31

ext_2116506 July 4 2014, 23:44:37 UTC
Прямо захотелось поучаствовать!

И еще мелочный вопрос: раз оно тащит все в рантайм (я правильно вообще понял?), то это ж дженерики теперь не затираются!? Ну, потенциально. М?

Reply

xeno_by July 5 2014, 18:27:33 UTC
Они не затираются из исходников, но будут все равно затираться из инстансов объектов. Например, если нам откуда-то пришел List[Int], а статически известен тип Any (например, def foo(x: Any) = ...; foo(List(1, 2, 3))), то информация о том, что у листа был тайп аргумент Int, будет безвозвратно потеряна.

Reply

ext_2116506 July 8 2014, 08:07:22 UTC
Чтоб два раза не хоидть, спрошу здесь - pickling же не забросили? Последний коммит два месяца назад :/

Reply

xeno_by July 8 2014, 08:21:28 UTC
Если честно, я уже давно не в курсе состояния дел в пиклинге. Наверное, лучше всего будет спросить в ишью трекере проекта.

Reply


ex_juan_gan July 5 2014, 02:25:26 UTC
Роскошно! Восторг! Сижу тут парсеры комбинаторы несчастные курочу - а у них бац, десериализация чисто через кью.

Это на какой хоть скале, на 11-й?

Reply

xeno_by July 5 2014, 18:23:04 UTC
Библиотека с новым API для метапрограммирования и контрактом для хостов разрабатывается относительно 2.11. Сохранение AST и раскрытие новых макросов требуют специального плагина для компилятора 2.11. Поддержка для IDE и SBT делается в форках соответствующих тулов. В целом, пока что ничего не предвещает необходимости форкать компилятор, но даже если и будет такая необходимость, то мы приложим все силы для того, чтобы этого избежать (для этого уже есть проверенные подходы :)).

Reply

_xacid_ July 6 2014, 16:27:19 UTC
в 2.12 на "работает из коробки" надежда есть? или уже в 3й только ? :)

Reply

xeno_by July 6 2014, 16:51:22 UTC
Если под "работает из коробки" подразумевается "входит в стандартную поставку языка", то скорее всего нет. Сейчас, в отличие от прошлых лет, Scala team гораздо более консервативнее относится к включению новых фич/библиотек в язык, поэтому новым вещам приходится вначале хорошо зарекомендовать себя на практике, и только потом начинаются разговоры о включению их по умолчанию ( ... )

Reply


(The comment has been removed)

_xacid_ July 6 2014, 16:30:55 UTC
не о том думаете :D

вам compile-time API дают а Вы всё runtime да runtime требуете ...

Reply

xeno_by July 6 2014, 16:42:40 UTC
Одна из целей новой платформы - обеспечить anytime metaprogramming.

На слайде 53 кратко упоминается о том, что сохранение AST обеспечивает равные возможности для всех хостов. Это значит, что в новой системе не должно быть разницы между compile-time и runtime метапрограммированием - и там, и там будет информация про полный AST программы. По факту, единственной проблемой, которую мы пока что заметили, является erasure, но тут без тяжелой артиллерии не справиться.

Для примера. Сейчас в разработке находится GSoC проект по рантайм экспаншену макросов. По задумке, он предоставит возможность откладывать раскрытие определенных макро вызовов до рантайма, позволяя макросы, исполняемые во время компиляции, прозрачно раскрывать в рантайме. Посмотрим как оно будет, но пока что я надеюсь, что удастся во многом стереть границу между compile-time и runtime.

Reply


sorhed July 6 2014, 19:33:50 UTC
Вау! Наконец-то!

Для scala.reflect я был слишком тупой, а тут всё кристально ясно.

А как тигрицу уговорили? :)

Reply

xeno_by July 7 2014, 11:10:45 UTC
Тигрица все понимает. Действительно ведь со scala.reflect открылся ряд проблем, которые мы либо не предполагали, либо сильно преуменьшали их значимость. scala.meta предоставляет выход из этой невеселой ситуации, поэтому никто в принципе не против - осталось только, чтобы реализация оправдала ожидания, которые на нее возлагают. Будем стараться.

Reply


Leave a comment

Up