LINUX.ORG.RU

История изменений

Исправление quasimoto, (текущая версия) :

Тащит туда все, что было необходимо для компиляции.

Ну как и любой JIT? Компиляция в рантайме.

В CL раскрытие макросов, то есть произвольный пользовательский код входит в компиляцию, так что и его нужно тащить, но на это нужно смотреть как на написание этим произвольным кодом базового лиспа (по идее это должна быть честная пре-трансляция, то есть вполне предсказуемая, просто доопределяемая) который потом подвергается обычной компиляции. Где-то ещё тоже можно (хотя практически сложнее) написать произвольным кодом базовый код и подсунуть его компилятору в рантайме (через его API, как Cling, например, использует библиотеки Clang и LLVM).

compilation : SourceLanguage -> TargetLanguage — чистая функция, есть соответствие

Это упрощение, но у классической компиляции принцип примерно такой.

то получается, что изначально была, по-крайней мере, _не полная_ компиляция

Не очень понял. Вызов compile когда он происходит вполне полный, просто целиком CL это не только компилятор, но среда, ну как обычная ОС — можно в REPLе вызывать компиляцию сколько хочешь, писать новые программы, в т.ч. программы которые вызывают компилятор, вызывают новый сеанс REPL-а и т.д.

Исходная версия quasimoto, :

Тащит туда все, что было необходимо для компиляции.

Ну как и любой JIT? Компиляция в рантайме.

В CL раскрытие макросов, то есть произвольный пользовательский код входит в компиляцию, так что и его нужно тащить, но на это нужно смотреть как на написание этим произвольным кодом базового лиспа (по идее это должна быть честная пре-трансляция, то есть вполне предсказуемая, просто доопределяемая) который потом подвергается обычной компиляции. Где-то ещё тоже можно (хотя практически сложнее) написать произвольным кодом базовый код и подсунуть его компилятору в рантайме (через его API, как Cling, например, использует библиотеки Clang и LLVM).

compilation : SourceLanguage -> TargetLanguage — чистая функция, есть соответствие

Это упрощение, но у классической компиляции принцип примерно такой.

то получается, что изначально была, по-крайней мере, _не полная_ компиляция

Не очень понял. Вызов compile когда он происходит вполне полный, просто целиком CL это не только компилятор, но среда, ну как обычная ОС — можно в REPLе вызывать компиляцию сколько хочешь, писать новые программы, в т.ч. программы которые вызывают компилятор, вызываю новый сеанс REPL-а и т.д.