Звітування про відкладені можливості
Коректний код Erlang, якому потрібна нереалізована можливість, завершується збоєм з одним явним повідомленням, відмінним від звичайних помилок некоректного введення. Підтримуваний загальний запасний шлях (наприклад, пропущена спеціалізація) мовчазний і не є збоєм.
[pattern matching] notimpl: src/example.erl:12:5 [module="example"] [target="native"] [operation="match argument"]
Каталог
features.hpp призначає стабільні ідентифікатори, які ніколи не використовуються повторно, і діагностичні назви, з власником і статусом для кожного запису. Коли можливість реалізовано, запис вилучають або уточнюють; його ідентифікатор залишається зарезервованим.
| Власник | Де звітує |
|---|---|
| Семантичний аналіз компілятора | Перевірки можливостей для кожної функції, включно з невикористаним кодом |
| Пониження (lowering) компілятора | Захисне відхилення на досягнутих операціях; очищає підготовлені артефакти |
| Драйвер | Нічого відкладеного: executable linking реалізовано (компонування) |
| Служби runtime | Див. відкладені служби runtime |
Відкладені можливості компілятора на сьогодні, кожна покрита
codegen_placeholders:
| Можливість | Приклад, що її звітує |
|---|---|
heap expressions | Присвоєння в comprehension compr_assign ([Y || X <- L, Y = X]) |
dynamic calls | Вбудований fun для apply (fun erlang:apply/2) |
behavior-changing attributes | -on_load, -nifs, неінертні параметри -compile, параметризовані модулі (прийнята підмножина) |
Правила повідомлень
- Спільний форматувальник
пропускає невідомий контекст, екранує керівні байти як
\xHH, а також екранує лапки та зворотні скісні риски, щоб контекст не міг вставити нові рядки. UTF-8 зберігається. - Рівно одне повідомлення на кожну операцію, що завершилася збоєм, незалежно від
--verbose. - Відкладена можливість, яку компілятор міг би пропустити без зміни того, що він
приймає, звітувала б як попередження, і компіляція тривала б далі; на сьогодні
таких немає.
codegen_placeholdersперевіряє одне повідомлення на кожну відкладену можливість компілятора. - Компілятор: reject_feature звітує про
перший збій пакета, фіксує збій, відкидає підготовлений вивід і позначає
діагностику як
reported, щоб драйвери не друкували її повторно. - Runtime: FeatureFailure
звітує один раз на операцію через позичений приймач (null → stderr). Подальші
виклики повертають зафіксований статус. Збої приймача чи форматування стають
diagnostic_failure; винятки локалізуються. - Викликачі поширюють збій без повторного звітування; хост має завершитися з ненульовим кодом і нормально звільнити ресурси.
Clause