-
Notifications
You must be signed in to change notification settings - Fork 89
What Is Nemerle
Nemerle is a high-level statically-typed programming language for platforms based on the Common Language Infrastructure (Mono and .NET) which incorporates features from the functional, object-oriented, and imperative programming paradigms. Additionally, the language has a powerful meta-programming system.
Syntactically, especially in terms of object-oriented programming, Nemerle resembles and largely functions as a superset of C#. However, Nemerle goes beyond C# by incorporating the functional concepts of algebraic data-types and pattern matching; a system of type inference which greatly simplifies the declaration of complex objects; and an implementation of Lisp-like, macro-based, metaprogramming which enables the creation of new language constructs, partial evaluation, and the embedding of domain specific languages.
You can see some of Nemerle's most appealing features in action here: Features
Nemerle is not a dynamically typed language in the spirit of Python* or Perl. Unfortunately, this means that types can only be omitted when the compiler knows them anyway, and that you probably won't be writing a Nemerle program which dynamically rewrites itself in its own language at runtime. Fortunately, however, Nemerle can infer types just about 99% of the time, and, by sacrificing that 1% of the time for static typing, runs as fast as C#. Additionally, Nemerle's powerful metaprogramming system makes writing code which self-modifies at compile-time fairly trivial.
*Though optional Pythonic syntax has been implemented!