注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

为着理想勇敢前进

 
 
 

日志

 
 

回复“回复几个问题”中的几个问题  

2010-09-15 21:46:29|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

最近孟岩前辈兴致所致,又讨伐 C++。说起来虽然我被 C++ 搞的历史不如孟岩前辈那么悠久,但却不幸染上斯德哥尔摩症候群,有意要为 C++ 以及包括 D 语言在内的静态语言辩护一番。

软件开发方面真正有价值的进步,应当是有利于用户、有利于项目管理、有利于解决领域问题,而不是有利于程序员。

有利于程序员的,最终都有利于用户。


抽象是程序开发的全部意义所在。之所以C比汇编是一个伟大的进步,是因为C建立了一个机器抽象,把诸如寄存器、cache、寻址方式、位对齐之类的细节都透明掉了,由此而带来的表达能力提升,当然是伟大的。但是你看看上面我举的那个例子,有抽象层次的提升吗?没有!有的只是YY暗爽值的提升。这种表达能力提升,如果得来全不费工夫,当然也无伤大雅,如果是呕心沥血,伤人一万,自损三千,窃以为大可不必也。

符号所改变的并不仅仅只有 YY 暗爽值。比如阿拉伯数字相比罗马数字就更容易理解。在欧洲人使用阿拉伯数字以前,只有资深的数学家才能学会除法。


C++花了n年时间,弄出来一大堆奇技淫巧,再与之前之后诸多特性相互干扰,复杂度成倍增加

无可否认,这些都是C++的罪恶。所谓 less is more,似乎 C++ 的过错在于不够 less。然而,“复杂度”其实是个多义词,太多的功能固然可以视为是奇技淫巧,但也同样是实现上层逻辑时的必备基础。以另一个观点看,C++ 并非不够 less ,而在于 less 过了头,缺乏了必备的基础设施。比如,在 0x 以前,C++ 没有可变模板参数,编译器对特化、偏特化的支持参差不齐,没有 auto 导致超长的类型声明。而编译速度太慢,模板无法分开编译,则是 C++ 0x 仍然没有解决的问题。


拿静态的类型系统去套多姿多彩、变化万千的现实世界,纯粹是人类的狂妄自大。

静态类型语言并不是用“静态的类型系统去套多姿多彩、变化万千的现实世界”。程序员每次访问某个对象的成员时,他的脑子里一定都清楚的知道这个对象的接口,不管他用的是静态类型语言还是动态类型语言,也不管这个类型有没有明确的被定义出来。这个对象的接口在静态类型语言中,就叫做类型。

理论上说,静态类型并不一定要求程序员去声明类和变量类型、比如 Scala 允许你编写这样的代码:

val o = new {
    val a = 1
    val b = "Hello"
    val c = "World"
    def d(n:Int) = n + 1
}
print(o.d(100))

这些代码中的变量类型都是自动推断的静态类型,可看样子和动态类型语言写起来也差不多了吧。


动态面向对象语言的实践已经证明,所谓没有严格的类型检查就无法有效地发现错误这一说法,在今天这个时代已经不符合实际了。

静态类型对于查错的帮助显而易见,过时一说,不值一驳。但静态类型还有另一方面的好处,即降低程序员之间沟通成本、促进面向接口的编程,这对于团队内的合作帮助极大。我们即使在动态类型语言中,也需要用静态的数据定义语言

  评论这张
 
阅读(717)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018