Nemerle

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
Nemerle
Парадигма: функціональна, об'єктно-орієнтована та імперативна
Творці: Kamil Skalski, Michał Moskal, Prof. Leszek Pacholski and Paweł Olszta at Wrocław University
Останній реліз: 0.9.4 (22 лютого 2008)
Система типізації: статична, сувора, виводима
Під впливом від: C#, ML

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

Назва 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 запиту.

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