Nis*_*nio 23 programming-languages d
想象一下,你有3个项目:
你有3个选择:
然后,你要求更多的智能程序员:在这个任务中,D能否给我一个显着的优势:模块化,错误修复,团队工作和机器效率?
dsi*_*cha 31
我认为,与其他更"传统"的静态类型语言相比,D具有以下优势:
疯狂强大的编译时间元编程设施.例如,签出std.algorithm或std.range在D2标准库中.std.parallelism很可能很快就会包含一个模块,如果/何时,它将是另一个很好的例子.这些设施足够强大,语言有时几乎感觉像鸭子类型,但具有静态类型语言的性能.另请参阅关于D元编程的SO问题: 可以使用D模板的示例
所述默认D2并发模型是基于消息传递.如果您没有以明显的,可迁移的方式破坏类型系统,则D2中的线程之间不能隐式共享数据.当然,如果你真的想要未经检查的数据共享,你可以通过强制转换来解决这个问题.例如,std.parallelism目前正在审查的模块就是为了获得踏板到金属的多核并行性.
D倾向于使简单的事情比C++或Java简单得多.(我对C#不太确定.)简单来说,我的意思是基本文件I/O或策略模式之类的东西不需要那么多的样板.事实上,我认为D的主要设计目标之一是从地球表面消除样板代码,因为在语言和标准库的设计中都非常强调避免对它的需求.
相对于动态语言,D有:
本机编译语言的性能虽然比你预期的方便得多,但主要是因为有很棒的元编程功能以及它们在标准库设计中的使用.
静态检查. 您的程序有一天不会崩溃,因为您错误输入了变量名称或尝试将字符串分配给整数.
做低级工作的能力.例如,除了几个内联汇编程序之外,D的垃圾收集器完全用D编写.
如果你想要C++的"强大"而不需要繁琐的语法,或者C语言的"强大"和有用的功能,如正确的字符串和类,我会说这是值得的.如果你喜欢拥有一个巨大的API(C#/ Java),D可能不会让你感到满意.还要确保使用D 1.0,因为库(wxD和其他GUI库)和编译器(GCD,LDC,任何非DMD)支持对D 2.0来说是令人震惊的,尽管该版本的语言是一个明显的改进.
我自己正在学习D,来自C/C++背景.D因为它的优雅而吸引我,它通过设计深思熟虑.在密集,深刻和黑暗的C++角落之后,感觉就像天堂一样.
对我来说,D的一大缺点是缺少图书馆.即使是标准库我也找不到很好的工作.语言很棒,图书馆还没有.你可以使用C库,这是一个大拇指.
虽然D似乎有许多知识和许多语言方面,但它不是C++的一半.所以我认为它的学习速度要快得多(肯定是因为90%来自C++或相关语言).所以学习语言应该是几周/几个月.
由于还没有很好的GUI工具,你可能想要用其他东西开发编辑器.另外两个项目非常适合D.
我只想说我昨天成为了一个 D 爱好者,当我知道它比 C++ 好多少时,我已经纯粹出于热爱而直接学习了两天 D。哦,它并不完美,但与 C++ 相比?没有比赛。Java 同上。3 天前,C# 是我选择的语言,但今天我认为它的排名下降了。
还没有将 D 用于任何严肃的工作,我可能会误会。但是,对于 C++ 普遍提出的每一个主要批评,从编译时间到糟糕的类型安全性,到维护头文件的麻烦,再到缓慢的编译,D 都有一个答案。D 不仅仅是一种进化的改进,它还具有世界流行语言中没有的创新:
scope(exit)会使异常安全代码更易于阅读和编写alias thisC++ 来制作智能指针?)lower_bound(blobCollection.begin(), blobCollection.end(), blob)对于编译器或搜索引擎库,D 显然更胜一筹。既然 D 与 C++ 如此相似,你就不必花很多时间学习它,为什么不呢?另外,从 C++ 移植小程序和库应该不难。我的印象是 GUI 绑定也在改进,所以现在也许 D 可以很好地用于文本编辑器。
不可否认,我对一切都不满意。它们仍然迎合 C 人群,所以你仍然需要用 填充你的switch语句breaks,static关键字被过度使用,令人困惑,lambdas 需要大括号和“返回”语句(与 C# 的更快x -> x+1语法相反),所有函数和 try/catch 都需要大括号,引用传递在调用站点是隐含的……但是 D 提供的东西太好了,不能错过。
但是当然,虽然 D语言很了不起,标准库也明显成熟了,但周边的工具可能不是那么好:IDE,对智能手机平台的支持等等。我尝试过的唯一 IDE,Visual D(IDE 插件) Visual Studio) 工作得很好,包括调试,它似乎与 Visual C++ 调试器一样有效,并且可以进入标准库(有趣!)。但是,代码完成还不能很好地工作。
与 C# 相比,D 在大多数方面都更好,但在动态链接和反射方面似乎很弱。例如,您的文本编辑器可以很容易地在 .NET 下拥有一个插件系统,但我对 D 不太确定。.NET 还提供运行时代码生成,而 D 则没有。但是,存在一个研究编译器来将 D 编译为 .NET 代码。鉴于 C++/CLI 已经编译为 .NET (C++/CLI),也许有一天人们可以将 D 用于托管代码和本机代码(当然,在托管领域的性能会受到很小的影响。)
与 C/C++ 和 .NET 的互操作性相当不错。D 应该通过extern (C++)C++ 名称修改(但哪个编译器的名称修改?)与 C++ 函数和单继承类进行互操作,同时您可以轻松创建可从 .NET 和其他语言调用的 COM 接口。