想象一下,你有3个项目:
您有3个选择:
然后,你要求更多高级程序员:在这个任务中,D能否给我一个显着的优势:模块化,错误修复,团队工作和机器效率?
答案 0 :(得分:30)
正如我所看到的,与传统的“传统”静态类型语言相比,D具有以下优势:
疯狂强大的编译时间元编程设施。例如,请查看D2标准库中的std.algorithm
或std.range
。很快就会包含std.parallelism
模块,如果/何时,它将是另一个很好的例子。这些功能足够强大,语言有时感觉几乎是 duck-typed ,但具有静态类型语言的性能。另请参阅关于D元编程的问题:Examples of what D’s templates can be used for
默认D2并发模型基于消息传递。如果您没有以明显的,可迁移的方式破坏类型系统,则D2中的线程之间不能隐式共享数据。当然,如果你真的想要未经检查的数据共享,你可以通过强制转换来解决这个问题。例如,目前正在审核的std.parallelism
模块就是为了获得踏板到金属的多核并行性。
D倾向于使简单的事情比C ++或Java 简单得多。 (我对C#不太确定。)简单来说,我的意思是基本文件I / O或策略模式之类的东西不需要那么多的样板。事实上,我认为D的主要设计目标之一是从地球表面消除样板代码,因为在语言和标准库的设计中都非常强调避免对它的需求。
< / LI> 醇>相对于动态语言,D有:
本机编译语言的性能虽然放弃了比预期更少的便利性,主要是因为有很棒的元编程功能及其在标准库设计中的应用。 / p>
静态检查。您的程序有一天不会崩溃,因为您错误输入了变量名称或尝试将字符串分配给整数。
执行低级别工作的能力。例如,除了几个内联汇编程序之外,D的垃圾收集器完全用D语言编写。
答案 1 :(得分:7)
如果你想要C ++的“强大”而不需要繁琐的语法,或者C语言的“强大”和有用的功能如正确的字符串和类,我会说这是值得的。如果你喜欢拥有一个巨大的API(C#/ Java),D可能不会让你感到满意。 同时确保使用D 1.0,因为库(wxD和其他GUI库)和编译器(GCD,LDC,任何非DMD)支持令人骇人听闻的D 2.0,尽管该版本的语言是一个明显的改进击>
答案 2 :(得分:7)
我自己正在学习D,来自C / C ++背景。 D因为它的优雅而吸引我,它通过设计深思熟虑。在密集,深刻和黑暗的C ++角落之后,感觉就像天堂一样。
对我而言,D的一大缺点是缺乏图书馆。即使是标准库我也找不到很好的工作。语言很棒,图书馆还没有。你可以使用C libs,这是一个大拇指。
虽然D似乎有许多知识和许多语言方面,但它不是C ++的一半。所以我认为它的学习速度要快得多(肯定是因为90%来自C ++或相关语言)。因此,学习语言应该是几周/几个月。
由于还没有很好的GUI工具,你可能想要用其他东西开发编辑器。另外两个项目非常适合D。
答案 3 :(得分:4)
我想说我昨天成了D爱好者,当我知道它比C ++好多了,而且我一直在纯粹的爱情中学习D两天。哦,它不完美,但与C ++相比?没有比赛。同样适用于Java。截至3天前,C#是我选择的语言,但今天我认为它已经降级了。
尚未将D用于任何认真的工作,我可能会弄错。但是对于C ++的每一个主要批评都有答案,从编译时间到糟糕的类型安全,到维护头文件的头痛,以及编译速度慢。 D不仅仅是一种进化改进,它还具有世界上任何一种流行语言都没有的创新:
scope(exit)
使异常安全代码更易于读写alias this
来实现制作智能指针a C ++?)lower_bound(blobCollection.begin(), blobCollection.end(), blob)
中那样重复自己对于编译器或搜索引擎库,D显然会出类拔萃。由于D与C ++非常相似,你不必花费大量时间学习它,为什么不呢?另外,从C ++移植小程序和库应该不难。我的印象是GUI绑定也在不断改进,所以如今D可能适用于文本编辑器。
不可否认,我对一切都不满意。他们仍然在迎合C人群,因此您仍需要用switch
填充breaks
语句,static
关键字过于混乱,lambdas需要括号和“返回”声明(与C#更快的x -> x+1
语法相反,所有函数和try / catches都需要大括号,在调用站点隐含了pass-by-reference ...但D提供的内容太好了,无法传递。
但是,当然,虽然D 语言显然非常棒,标准库显然已经成熟,但周围的工具可能不太好:IDE,支持智能手机平台等等。我试过的IDE,Visual D(Visual Studio的IDE插件)工作得很好,包括调试,它看起来和Visual C ++调试器一样,并且可以进入标准库(好玩!)。但是,代码完成工作还不是很好。
与C#相比,D在大多数领域更好,但在动态链接和反射方面似乎很弱。例如,您的文本编辑器可以很容易地在.NET下使用插件系统,但我不太确定D. .NET还提供运行时代码生成,而D则不提供。但是,存在research compiler以将D编译为.NET代码。鉴于C ++ / CLI已经编译成.NET(C ++ / CLI),或许有一天,人们可以同样很好地使用D来管理托管和本机代码(当然,在托管土地上的性能影响很小。)
与C / C ++和.NET的互操作性非常不错。 D应该通过extern (C++)
和C ++名称修改(但编译器的名称修改?)与C ++函数和单继承类进行互操作,同时可以轻松创建可从.NET调用的COM接口和其他语言。
答案 4 :(得分:1)
我会为效率提供+1,为模块化提供0(无专业或无效),为团队工作提供0,为修复错误提供巨大的-1。
-1来自这样一个事实:D实际上并没有足够的使用来使库功能完整且没有bug。在这种情况下,您将通过修复第三方代码来节省时间。对于不存在良好的D调试器,也是一个巨大的-1。
通常情况下 - 作为一名埃菲尔程序员 - 我会给D一个+1来进行合同设计,但这并不是在标准库中不经常使用,并且绝对不会被95%的其他库使用。所以你不会从中获得很多好处。
答案 5 :(得分:0)
我认为D绝对最适合编译器,不太适合其他两个任务。