Меня угнетает, что в Руби, как в Цэ сначала идёт функция, а потом - её использование. Там прототипы не объявляются?
Что за норкомания?
Дата рождения: 01.11.1983
Тотальная неудачница и убийца жёстких дисков. Самая большая поклонница Ариэль. Член ордена Вселенского тормоза имени Осаки-сан. Любительница каваййных переднеприводных машинок. Суккуб на полставки. Когти прилагаются.
Меня угнетает, что в Руби, как в Цэ сначала идёт функция, а потом - её использование. Там прототипы не объявляются?
Что за норкомания?
не, на самом деле тут всё можно реализовать однозначно - таблица объектов заполняется при первом проходе, потом делается проход выполнения. т.е. у тебя должен всегда выполниться только последний main. каждый модуль инициализируется условно независимо, т.е. при require сначала произойдёт два прохода в модуле, а потом уже продолжится 1й проход по основному модулю.
т.е. я вполне могу представить себе, как это будет выполняться.
почему это решил зарезать? метапрограмминг слегка про другое.
у тебя метапрограммирование - это или макросы, которые отрабатывают отдельным проходом ДО фазы выполнения кода и оперируют или строками (сишный препроцессор) или AST (макросы лиспа). При этом обычно не происходит переопределения символов. У тебя, как правило, явно объявлено, что некоторый символ - макрос, и должен быть обработан до выполнения.
или нечто, работающее в рантайме через рефлекшн и манипуляции с объектами (или нет) модулей/классов/функций и к переопределению символов на этапе компиляции отношения никакого не имеющее. Вот второй вид я сильно недолюбливаю, т.к. его очень трудно отдебажить и научить выдавать правильную диагностику ошибок.