4

编辑:澄清一下,我并不打算建议为动态语言编写 IDE 可能是不可能的。/编辑

根据我的具体经验,我正在考虑多年来关于 JavaScript 的对话/评论,其中许多都在堆栈上,但时不时有人说,JS 没有像样的 IDE 的原因是因为动态类型也能做到难做。

我在为 JS 编写解析器方面考虑过这一点,但我不明白这些类型与自动完成或直接进入东西的定义等特性有什么关系。如果有的话,我可以想象通过动态语言中传递的参数的范围和可用性在没有类型检查问题的情况下更容易建立。尤其是在大多数情况下规则实际上非常简单的 JS 中。

在我开始听到人们将动态类型视为技术阻塞问题之前,我只是假设在大多数动态脚本语言中,您可以从控制台运行,减少冗长并且在实时执行环境中易于测试使调试更容易,从而减少对 IDE 的需求。

那么它是哪一个?关于静态类型的一些东西可以更容易地解析代码以建立范围/可用性,或者我对减少需求是否正确?

4

2 回答 2

7

IDE 是用动态语言发明的。重构是在动态语言中发明的。自动重构工具是用动态语言发明的。

当静态语言甚至没有图形时,动态语言具有图形 IDE,内置支持通过网络进行结对编程。或IDE。或网络支持。

例如,Smalltalk 和 Lisp IDE 仍然领先于 Java 或 C#。事实上,Eclipse曾经是一个 Smalltalk IDE!

IDE 的质量取决于花费了多少努力使它变得更好。Smalltalk 和 Lisp 社区花费了数十年的研究、数十名博士和大量资金来构建强大的 IDE。Java 社区也是如此。(实际上,他们花了一大笔钱购买 Smalltalk 公司……)

JavaScript 社区没有。这就是全部的区别。

有些事情需要在两者之间采用不同的方法。以 IntelliSense / Content Assist / Autocompletion 为例。在动态语言中静态尝试确定哪些标识符在范围内基本上等同于解决停机问题,因此您不能这样做。您的 IDE 也需要是动态的,然后它不需要进行静态分析,它可以只查看正在运行的代码并查看范围内的标识符。

于 2012-10-13T00:31:56.427 回答
1

Smalltalk 是一种动态语言,并且拥有最早的基于图形的 IDE 之一,包括对重构的支持。还可以查看 Jetbrain 的 RubyMine,了解用于动态语言的更现代 IDE 的示例。

这并非不可能。这更困难......但同样为开发人员编写工具也是如此。

于 2012-10-13T00:32:47.027 回答