|
Kernel — совершенно обычный модуль, который никто не запрещает менять. так что переписать реализации GC, memory allocator и прочее — совершенно не запрещено. ;-) ну, кроме того факта, что компилятор должен уметь в то, что нужно GC (write barriers, например, если у нас GC инкрементальный).
это не отменяет того, что Kernel должен быть «предзагружен», потому что он нужен системе. чтобы что-то загрузить — надо иметь уже загруженый GC и реализацию файлового I/O. в BBCB это линкуется в бинарь; в O/Ur используется хак (загрузка исходников модулей и последующая компиляция делаются на стороне крестов).
в остальном, как я сказал, никто не мешает заменить реализацию — лишь бы с точки зрения программиста такая замена не меняла семантику.
если зачем-то хочется сделать вместо встроеного в Kernel аллокатора и GC интерфейс с хуками — да на здоровье. только зачем? всё равно это надо влинковывать в начальный бинарь, а при таких раскладах не проще ли тупо указать линкеру какой Kernel брать?
и опять повторюсь: реализация GC жёстко связана с реализацией компилятора. компилятор должен знать про внутренние процедуры ядра, вызов которых он вставляет вместо тех же NEW, ASSERT, HALT и прочего, например. ядро должно знать формат модулей, как там расположена информация о типах, секции, фиксапы. это не то, что можно легко отвязать друг от друга.
а вот запрос памяти у ОС в том же BBCB сделан как раз как интерфейс. в O/Ur я вообще поленился возиться со страницами, и выделяю чанки через `malloc()`.
в O/Ur на самом деле есть хак для полноценной условной компиляции, потому что оберон-системы, собственно, нет, и линкования бинарей нет. по этой же причине есть INCLUDE — мне удобней разбивать модули на кучку маленьких файлов. в оберон-системе я могу для такого финта сделать спецредактор и спецчиталку исходников, которую передать компилятору.
вообще, кстати: многие штуки в других языках программирования на самом деле хаки, возникшие от того, что нет полноценной единой документо-ориентированой системы. если от оберона такую систему оторвать — то в нём сразу такие же хаки появляются.
p.s.: в той же Pow!, например, есть возможность оторвать GC и вручную любиться с освобождением памяти. по какой-то причине они решили интегрированый текстовый редактор сделать именно так. я нифига не понял, зачем.
|