evaluar


En algunos lenguajes de programación , eval, abreviatura del inglés evaluar , es una función que evalúa una cadena como si fuera una expresión en el lenguaje y devuelve un resultado ; en otros, ejecuta varias líneas de código como si se hubieran incluido en lugar de la línea que incluye el archivo eval. La entrada a evalno es necesariamente una cadena; puede ser una representación estructurada del código, como un árbol de sintaxis abstracta (como los formularios Lisp ), o de un tipo especial como code(como en Python). El análogo para una declaración es exec, que ejecuta una cadena (o código en otro formato) como si fuera una sentencia; en algunos lenguajes, como Python, ambos están presentes, mientras que en otros lenguajes solo uno de ellos evalo execestá presente.

Eval y apply son instancias de evaluadores metacirculares , intérpretes de un lenguaje que pueden invocarse dentro del lenguaje mismo. [ cita requerida ]

El uso evalcon datos de una fuente no confiable puede presentar vulnerabilidades de seguridad. Por ejemplo, suponiendo que la get_data()función obtenga datos de Internet, este código de Python no es seguro:

Un atacante podría proporcionar al programa la cadena "session.update(authenticated=True)"como datos, lo que actualizaría el sessiondiccionario para establecer una clave autenticada como Verdadera. Para remediar esto, se deben escapar todos los datos que se utilizarán eval, o se debe ejecutar sin acceso a funciones potencialmente dañinas.

En lenguajes interpretados , evalcasi siempre se implementa con el mismo intérprete que el código normal. En lenguajes compilados , el mismo compilador que se usa para compilar programas se puede incrustar en programas que usan la evalfunción; A veces se utilizan intérpretes separados, aunque esto da como resultado la duplicación de código .

En JavaScript , evales una especie de híbrido entre un evaluador de expresiones y un ejecutor de declaraciones. Devuelve el resultado de la última expresión evaluada.