Nemerle is a high-level statically-typed programming language for the .NET platform. It offers functional, object-oriented and imperative features. It has a simple C#-like syntax and a powerful meta-programming system.

Features that come from the functional land are variants, pattern matching, type inference and parameter polymorphism (aka generics). The meta-programming system allows great compiler extensibility, embedding domain specific languages, partial evaluation and aspect-oriented programming.

See the description of Nemerle's most appealing Features.

Beginning with the 0.2.0 release, the language is a full CLS consumer and extender.

Beginning with the 0.9.0 release the compiler has full support for .NET 2.0 runtime generics (both production and consumption).

What Nemerle is not

Nemerle is not a dynamically typed language in the spirit of Python or Perl. Types can only be omitted when the compiler knows them anyway (which is most of the time).

Nemerle meta-programming (Macros) has nothing in common with macros in C. They are more akin to the Lisp macros.

Nemerle and C#

Nemerle is not far away from CsharpDiff.

Semantically Nemerle is mostly a C# superset.

Syntactically they are very close, the differences being well thought out and necessary to make the language consistent. All the people who consider Nemerle syntax odd, compared to C#, are referred to the Haskell and/or Lisp manuals.