Hacker News new | ask | show | jobs
by xpaulbettsx 5515 days ago
Nemerle's coolest feature(or most evil, depending on your perspective) is its macros - it's one of the few modern languages that support them.
1 comments

Exactly. AFAIK, it has small core language and all other constructions like if/else, while, for, foreach etc are made with macros.

I think that Nemerle is Lisp macros + static types + OCaml (algebraic data types, pattern matching) + .Net ecosystem (even Visual Studio support).

how does it square typing with macros? is it typed after macro application?
There are different "macro stages" to allow macro application on both typed and untyped source.
so if macros can operate on typed source and/or on the typed ast tree, do they (the macros) have a type system that guarantees that they will preserve correct typing? or are types still checked agan (globally?) after applying the macro?

what i'm really asking is, is there anything "smart" about how the macro works with the type system?

Macros are expending in the typing process. In macro you can use compiler API to type some untyped AST (for example, argument of macro).

For example, "foreach" macro use compiler API to infer type of collection. This macro generate specialized code for different collection kind (array/list/IEnumerable).

For example, see implementation of "lock" macro: http://code.google.com/p/nemerle/source/browse/nemerle/trunk...
yes, but macros can operate with typed AST too