D语言之路-第1篇 库函数之争
来源:互联网 发布:virtualbox ubuntu 编辑:程序博客网 时间:2024/05/16 05:26
D语言有着两个不同的库,分别为Phobos[i]和Tango[ii]。这对于像我这样的初学者来说面临着一个选择,你是愿意和跳探戈呢(tango with D,事实上Tango的标准教材之一是《learn to tango with D》[iii],中译版《学习D语言的tango》[iv]),还是作为一颗忠实的卫星(Phobos即火卫一)。对于Java这种具有统一的标准库和运行平台的语言来说,这不成问题,但是D语言这个新锐语言在其发展的当前阶段,出现两个运行时语言库相与争锋、各有千秋的现象。
我们先来看看上场的两位选手都有什么优势。
Phobos优势:
1. Phobos官方认证的标准运行时库。Phobos最初由D语言之父WalterBright开发。事实证明,在任何情况下,有一个给力的老爸都不吃亏。Phobos由此顺利地被戳上了D语言官方认证库的招牌。
2. Phobos紧跟D语言规范的步伐,尤其是在D语言版本2推出之后,更是在对新特性的支持上把Tango牢牢甩在了脑后。作为一门发展速度极快的语言的库,轻装上阵的Phobos因其小而精,更因其官方标准库的身份,紧跟D语言的发展脚步,某种扮演着编程实例和测试用例的角色。
Tango优势
1. Tango开发更多由社区驱动。Walter Bright作为D语言的设计者和编译器的重要开发者之一,为D语言社区做出的贡献是无以伦比的,可是人家毕竟还带有digitalmars公司的老总的头衔。马云说,公司想挣钱是正常的,不想挣钱是不正常的,商业是门严肃的学问。以WalterBright为首的digitalmars公司会不会考虑到商业利益,利用对D语言和Phobos的控制权,把精力用在开发商用库函数之上,而间接阻碍了D语言的发展状态,适得其反地影响了用户的使用呢?这是一个值得思考的问题。
2. Tango具有比Phobos强大得多的功能,与Tango相比,Phobos更像是最新D语言编译器的unnittest。如果只使用Phobos,有一些Tango的拥趸们甚至觉得D语言编程的乐趣将难以维系。相比C++或Java来说,D语言的库函数支持仍非常不足,如果用Phobos来比较,那更是一毛之于九牛,也因此很大程度上造成了业界对D语言的观望态度。D语言社区也在致力于解决这个问题。
比较糟糕的是,Phobos和Tango两者不可得兼。这是因为两者核心系统函数的实现方式存在着的巨大的差异。我们都知道D语言的内存管理严重依赖于垃圾回收器。Phobos和Tango对于它们的实现竟然完全不同,这就导致了在D程序中无法同时使用两者。而且,两者想要完全融合或兼容,在短期之内完全看不到希望。在这种水生火热的情况下,tangobos诞生了。显然,它的爸爸是Tango,它的妈妈是Phobos,与所有不睦家庭的新生儿一样,他扮演着两者之间的粘合剂。它是将Phobos向Tango的移植的成果,有了他,在Phobos上开发的D程序大多能在Tango上运行。如果它是个人,那它更像母亲一点,因为tangobos基本上是Phobos的源码拷贝,除了修改了一些底层部分。
Phobos和Tango的分立是D语言发展到一定阶段的产物。我大言不惭地揣测,一方面是Walter Bright、Andrei Alexandrescu等人对于D语言和Phobos的控制过于强大;一方面是D语言新兴粉丝们对向D语言库中添加新功能的火热之情难以倾泻。在这种D语言库函数严重匮乏又急需发展的情况下,自然而然地催生了一个精小的官方库和一个粗犷的社区库的两立相争情况的出现。
然而,对于开发者来说,出现两个不兼容的开发库实在是一件大不幸之事。这种状况在可见的将来将无法彻底解决。理想情况应该是对D语言库进行某种划分。Java平台就按照适用的系统平台的不同,分为J2ME、J2SE、J2EE。按照这个思想,将库划分成最小语言支持库和扩展支持库。最小语言支持库包括垃圾回收器、多线程库、IO库等必不可少的核心底层支持,扩展支持库包含数据库、高级数学函数、图像处理等高级功能。两者各司其职,互为依赖:精英们继续指向天空划出优雅的轨迹,而大众们则跳起欢快的探戈,他们一起庆祝D语言的成长。
本文章欢迎转载,请保留原始博客链接http://blog.csdn.net/fsdev/article
[i]http://www.digitalmars.com/d/2.0/phobos/phobos.htmlD
[ii]http://www.dsource.org/projects/tango
[iii]http://books.google.com/books/about/Learn_to_Tango_with_D.html?id=xrM2r3gOWfQC
[iv]http://yntcsb.iteye.com/blog/403374
- D语言之路-第1篇 库函数之争
- 杂记之C语言之库函数assert
- C语言编程常见问题解答之标准库函数(1)
- InstallShield内部库函数之1 库函数综述
- 第18节 C语言之字符串与常见的字符串库函数
- C语言str系列库函数之strtok()
- C语言编程常见问题解答之标准库函数(2)
- c语言库函数【string.h】之strlen_(const char * str)
- C语言标准库函数之qsort排序函数
- linux中c语言的扩展库函数之文件操作
- C语言str系列库函数之strspn()、strcspn()和strpbrk()
- C语言之贪吃蛇(curses库函数)
- linux 中文件编程之C语言库函数
- c语言库函数之strrch()--获取路径中的basename
- C语言库函数(D类字母)
- 3D游戏之路--第一篇—DirectX介绍
- 我的人生历程之第一篇:游戏篇(d)
- C++学习之库函数<algorithgm>(1)
- 来CSDN后的first blog
- 什么是软件的α版、β版
- Java+6+JVM参数选项大全(中文版)
- ANDROID+后台Task+Notification++Intent+实例对象的配置
- 本账号不再维护,找我请移步。。。
- D语言之路-第1篇 库函数之争
- Combine algorithm
- 贝塞尔曲线算法的Javascript实现
- ImageButton去边框&Button或者ImageButton的背景透明
- Javascript输出1到100的整数,不用循环,不用递归
- An Introduction to Data Mining
- #XML之路#XSD——complexType
- [Ubuntu + VNC] 配置VNC服务, 配置VNC服务在开机时启动
- 用命令制作Lion的恢复分区