Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
delphiide的REPL?_Delphi_Delphi Xe2_Read Eval Print Loop - Fatal编程技术网

delphiide的REPL?

delphiide的REPL?,delphi,delphi-xe2,read-eval-print-loop,Delphi,Delphi Xe2,Read Eval Print Loop,读取-评估-打印循环 德尔福有这样的事吗? 在处理几乎没有文档记录的边界案例时,探索诸如Windows APi之类的DLL并勾勒它们的用法将非常有用 我试过pascal脚本,比如Cnwizards中的一个,但它不太舒服。 例如,它不能使用Windows.pas这样的单位,而您必须为它制作一些奇怪的存根 不管怎样,这些脚本在“尝试这个尝试那个”场景中使用起来不如Repl容易 对于Delphi对象,大多数clsoe需要在断点上暂停并使用评估/修改窗口,但它只适用于Delphi对象,而不适用于DLL;

读取-评估-打印循环

德尔福有这样的事吗? 在处理几乎没有文档记录的边界案例时,探索诸如Windows APi之类的DLL并勾勒它们的用法将非常有用

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

不管怎样,这些脚本在“尝试这个尝试那个”场景中使用起来不如Repl容易


对于Delphi对象,大多数clsoe需要在断点上暂停并使用评估/修改窗口,但它只适用于Delphi对象,而不适用于DLL;它不能创建临时变量来缓存值之类的东西。

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


请注意,这种体验与使用python完全不同。您不能只键入“uses module”并按enter键,因为pascal单元必须是完整的,才能由JVinterpler进行解释,而JVinterpler需要您为要导入的每一个其他单元编写一个包装器。你会发疯的。我不是认真地建议任何人尝试围绕
TJvInterpreter
构建REPL

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

另一个与REPL非常相似的是Delphi中的按钮:


创建一个新的空项目后,单击它,添加到新的空项目中的任何代码都将在不到一秒钟的时间内生成并运行。离我的回复足够近了。这有点像二进制可执行的即时极乐


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

没有必要将方形销钉压入圆孔。如果您希望某些REPL.Java/Scala确实有REPL,并且它们也是可编译语言,请使用Python(或类似语言)。使用Python在Windows API DLL上构造和测试Delphi代码本身就是在强制页面,这不亚于在编译语言IDE中添加类似interpreater的功能。我认为必须键入“public static void main()”,然后键入一些花括号并导入以交互方式
printf(“hello world”)
,这将是一件非常有趣的事情。javarepl。令人捧腹的当然所以我猜有一些默认的导入,比如autoexec.bat:-),当然不需要输入“publicstaticvoidmain()”(如果您选择函数引用变量,可能会有意义,但Java缺少这些)。常规项目所需的样板文件可能也必须减少。比如:是的,delphi是一种不同的快速开发方案,程序员需要考虑他们构建的程序,并使用编译器和非常全面的帮助文档来解决问题。+1,特别是不需要解释器,因为编译器的速度(以及
代码洞察
,您没有提到)让它变得不必要。回答得好,沃伦。:-)代码洞察?你在开我玩笑!基于IDE嵌入式J#的pascal解析器不完整,并且与主编译器不同步。当库文件同时位于Project和IDE的搜索和浏览路径中时,它无法找到库文件。它无法解析语言构造并将所有其余单元声明为错误。有报道称,当大量使用泛型时,IDE会立即崩溃。因此,是的,存在可靠性有限的代码洞察。但是,即使对于完美描述的函数,它也不总是有效的,更不用说那些几乎没有描述的需要试错会话的函数了,“JvInterpreter需要您为您想要导入的每个其他单元编写一个包装器。”是的,与CnWizards中的脚本完全相同。就像它们是从同一根分叉的。这是一个荒谬的需要繁琐的手工工作。就像你说的“你会发疯的。”我走了。然后我转到SO:-)“对我来说足够接近一个REPL。”然后使用断点+检查/评估来检查结果。如果您需要更改一些参数值,那么最好重新运行。如果您需要更改几行并重新布线逻辑,那么您应该重新编译并重新运行。看来我们没有其他选择了。但它不是REPL。坦率地说,我倾向于有同样势利的想法。答复?是给基本的孩子们的。我们有真正的语言。编译的,有类型的,等等,但是我在Scala中检查了REPL。如果技术上可行,那么出于某些目的,它在staticalyl类型的lanhuages中也很有用。