JnB*_*ymn 18 python java project-management static-typing
在阅读了这个非常有用的信息(尽管有点争论性)之后,我想了解您使用Python编写大型项目的经验.随着项目变得更大,事情变得无法管理吗?这种担忧是让我依赖Java的一件事.因此,我会特别感兴趣的知情对于大型项目的可维护性和Java和Python的可扩展性的比较.
Wai*_*ung 16
我研究用Python完成的大规模商业产品.我粗略估计了5000个文件x每行500行.那是大约250万行的Python.请注意,这个项目的复杂性可能相当于其他语言的10 mil +代码行.我没有听到过一位抱怨Python代码无法维护的工程师/架构师/经理.从我从错误跟踪器中看到的情况来看,我没有看到静态类型检查可以避免的任何系统问题.事实上,根本不使用对象类型会产生很少的错误.
我认为这是一个非常好的学术主题,通过实证研究为什么基于静态类的语言似乎并不像人们想象的那样重要.
关于可扩展性.我们刚刚在我们的产品中的数据库1之上添加了一个数据库2,它们都是非SQL的.没有与类型检查相关的问题.首先,我们设计了一个足够灵活的API来预测不同的底层实现.我认为动态语言在这方面是一种帮助而不是阻碍.当我们继续测试和修复错误时,我们正在研究那些在任何语言上工作的人都必须面对的错误.例如,内存使用问题,一致性和参照完整性问题,错误处理问题.我没有看到静态类型检查对这些挑战有任何帮助.另一方面,我们通过能够在飞行途中或简单修补后注入代码,从动态语言中获益匪浅.
可以肯定地说,我们100多名工程师中的大多数人都使用Python感到高兴和高效.对于我们来说,使用静态类型语言在相同的时间内以相同的质量构建相同的产品可能是不可想象的.
根据我的经验,静态类型语言可能难以维护.例如,假设您有一个实用程序函数,它接受自定义类作为参数.如果你在路上采用新的命名约定,那么这个类的名称将不得不改变,然后你的所有实用函数也必须改变.在像python这样的语言中,只要在类中实现相同的方法,就没有关系.
就个人而言,我鄙视一种妨碍我的语言.表达你的想法的速度是有价值的,这是Python相对于Java的优势.
python中没有良好测试覆盖率的大型代码库可能是一个问题.但这只是图像的一部分.这完全取决于人们和合适的方法来完成这项工作.
没有
你可能会因任何语言而失败.
尝试在具有大量 IoC 或其他设计模式的大型动态类型框架中追溯明显格式错误的对象的来源,其中对象无法直接追溯到堆栈。
现在尝试在静态类型语言中执行此操作。
除非对象的类型被记录在使用站点附近(例如,通过类型注释,a-la Python 的类型安全库)或堆栈上的某个地方,推断它来自哪里几乎是不可能的。我是根据经验说的,我曾尝试调试 BuildBot 框架的某些部分。它涉及通过框架搜索大量原始文本,甚至使用 PyDev、Komodo 和 Wingware 等花哨的 IDE。
我不怀疑可以对动态语言强加一些类型约束,但缺乏任何标准化似乎是任何试图调试大型现有框架的一部分的人的障碍。
编辑:自 2014 年以来,Guido 添加了 PEP484、MyPy 和打字模块。这让我在维护大型项目方面的经验变得更好。
| 归档时间: |
|
| 查看次数: |
2967 次 |
| 最近记录: |