Nemerle — високорівнева мова програмування із статичною типізацією для платформи .NET. Вона надає можливість використовувати функціональний, об'єктно-орієнтований та імперативний підходи у програмуванні. Мова має відносно простий C#-подібний синтаксис та потужну систему метапрограмування.

Nemerle
Парадигма функціональна, об'єктно-орієнтована та імперативна
Дата появи 2003
Творці Kamil Skalski, Michał Moskal, Prof. Leszek Pacholski and Paweł Olszta at Wrocław University
Розробник Вроцлавський університет і JetBrains
Останній реліз 1.2.404.0 (13 листопада 2014)
Система типізації статична, сувора, виводима
Під впливом від C#, ML
Вебсайт nemerle.org

Назва Nemerle виникла завдяки книжці Урсули Ле Гуїн «Чарівник Земномор'я», а саме за ім'ям чародія Nemmerle. Відмінний від оригінального спосіб напису із однією «m» є свідомим рішенням.

Характеристика мови ред.

Головні концепції:

  • Наявність локальних функцій (лексичних замикань). Функція є повноправним об'єктом, тобто може бути збережена у змінну, передана як аргумент в іншу функцію або повернена функцією.
  • Гарантована оптимізація хвостової рекурсії, тобто хвостова рекурсія завжди замінюється циклом під час компіляції.
  • Виведення типів. Зокрема, можливо виведення типів локальних змінних і виведення сигнатури локальних функцій.
  • Відсутність чіткої межі між інструкцією і виразом. Наприклад, умовний оператор може знаходитися всередині арифметичного виразу. Нема жодної необхідності у використанні інструкції return.
  • Блоки коду, що скасовують необхідність у таких інструкціях як break і continue.
  • Алгебричні типи даних, кортежі та зіставлення зі зразком.
  • Спрощений синтаксис роботи зі списками. Спискові літерали.
  • Типобезпечні макроси та квазі-цитування.
  • Часткове застосування операторів і функцій — проста генерація обгортки деякої функції, в котрій частина параметрів підставляються наперед, а частина передається безпосередньо під час виклику функції.

Інтегроване середовище розробки ред.

Nemerle може бути інтегрована у Visual Studio 2005 або Visual Studio 2008. Також вона має своє власне, повністю безкоштовне, інтегроване середовище розробки базоване на Visual Studio 2008 Shell.

Приклади ред.

Hello, World! ред.

Традиційна програма «Hello World!» може бути реалізована у такий більш-менш C#-подібний спосіб:

class Hello {
  static Main () : void {
    System.Console.WriteLine ("Hello, world!");
  }
}

або простіше:

System.Console.WriteLine("Hello, world!");

Макроси ред.

Макроси забезпечують «завуальоване» генерування коду із додатковими статичними перевірками компілятором. Вони дозволяють генерувати вихідний код програмованим шляхом.

Наприклад, ось таким чином можна використати макроси Nemerle для SQL:

ExecuteReaderLoop (
  "SELECT firstname, lastname FROM employee WHERE firstname = $myparm",
  dbcon,
  {
    System.Console.WriteLine ("Name: {0} {1}", firstname, lastname) 
  });

замість

string sql = "SELECT firstname, lastname FROM employee WHERE firstname = :a";
NpgsqlCommand dbcmd = new NpgsqlCommand (sql, dbcon, dbtran);
dbcmd.Parameters.Add("a", myparm);

NpgsqlReader reader = dbcmd.ExecuteReader();

while(reader.Read()) {
  string firstname = reader.GetString (0);
  string lastname = reader.GetString (1);
  System.Console.WriteLine ("Name: {0} {1}", firstname, lastname) 
}
reader.Close();
dbcmd.Dispose();

і це не тільки переховування деяких операторів, але й додаткова робота виконана компілятором задля розуміння рядку запиту, використаних змінних, а також стовпчиків повернених базою даних. ExecuteReaderLoop макрос згенерує код, що є приблизно еквівалентним тому, що можна набрати ручним способом. Більш того, він з'єднується з базою даних на етапі компіляції щоб перевірити вірність введеного SQL запиту.

Посилання ред.