EvilBeaver / OneScript

Исполняющая среда скриптов на языке 1С
http://oscript.io
Mozilla Public License 2.0
458 stars 107 forks source link

Порядок инициализации модулей. Round 2 #1000

Open nixel2007 opened 4 years ago

nixel2007 commented 4 years ago

Опишите ошибку Понятное описание того, что происходит

Вернулась ошибка с неверным порядком инициализации модулей.

Приводит к ошибке установки пакетов через opm, т.к. в НастройкиOPM при обращении к КонстантыOPM вместо адреса основного сервера пакетов возвращается Неопределено.

Воспроизведение ошибки

Вариант через докер (нативный, на линуксе, в docker for windows чаще всего работает):

Без докера (в теории)

Проблема воспроизводится на opm 0.16.1. Если использовать opm 0.16.2, то проблема не воспроизводится, т.к. там реализована отложенная инициализация настроек OPM

EvilBeaver commented 2 months ago

Надо попытаться сделать инициализацию через зависимые обращения из тела модуля к другим модулям Например, если инициализировать гл. свойства-модули не в Неопределено, а в некий лоадер, который при обращении запустит инициализацию запрошенного модуля и вернет вместо себя.

@nixel2007 если в яве сделать статик инициализатор типа, а из него вызвать тип тоже со статик инициализатором, вызывающим первый, что будет?

EvilBeaver commented 2 months ago

Уже нашел ответ https://stackoverflow.com/questions/30142611/recursive-initialization-static-initializer-not-getting-called-when-i-access-c

Второй вызов получит недоинициализированный тип. Инстанс класса существует, но статик блок еще не доработал до конца.