Новый релиз macro paradise: теперь есть макро аннотации и можно использовать с 2.10

Aug 07, 2013 08:00

Всем привет! Сегодня хочу рассказать о том, что на днях выпустил новую версию macro paradise: http://scalamacros.org/news/2013/08/05/macro-paradise-2.0.0-snapshot.html. По ссылке есть детали, а здесь я просто вкратце остановлюсь на главных ( Read more... )

macros, scala

Leave a comment

Comments 10

zhengxi August 7 2013, 06:07:00 UTC
супер, буду тоже ждать ближайших выходных :)

вопрос - какие фичи могут быть выкинуты или сильно измениться?
чтобы потом не было сюрпризом.

Reply

xeno_by August 7 2013, 06:22:30 UTC
Квазицитаты уже в 2.11.0-M4, так что навряд ли их кто-то выкинет, а, соответственно, и я их трогать не буду. Макро аннотации это первая серьезная реализация, поэтому она может поменяться (но не думаю, что кардинально) в процессе обтачивания функциональности для написания предложения по добавлению их в язык. Также я планирую добавить http://docs.scala-lang.org/overviews/macros/implicits.html#fundep_materialization.

Вообще, я стараюсь не ломать безвозвратно уже существующие решения. Как, например, получилось с тайп макросами, которые в последний момент не приняли в язык. Пришлось потратить время для того, чтобы найти замену для подавляющего большинства сценариев их использования - имплисит макросы для программирования на уровне типов + макро аннотации для генерации публичного кода. Теперь мы видим имплисит макросы уже в 2.10.2, а аннотации в новом релизе парадайза.

Reply


anton_y_k August 7 2013, 14:18:46 UTC
Главное, чтобы какие-то более-менее высокоуровневые методы сделали, а то писать AST-шки чуть ли не вручную очень напрягает, аналогично с обходом тагов класса (впрочем это уже больше обычного рефлекшина касается), где надо писать кучу циклов с патернматчингом для того, чтобы достучаться до какого-то метода или проперти.

Reply

xeno_by August 7 2013, 14:20:23 UTC
В новом парадайзе для этого есть квазицитаты. А про reflection API, да, есть такое, есть и планы пофиксить.

Reply

anton_y_k August 7 2013, 14:53:07 UTC
Отлично! А то, честно говоря, из-за чрезмерной низкоуровневости предыдущего API (и соответственно сложностью написания и отладки) мой опыт с макросами ограничился несколькими учебными приложениями.

Reply


zhengxi August 11 2013, 04:15:39 UTC
Глупый вопрос - а где вот этот macro-paradise_2.10.2-2.0.0-SNAPSHOT.jar скачать?
Или хотя бы из какого репозитория скомпилять?

Reply

zhengxi August 11 2013, 04:52:56 UTC
https://oss.sonatype.org/content/repositories/snapshots/org/scala-lang/plugins/macro-paradise_2.10.2/2.0.0-SNAPSHOT/

полчаса искал, блин
этот сайт еще и закрыт от индексирования поисковиками.

Reply


zhengxi August 11 2013, 19:57:34 UTC
Хорощо работает.

Две недоработки только:

1. для конструкции ..${} часто бывает нужно явно указать тип выражения внутри скобок (List[Tree]), пример

2. не получается через квазицитату создать CaseDef, вроде q"case 1 => 2"

Reply

xeno_by August 11 2013, 21:40:41 UTC
1) Есть для такого баг, да: https://issues.scala-lang.org/browse/SI-6840.
2) Попробуй cq"1 => 2".

Reply

zhengxi August 11 2013, 22:56:46 UTC
у обычного, не списочного ${} этот баг тоже проявляется.

если там что-то вроде ${ if (cond) q"tree1" else q"tree2" }, то приходится писать ${ (if (cond) q"tree1" else q"tree2") : Tree }

Reply


Leave a comment

Up