此书的作者 Andrei Alexandrescu 作为前 C++ 社区的一朵奇葩,因为实在是不满 C++ 标准委员会的官僚作风,跳槽到了 D 社区,成为了 D 发明人 Walt Brightman 的好基友,最终写出了这本神奇的 The XXX Programming Language 居然不是语言发明人本人写的书。

先谈谈历史,D 语言最早从 1999 年就开始开发了,掐指算算,到现在(2013 年)为止已经过去十多年了,十多年啊,结果到现在还是一种烂泥巴扶不上墙(请原谅我的法语)的状态,最终沦为了几个社区大拿的玩具。

然后我介绍下 D 语言的发明人 Walter Brightman:WB 先生本身是一个注重实践、比较内向的大龄 geek,我无意冒犯,但是这样性格的人并不适合运作一个开源社区。虽然开源社区最终都需要一个像 Linus 那样的独裁者来做最终决定,但是 WB 的控制欲让他很难让其他水平比他低的人参与到 D 的设计与开发工作中来。

还有当年的大分裂——D2,跟 Python 没人用 3.x 的情况一样,D 1.x 与 D 2.x 之间语言的巨大改变是造成 D 社区失和的重要原因。D 出现的早期,社区里一大拨人因为不满意 D1 的简陋标准库 Phobos,决心为 D 开发一套类似 .NET 或 Java 的标准库 Tango,因为闹革命推翻 WB 写的标准库,自然得不到编译器的支持,不跟编译器一起发布的“标准库”也就“标准”不起来了。再加上没有个稳定可用的编译器,开发 Tango 库的牛人们最终纷纷离开了社区,Tango 库项目也就不了了之了,到现在只留下了一本遗作:《Learn To Tango With D》(豆瓣有,自己搜下)。

这里要谈谈开源软件的通病:人人都想去实现酷炫的新特性而不是静下心来解决 bugs。D2 刚开始开发,WB 的重心就转向忙着实现 D2 的新特性而不是清理现有 D1 的 bugs。一个有不少 bug 的编译器恐怕是谁都不敢拿来正式用的,因此形成了恶性循环,让 D 这个很有潜力的语言变成了玩具项目。

最后就是 WB 先生太过于执着把 D 设计成世界上最强大的语言,却又单凭一己之力无法实现因此造成 D 语言的 spec 里引入了太多复杂的特性,现有特性也非常粗糙,比如:

1. 函数指针有 function 和 delegate 两种,分别用两个关键字来声明,文档里承诺将整合成统一的形式,结果到现在十多年都没实现。

2. 常量里的 const 与 immutable:D2 引入了各种常量形式,比 C++ 的前置后置 const 还要复杂的排列组合大大增加了学习与使用的心智负担。

3. 在语言里堆砌了太多的特性,比如契约式设计、单元测试等等这些本来应该用库实现的东西,造成语言本身过于复杂,难以完全掌握。由于契约式设计不是强制的,标准库里也没有完全采用,给人一种半成品山寨的感觉。

4. 21 世纪了,成功的语言都需要有大的、方便的标准库,用 Python 的话来说就是“自带电池”。发展了十多年的 D 作为开源的编程语言及其参考实现居然没有个包(库)管理器,人家才出来的 Node.js 都有了 npm 了好吗?!在目前标准库跟 C++ 一个水平(但是 C++ 积累了这么多年有无数第三方的库,比如 Qt)的情况下,除了语言爱好者以外就很难吸引到其他的使用者。

最后,WB 先生太执念于上个世纪他为 Symantec C++ 编译器写的后端了,官方的参考编译器实现的后端到现在都没切换到业界的事实标准 LLVM。这样一来,为了真正能够弄个靠谱的编译器,社区又得从头实现基于 LLVM 的编译器。

The D Programming Language 书评的更多相关文章

  1. iOS Swift-元组tuples(The Swift Programming Language)

    iOS Swift-元组tuples(The Swift Programming Language) 什么是元组? 元组(tuples)是把多个值组合成一个复合值,元组内的值可以使任意类型,并不要求是 ...

  2. iOS Swift-控制流(The Swift Programming Language)

    iOS Swift-控制流(The Swift Programming Language) for-in 在Swift中for循环我们可以省略传统oc笨拙的条件和循环变量的括号,但是语句体的大括号使我 ...

  3. iOS Swift-简单值(The Swift Programming Language)

    iOS Swift-简单值(The Swift Programming Language) 常量的声明:let 在不指定类型的情况下声明的类型和所初始化的类型相同. //没有指定类型,但是初始化的值为 ...

  4. Java Programming Language Enhancements

    引用:Java Programming Language Enhancements Java Programming Language Enhancements Enhancements in Jav ...

  5. The Swift Programming Language 英文原版官方文档下载

    The Swift Programming Language 英文原版官方文档下载 今天Apple公司发布了新的编程语言Swift(雨燕)将逐步代替Objective-C语言,大家肯定想学习这个语言, ...

  6. The Swift Programming Language 中文翻译版(个人翻新随时跟新)

    The Swift Programming Language --lkvt 本人在2014年6月3日(北京时间)凌晨起来通过网络观看2014年WWDC 苹果公司的发布会有iOS8以及OS X 10.1 ...

  7. [iOS翻译]《The Swift Programming Language》系列:Welcome to Swift-01

    注:CocoaChina翻译小组已着手此书及相关资料的翻译,楼主也加入了,多人协作后的完整译本将很快让大家看到. 翻译群:291864979,想加入的同学请进此群哦.(本系列不再更新,但协作翻译的进度 ...

  8. Questions that are independent of programming language. These questions are typically more abstract than other categories.

    Questions that are independent of programming language.  These questions are typically more abstract ...

  9. What is the Best Programming Language to Learn in 2014?

    It’s been a year since I revealed the best languages to learn in 2013. Once again, I’ve examined the ...

随机推荐

  1. 本地主机不安装oracle客户端--访问远程oracle数据库

    在不安装oracle客户端情况下用sqlplus连接数据库: 1.去官网下载 http://www.oracle.com/technetwork/topics/winx64soft-089540.ht ...

  2. 集合框架_DAY16

    1:List及其子类(掌握)     (1)List的特点:     Collection    |--List:元素有序(存入顺序和取出顺序一致),可重复.    |--Set:元素无序,唯一.   ...

  3. (转)Python开发程序:支持多用户在线的FTP程序

    原文链接:http://www.itnose.net/detail/6642756.html 作业:开发一个支持多用户在线的FTP程序 要求: 用户加密认证 允许同时多用户登录 每个用户有自己的家目录 ...

  4. Java 多线程学习笔记:生产者消费者问题

    前言:最近在学习Java多线程,看到ImportNew网上有网友翻译的一篇文章<阻塞队列实现生产者消费者模式>.在文中,使用的是Java的concurrent包中的阻塞队列来实现.在看完后 ...

  5. Python学习--23 内建模块及第三方库

    本文将介绍python里常用的模块.如未特殊说明,所有示例均以python3.4为例: $ python -V Python 3.4.3 网络请求 urllib urllib提供了一系列用于操作URL ...

  6. Python学习--12 异常处理、调试

    异常捕获 语法格式: try: pass except xxx as e: pass except xxx as e: pass ... else: pass finally: pass except ...

  7. 前端组件化Polymer入门教程(3)——快速入门

    本系列主要翻译官方的教程,因为国内目前这方面的资料太少了,但也不一定和官网的一样,反正就是自己想到哪就写到哪. 如果我没有说明,默认情况下index.html始终包含这段代码,后面将不会再贴上来. & ...

  8. centos 修改时区

    # date 2014年 07月 22日 星期二 :: EDT # cat /etc/sysconfig/clock -------------------------- ZONE="Ame ...

  9. AR介绍

    AR介绍 AR全名扩增实境,是一种实时融合现实与虚拟的图像技术. AR技术的三板斧:感知(寻找目标定位位置-与环境交互),渲染(实现产品交互-与客户交互),追踪(捕捉目标运动轨迹-客户环境上下文). ...

  10. es简单介绍及使用注意事项

    是什么? Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎.无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进.性能最好的.功能最全的搜索引擎库. El ...