注意:这主要是主观的,并且基于我的经验和印象。
动态类型语言与静态类型语言有很大的不同。这些差异在重量级企业软件中可能比在大多数其他应用程序中更为重要。
静态类型的语言往往是非常规范的。方法将仅接受与其签名完全匹配的输入。访问级别往往非常重要,并且接口已明确定义,并具有冗长但明确的限制来强制执行这些定义。
另一方面,动态类型的语言非常实用。类型转换通常是隐式发生的,如果您提供了错误的输入类型,只要它们表现得足够相似,函数甚至可能会起作用。在像Python这样的语言中,甚至访问级别也将基于合同而不是技术限制(即,这是private
因为系统提示您不要使用它,并且它的名字很有趣)。
许多程序员喜欢动态语言,因为它们(可以说)允许快速原型设计。代码通常以较短的结尾(如果仅仅是因为缺少类型声明),并且由于需要快速而肮脏的解决方案或想要测试某些东西而想要违反适当的协议,那很容易实现。
现在,“企业级”公司通常偏爱静态类型的语言的原因恰恰是因为它们对这些限制更加严格和明确。尽管在实践中,即使是静态类型的代码也可以被编译器的白痴破坏,但许多问题在流程的更早阶段(即运行时之前)就更加明显。这意味着即使代码库很大,整体且很复杂,也可以轻松捕获许多错误,而不必运行代码或将其发送给QA部门。
对于该环境之外的许多程序员来说,收益没有超过弊端的原因是,这些错误通常可以通过对代码进行彻底的检查甚至尝试运行它们来轻易捕获。尤其是当遵循测试驱动的方法时,这些错误通常变得微不足道并且易于修复。而且,由于许多此类公司的发布周期要短得多,因此生产力通常比刚性更重要,并且开发人员自己也要进行很多(基本)测试。
企业公司不使用动态类型语言的另一个原因是遗留代码。在我们看来,愚蠢的是,大公司通常会坚持使用可行的解决方案,即使它们已经过了保质期。这就是为什么如此多的大型公司强制执行Internet Explorer 6并如此缓慢地升级其OS。这也是为什么他们经常使用“旧”语言(例如Java的古老版本)编写新代码的原因:向不存在生命的软件中添加几行代码比获得批准以新的方式完全重写要容易得多语言。
tl; dr:静态语言更像是官僚主义,因此企业管理者更喜欢它们。