В чем разница между макросами Lisp и макросами scala? - PullRequest
1 голос
/ 20 апреля 2019

Есть ли принципиальная разница между макросами Lisp и макросами scala?

Я понимаю, что макросы - это, так сказать, средства программирования программ. Они расширяют язык. Но одинаково ли они сильны? Существуют ли ограничения для макросов scala по сравнению с макросами Lisp? Уместно ли сказать, что макросы LISP более мощные? Есть ли у макросов scala ограничения по сравнению с макросами Lisp?

Если концептуальных отличий между макросами Lisp и scala нет, то можно просто изучить механику макросов Lisp и затем применить их к scala. Но если макросы scala не такие мощные, как макросы Lisp, то это невозможно. На Лиспе много хорошей литературы, но не так много на scala.

1 Ответ

2 голосов
/ 20 апреля 2019

Лисп - это динамически типизированный язык. Scala - это статически типизированный язык, и его система типов довольно мощная.

Макросы в Scala могут преобразовывать AST в зависимости от его типа (или типов его поддеревьев) и даже могут изменять его тип. Так что макросы в Scala не только синтаксические, но и семантические.

Также обратите внимание на замечания о макросах в Scala и макросах в Lisp в диссертации https://infoscience.epfl.ch/record/226166/files/EPFL_TH7159.pdf#chapter.10, p. 206.

...