静态类型和动态类型是否与编写IDE更加困难有关?

4

编辑说明:仅想澄清的是,我并不打算暗示为动态语言编写IDE可能是不可能的。/编辑

根据我的具体经验,我思考了多年关于JavaScript的对话/评论,其中很多在堆栈上,但偶尔有人会说,JS没有像样的IDE的原因是因为动态类型使它太难做。

我从解析JS的角度考虑过这个问题,我不明白类型与自动完成或直接转到内容定义之类的功能有何关系。如果有什么,我认为在动态语言中通过传递参数建立范围和可用性将更容易建立,而无需担心类型检查问题。特别是在JS中,在大多数情况下规则实际上相当简单。

直到我开始听到人们引用动态类型作为技术阻碍问题时,我才认为在大多数动态脚本语言中,您可以从控制台运行,减少冗余性并在实时执行环境中轻松测试,从而使调试更加容易,从而减少了IDE的需求。

那么是哪一个?静态类型的某些内容使得更容易解析代码以建立范围/可用性,还是我对需求减少的理解是正确的?


这更适合于程序员堆栈交换。 - daniel gratzer
测试栈与程序员之间的区别不应该是这个问题是否特定涉及编写代码的专业吗? - Erik Reppen
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也需要是动态的,那么它就不需要进行静态分析,只需要查看运行的代码并“看到”标识符的范围。


嗯,我们没做的原因是因为我们很懒。还有大部分时间都在喝醉了,但我们真的很擅长隐藏它。而且我们都有多动症。 - Erik Reppen

1

Smalltalk是一种动态语言,拥有最早的基于图形界面的IDE之一,包括重构支持。此外,Jetbrain的RubyMine也是一个更现代的动态语言IDE的例子。

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


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