Programming languages 生成字符串并在运行时将其作为程序执行
这是一个很难用语言表达的问题,我不确定它的合适术语是什么(如果有的话)。我很好奇是什么语言允许您在程序执行期间“构建”字符串,然后将其作为程序的一部分执行。我所知道的唯一一种允许你这么做的语言是Snobol 然而,阅读维基百科上关于Tcl的条目,听起来它可能也能做到这一点 我一直认为这是一个漂亮的功能,即使它可能不会被使用太多。谢谢Programming languages 生成字符串并在运行时将其作为程序执行,programming-languages,metaprogramming,eval,multistage,snobol,Programming Languages,Metaprogramming,Eval,Multistage,Snobol,这是一个很难用语言表达的问题,我不确定它的合适术语是什么(如果有的话)。我很好奇是什么语言允许您在程序执行期间“构建”字符串,然后将其作为程序的一部分执行。我所知道的唯一一种允许你这么做的语言是Snobol 然而,阅读维基百科上关于Tcl的条目,听起来它可能也能做到这一点 我一直认为这是一个漂亮的功能,即使它可能不会被使用太多。谢谢 PS:会用Snobol、Spitbol标记这个,但没有创建新标记的声誉。肯定可以用很多解释脚本语言来完成。有些语言是专门为此设计的。据我所知,可以通过以下方式实现:
PS:会用Snobol、Spitbol标记这个,但没有创建新标记的声誉。肯定可以用很多解释脚本语言来完成。有些语言是专门为此设计的。据我所知,可以通过以下方式实现:
- Perl
- PHP
- Lisp(以及方言,如CL、Clojure、Scheme等)
- JavaScript
- Perl
- PHP
- Lisp(以及方言,如CL、Clojure、Scheme等)
- JavaScript
- 当然可以用很多解释脚本语言来完成。有些语言是专门为此设计的。据我所知,可以通过以下方式实现:
eval
,也可以在Prolog(call/1
)和任何其他语言中完成。大多数保留名称eval
,大多数是动态语言
尽管如此,这并不是一个漂亮的特征。我认为这是一个重大的安全问题,因为滥用这个特性是多么容易。如果您想要动态代码执行,那么编写您自己的受限微解释器(或使用类似Lua的东西)几乎总是一个更好的主意。这可以在所有Lisp方言中完成,该功能起源于名称
eval
,以及Prolog(call/1
)和任何其他语言。大多数保留名称eval
,大多数是动态语言
尽管如此,这并不是一个漂亮的特征。我认为这是一个重大的安全问题,因为滥用这个特性是多么容易。如果您想要动态代码执行,那么编写自己的受限微解释器(或使用类似Lua的东西)几乎总是一个更好的主意
我很好奇是什么语言允许您在程序执行期间“构建”字符串,然后将其作为程序的一部分执行
寻找支持eval
,或者更一般地说,支持运行时元编程的语言。几乎每种语言都支持eval
(即使是像Haskell这样的强静态类型语言)。许多运行时是为主要通过字节码实现的语言构建的
解释(如类似Lisp的语言、Erlang或Java)支持
在运行时插入新的(字节)代码。一旦可以动态插入新代码,就可以编写eval
,或者执行“猴子补丁”
即使在不支持完全元编程甚至动态链接的语言实现中,通常也有在程序员控制下通过反射机制或代码生成支持库(如LLVM)动态生成代码的方法
除了简单的单阶段eval
,更一般地说,支持多阶段计算的语言允许从一个阶段到下一个阶段生成任意数量的程序,从而可以安全、任意地嵌套eval
引用塔哈的话,世卫组织的模型介绍了大部分理论
程序生成是软件开发中一种强大而普遍的技术。它已被用于提高代码重用、产品可靠性和可维护性、性能和资源利用率以及开发人员的生产率
您正在寻找的语言通常以某种形式提供三种原语:
- 耽搁
- 拼接
- 跑
- 麦卡锡,约翰,不。1978. -- 介绍
eval
- 塔哈
- Nielson,Flemming和Nielson,Hanne Riis,两级函数语言,引入了两级语言
- Taha,Walid和Sheard,Tim,带显式注释的多阶段编程——支持所有运行时元编程技术的简单运算符
- Wickline、Philip和Lee、Peter和Pfenning、Frank和Davies、Rowan、模态类型作为运行时代码生成的暂存规范
eval
会引发如此多的安全问题:不清楚什么代码在何时执行,以及什么数据正被转换成代码。将名称捕获从一个阶段转移到下一个阶段是很棘手的,这会导致代码注入攻击。这种复杂性无助于安全性
我很好奇是什么语言允许您在程序执行期间“构建”字符串,然后将其作为程序的一部分执行
寻找支持eval
,或者更一般地说,支持运行时元编程的语言。几乎每种语言都支持eval
(即使是像Haske这样的强静态类型语言)