想象一下你有三个项目:
- 一款针对程序员的文本编辑器
- 一个编译器
- 以及一个可用于至少3种文件类型(html, .xls 和 pdf)的搜索引擎库。
你有以下三个选择:
- C++
- Java
- 以及C#
- 或者您可以探索使用D语言的替代方案。
然后,你向更有经验的程序员询问: D语言在这项任务中能否为我带来显著优势,尤其是在模块化、错误修复、团队合作和机器效率方面?
想象一下你有三个项目:
你有以下三个选择:
然后,你向更有经验的程序员询问: D语言在这项任务中能否为我带来显著优势,尤其是在模块化、错误修复、团队合作和机器效率方面?
极其强大的编译时元编程功能。例如,查看D2标准库中的std.algorithm
或std.range
。 std.parallelism
模块很可能很快就会被包含进来,到那时它将是另一个很好的例子。这些功能足够强大,以至于该语言有时感觉几乎是duck-typed(鸭子类型),但又具备静态类型语言的性能。还可以参考关于D元编程的SO问题:Examples of what D’s templates can be used for
默认的D2并发模型基于消息传递。如果您没有以明显且可搜索的方式破坏类型系统,则在D2中线程之间不会存在数据的隐式共享。当然,如果您真的想要无限制地共享数据,可以通过强制转换来打破这种限制。例如,当前正在审核中的std.parallelism
模块就是这样做的,以获得最佳的多核并行性。
D倾向于使一些简单的事情比C ++或Java简单得多。 (对于C#,我不太确定。)这些简单的事情包括基本文件I / O或策略模式,不需要太多模板文件。实际上,我觉得D的主要设计目标之一是从地球上消除样板代码,因为避免需要它在语言和标准库的设计中得到了很大的强调。
具备本地编译语言的性能,同时放弃的便利性明显较少,这主要是由于其惊人的元编程功能以及其在标准库设计中的应用。
静态检查。你的程序不会因为打错变量名或试图给整数类型赋予字符串而在某一天崩溃。
能够进行低级别的工作。例如,除了一些小块的内联汇编代码之外,D语言的垃圾回收器完全是用D语言编写的。
我自己正在学习D语言,来自于C/C++背景。D语言吸引我的是它的优雅和深思熟虑的设计。在经历了深入黑暗的C++角落之后,这感觉就像天堂。
对我来说,D语言的一个大缺点是缺少库。即使是标准库,我也觉得不太好。语言很棒,但库不行(至少现在还不行)。不过你可以使用C库,这是一个大拇指。
尽管D似乎有许多技巧和语言方面,但它只有C++的一半。因此,我认为学习速度明显更快(肯定是因为90%来自C++或相关语言)。所以学习这门语言应该只需要几周/几个月。
由于GUI的工具还不太好,您可能希望在其他语言中开发编辑器。另外两个项目非常适合使用D语言。
scope(exit)
使得编写安全异常代码更加易读易写alias this
将智能指针制作成类似于C ++的形式?)lower_bound(blobCollection.begin(), blobCollection.end(), blob)
那样重复自己extern (C++)
和 C++名称缩短(但是是哪个编译器的名称缩短?)与C++函数和单继承类进行互操作,同时您可以轻松地创建可从.NET和其他语言调用的COM接口。对于效率,我会给予+1的评价;对于模块化,我不偏向任何一方,评价为0;对于团队合作,我也会给予0的评价;但是在修复错误方面,我会给予巨大的-1分。
这个-1分是因为D语言的库并没有被广泛使用,导致其功能不够完整且存在bug。在这种情况下,你总是需要花费时间来修复第三方代码。此外,由于缺乏一个好的D调试器,我也会给予巨大的-1分。
通常情况下,作为一名Eiffel程序员,我会因为D具有按契约设计的特性而给予+1的评价,但是这种特性并未在标准库中得到全面应用,并且绝大部分的附加库也没有使用它,因此你将无法从中获得很多好处。
我认为D语言最适合编译器,而不太适合另外两个任务。