Stricto sensu не может быть эквивалентом asm
, потому что это по существу для скомпилированных языков (и asm
возможно в C, потому что компиляторы C генерируют код ассемблера!).
Я опубликовал в своей статье DSL2011 описание MELT - языка для конкретного домена, встроенного в компилятор GCC
Я описал в этой статье несколько особенностей, которыепомогает в генерации кода на C из MELT (который является Lisp-подобным языком, переведенным на C или C ++).
Но интерпретируемые языки с интерпретатором байт-кода (например, Lua, Guile, Nim, Ocaml) предоставляют хуки для добавления новыхпримитивы в этот интерпретатор байт-кода.Обычно операция с байт-кодом будет выглядеть примерно так: вызовите примитив # N с аргументами arg1 arg2 arg3 .
Вы можете реализовать свой язык (некоторые DSL) в качестве транслятора для C. Это обычная практика , и довольно весело делать.Затем вы кодируете некоторый «наивный» компилятор с вашего языка на C. Вместо этого вы можете использовать библиотеку JIT-компиляции, такую как libgccjit или LLVM или libjit или lightning или asmjit .
И некоторые языки homoiconic , тогда они каким-то образом выставляют свой байт-код или достаточно хороший IR.Выучите Lisp (хотя бы прочитайте SICP ), затем прочитайте Lisp In Small Pieces
Помните Десятое правило Гринспуна .Посмотрите на Схема менее пройденного доклад Лиама Провен на FOSDEM 2018.