Лучшее, что вы можете придумать, это именно то, о чем вы просите, - «имеет функцию оценки» (как упомянул Хавьер в своем комментарии к вашему вопросу).
Самостоятельный хостинг не нужен и не обязательно делает то, что вы хотите. Вот два примера: C - это собственный язык, который не может выполнять свой собственный код в строке, но Tcl не является собственным языком, который может выполнять свой собственный код, указанный в строке.
В качестве примечания, половина C работает в средах, где нет API для выполнения внешних процессов. Таким образом, хотя в некоторых средах вы можете настроить свою систему так, чтобы C мог выполнять свой собственный компилятор, а затем выполнять собственный код в целом, это не совсем то, о чем вы просите.
Примечание. Если мы можем обмануть и использовать маршрут «выполнить внешний компилятор», чтобы сделать это, то язык не обязательно должен быть хостингом, чтобы делать то, что вы хотите. Ему просто нужна функция exec для вызова собственного компилятора (который часто пишется на C).
То же самое с Reflection / Introspection, способность делать самоанализ сама по себе не означает, что вы можете выполнять код в строке. Два примера языков, в которых есть Reflection, но нет встроенного eval, - это C # и Java.
- Как примечание: если у вас есть функция eval, вы обычно можете выполнять Reflection / Introspection, хотя и неуклюже.
У самоинтерпретации та же проблема с определением, что и у хостинга. Tcl - это язык, в котором его функция eval не написана сама по себе - он просто представляет оценщик кода Tcl, реализованный в C.
На первый взгляд, метакруглые оценщики выглядят так, как вы хотите. Он определяется как самоинтерпретирующий, где функция eval встроена, а не реализована в самом языке. Но если посмотреть дальше, вы заметите, что он определяется механизмом, используемым для достижения функции, а не самой функцией. Tcl снова является исключением, когда он не соответствует всем определениям мета-циклических оценщиков, но, тем не менее, имеет функцию eval (не применяется, не требуется) Поэтому мне кажется, что метакруглый оценщик - это конкретная реализация функции «имеет функцию оценки».
Итак, я бы просто сказал, что любой язык, который "имеет функцию eval", может делать то, что вы просите.