Python缺乏静态类型如何影响大型项目中的可维护性和可扩展性?[已关闭]

在阅读了这个非常翔实(尽管有些争论)的问题之后,我想知道你用Python编程大型项目的经验。随着项目变大,事情是否会变得难以管理?这种担忧是让我对Java保持依恋的一件事。因此,我对大型项目中Java和Python的可维护性和可扩展性的明智比较特别感兴趣。


答案 1

我从事的是用Python完成的大规模商业产品。我给出一个非常粗略的估计,每个文件x 500行。这大约是250万行Python。请注意,此项目的复杂性可能相当于其他语言中 1000 多万行代码。我没有听说过一个工程师/架构师/经理抱怨Python代码不可维护。从我从我们的错误跟踪器中看到的情况来看,我没有看到任何可以通过静态类型检查来避免的系统性问题。事实上,由于对象类型的使用不正确而生成的错误很少。

我认为这是一个非常好的学术科目,可以实证研究为什么静态的基于课堂的语言似乎并不像人们想象的那么重要。

以及关于可扩展性。我们刚刚在产品中的数据库 1 之上添加了一个数据库 2,两者都不是 SQL。没有与类型检查相关的问题。首先,我们设计了一个足够灵活的API,可以预测不同的底层实现。我认为动态语言在这方面是一种帮助,而不是障碍。当我们继续测试和错误修复短语时,我们正在研究人们在任何语言上工作都必须面对的那种错误。例如,内存使用问题、一致性和参照完整性问题、错误处理问题。我没有看到静态类型检查对任何这些挑战都有很大的帮助。另一方面,我们通过能够在运行中或简单的修补后注入代码,从动态语言中受益匪浅。我们能够测试我们的假设并快速证明我们的修复。

可以肯定地说,我们100多名工程师中的大多数都很高兴并且使用Python很有效率。对于我们来说,在相同的时间内以相同的质量使用静态类型语言构建相同的产品可能是不可想象的。


答案 2

根据我的经验,静态类型语言可能很难维护。例如,假设您有一个实用程序函数,它接受自定义类作为参数。如果以后采用新的命名约定,则必须更改该类的名称,然后所有实用程序函数也必须更改。在像python这样的语言中,只要在类中实现相同的方法,这并不重要。

就我个人而言,我鄙视一种妨碍我的语言。表达你的想法的速度是有价值的,这就是Python相对于Java的优势。