Динамический язык программирования

Эта статья была переведена из источника, распространяемого под свободной лицензией, и находится на начальном уровне проработки
Материал из энциклопедии Руниверсалис

В информатике динамический язык программирования - это класс языков программирования высокого уровня, которые в runtime выполняют многие общие действия программирования, которые статический язык программирования выполняет во время компиляция. Такое поведение может включать расширение программы путем добавления нового кода, расширения объектов и определений или изменения системы типов. Хотя подобное поведение может быть эмулировано практически в любом языке, с разной степенью сложности, трудности и затрат производительности, динамические языки предоставляют прямые инструменты для их использования. Многие из этих возможностей были впервые реализованы как собственные в языке программирования Lisp.

Большинство динамических языков также являются динамически типизированными, но не все. Динамические языки часто (но не всегда) называют скриптовый язык, хотя этот термин в узком смысле относится к языкам, специфичным для конкретной среды выполнения.

Оценка

Некоторые динамические языки предлагают функцию eval'. Эта функция принимает строку или абстрактное синтаксическое дерево, содержащее код на языке, и выполняет его. Если этот код обозначает выражение, то возвращается результирующее значение. Erik Meijer и Peter Drayton отличают runtime code generation, предлагаемую eval, от dynamic loading, предлагаемой shared libraries, и предупреждают, что во многих случаях eval используется только для реализации функций высшего порядка (путем передачи функций в виде строк) или десериализации. [1].

Изменение объекта во время выполнения

В динамическом языке тип или система объектов обычно могут быть изменены во время выполнения. Это может означать генерацию новых объектов из определения во время выполнения или на основе подмешивания ("примесь") существующих типов или объектов. Это также может означать изменение наследовяния или дерева типов и, таким образом, изменение поведения существующих типов (особенно в отношении вызова методов).

Примечания