Pergunta

Depois de ler o PRÁTICO COMUM LISP, finalmente entendi qual era o grande problema de Macros, e tenho procurado um idioma para a plataforma .NET que suporta isso. Existem alguns dialetos Lisp para .NET, mas pelo que pude reunir, todos são muito beta ou abandonados. Recentemente, meu interesse foi desencadeado pelo Clojure, mas é para a plataforma Java e, embora provavelmente possa usar o IKVM, não parece integrado. Especialmente quando você quer fazer coisas como o WPF.

Recentemente, ouvi Whisper sobre F#, tentei olhar para a documentação se pudesse encontrar algo sobre o suporte a macro, mas não o encontrei. Então alguém sabe?

Obrigado :)

Foi útil?

Solução

Bem, F# é baseado em ocaml e ocaml tem um bastante extenso sistema macro. Dadas as semelhanças sintáticas e semânticas de F# e OCAML, você poderá portar o sistema de macro OCAML para f#.

Além de roubar o sistema macro da OCAML, não tenho conhecimento de um sistema de macro enlatado para f#.

Outras dicas

Nemerle, em http://nemerle.org/ , é uma linguagem .NET (também suporta o mono) que suporta muitos dos paradigma de programação funcional enquanto permanece visualmente perto de C#. Possui extenso suporte macro.

Não. Sem macros para f#.

Você já olhou Vaia? Embora o Boo não tenha macros, ele possui um pipeline de compilador aberto, que é uma boa alternativa às macros para metaprogramação sintática.

Editar] Como observado nos comentários, Boo faz tem macros agora.

Mas bons horrores a sintaxe nesses exemplos de ocaml parecem obscuros

Lá você está encontrando o mesmo trade-off sintático fundamental que você faz com o LISP. Se você deseja o poder das macros do tipo Lisp, você tende a acabar com a sintaxe do tipo Lisp para o idioma, ou então sua sintaxe macro parece bem diferente da sua sintaxe comum ... nada de errado com qualquer abordagem, apenas opções diferentes

Eu pensei que deveria ressaltar que agora existe uma porta .NET/mono de Clojure. Clojure suporta macros de estilo Lisp, como é observado na questão.

Como outros disseram, as macros não são suportadas em F# neste momento (final de 2010).

Recentemente, ouvi Whisper sobre F#, tentei olhar para a documentação se pudesse encontrar algo sobre o suporte a macro, mas não o encontrei. Então alguém sabe?

F# não suporta macros e é improvável que nunca o fará.

Que tal usar as citações F#?

http://tomasp.net/blog/fsquotations.aspx

Isso pode ser o contrário do que você quer, mas você sabe sobre Rdnzl? É uma interface Foerign-Função (FFI) que permite ligar para as bibliotecas .NET do seu código LISP.

Provavelmente são muito menos maduros do que qualquer implementação comum de Lisp ou esquema, mas existem dialetos Lisp para .NET: EU# e Dotlisp.

Existem dois Lisps desenvolvidos ativamente para .NET

Ironscheme - Implementação do esquema baseado em DLR

Xronos - Porta de clojure baseada em DLR

Atualmente, estou investigando possibilidades de metaprogramação em F#. Se definirmos macros como modelo de texto que se expande em código, há duas abordagens óbvias:

  1. Modelos T4. Há implementação para f#: https://github.com/kerams/templatus

  2. Vi um lugar para invocação de f# de strings em montagem separada e depois carregar a montagem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top