Skip to content

native: метод модуля, одноимённый глобальному методу движка, — «Method already defined» #1740

Description

@nixel2007

Описание

В стековом режиме метод модуля с именем глобального метода движка спокойно перекрывает
глобальный. В #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 просто потому, что в движке появился новый глобальный метод с таким же именем.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    nativeКомпиляция в CLR в движке 2.0

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions