LINUX.ORG.RU

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

Исправление 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.