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

Parsing 静态类型和动态类型是否与编写IDE变得更加困难有关?,parsing,dynamic,types,static,language-design,Parsing,Dynamic,Types,Static,Language Design,编辑:我只是想澄清一下,我并不想说为动态语言编写IDE是不可能的/编辑 根据我的具体经验,我想到了多年来关于JavaScript的对话/评论,其中很多都是在堆栈上,但时不时有人说,JS没有一个像样的IDE的原因是因为动态类型使它太难实现 我在为JS编写解析器时考虑过这一点,但我不明白类型与自动完成或直接进入内容定义之类的功能有什么关系。如果我能想象的话,在动态语言中通过传递的参数建立范围和可用性将非常容易,而无需进行类型检查。特别是在JS中,在大多数情况下规则实际上非常简单 在我开始听到人们把动

编辑:我只是想澄清一下,我并不想说为动态语言编写IDE是不可能的/编辑

根据我的具体经验,我想到了多年来关于JavaScript的对话/评论,其中很多都是在堆栈上,但时不时有人说,JS没有一个像样的IDE的原因是因为动态类型使它太难实现

我在为JS编写解析器时考虑过这一点,但我不明白类型与自动完成或直接进入内容定义之类的功能有什么关系。如果我能想象的话,在动态语言中通过传递的参数建立范围和可用性将非常容易,而无需进行类型检查。特别是在JS中,在大多数情况下规则实际上非常简单

在我开始听到人们把动态类型当作一个技术阻塞问题来引用之前,我只是假设在大多数动态脚本语言中,您可以从控制台运行,减少了冗余度,并且易于在实时执行环境中进行测试,从而使调试更容易,从而减少了对IDE的需求


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

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

当静态语言甚至没有图形时,动态语言具有图形IDE,并内置对网络上成对编程的支持。或IDEs。或网络支持

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

IDE的质量取决于完成它所花费的精力。Smalltalk和Lisp社区花费了数十年的研究、数十名博士和大量资金构建强大的IDE。Java社区也是如此。(事实上,他们花了一卡车的钱购买了Smalltalk公司……)

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


有些事情需要在两者之间采用不同的方法。以智能感知/内容辅助/自动完成为例。静态地尝试确定动态语言中范围内的标识符基本上等同于解决停止问题,所以您不能这样做。您的IDE也需要是动态的,然后它不需要进行静态分析,它只需查看正在运行的代码并查看范围内的标识符。

Smalltalk是一种动态语言,拥有最早的基于图形的IDE之一,包括对重构的支持。另请看Jetbrain的RubyMine,它是一个更现代的动态语言IDE示例


这不是不可能的。更难的是…但是,为开发人员编写工具也是如此。

这更适合程序员。Stack Exchange难道Stack与程序员的测试不应该是这是否是一个与编写代码的专业相关的问题吗?嗯,我们没有这样做的原因是因为我们懒惰。大多数时候也喝醉了,但真的很善于隐藏。我们都有补充。