Название класса языков программирования, выполняющих собственный код

StackOverflow https://stackoverflow.com/questions/2390667

Вопрос

Как вы называете язык программирования, который может выполнять собственный код (передаваемый как строковый литерал)?На мой взгляд, это что-то похожее на эту настройку (на мгновение забываю о вводе кода, результатов и т. д.):

string eight = "5+3"
int result = run(eight)

Где run является ключевым словом.Это рефлексивный язык программирования?

Это было полезно?

Решение

Я думаю, что вы говорите о Мета-круговые оценщики. Отказ Твой run команда то навес в Цикл Eval-apply, описанный в структуре и внедрении компьютерных программ.

Другие советы

Лучшее, что вы можете придумать, это именно то, о чем вы просите, - это «иметь функцию оценки» (как упомянул Хавьер в своем комментарии к вашему вопросу).

Самостоятельный хостинг не обязателен и не обязательно делает то, что вы хотите.Два примера:C — это автономный язык, который не может выполнять свой собственный код в строке, но Tcl не является автономным языком, который может выполнять свой собственный код, заданный в строке.

  • Заметим, что половину времени C работает в средах, где нет API для выполнения внешних процессов.Таким образом, хотя в некоторых средах вы можете настроить свою систему так, чтобы C мог выполнять свой собственный компилятор, а затем выполнять свой собственный код, в целом это не совсем то, о чем вы просите.

  • Побочное примечание.Если мы можем обмануть и использовать для этого маршрут «выполнить внешний компилятор», тогда языку не обязательно быть самостоятельным хостингом, чтобы делать то, что вы хотите.Ему просто нужна функция exec для вызова собственного компилятора (который часто пишется на C).

То же самое и с рефлексией/интроспекцией: возможность самостоятельно заниматься самоанализом не означает, что вы можете выполнять код в строке.Двумя примерами языков, в которых есть Reflection, но нет встроенной функции eval, являются C# и Java.

  • В качестве примечания: если у вас есть функция оценки, вы обычно можете выполнять рефлексию/интроспекцию, хотя и неуклюже.

Самоинтерпретация имеет ту же проблему с определением, что и самостоятельный хостинг.Tcl — это язык, в котором функция eval не написана сама по себе — он просто предоставляет оценщик кода Tcl, реализованный на C.

На первый взгляд мета-циркулярные оценщики выглядят так, как вам нужно.Он определяется как самоинтерпретирующийся, когда функция eval встроена, а не реализована в самом языке.Но, посмотрев дальше, вы заметите, что оно определяется механизмом, используемым для достижения этой функции, а не самой функцией.Tcl снова является исключением, поскольку он не соответствует всем определениям того, что такое метациклические оценщики, но, тем не менее, имеет функцию eval (не применять, не обязательно).Мне кажется, что метациклический оценщик — это конкретная реализация функции «имеет функцию оценки».

Итак, я бы просто сказал, что любой язык, «имеющий функцию оценки», может делать то, о чем вы просите.

Класс языков, о которых вы спрашиваете, эквивалентен «Самосвязка«Языки. Язык самообеденного языка - это тот, для которого существует реализация компилятора или переводчика на одном языке.

Вот доказательство.

Каждый язык самообеденного хостинга способен управлять своими собственными программами. Если вы пройдете, например, C-код в программу C, эта программа может включать компилятор (записанный в C), который компилирует и запускает код. Таким образом, программа C выполняет произвольный C-код.

Предположим, теперь у вас есть язык x с таким свойством, который способен запустить произвольный код на этом языке, код передается в виде строки. Затем вы можете создать программу, которая просто имеет строку в качестве ввода и выполняет код в нем. Это будет интерпретатор для языка X, реализованный в X., и это определение языка самообеспечения.

Вот что будет выглядеть этот переводчик:

execute ARGV[0]

Итак, мы доказали, что каждый язык с желаемой недвижимостью является самосвязкой, и каждый язык самообеденного языка имеет это свойство. Это означает, что запрашиваемый вами класс равен классу языков самообеспечения.

Самосвязка возможно. Я знаю, что Lisp такой язык, и Википедия называлась его компилятором самообеспечения.

Гомокозость Это связанная концепция, но я не думаю, что это именно то, что вы ищете.

В компьютерном программировании, гомокозость является свойством некоторых языков программирования, в которых первичное представление программ также является структурой данных в примитивном типе самого языка, от гомо имея в виду тоже самое а также значок имея в виду представление. Отказ Это делает MetaProgmamming проще, чем на языке без этого свойства.

Самопроинтересованное и самообучастие? Видеть http://en.wikipedia.org/wiki/self-iNterPreter., http://en.wikipedia.org/wiki/shels-hosting.

Да, я всегда думал, что это охвачено Отражение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top