Описание
В стековом режиме метод модуля с именем глобального метода движка спокойно перекрывает
глобальный. В #native это ошибка компиляции.
Воспроизведение
Классы/ПробаИмени.os:
#native
Процедура ЗапуститьПриложение() Экспорт
Сообщить("метод класса");
КонецПроцедуры
Процедура ПриСозданииОбъекта()
КонецПроцедуры
запуск.os:
#Использовать "."
Объект = Новый ПробаИмени();
Объект.ЗапуститьПриложение();
Фактическое поведение
{Модуль .../Классы/ПробаИмени.os / Error in line 3,1 / Method ЗапуститьПриложение already defined}
Без #native тот же код работает и печатает метод класса.
Ожидаемое поведение
Как в стековом режиме: метод модуля перекрывает одноимённый глобальный метод движка.
Окружение
Воспроизводится одинаково на:
- 2.2.0, linux-x64
- 2.3.0-dev+6 (ночная сборка), linux-x64
Влияние
Проблема блокирует перевод на #native любого публичного API, в котором имя метода
совпало с именем глобального метода. Переименовать такой метод — ломающее изменение
для всех пользователей библиотеки.
В autumn под это попал Поделка.ЗапуститьПриложение() —
документированный публичный метод главного класса фреймворка, с которого начинается
любое приложение на нём. Остальные препятствия к нативной компиляции этого класса
удалось устранить, осталось только имя.
Стоит заметить, что имена глобальных методов движка пополняются от версии к версии.
Сейчас библиотека, годами работавшая в стековом режиме, может перестать компилироваться
в native просто потому, что в движке появился новый глобальный метод с таким же именем.
Описание
В стековом режиме метод модуля с именем глобального метода движка спокойно перекрывает
глобальный. В
#nativeэто ошибка компиляции.Воспроизведение
Классы/ПробаИмени.os:запуск.os:Фактическое поведение
Без
#nativeтот же код работает и печатаетметод класса.Ожидаемое поведение
Как в стековом режиме: метод модуля перекрывает одноимённый глобальный метод движка.
Окружение
Воспроизводится одинаково на:
Влияние
Проблема блокирует перевод на
#nativeлюбого публичного API, в котором имя методасовпало с именем глобального метода. Переименовать такой метод — ломающее изменение
для всех пользователей библиотеки.
В autumn под это попал
Поделка.ЗапуститьПриложение()—документированный публичный метод главного класса фреймворка, с которого начинается
любое приложение на нём. Остальные препятствия к нативной компиляции этого класса
удалось устранить, осталось только имя.
Стоит заметить, что имена глобальных методов движка пополняются от версии к версии.
Сейчас библиотека, годами работавшая в стековом режиме, может перестать компилироваться
в native просто потому, что в движке появился новый глобальный метод с таким же именем.