История изменений
Исправление quasimoto, (текущая версия) :
а зачем мне на настолько высоком уровне абстракций именно нативный изменяемый код?
Он всегда должен быть нативно изменяемый, чистый интерпретатор без JIT это просто недоделанная VM с JIT, такой интерпретатор может быть нужен для простоты реализации, переносимости, лёгкой встраиваемости или меньшего memory footprint, только без JIT он останется «тормозом». Но изначально у тебя речь шла про си, то есть «в лиспе мы можем обновлять функции, в си - не можем». Это не так.
я сказал, что _могу_, но не сказал _зачем_
Ты как раз сказал «не могу», то есть как будто это вообще невозможно. Даже без всякого LLVM можно подключать/отключать soшки с обновляемым кодом по dlopen/dlclose. Так можно делать плагины которые можно подключать и отключать без остановки (и тем более перекомпиляции) приложения.
Лично я вижу только один юзкейс
Плагины, непрерывная инкрементальная разработка приложений без перезапуска их сервера, инкрементальная разработка вообще (в духе SLIME).
что мешает мне использовать свой байткод?
Будешь писать VM с байткодом которая, к тому же, будет тормозить? И это при наличии готовых решений.
«Нативным» он является только для жабокодера(или лиспокодера)
У JVM байткод это средство переносимости, для HotSpot это всё равно промежуточная стадия до получения нативного кода. Для лиспокодера использующего SBCL в режиме компиляции вообще никакого байткода нет - всюду происходит обновление нативного кода для CPU.
Исходная версия quasimoto, :
а зачем мне на настолько высоком уровне абстракций именно нативный изменяемый код?
Он всегда нативно изменяемый, чистый интерпретатор без JIT это просто недоделанная VM с JIT, такой интерпретатор может быть нужен для простоты реализации, переносимости, лёгкой встраиваемости или меньшего memory footprint, только без JIT он останется «тормозом». Но изначально у тебя речь шла про си, то есть «в лиспе мы можем обновлять функции, в си - не можем». Это не так.
я сказал, что _могу_, но не сказал _зачем_
Ты как раз сказал «не могу», то есть как будто это вообще невозможно. Даже без всякого LLVM можно подключать/отключать soшки с обновляемым кодом по dlopen/dlclose. Так можно делать плагины которые можно подключать и отключать без остановки (и тем более перекомпиляции) приложения.
Лично я вижу только один юзкейс
Плагины, непрерывная инкрементальная разработка приложений без перезапуска их сервера, инкрементальная разработка вообще (в духе SLIME).
что мешает мне использовать свой байткод?
Будешь писать VM с байткодом которая, к тому же, будет тормозить? И это при наличии готовых решений.
«Нативным» он является только для жабокодера(или лиспокодера)
У JVM байткод это средство переносимости, для HotSpot это всё равно промежуточная стадия до получения нативного кода. Для лиспокодера использующего SBCL в режиме компиляции вообще никакого байткода нет - всюду происходит обновление нативного кода для CPU.