Нова версія мови програмування Nim 0.20

Відбувся реліз мови системного програмування Nim 0.20.0. Мова використовує статичну типізацію та створена з огляду на Pascal, C++, Python та Lisp. Вихідний код на мові Nim компілюється на представлення на C, C++ або JavaScript. Надалі отриманий C/C++ код компілюється виконуваний файл за допомогою будь-якого доступного компілятора (clang, gcc, icc, Visual C++), що дозволяє досягти продуктивності близької до Сі, якщо не враховувати витрати на виконання збирача сміття. За аналогією з Python в Nim як роздільники блоків застосовуються відступи. Підтримуються засоби метапрограмування та можливості для створення предметно-орієнтованих мов (DSL). Код проекту поставляється під ліцензією MIT.

Випуск Nim 0.20 можна розглядати як кандидат у релізи першої стабільної версії 1.0, що включає кілька змін, що порушують сумісність, необхідних для формування першої стабільної гілки, яка зафіксує стан мови. Версія 1.0 подається як стабільний випуск із тривалим терміном підтримки для якого буде гарантовано збереження зворотної сумісності у стабілізованій частині мови. Окремо в компіляторі буде доступний експериментальний режим, в якому будуть розвиватися нові можливості, які можуть порушувати зворотну сумісність.

Із запропонованих у Nim 0.20 змін можна виділити:

  • "Not" тепер завжди є унарним оператором, тобто. вирази виду «assert(not a)» тепер неприпустимі і допускається лише вказівка ​​«assert not a»;
  • Включено жорсткі перевірки перетворення цілих і речових чисел на етапі компіляції, тобто. вираз «const b = uint16(-1)» тепер приведе до висновку помилки, оскільки -1 не може бути перетворений на цілий беззнаковий тип;
  • Забезпечено розпакування кортежів для констант та змінних циклів.
    Наприклад, зараз можна використовувати присвоєння виду 'const(d, e) = (7, eight)) і for(x, y) in f;

  • Забезпечено ініціалізацію за умовчанням хешів та таблиць. Наприклад, після оголошення "var s: HashSet [int]" можна відразу виконати "s.incl(5)", що раніше призводило до помилки;
  • Поліпшено інформативність помилок для проблем, пов'язаних з оператором «case» та виходом за межі індексу масиву;
  • Заборонено зміни довжини таблиці у процесі ітерації.

Джерело: opennet.ru

Додати коментар або відгук