Delphi IDE的REPL?

4

http://en.wikipedia.org/wiki/REPL 读取-求值-输出循环。

Delphi 是否有类似的东西呢? 当处理边界情况时,DLLs(例如Windows API)的使用方式不常见,因此探索这些DLLs将非常有用。

我尝试了Pascal脚本,例如Cnwizards中的脚本,但它不太方便。 例如,它无法使用像Windows.pas这样的单元,您必须自己制作一些奇怪的存根。

无论如何,与 Repl 相比,这些脚本都不太容易用于“尝试这个尝试那个”的场景。

对于 Delphi 对象,最接近的方法是在断点上暂停并使用 Evaluate/Modify 窗口,但它仅适用于 Delphi 对象,而不适用于 DLLs; 它不能创建临时变量以缓存值等。


1
不要硬生生地把方形钉进圆孔里。如果你想要一些REPL,就使用Python(或类似的语言)。 - David Heffernan
Java/Scala都有REPL,并且它们也是可编译的语言。使用Python构建和测试Delphi代码,涉及到Windows API DLLs,这本质上是强制性的,不亚于在编译语言IDE中添加解释器功能。 - Arioch 'The
1
我认为在交互式环境中键入“public static void main()”,然后加上一些花括号和导入,最后输出“hello world”将会非常有趣。Java REPL。太搞笑了! - Warren P
当然。我猜想有默认的导入,就像autoexec.bat一样 :-) 而且肯定不需要输入"public static void main()"(如果你使用函数引用变量可能有意义,但Java缺乏这些)。常规项目所需的样板代码可以和必须减少。就像这样:http://www.scala-lang.org/node/2009 http://scala-ide.org/docs/user/features/scalainterpreter.html https://dev59.com/hXE95IYBdhLWcg3wEpvo - Arioch 'The
1个回答

3
这并不完全符合你的要求,因为Delphi是一种静态类型、编译型语言,但如果你真的坚持想输入一些Pascal代码并查看其效果,可以尝试使用Jedi VCL中提供的组件。

需要注意的是,这种体验与使用Python完全不同。你不能只输入“uses module”然后按回车键,因为Pascal单元必须完整才能被JvInterpreter解释,并且JvInterpreter需要你为每个其他单元编写一个包装器。你会发疯的。我不建议任何人尝试在周围构建REPL。

Delphi的“交互式魔法”元素称为“设计时环境”,我们使用“组件”构建。我们甚至不需要写太多代码来完成这一点,我们可以通过鼠标和键盘进行可视化操作。这被称为RAD(快速应用程序开发),它由Delphi中的VCL(可视化组件库)驱动,就像REPL一样,是快速开发的众多方式之一。

我们还有另外一件很像REPL的事情,就是Delphi中的这个按钮:

您创建一个新的空项目,然后单击该按钮,您添加到新的空项目的任何代码都会在不到一秒钟的时间内构建和运行。足以满足REPL的需求。这有点像二进制可执行文件的即时极乐。

写一行代码,构建并运行(1秒)。瞬间完成。


是的,Delphi 是一种不同的快速开发方案,程序员需要思考他们构建的程序,并使用编译器和非常详尽的帮助文档来解决问题。 - Spencer Rathbun
+1,特别是关于不需要解释器的部分,因为编译器的速度(以及您没有提到的“代码洞察”)使其变得不必要。很好的回答,沃伦。 :-) - Ken White
3
代码洞察?你在开玩笑吧!IDE嵌入的基于J#的Pascal解析器不完整且与主编译器不同步。它无法找到库文件,即使它们在项目和IDE的搜索路径中都有。它无法解析语言结构并将其余所有单元声明为错误。有报道称,在大量使用泛型时会导致IDE立即崩溃。因此,是的,代码洞察的可靠性有限。但它甚至不能始终正常工作于完美描述的函数,更别提那些需要试错的稀有描述了。 - Arioch 'The
C++是一种静态类型编译语言,并且它们有一个解释器 https://root.cern/cling/ - iCodeSometime
它基本上做的就是我所说的,编译和运行,只是速度更快。这正是Delphi已经实现的。cling不是解释器。如果您不了解解释器的含义,请多读一些相关资料。他们说它是一个解释器。是的,它接受代码并运行它。它是一个REPL(读取执行打印循环),但要成为解释器意味着它不再是编译器。“使用即时(JIT)编译器进行编译。”因此,它不是解释器。我们可以称卡车为冰棒,并舔它,但这并不能使卡车成为冰棒。 - Warren P
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接