交互式编程语言?

6

是否有一种编程语言可以完全在交互模式下编写,而无需编写需要解释或编译的文件。可能类似于Ruby的IRB,但是该系统旨在让您从命令行编写整个程序。


我猜当我说“轻松”时,我的意思是该语言被设计成可以从命令行编码。 - yazzapps.com
13个回答

7

Smalltalk可以完全交互式地进行编程,但我不会称小型对话框为“命令行”。大多数Lisp环境也是如此。如果我没记错的话,打印机中的Postscript也是这样。

你是说你想在不看到超出命令窗口滚动缓冲区的代码的情况下编写程序吗?


我没有考虑它是否适合滚动缓冲区,但是是的,我想它会使命令长度更短。 - yazzapps.com
这就是为什么你也需要内省的原因! - jk.

7
我假设您正在寻找类似于BASIC的工作方式(启动到基本提示符并开始编码)。 IPython使此过程非常直观。像Bash这样的Unix shell使用相同的概念,但是您不能像IPython那样直观地重用和保存您的工作。Python也是一种更好的通用语言。 编辑:我本来要打一些示例并提供一些链接,但是IPython交互式教程似乎比我做得更好。您要寻找的良好起点是源代码处理技巧轻量级版本控制部分。请注意,该教程未明确说明如何精确执行您要寻找的所有操作,但它确实提供了一个理解IPython shell上交互功能的起点。
此外,还应查看IPython“魔法”参考,因为它提供了许多特定于所需操作的实用工具,并允许您轻松定义自己的实用工具。这非常“元”,但展示如何创建IPython魔术函数的示例可能是在IPython中构建“完整应用程序”的最简洁示例。

我查看了IPython网站,但是我没有看到任何使用IPython构建的完整应用程序示例。你有什么链接可以帮助我吗? - yazzapps.com
我读了你提到的教程,但是在IPython中创建函数似乎并不那么简单。它似乎会将所有内容保存为.py文件。 - yazzapps.com
我不确定你希望交互式函数定义变得多么琐碎。你仍然需要在某个地方编写它的代码,你可以像编写.py文件一样将其输入到命令行中。试试吧,Python命令行非常方便。 - Paul McMillan
值得注意的是,交互式 shell 不仅限于 iPython。标准的 C-Python 发行版也包括它。 - Paul McMillan

4

总有一种语言叫做lisp,它是Smalltalk的原始替代品,并拥有这个特性。


我在网上查了一下,但没有找到太多相关信息。例如,我该如何列出我在Lisp中创建的所有函数呢? - yazzapps.com
这取决于你使用的Lisp实现版本,Zubair。幸运的是,也不幸的是,Lisp有许多实现版本以及几种基于哲学思想的变体(Scheme、Common Lisp、Emacs Lisp等)。 - JasonTrue
哪种交互式Lisp是最常用的? - yazzapps.com
我已经有20年没有广泛使用Lisp了。在那个时候,所有的Lisp都有保存宇宙的方法,以及各种自省的方式,例如列出函数。我恐怕无法帮助您了解现代细节,除非建议阅读通用Lisp标准。 - bmargulies

3
唯一避免写入任何文件的方法是完全转移到运行交互环境。当您以这种方式编程(即交互式编程,例如在IRB或F#交互式控制台中),您如何分发程序?当您退出IRB或F#交互式控制台时,您将失去所有交互式编写的代码。
Smalltalk(请参见现代实现,例如Squeak)解决了这个问题,我不知道任何其他可以完全避免文件的环境。解决方案是分发运行环境的映像(其中包括您交互创建的程序)。在Smalltalk中,这些称为images

当然,交互式 shell 必须具备内置版本控制功能以保存您的代码。 - yazzapps.com
你会有一个命令,比如“make image”、“make exe”,或者类似的命令来分发你的程序。 - yazzapps.com
1
@Zubar:你所寻找的并不存在,因为在学习环境之外是没有用处或安全的。你的“制作图像/可执行文件”的愿望并不是很实际,你如何测试你的代码?如果不重新输入整个程序,你又如何修复可执行文件,这显然会引入新的错误风险? - Binary Worrier
嗨Binary,我的意思是你可以通过exe重新分发运行中的程序。但源代码仍然在交互式系统中。我所说的这样做是否可能? - yazzapps.com

3
任何UNIX shell都符合你的问题。这包括从bash、sh、csh、ksh到TCL的tclsh,以及用于TK GUI编写的wish。

你能举个例子吗?它与IRB或IPython相比如何? - yazzapps.com
我应该使用哪个TCL实现? - yazzapps.com

2

如前所述,Python有一些不错的交互式shell。对于初学者,我建议使用bpython而不是ipython,因为bpython支持自动补全和帮助对话框,以帮助您了解函数接受哪些参数或它的作用(如果有文档字符串)。


非常酷,以前从未听说过bpython,我会去试试看。但需要注意的是,ipython也支持自动完成和文档字符串,尽管在这方面bpython绝对更漂亮。不过,它看起来不像ipython那样支持重新执行、编辑和保存命令历史记录的“片段”。 - Mike
这与IPython有何不同?(在回答此问题的另一个答案中) - yazzapps.com
你如何在BPython中添加函数? - yazzapps.com

2

这实际上是一个关于代码实现而不是语言的问题,但是:

  • Smalltalk(尝试使用Squeak版本)将所有工作保留在“交互式工作区”中,但它是图形化的,不适用于命令行。

  • APL最初在IBM 360和370系统上部署,完全通过修改后的IBM Selectric打字机上的命令行进行交互!您的APL函数保存在不像普通文件的“工作区”中。

  • 许多语言实现都配备了纯命令行交互解释器,例如New Jersey标准ML ,但是因为它们不提供任何类型的持久化命名空间(即退出程序后,所有工作都将丢失),所以我认为它们不应该算在内。

有趣的是,Smalltalk和APL的主要推动者(Kay和Iverson)都赢得了图灵奖。(Iverson在被哈佛大学拒绝聘任后获得了图灵奖。)


小谈很有趣。我正在寻找一些可以从命令行运行的东西,选项上有GUI是不必须的。 - yazzapps.com

2

TCL可以完全交互式地编程,您可以定义新的tcl过程(或重新定义现有的过程),而无需保存到文件。

当然,如果您正在开发整个应用程序,某个时候您确实需要保存到文件,否则您将失去所有内容。使用TCL的内省能力,将当前解释器状态中的一些或所有内容转储到tcl文件中相对容易(我以前写过一个过程,使这更容易,但我大多数情况下仍会首先在文件中开发,并在应用程序中拥有一个功能来重新加载源文件)。


1
我几乎总是先在tkcon中原型化我的程序。Tkcon允许您使用“edit”命令打开更友好的编辑器来编辑函数。 - slebetman
是的,相比默认控制台,tkcon在许多方面都更加友好,例如语法高亮。 - jk.

2

1

大多数Lisp的变体都很容易将您的交互式工作产品保存为程序文件,因为代码只是数据。

Charles Simonyi的意图编程概念也可能已经有所进展,但这并不像你可以去购买。值得探索Intentional Workbench项目。


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