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 запиту.
Посилання
- Домашня сторінка мови програмування [Архівовано 11 лютого 2012 у WebCite](англ.)
- Project Hosting on Google Code [Архівовано 11 лютого 2012 у WebCite](англ.)
- Офіційна документація(англ.)
- Nemerle форум [Архівовано 11 травня 2008 у Wayback Machine.](англ.)
- Nemerle з 99 пляшок пива [Архівовано 28 вересня 2007 у Wayback Machine.](англ.)
- Цікаві факти стосовно Nemerle у щоденнику akiramei [Архівовано 1 листопада 2007 у Wayback Machine.](яп.)