Оновлення компілятора Nimony у Nim 3.0

У процесі розробки мови програмування Nim 3.0 Nimony розвивається новий компілятор. Основоположним принципом проєктування є досягнення передбачуваності часу виконання у найгіршому випадку (Worst Case Execution Time, WCET). Це вимога продиктована орієнтацією на системи жорсткого реального часу, де недетерміноване поведінка недопустиме. Як наслідок, архітектура Nimony виключає використання JIT-компіляторів та зборщиків сміття з трасуванням, адже їхні операції можуть вносити непередбачувані затримки.

Передбачуваність та управління пам’яттю в Nimony

Для досягнення передбачуваності, примітивні типи даних (цілі числа, символи) безпосередньо відображаються на машинні слова та байти відповідної архітектури. Композитні типи формуються без використання непрямої адресації, розміщуючись безпосередньо в стеку або всередині інших структур даних. Такий підхід мінімізує накладні витрати та забезпечує більше прозоре відповідність між вихідним кодом та згенерованим машинним кодом.

У сфері автоматичного управління пам’яттю Nimony відходить від різноманіття опцій, доступних у Nim 2.0, пропонуючи єдиний стандартизований режим: “mm:atomicArc”. Цей режим базується на підрахунку посилань з використанням атомарних операцій, доповнених семантикою переміщення та викликом деструкторів при знищенні об’єкта.

Ключовим нововведенням є явне розділення об’єктів на ациклічні та потенційно циклічні. За замовчуванням об’єкти вважаються ациклічними, що є новим поведінкою. Для типів даних, екземпляри яких можуть формувати циклічні посилання, потрібна явна анотація прагмою .cyclic. Ведеться розробка нового алгоритму збору циклічних посилань, але його готовність до промислового використання на даний момент не гарантована.

Обробка помилок у Nimony

Обробка помилок у Nimony зазнала значних змін. Автор Nim висловлює незадоволення традиційними механізмами виключень та їхньою еймуляцією через алгебраїчні типи даних. Натомість пропонується концепція інтеграції стану помилки безпосередньо в сам об’єкт даних. Наприклад, представлення помилки в потоках вводу-виводу через спеціальне стан або використання NaN для чисел з плаваючою комою.

Проте традиційний механізм виключень Nim зберігається, але з важливим уточненням: будь-яка процедура, яка може породжувати виключення, тепер повинна бути в обов’язковому порядку анотована прагмою {.raises.}. Це забезпечує явне позначення потенційних нелокальних переходів управління.

Управління пам’яттю в Nimony

Управління ситуаціями вичерпання пам’яті в Nimony реалізовано з відходом від поширеної практики аварійного завершення програми. Натомість пропонується механізм, що дозволяє програмі продовжувати роботу. Контейнери та операції виділення пам’яті, які не можуть виконати запит, викликають переопреділюваний обробник oomHandler. За замовчуванням реалізація записує розмір невдалого запиту в потоко-локальну змінну та дозволяє виконанню продовжитися.

Обобщене програмування і плагіни компілятора

Механізм обобщеного програмування в Nimony отримав розвиток у порівнянні з Nim 2.0. Ключове покращення — повна перевірка типів обобщеного коду тепер виконується на етапі його визначення. Очікується, що це дозволить виявляти помилки на більш ранніх стадіях компіляції.

Концепції залидають свою роль як механізм статичного опису вимог до типів-параметрів обобщених функцій. V Nimony плагіни, що базуються на технології компіляції, можуть значно полегшити процес розробки, надаючи доступ до повної інформації про типи та семантику аналізованого коду.

Таким чином, Nimony стає важливим кроком у розвитку мови програмування Nim, пропонуючи нові рішення та вдосконалення для розробників.