Programming languages 值得努力学习D吗?

Programming languages 值得努力学习D吗?,programming-languages,d,Programming Languages,D,假设您有3个项目: 程序员的文本编辑器 编译程序 以及一个搜索引擎库,其中包含至少3种类型的文件:html、.xls和pdf 您有3种选择: C++ 爪哇 和C# 或者你也可以探索用D来做这件事的替代方法 然后,你会问更聪明的程序员:在模块化、bug修复、团队合作和机器效率方面,D能给我一个在这项任务中的显著优势吗使简单的事物比C++或java 简单得多。(我对C#不太确定)简单来说,我的意思是像基本文件I/O或策略模式这样的东西几乎不需要那么多样板文件。事实上,我觉得D的主要设计目标之

假设您有3个项目:

  • 程序员的文本编辑器
  • 编译程序
  • 以及一个搜索引擎库,其中包含至少3种类型的文件:html、.xls和pdf
您有3种选择:

  • C++
  • 爪哇
  • 和C#
  • 或者你也可以探索用D来做这件事的替代方法

然后,你会问更聪明的程序员:在模块化、bug修复、团队合作和机器效率方面,D能给我一个在这项任务中的显著优势吗在我看来,D比更“传统”的静态类型语言有以下优势:

  • 功能强大的编译时元编程工具。例如,检查D2标准库中的
    std.algorithm
    std.range
    。一个
    std.parallelism
    模块很可能很快就会被包含进来,如果/当它被包含进来时,它将是另一个很好的例子。这些功能非常强大,以至于该语言有时感觉几乎是duck类型的,但具有静态类型语言的性能。另请参见关于D元编程的SO问题:

  • 默认D2并发模型基于消息传递。如果您不以明显的、可升级的方式破坏类型系统,那么D2中的线程之间就不会有隐式的数据共享。当然,如果您真的想要未经检查的数据共享,您可以通过强制转换来打破这一点。例如,目前正在审查的
    std.parallelism
    模块就是这样做的,以实现金属多核并行

  • d趋于<>强>使简单的事物比C++或java 简单得多。(我对C#不太确定)简单来说,我的意思是像基本文件I/O或策略模式这样的东西几乎不需要那么多样板文件。事实上,我觉得D的主要设计目标之一是从地球上消除样板代码,因为避免样板代码的需要在语言和标准库的设计中都得到了高度强调

    相对于动态语言,D具有:

  • 本机编译语言的性能,同时放弃了远低于您预期的便利性,这主要是因为可怕的元编程工具及其在标准库设计中的使用

  • 静态检查。您的程序不会因为错误输入变量名或试图将字符串分配给整数而有一天崩溃

  • 做低级工作的能力。例如,除了一些内联汇编程序之外,D的垃圾收集器完全是用D编写的


  • 我自己是在学习C的过程中,来自C/C++背景。我对它很感兴趣,因为它的优雅,经过深思熟虑的设计。在密集、深、暗的C++角落后,感觉就像天堂一样。

    对我来说,D的一大缺点是缺少库。即使是标准库,我也觉得做得不好。语言很棒,图书馆还没有。不过,您可以使用C库,这是一个很大的优势

    虽然D似乎有很多知识和很多语言方面,但它不是C++的一半。所以我认为学习速度快得多(肯定是因为90%来自C++或相关语言)。因此,学习这门语言需要几周/几个月的时间


    由于还没有很好的GUI工具,您可能需要在其他地方开发编辑器。另外两个项目非常适合D。

    我认为效率为+1,模块化为0(不赞成或反对),团队合作为0,bug修复为-1

    1源于这样一个事实,即D的实际使用量不足以使库功能完整且无bug。在这种情况下,您将通过修复第三方代码来节省时间。对于不存在好的D调试器来说,这也是一个巨大的-1


    通常,作为一名埃菲尔程序员,我会给D a+1作为合同设计,但这并不是标准库中经常使用的,95%的附加库绝对不会使用。所以,你不会从中得到很多好处。

    < P>我认为D最适合编译器,不太适合其他两个任务。

    < P>我想说我昨天成为了一个D爱好者,当我知道它比C++好多少时,我已经从纯粹的爱中直接学习了两天。哦,这不是完美的,但与C++相比呢?没有竞争。Java也是如此。三天前,C#是我的首选语言,但今天我认为它已经下降了一个等级

    我还没有把D用于任何严肃的工作,我可能会弄错。但是D对每一个针对C++提出的主要批评,从编译时间到不良类型安全,到维护头文件的头痛,到编译速度慢都有一个答案。D不仅仅是一种进化改进,它在世界流行语言中都没有发现创新:

    • 据说它拥有世界上最快的编译器之一
    • 您可以使用try/catch/finally和RAII,但是
      scope(exit)
      使异常安全代码更易于读写
    • <>你可以定义编译器可以内嵌的闭包(任何C++ 11编译器都这样做吗?我不确定,我需要在Visual C++ 2008上粘贴,因为需要支持Windows CE)
    • 垃圾收集是标准的,但是可选的,所以您可以编写具有低延迟保证的程序