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 |
| Ліцензія | модифікована ліцензія BSDd |
| Репозиторій вихідного коду | github.com/rsdn/nemerle |
| Вебсайт | nemerle.org |
Nemerle — високорівнева мова програмування із статичною типізацією для платформи .NET. Вона надає можливість використовувати функційний, об'єктно-орієнтований та імперативний підходи у програмуванні. Мова має відносно простий C#-подібний синтаксис та потужну систему метапрограмування.
Назва Nemerle виникла завдяки книжці Урсули Ле Гуїн «Чарівник Земномор'я», а саме за ім'ям чародія Nemmerle. Відмінний від оригінального спосіб напису із однією «m» є свідомим рішенням.
Головні концепції:
- Наявність локальних функцій (лексичних замикань). Функція є повноправним об'єктом, тобто може бути збережена у змінну, передана як аргумент в іншу функцію або повернена функцією.
- Гарантована оптимізація хвостової рекурсії, тобто хвостова рекурсія завжди замінюється циклом під час компіляції.
- Виведення типів. Зокрема, можливо виведення типів локальних змінних і виведення сигнатури локальних функцій.
- Відсутність чіткої межі між інструкцією і виразом. Наприклад, умовний оператор може знаходитися всередині арифметичного виразу. Нема жодної необхідності у використанні інструкції return.
- Блоки коду, що скасовують необхідність у таких інструкціях як break і continue.
- Алгебричні типи даних, кортежі та зіставлення зі зразком.
- Спрощений синтаксис роботи зі списками. Спискові літерали.
- Типобезпечні макроси та квазі-цитування.
- Часткове застосування операторів і функцій — проста генерація обгортки деякої функції, в котрій частина параметрів підставляються наперед, а частина передається безпосередньо під час виклику функції.
Nemerle може бути інтегрована у Visual Studio 2005 або Visual Studio 2008. Також вона має своє власне, повністю безкоштовне, інтегроване середовище розробки базоване на Visual Studio 2008 Shell.
Традиційна програма «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.](яп.)