Подтвердить что ты не робот

Поддержка макросов в F #

После прочтения Practical Common Lisp я наконец понял, что такое большое дело в макросах, и я искал язык для платформы .NET, которая поддерживает это. Есть несколько диалектов Lisp для .NET, но из того, что я смог собрать, либо очень бета, либо оставлено. Недавно мой интерес вызвал Clojure, но он для платформы java и, хотя, вероятно, мог использовать ikvm, он не чувствует себя интегрированным. Особенно, когда вы хотите делать такие вещи, как WPF.

Недавно я слышал шепот о F #, я попытался посмотреть документацию, если бы мог найти что-нибудь о поддержке макросов, но не нашел ее. Так кто-нибудь знает?

Спасибо:)

4b9b3361

Ответ 2

Nemerle, http://nemerle.org/, является языком .NET(также поддерживающим моно), который поддерживает много парадигмы функционального программирования, а оставаясь визуально близко к С#. Он имеет обширную поддержку макросов.

Ответ 3

Неа. Нет макросов для F #.

Ответ 4

Вы посмотрели Boo? В то время как у Boo нет макросов, у него есть открытый конвейер компилятора, который является хорошей альтернативой макросам для синтаксического метапрограммирования.

[EDIT] Как отмечено в комментариях, у Boo теперь есть макросы.

Ответ 5

но хорошие ужасы, синтаксис в этих примерах ocaml выглядит неясным

Там вы столкнулись с тем же основным синтаксическим компромиссом, что и с Lisp. Если вы хотите использовать макросы lisp -like, вы склонны либо к синтаксису lisp -like для языка, либо ваш синтаксис макросов сильно отличается от вашего обычного синтаксиса... ничего плохого в любом подходе, только разные варианты

Ответ 6

Я думал, что должен отметить, что теперь есть довольно активный порт .NET/Mono Clojure. Clojure поддерживает макросы стиля LISP, как указано в вопросе.

Как уже говорили другие, макросы не поддерживаются в F # на этом этапе (конец 2010 года).

Ответ 7

Недавно я слышал шепот о F #, я попытался посмотреть документацию, если бы мог найти что-нибудь о поддержке макросов, но не нашел ее. Так кто-нибудь знает?

F # не поддерживает макросы, и маловероятно, что он когда-либо будет.

Ответ 9

Это может быть наоборот, чем вы хотите, но знаете ли вы о RDNZL? Это интерфейс функции foerign (FFI), который позволяет вам вызывать библиотеки .NET из вашего кода Lisp.

Они, скорее всего, гораздо менее зрелые, чем любая реализация Common Lisp или Scheme, но есть диалоги Lisp для .NET: L # и DotLisp.

Ответ 10

Существует два активно разработанных Lisps для .net

IronScheme - реализация схемы на основе DLR

Xronos - порт на основе DLR clojure

Ответ 11

В настоящее время я изучаю возможности метапрограммирования в F #. Если мы определяем макросы как текстовый шаблон, который расширяется в код, тогда существуют два очевидных подхода:

  • Шаблоны T4. Существует реализация для F #: https://github.com/kerams/Templatus

  • Я видел где-то вызов F # из строк в отдельную сборку и затем загрузку сборки.