Programming languages 是否有任何编程语言可以将编辑和编译/运行结合在一起?

Programming languages 是否有任何编程语言可以将编辑和编译/运行结合在一起?,programming-languages,coding-style,editing,inline-assembly,Programming Languages,Coding Style,Editing,Inline Assembly,当我编写代码时,我总是编写一小部分单元,并经常编译它。这有助于我确保一切正常运行,但这非常耗费时间是否有任何编程语言可以支持我们同时进行编码和并行运行?我的意思是,只要按下一个键就可以生成有效的代码,编辑的效果就会融入到执行程序中。LISP、Scheme、Haskell、Perl、Python、Ruby、Maple、Mathematica、MATLAB、,大多数解释语言都能做到这一点。您的代码将在输入完成后立即被解释并运行 真见鬼,甚至命令外壳也很重要 引自: 尽管大多数用户认为shell是一种

当我编写代码时,我总是编写一小部分单元,并经常编译它。这有助于我确保一切正常运行,但这非常耗费时间是否有任何编程语言可以支持我们同时进行编码和并行运行?我的意思是,只要按下一个键就可以生成有效的代码,编辑的效果就会融入到执行程序中。

LISP、Scheme、Haskell、Perl、Python、Ruby、Maple、Mathematica、MATLAB、,大多数解释语言都能做到这一点。您的代码将在输入完成后立即被解释并运行

真见鬼,甚至命令外壳也很重要

引自:

尽管大多数用户认为shell是一种交互式命令解释器,但它实际上是一种编程语言,其中每条语句都运行一条命令。因为它必须同时满足命令执行的交互和编程两个方面,所以它是一种奇怪的语言,既受历史的影响,也受设计的影响

–布莱恩·克尼汉和罗布·派克



对于视频演示,请观看。

我认为这不一定是语言问题,因为这是IDE之类的问题。甚至像C这样的编译语言也有解释器

如果你认为解释器对你有帮助的话,你可以为你正在编程的任何东西找到解释器。

嗯,你真的想要这样的东西吗

让我们想象一下,您已经为您的C语言环境设置了这样一个系统。因此,您的编辑器被配置为在每次按键时检查是否“导致有效代码”。。。怎样?除非编辑器在解析代码时冗余地包含与编译器/解释器相同的所有逻辑,否则必须调用编译器。(让我们忽略将文件保存到磁盘的开销,想象一下编译器可以直接读取编辑器缓冲区的内容。)因此,在每次按键时,它都会编译代码。您可能会有99%的时间出现错误,这仅仅是因为您还没有完成输入变量或关键字的名称。您的系统如何知道错误是由该错误引起的,还是由“真实”错误引起的

另外,在程序执行时,如何将编辑合并到程序中?假设您的程序位于五个堆栈帧深的点,并且您更改了传递给第一个函数的变量的值。如果不再次开始执行第一个函数,就无法神奇地传播更改。但是,如果改变没有被传播,它真的被纳入到程序中了吗?当然,调试器将允许您修改正在执行的程序中的现有变量,但您不能执行诸如创建新变量、函数调用或控制结构之类的操作,所有这些都是您在方案下可能执行的操作

大多数intepreted语言都有一个Read-Evaluate-Print循环(REPL),您可以在其中定义函数,然后将这些函数存储在解释器的环境中,您可以按名称调用这些函数,甚至可以重新定义函数,以便以前定义的调用这些函数的函数将执行新版本。但即使在这种情况下,只要有提示,您的程序就不会执行,因此可以给它一些新的解释。

允许您修改正在运行的程序,基本上可以在程序从未停止运行时动态更新方法

只要按下一个键就能产生有效的代码,编辑的效果就会被纳入到正在执行的程序中

如上所述,许多语言都提供了一个交互式的读取/编辑/评估/打印循环,但您需要的东西更多。20世纪80年代提供的功能几乎与您描述的一样;您必须按一个键才能更新正在运行的系统。您甚至可以在不干扰调用堆栈上以前版本的旧激活的情况下替换函数

20世纪70年代和80年代是互动式开发环境的黄金时代,从那时起,该领域一直萎靡不振。现在,人们认为VisualStudio是一个高度交互的编程环境,它是,但不太动态的


我认为今天最接近于复制这种动态体验的是,它有一个非常复杂的IDE,它非常接近于施乐PARC(也是由同一个人)构建的Smalltalk-80环境。

您所寻找的,有时被称为活跃系统、增量系统或自我维持系统(S³)

它实际上不是编程语言的属性,而是开发环境的一个特性。与编程语言相关的唯一一件事是,一些编程语言社区强烈反对生动活泼的理念,因此这些社区往往不会产生生动活泼的工具,而其他社区则无法想象没有生动活泼的系统的生活,因此他们往往会产生生动活泼的工具

例如,几乎所有的SLAMTALLE环境和许多LISP环境都是活泼的,而我知道没有一个单一的C或C++环境。曾经有一个活跃的Java环境,称为IBM Visual Age for Java(它实际上是由IBM的Smalltalk部门用Smalltalk编写的,基于IBM Visual for Smalltalk,所以这并不奇怪),但是当它被Java重写为Java Micro Edition的Visual Age时(你可能更了解它现在的名字Eclipse),它失去了活力

你问到“同时编码和并行运行”,在一个生动的系统中,它们甚至不是“并行的”,它们实际上是一个整体:编码和运行之间没有区别,IDE和应用程序之间没有区别,编译时和运行时之间没有区别

您通常在Smalltalk中开发软件的方式是,您只需写下所需内容并运行它:

aCalculator ← Calculator new.
aCalculator compute: '1 + 1'.
(顺便说一句:“运行它”只是意味着写那个小snippe
compute: aString
    ↑ 2.