这两天用C#编码,一旦考虑向后兼容性,突感静态类型的不爽。模式上无论如何努力,实际上一旦系统成型就结构上的改变都代价很大(可能我对重构的理解还不好)。
而动态类型缺乏编译时期的类型检查,小系统还可以,3-5人的团队。如果是构件级的开发,无法描述接口的影响将是灾难性的——文档都不知道应该怎么生成。
想来不久前Guido说要在python中引入可选的静态类型检查,当时一片NIMP(Not In My Python)的声音。不过仔细想想很有道理。
当Java、.Net都在虚拟机上引入字节码兼容的动态语言,动态语言爱好者们就往往陶醉在Helj那句“针对动态语言的特点,静态语言能做的反击是非常有限的”。实际上静态语言在努力吸收动态语言的优势。反过来动态语言的动作却很少。如果将来Python真的加入了可选的静态类型检查,可以算是一种尝试。
设想一下,如果将来是模块用静态接口包住,但模块内可以有动态语言的表现力。可爱至极。总之,动静之间就是融合、融合。
ps:感觉没有范型的静态类型太可怕了。Bjarne说把一切都继承自一个统一的object来实现容器是愚蠢的,有点偏激,但也有点道理。到处是向下类型转化,不知道java们这些年是怎么坚持过来的。