Nemerle

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 — високорівнева мова програмування із статичною типізацією для платформи .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 запиту.

Посилання

[ред. | ред. код]