Перейти к содержимому
15 / 15

Порядок инициализации пакетов и функции init: что выполняется до main

До main выполняется строго определённая последовательность. Пакеты инициализируются в порядке зависимостей: сначала полностью инициализируется всё, что пакет импортирует, потом он сам, и каждый пакет ровно один раз. Внутри пакета сначала вычисляются переменные уровня пакета — причём в порядке зависимостей между ними, а не в порядке объявления, — и только затем выполняются функции init. Функций init может быть несколько в одном пакете и несколько файлов; между файлами порядок определяется тем, как их передали компилятору, то есть на практике алфавитным порядком имён, и полагаться на это нельзя. Отсюда правила: init годится для регистрации в реестре (драйверы баз данных, кодеки) и для проверок, которые должны падать при старте; и не годится для того, что может не сработать, требует конфигурации или лезет в сеть — это делают явно в main, где ошибку можно вернуть и обработать.

Порядок инициализации пакетов и функции init: что выполняется до main | JScriptiser