OneScript icon indicating copy to clipboard operation
OneScript copied to clipboard

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

Open nixel2007 opened this issue 5 years ago • 2 comments

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

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

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

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

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

  • Берем докер файл https://github.com/firstBitSemenovskaya/onec-docker/blob/631563b4b89166792861d61fa2bc643f0ce6311f/base-jenkins-agent/Dockerfile
  • меняем from на debian:stretch-slim
  • меняем аргумент ONESCRIPT_VERSION на 1.3.0 или передаем его из cli
  • docker build --build-arg ONESCRIPT_VERSION=1.3.0 .
  • ловим ошибку

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

  • ставим mono 6.8.0.105
  • ставим движок 1.3.0
  • opm install opm

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

nixel2007 avatar Apr 14 '20 14:04 nixel2007

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

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

EvilBeaver avatar Apr 11 '24 12:04 EvilBeaver

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

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

EvilBeaver avatar Apr 11 '24 12:04 EvilBeaver