Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Функция в языке программирования, которая вычисляет строку.
Function in a programming language, which evaluates a string
В некоторых языках программирования `eval`, сокращение от английского `evaluate`, — это функция, которая вычисляет строку так, как если бы это было выражение на этом языке, и возвращает результат; в других — она выполняет несколько строк кода, как если бы они были включены вместо строки, содержащей `eval`. Входные данные для `eval` не обязательно должны быть строкой; это может быть структурированное представление кода, такое как абстрактное синтаксическое дерево (например, формы Lisp), или специальный тип, например, код (как в Python). Аналогом оператора является `exec`, который выполняет строку (или код в другом формате) как если бы это был оператор; в некоторых языках, таких как Python, присутствуют оба, а в других — только один из `eval` или `exec`. `Eval` и `apply` являются примерами метациркулярных вычислителей, интерпретаторов языка, которые могут быть вызваны внутри самого языка.
In some programming languages, eval , short for the English evaluate, is a function which evaluates a string as though it were an expression in the language, and returns a result; in others, it executes multiple lines of code as though they had been included instead of the line including the eval. The input to eval is not necessarily a string; it may be structured representation of code, such as an abstract syntax tree (like Lisp forms), or of special type such as code (as in Python). The analog for a statement is exec, which executes a string (or code in other format) as if it were a statement; in some languages, such as Python, both are present, while in other languages only one of either eval or exec is. Eval and apply are instances of meta circular evaluators, interpreters of a language that can be invoked within the language itself.
Реализация
В интерпретируемых языках функция eval почти всегда реализуется с использованием того же интерпретатора, что и обычный код. В компилируемых языках компилятор, используемый для компиляции программ, может быть встроен в программы, использующие функцию eval; иногда используются отдельные интерпретаторы, однако это приводит к дублированию кода.
In interpreted languages, eval is almost always implemented with the same interpreter as normal code. In compiled languages, the same compiler used to compile programs may be embedded in programs using the eval function; separate interpreters are sometimes used, though this results in code duplication.
ActionScript (по умолчанию)
В ActionScript (язык программирования Flash) функцию eval нельзя использовать для вычисления произвольных выражений. Согласно документации Flash 8, её применение ограничено выражениями, представляющими собой "имя переменной, свойства, объекта или фрагмента анимации для получения значения. Этот параметр может быть как строкой, так и прямой ссылкой на экземпляр объекта". ActionScript 3 не поддерживает функцию eval. Библиотека ActionScript 3 Eval и API D.eval были проектами по разработке аналогов eval для ActionScript 3. Оба проекта были закрыты, поскольку жизненный цикл Adobe Flash Player завершен.
In ActionScript (Flash's programming language), eval cannot be used to evaluate arbitrary expressions. According to the Flash 8 documentation, its usage is limited to expressions which represent "the name of a variable, property, object, or movie clip to retrieve. This parameter can be either a String or a direct reference to the object instance." ActionScript 3 does not support eval. The ActionScript 3 Eval Library and the D. eval API were development projects to create equivalents to eval in ActionScript 3. Both have ended, as Adobe Flash Player has reached its end of life.
REAL основной
В REALbasic есть класс под названием RBScript, который может выполнять код REALbasic во время выполнения. RBScript сильно изолирован – в нем присутствуют только самые основные функции языка, и вам необходимо явно предоставлять ему доступ к ресурсам, которые вы хотите использовать. Вы можете необязательно назначить объект свойству "контекст". Это позволяет коду в RBScript вызывать функции и использовать свойства этого объекта-контекста. Однако он по-прежнему ограничен пониманием только самых простых типов данных, поэтому, если функция возвращает Словарь или MySpiffyObject, RBScript не сможет его использовать. Вы также можете взаимодействовать с RBScript через события Print и Input.
In REALbasic, there is a class called RBScript which can execute REALbasic code at runtime. RBScript is very sandboxed—only the most core language features are there, and you have to allow it access to things you want it to have. You can optionally assign an object to the context property. This allows for the code in RBScript to call functions and use properties of the context object. However, it is still limited to only understanding the most basic types, so if you have a function that returns a Dictionary or MySpiffyObject, RBScript will be unable to use it. You can also communicate with your RBScript through the Print and Input events.
VBScript
В интерпретируемом языке Microsoft VBScript предусмотрено две конструкции. Eval – это вычислитель выражений, который может включать вызовы пользовательских функций. (Эти функции могут иметь побочные эффекты, например, изменять значения глобальных переменных.) Execute выполняет одно или несколько выражений, разделенных двоеточием, которые могут изменять глобальное состояние. И VBScript, и JScript eval доступны разработчикам скомпилированных Windows-приложений (написанных на языках, не поддерживающих Eval) через ActiveX-элемент управления Microsoft Script Control, метод Eval которого может вызываться кодом приложения. Для поддержки вызова пользовательских функций необходимо сначала инициализировать элемент управления методом AddCode, который загружает строку (или строковый ресурс), содержащую библиотеку пользовательских функций, определенных на выбранном языке, перед вызовом Eval.
Microsoft's VBScript, which is an interpreted language, has two constructs. Eval is a function evaluator that can include calls to user defined functions. (These functions may have side effects such as changing the values of global variables.) Execute executes one or more colon separated statements, which can change global state. Both VBScript and JScript eval are available to developers of compiled Windows applications (written in languages which do not support Eval) through an ActiveX control called the Microsoft Script Control, whose Eval method can be called by application code. To support calling of user defined functions, one must first initialize the control with the AddCode method, which loads a string (or a string resource) containing a library of user defined functions defined in the language of one's choice, prior to calling Eval.
Visual Basic для приложений
Visual Basic for Applications (VBA), язык программирования Microsoft Office, является языком виртуальной машины, в котором среда выполнения компилирует и исполняет p-код. Его реализация Eval поддерживает только вычисление выражений, при этом выражение может включать пользовательские функции и объекты (но не пользовательские имена переменных). Важно отметить, что вычислитель отличается от VBS, и вызов определенных пользовательских функций может работать иначе в VBA, чем тот же код в VBScript.
Visual Basic for Applications (VBA), the programming language of Microsoft Office, is a virtual machine language where the runtime environment compiles and runs p code. Its flavor of Eval supports only expression evaluation, where the expression may include user defined functions and objects (but not user defined variable names). Of note, the evaluator is different from VBS, and invocation of certain user defined functions may work differently in VBA than the identical code in VBScript.
bs -
bs имеет функцию eval, принимающую один строковый аргумент. Эта функция является одновременно вычислителем выражений и исполнителем команд. В последнем качестве она также может использоваться для обработки ошибок. Примеры и текст ниже взяты из страницы руководства bs, как она представлена в Руководстве программиста UNIX System V Release 3.2.
bs has an eval function that takes one string argument. The function is both an expression evaluator and a statement executor. In the latter role, it can also be used for error handling. The following examples and text are from the bs man page as appears in the UNIX System V Release 3.2 Programmer's Manual.
Оболочки Unix
Команда eval присутствует во всех Unix-оболочках, включая оригинальную "sh" (оболочка Bourne). Она объединяет все аргументы через пробелы, затем повторно разбирает и выполняет полученную строку как команду.
The eval command is present in all Unix shells, including the original "sh" (Bourne shell). It concatenates all the arguments with spaces, then re parses and executes the result as a command.
Микрокод
В 1966 году IBM Conversational Programming System (CPS) представила микропрограммированную функцию EVAL для выполнения "интерпретативной оценки выражений, записанных в модифицированной польской обратной нотации" на IBM System/360 Model 50. Микрокодирование этой функции было "более чем в пять раз" быстрее, чем интерпретация оператора присваивания.
In 1966 IBM Conversational Programming System (CPS) introduced a microprogrammed function EVAL to perform "interpretive evaluation of expressions which are written in a modified Polish string notation" on an IBM System/360 Model 50. Microcoding this function was "substantially more" than five times faster compared to a program that interpreted an assignment statement.