来自Wikipedia:
REPL通常被误称为 翻译。这是一个用词不当 - 很多 使用的编程语言 编译(包括字节码 编译)有REPL,如 Common Lisp和Python。
交互式口译员使用REPL。一个 口译员不需要 一。你可以运行Python,例如, 在非交互模式下(在文件上) 它不会使用read-eval-print 循环。
我想知道解释器的REPL [del]是否始终存在[/ del] 只存在?维基百科是否说REPL也存在于编译器中?如果是,那怎么样?
谢谢和问候!
通过解释器,我的意思是在编译后立即执行。
答案 0 :(得分:3)
我不确定您是否要求使用常用的词语或其他内容。
在任何情况下,REPL都是Read Eval Print Loop(参见第一个字母)。 如果你有一个不能阅读你的程序或没有对它进行评估的翻译(即“理解”你想做什么和做什么)或者不在任何地方打印结果,那有什么用呢?
如果你根本看不到任何东西,它就听不到你想要的东西,或者你只有1次尝试,你也可以在桌子上放一块石头而不是电脑。 / p>
也许可能会有一些有趣的单词反对意见,例如“如果只更改显示的图标,是否真的打印?”这样:-) 或者“如果它不是从键盘上读取,它真的在读吗?”。 傻纯粹的哲学,真的。
根据您是从键盘还是从文件中读取它们,某些系统的反应会有所不同。我不确定它的用途是什么,但我猜你可以在键盘上打字时为人类提供帮助(即命令完成等)。
从文件中读取时,有些人可能不接受超过1个表达式?
我想知道REPL是否总是存在于翻译中?
我想这是一个关于“翻译”定义的问题。如果你的意思是(在语用意义上)“做我告诉它要做的事情”,不。如果它不听,你会怎么说呢?
维基百科是否说REPL也存在于编译器中?如果是,那怎么样?
是的,当然。所有LISP系统都是这样的。 他们觉得自己就像一个翻译,但随着时间的推移,随着系统学会了你自己如何表达自己并了解了什么是变化,什么没有变化,并且只是编译了不会改变机器代码的东西,它们会变得神奇地变得更快。
Java现在也做到这一点,你的VM会话持续的时间越长,它就会发现如何让事情变得更快,如果你停止改变它,它最终将最终在机器代码中运行整个程序。
解释器/编译器的整个人为区别在于意外,也就是说,由于当天的资源限制。
答案 1 :(得分:1)
这可能不是一个好的答案,只是一些注释,
IE 6.0中的JavaScript没有附带REPL。
编译器的REPL也可能看起来像解释器,如果语言可以一次解析,只能转发。编译器可以在每个编译语句之后插入断点,执行直到它到达断点,然后返回给用户,等待下一个输入行,然后重复。最后,所有输入行都被编译并执行。
答案 2 :(得分:1)
REPL代表Read-Eval-Print-Loop。解释器和编译器都可用于执行eval
位 - 要么在后台运行解释器的实例并将其输入,要么使用编译器逐步编译(授予,这需要更多)来自编译器编写者的工作和一些合作,但是有可能,正如无数个实例所示 - 你通常只编译为字节码)。其余的主要是I / O和一些粘合剂,以保留所有先前输入的定义可用于下一个命令。