DLang vs GoLang
发布时间:2020-12-16 19:00:12 所属栏目:大数据 来源:网络整理
导读:这次我打算好好写,因为最近 有点闲 . 首先介绍两种语言: DLang 如果你不介意阅读英文,那么DLang的官网有一份非常好的介绍,简单概括下就是 C太古老了,缺乏很多新的特性. C/C++太复杂了,但是语言标准就有数百页之多. C++中有很多常用的,好的特性是通过标准库实
这次我打算好好写,因为最近
首先介绍两种语言: DLang 如果你不介意阅读英文,那么DLang的官网有一份非常好的介绍,简单概括下就是
对我来说,DLang意味着:
GoLang
我没有找到关于Go语言设计哲学的官方文档,Ken,Rox,Rob等人对于这门语言的讨论和介绍散见于他们的博客和群组里.
如果你有兴趣了解这门语言,官网上有一片
洋洋洒洒的Spec,
我不太想四处拷贝整理出他们的设计思想,在这里只说说我看到的:
对我来说,GoLang意味着:
可以看到,二者的目标都是替代C++,目标都是简化软件开发. 不过二者的设计思想却是截然相反.
(*二者的目标在某种程度上不太一样,虽然Go号称是泛用的语言,但它依然主要是面向网络编程)
很久之前Group上有一篇讨论
DvsGo的帖子,可以作为参考.
Language Performance
对我来说,运行速度是最重要的内容之一,因此首先来看一组对比.所有的语言采用完全相同的代码,没有特别优化.
三组测试分别是N体问题(测试数值计算速度),素数(测试整数/逻辑处理),BT(测试内存性能). 其中Go没有编译选项.
每个测试运行5次,取最优. 左边是时间,右边是内存.
可以看到D-DMD和Go表现相近. 不过基于LLVM的ldc表现相对好些.(*go没有基于llvm的版本)
但二者表现都没法与GCC相比. 内存使用上则是FreePascal占优,这是来自它标准库的特别处理方法.
不过根据前面提到的
909Bug,Go在32位系统下表现会更差.
Language Style
代码是K-Means,二者用了类似的算法.
GoLang:
DLang:
语法很大程度上基于个人感受,不过可以看到在普通的环境下并没有什么大的差别. 不过问题在与C的交互上:
首先看看Go下使用GSL的API:
不但需要引入unsafe包,并且需要用大量的类型转换(注意第32行). 这点非常容易出错.
D上则好了很多,只需要简单的声明,变量是可以互换的. 下面是一个lapack的声明.
入门/深入阅读资料
D只有两本书比较权威: <D Programming Language> <D Spec>
剩下的只有D的官网和论坛. 不过好在<DPL>一书是D语言作者编写的,内容也非常全面.
Go语言最近有了不少书,包括中文的<Go语言,云动力>,<Go语言编程>等,英文版有<The Way to Go>,<Go Programming>等.
不过大部分的质量都不高,仅仅停留在介绍语法,介绍标准库,贴几个示例程序而已. 只能作为入门读物.
最后,说个我
自己的小例子.
前阵子需要做文字聚类,于是随手选了Andrew Ng教授01年的文章实现了下,最开始用的是Go.
最后整个工程超过了1万行. 分成8个包,每个包平均由5个文件组成.
测试数据用了1000单词,2万文章.
结果运行时间超过了48小时. 内存占用高达1.24GB.(编译器: Go1.0.2)
随后我用D重写了整个工程,最终代码只有4000行. 在同样的机器,同样的数据上做了测试,
只花费了25分钟. 内存占用只有124MB.(编译器: DMD)
二者均没有使用并发. 但都很容易实现. Go里可以简单地 go func来实现. D里可以用range和parallelism.map/reduce.
可以看到,相比于测试里的表现,实际应用里二者差距还是非常大的. 在更大的数据上(12万文章),Go消耗了接近4GB内存,
而D则只有数百兆.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |