寻找可以在“调试器”中编写代码的编程语言

时间:2018-09-27 10:11:01

标签: programming-languages smalltalk interactive

我以前使用Smalltalk开发,它是完全交互式的,您可以在任何浏览器(包括调试器)中更改代码,并且更改立即在应用程序中生效(无需重新启动或执行任何操作)。我的问题是是否还有其他语言具有此功能。除了自我,我什么都不知道,但我害怕自我真的死了。

Java具有热代码替换功能,它仅部分起作用(只要公共方法不变)。 JRebel使它变得更好。但是我一直在寻找像Smalltalk这样从一开始就支持交互式开发的语言。请注意,我的意思不是REPL。 REPL仍与应用程序分离,因此REPL中执行的内容在应用程序中不会像交互式编程语言或开发环境那样立即生效。

4 个答案:

答案 0 :(得分:4)

您说您“曾经与Smalltalk一起开发”。我的回答是,也许您应该重新考虑一下!在支持现代应用程序区域和环境方面,Smalltalk的开源版本和商业版本都走了很长一段路。

据我所知,没有可用的东西可以为您提供与Smalltalk相同的环境-除了Smalltalk。

但是Smalltalk还可以为您提供使用Amber或PharoJS进行的客户端Web编程(两者都为您提供了所描述的调试版本),通过Seaside进行的服务器端Web编程(以及其他几种选择),移动应用程序(具有PharoJS),软件和旧版应用程序分析,嵌入式程序设计,独立服务器以及更传统的桌面程序设计。

Pharo也许是最容易上手的地方(也是PharoJS的基础),尽管SqueakCUIS也具有吸引力。如果您想寻求商业支持,这里有GemTalk及其事务对象数据库CincomInstantiations

答案 1 :(得分:1)

REPL与应用程序如何分开?

通常,如果您将应用程序加载到REPL中并与之交互,则REPL中的每个操作都会在该应用程序中立即生效。您可以保存状态并在下次启动REPL时重新加载。

相关, jupyter笔记本也可以保存并执行。他们支持多种语言。我不知道他们是否支持如Smalltalk和common lisp这样的正在运行的应用程序。

最后,有派克。该语言支持在运行时重新加载代码。通过替换已编译的类并从替换类实例化新的对象实例来实现这一点。

pike已用于创建一个称为open-sTeam的平台,该平台可以在运行时更改现有对象的代码,类似于smalltalk。它通过将实际对象包装在代理对象中来实现。 (普通代码仅与代理对象进行交互,而这些对象指向实际对象的最新版本)

我相信用python编写的zope版本2也能够在运行时替换代码。

但是,这些替代方法都没有像Smalltalk这样的便捷浏览器和调试器。如果您使用emacs来控制常见的lisp图像,则可能会与普通的lisp紧密接触,我猜zope 2有一个Web界面来管理其代码。

答案 2 :(得分:1)

我会坚持使用Smalltalk。

您可能想尝试Smalltalk/X-jv分支。我称之为最好的未知的Smalltalk:)。

只有我的2c。

答案 3 :(得分:0)

我认为闲聊是一回事。

也许您应该更多地关注解释器语言而不是编译器语言-例如,在进行Web开发时,php是许多示例中的一个-您更改代码,并且在直接更改代码的情况下,结果立即可见(本地)网络服务器。另一种解释器语言是python(也存在编译器)。

另一种可能性是搜索编译器语言的解释器,例如Cling - The Interactive C++ Interpreter

希望有帮助。