交互式编程语言?

时间:2010-02-14 21:36:34

标签: programming-languages

是否存在可以完全以交互模式编程的编程语言,而无需编写解释或编译的文件。想想可能像Ruby的IRB,但是一个旨在让你从命令行编写整个程序的系统。

13 个答案:

答案 0 :(得分:7)

Smalltalk可以完全交互式编程,但我不会将smalltalk提示符称为“命令行”。大多数lisp环境也是如此。如果记忆服务的话也是postscript(如在打印机中)。

你是说你想要编写一个程序而从未看到比命令窗口的回滚缓冲区更多的代码?

答案 1 :(得分:7)

我假设您正在寻找类似于BASIC以前的工作方式(启动BASIC提示并开始编码)。

IPython可让您直观地完成此操作。像Bash这样的Unix shell使用相同的概念,但你不能像IPython那样直观地重复使用和保存你的工作。 Python也是一种更好的通用语言。

编辑:我打算输入一些示例并提供一些链接,但IPython interactive tutorial似乎比我能做得更好。 source code handling tipslightweight version control上的部分是您正在寻找的内容的良好起点。请注意,本教程没有说明如何精确地完成您正在寻找的所有内容,但它确实提供了一个了解IPython shell上的交互功能的跳跃点。

另请参阅IPython "magic" reference,因为它提供了许多实用程序来执行您想要执行的操作,并允许您轻松定义自己的实用程序。这是非常“元”,但是展示如何创建IPython魔术函数的示例可能是在IPython中构建的“完整应用程序”的最简洁示例。

答案 2 :(得分:4)

总有lisp,这是具有这种特性的Smalltalk的原始替代品。

答案 3 :(得分:3)

避免编写任何文件的唯一方法是完全移动到正在运行的交互式环境。当您以这种方式编程时(即,在IRB或F#交互式中交互式),您如何分发您的程序?当您退出IRB或F#交互式控制台时,您将丢失交互式编写的所有代码。

Smalltalk(参见现代实现,如Squeak)解决了这个问题,我不知道任何其他可以完全避免文件的环境。解决方案是您分发运行环境的图像(包括交互式创建的程序)。在Smalltalk中,这些被称为images

答案 4 :(得分:3)

任何unix shell都符合你的问题。对于TCL,这从 bash sh csh ksh tclsh 希望用于TK GUI编写。

答案 5 :(得分:2)

正如已经提到的,Python有一些很好的交互式shell,我建议bpython用于初学者而不是ipython,bpython的优点是支持自动完成和帮助对话框,以帮助你知道函数接受什么参数或者它是什么(如果它有docstrings)。

答案 6 :(得分:2)

这实际上是关于实现的问题,而不是语言,但是

  • Smalltalk(试用Squeak版本)将您的所有工作保存在“交互式工作区”中,但它是图形化的,而不是面向命令行。

  • 首次在IBM 360和370系统上部署的APL完全是交互式的,在改进的IBM Selectric打字机上使用命令行!您的APL功能保存在“工作区”中,该工作区完全不像普通文件。

  • 许多语言实现都带有纯粹的命令行交互式解释器,比如说Standard ML of New Jersey,但是因为它们不提供任何类型的持久性命名空间(即,当你退出程序时,所有的工作都会丢失),我认为它们不应该算在内。

有趣的是,Smalltalk和APL(分别是凯和艾弗森)的主要推动者都赢得了图灵奖。 (艾弗森在被哈佛大学被剥夺任期后获得了图灵奖)。

答案 7 :(得分:2)

TCL可以完全交互式编程,您可以在不保存文件的情况下定义新的tcl过程(或重新定义现有的过程)。

当然,如果你正在开发和整个应用程序,你确实想要保存到文件,否则你会失去一切。使用TCLs内省的能力,相对容易将当前解释器状态的一些或全部转储到tcl文件中(我之前编写了一个proc来使这更容易,但是大多数情况下我只是在文件中开发,并且有如果源更改,应用程序中的函数本身就是资源本身。

答案 8 :(得分:2)

答案 9 :(得分:1)

Lisp的大多数变体使您可以轻松地将交互式工作产品保存为程序文件,因为代码只是数据。

Charles Simonyi的故意编程概念也可能是其中的一部分,但它并不像你可以去购买它。 Intentional Workbench项目可能值得探索。

答案 10 :(得分:1)

可以像这样使用很多Forth。

答案 11 :(得分:1)

有人已经提到了Forth,但我想详细说明Forth的历史。传统上,Forth是一种编程语言,它是自己的操作系统。传统的Forth将程序直接保存到磁盘扇区而不使用“真正的”文件系统。它可以负担得起,因为没有操作系统它没有直接在CPU上运行,所以它不需要玩得很好。

实际上,有些实现不仅仅是操作系统而且还有CPU(许多更现代的基于堆栈的CPU实际上被设计为Forth机器)。

在Forth的原始实现中,每次输入行并将其保存在磁盘上时,始终会编译代码。这是可行的,因为Forth很容易编译。您只需启动解释器,根据需要使用Forth定义函数,然后只需退出解释器。下次再次启动解释器时,所有以前的功能仍然存在。当然,并非所有Forth的现代实现都以这种方式工作。

答案 12 :(得分:1)

Clojure

它是JVM上的一个功能性Lisp。您可以连接到名为nREPL的REPL服务器,然后您可以开始在文本文件中编写代码并在交互时将其加载。

Clojure为您提供类似于交互式单元测试的东西。

我认为Clojure比其他Lisps更具互动性,因为它强调功能范式。当它们是纯粹的时,热插拔功能更容易。

试用它的最佳方法是:http://web.clojurerepl.com/

ELM

ELM可能是我所知道的最具互动性的。它是一种非常纯粹的函数式语言,语法接近Haskell。它的特殊之处在于它是围绕一个允许热交换(修改运行代码(函数或值))代码的反应模型而设计的。反应位使得无论何时改变一件事,都会重新评估所有内容。

现在ELM被编译为HTML-CSS-JavaScript。因此,您将无法将其用于所有事情。

ELM为您提供类似于交互式集成测试的东西。

试用它的最佳方法是:http://elm-lang.org/try