【问题标题】:REPL for Delphi IDE?用于 Delphi IDE 的 REPL?
【发布时间】:2012-08-03 11:45:50
【问题描述】:

http://en.wikipedia.org/wiki/REPLRead–eval–print_loop

德尔福有这样的事情吗? 在处理几乎没有记录的边界情况时,探索诸如 Windows APi 之类的 DLL 并勾画它们的用法会非常有用。

我尝试了 pascal 脚本,例如 Cnwizards 中的一个,但它不太舒服。 例如,它不能使用像 Windows.pas 这样的单位,你必须为它制作一些你自己的奇怪存根。

无论如何,这些脚本在“试试这个试试那个”的场景中不如 Repl 好用。

对于 Delphi 对象,大多数情况下它会在断点处暂停并使用 Evaluate/Modify 窗口,但它仅适用于 Delphi 对象,而不适用于 DLL;它不能制作临时变量来缓存值等。

【问题讨论】:

  • 没有必要将方形钉子强制插入圆孔。如果你想要一些 REPL,请使用 Python(或类似的)。
  • Java/Scala 确实有 REPL,它们也是可编译的语言。使用 Python 在 Windows API DLL 上构建和测试 Delphi 代码本身就是强制页面,不亚于在编译语言 IDE 中添加类似解释器的功能。
  • 我认为必须输入“public static void main()”,然后输入一些大括号并导入只是以交互方式printf("hello world") 会很有趣。 Java REPL。搞笑!
  • 当然。所以我猜有默认导入,比如 autoexec.bat :-) 并且肯定不需要键入“public static void main()”(如果你选择函数引用变量可能有意义,但 Java 缺少这些)。常规项目所需的样板可以而且必须减少。喜欢在:scala-lang.org/node/2009scala-ide.org/docs/user/features/scalainterpreter.htmlstackoverflow.com/questions/2471947

标签: delphi delphi-xe2 read-eval-print-loop


【解决方案1】:

这并不是您真正想要的,因为 Delphi 是一种静态类型的编译语言,但如果您真的坚持能够输入一些 pascal 并查看它是否有任何作用,您可以尝试TJvInterpreter Jedi VCL 中的组件。

请注意,这种体验与使用 python 完全不同。您不能只键入“使用模块”并按回车键,因为帕斯卡单元必须是完整的,然后它们才能被 JvInterpreter 解释,并且 JvInterpreter 需要您为要导入的每个其他单元编写一个包装器。你会发疯的。我并没有认真建议任何人尝试围绕 TJvInterpreter 构建 REPL。

Delphi 的“交互式魔法”元素被称为“设计时环境”以及我们使用“组件”构建的方式。我们甚至不会通过编写代码来做这件事,我们都是用鼠标和键盘直观地完成的。它被称为 RAD(快速应用程序开发),由 Delphi 中的 VCL(可视化组件库)提供支持,并且(与 REPL 一样)是进行快速开发的众多方法之一。

另一个很像 REPL 的东西是 Delphi 中的这个按钮:

在创建一个新的空项目后单击它,您添加到新空项目的任何代码都会在不到一秒的时间内构建并运行。对我来说足够接近 REPL。这有点像二进制可执行即时幸福。

写一行。构建并运行(1 秒)。瞬间。

【讨论】:

  • 是的,delphi 是一种不同的快速开发方案,程序员需要考虑他们构建的程序,并使用编译器和非常全面的帮助文档来解决问题。
  • +1,尤其是不需要解释器,因为编译器的速度(以及您没有提到的Code Insight)使它变得不必要。很好的答案,沃伦。 :-)
  • 代码洞察力?你拉我的腿!基于 IDE 的基于 J# 的 pascal 解析器不完整,并且与主编译器不同步。当它们在项目和 IDE 的搜索和浏览路径中时,它无法找到库文件。它无法解析语言结构并将所有其余单元声明为错误。有报道称大量使用泛型时 IDE 会立即崩溃。所以,是的,有 Code Insight 的可靠性有限。但即使对于完美描述的功能,它也并不总是有效,更不用说那些几乎没有描述需要反复试验的功能
  • "并且 JvInterpreter 需要您为要导入的每个其他单元编写一个包装器。"是的,就像 CnWizards 中的脚本一样。就像它们是从同一个根分叉的一样。这是对繁琐的手工工作的荒谬需求。正如你所说的“你会发疯的。”我去了。然后我去了 SO :-)
  • “对我来说足够接近 REPL。”然后使用断点+检查/评估来检查结果。如果您需要更改几个参数值 - 那么您最好重新运行。如果您需要更改几行并重新连接逻辑 - 那么您应该重新编译并重新运行。好吧,看来我们还没有其他选择。但它不是 REPL。坦率地说,我倾向于有同样的势利思想。回复适合基本的孩子。我们有真正的语言。编译的,有类型的,等等。但后来我在 Scala 中检查了 REPL。如果技术上可行,那么出于某些目的,它在静态类型语言中也很有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-04
  • 2015-05-26
  • 1970-01-01
  • 2010-12-09
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
相关资源
最近更新 更多