为什么D编程语言不能使用?

任何人使用编程语言D ?

为什么不是更受欢迎?

我疯狂的猜测是公司的钱。

D的创造者DigitalMars在当今这个时代并不是企业界的大玩家。

其目标受众最初是Java或C ++程序员。

但是一方面这个问题大多数是8到5个Java程序员不会投资于像D这样的东西,除非它是从顶层的命令,而顶层的人不知道D,因为它没有提到企业界。 相反,微软一直在推C#,它针对的是同一个用户,但是有一个很大的公司名称。

另一方面,C ++程序员是硬核,包括我自己在内,尽pipe我们认识到D会减less我们生活中的受虐狂,但是我们很痛苦:)虽然说实话,我一直在期待D,没有有机会使用它。

有两个标准库(D2>以及3或4个各不相同的破坏编译器<实现质量大大提高了>) ,但其他人已经提到过。

一旦你select了一个库<Phobos是唯一的事实上的D2标准库> (对我来说phobos),并且得到了一个主要工作的编译器,你发现D(语言)有许多小问题。 他们自己很小,但他们一起使D编程有点痛苦。

  • Unicode的处理方式有点奇怪 – UTF-8,UTF-16和UTF-32分别有三种不同的Unicodestringtypes:char [],wchar []和dchar [] <标准是char [ ],其中unicode存储编码为utf-8 – utf-8和codepoints(dchar)之间的转换需要在不同的地方< 迭代期间<代码点 > (有时是隐含的) – 不需要隐式内存分配> 。 然而char [i]会产生第i个字节,而不是第i个codepoint( 否则会产生隐藏的性能开销) …string也是可变的<D2string是不可变的> ,您必须自己实现copy-on-write。

  • 数组很奇怪。 有些是静态的,有些是dynamic的。 int [] x = null; 使x成为一个空数组。 用string作为关键字的文字关联数组(它是一个很好的特性)必须使所有关键字具有相同的长度,或者使用句法破解来解决<D2中修复的types推导问题> – 它的工作方式很糟糕。

  • 数组不是常规对象,也没有实例方法(例如没有indexOf) – 但是有一些奇怪的规则( 这是一个D特性 – 扩展方法/ UFCS) ,这些函数在范围内并且将数组作为第一个数组争论创造实例方法的幻觉…

  • 你有时可以调用方法,没有parens。 <特性( @property方法)>

  • 形成闭包或附加到对象(即方法)的函数与常规函数不同,相反,它们被称为委托,并且您必须意识到不同之处。 <函数指针类似于C,代表有一个额外的上下文指针>

  • 可以用x“40fe”定义文字string(char []),以指定组成utf-8数组的hex字节。 D网站说,指定一个非法的utf-8序列是允许的,但我的编译器不同意。 DMD 2.031或1.046不可重现,可能是PEBKAC>

  • 标准库模块(phobos)经常将语义上不正确的参数作为函数参数(例如,在char []中应该占用ubyte []),或者迫使您使用奇怪的约定( ubyte b; inputStream.read(b);而不是ubyte b = inputStream.readUByte();<std.stream已经过时,使用ranges / std.stdio>

  • 每个循环都有一个for-each循环,但是与Python甚至Java相比,语法会感到恶心: foreach(ubyte b, char c; "abcdef"){ ... }for(ubyte b, char c in "abdef"){ ... }会更好(虽然不是很多…)。 它有bc可选types推断。

  • 你不能做一个只读类的const class X {} ,因为“方法不能是const ”。 <在最新的DMD2中使用>

  • 演员的语法: ubyte u = cast(ubyte) 300; 太冗长了。 <按devise,帮助代码审查>

  • 您可以将无效的值转换为枚举types: enum X : ubyte {a=0, b=1}; X z = cast(X) 10; enum X : ubyte {a=0, b=1}; X z = cast(X) 10; 给出了没有错误 – z现在是10. <所以将写入一个铸造的指针。 按照devise,强制转换编译器检查>

  • 我得到的感觉是,如果我继续评估DI,只要你做X和Y,就会发现更多的小问题,但是我只是不想做X和Y …

  • 对于与“D”语言相关的内容,Google很难: http : //www.google.com/search?q= d+ modules <Solution>

首先:我所交谈的大多数软件开发人员都至less听说过D,并将它与您在问题中提到的基本属性(通常是C +应该首先实现的速度很快)进行精神联系。 这本身就是一个成功的水平,99%的编程语言所创造的永远不会达到。

虽然有一些原因,但是为什么它不在Java / Python / C#/ Ruby /等的联盟中。

  • 语言本身是一个很好的完成 – 而且是理智的–C ++的inheritance者。 但是和其他静态types的语言没有什么不同,真正引起人们的注意。 这对一个友好的“啊,这真是太好了”已经足够了,但是对于“gee!我不得不使用这个”。
  • 有没有杀手级的应用程序,需要你学习D.一个普通的乔程序员想要如此糟糕的工作,他经历了挑拣一种新的语言的麻烦。
  • JavaScript,Ruby和Python等dynamic编程语言已经占据了语言市场的一大块,使编译时types检查语言难以find受众。
  • 企业世界在很大程度上是JVM世界。 Java可能随时被replace为应用程序开发语言,但其后继者很可能会运行在JVM上 – 因为它是一个相当成熟和稳定的软件,具有大型社区和庞大的图书馆资源。 大多数新的JVM语言(如Scala)都与已经编写的Java代码兼容。

还有一个非常主观的观点:在开发人员社区喜欢查看新语言的部分,我感觉经典的C / C ++ / Java风格的语言已经过时了。

但是,所有这一切说,D看起来非常好,似乎解决了它坚定而快速地解决的问题。 没有理由为什么它不应该find它的利基。

对我来说,更广泛采用的一个主要障碍是语言仍然如此迅速地发展。 D1是一个相对保守的尝试,通过在过去的20多年中从Java和Python等语言中学到一些经验教训来创build更好的C ++。 这是一种很好的语言,但是它没有任何巨大的杀手function,所以转换成本足以阻止人们是可以理解的。

另一方面,D2仍然处于alpha阶段,但代表了更重要的创新。 它试图弥合function性和命令式编程之间的差距,其特征如下:

  1. 传递常量(从const /不可变对象可访问的任何东西本身是const /不可变的)。
  2. 纯粹的function。 你把一个函数标记为纯粹的,编译器强制它不能有外部可见的副作用。 但是,只要在纯函数之外不可见,它可以自由使用可变状态。
  3. 共享。 这还没有实现,但是想法是在线程之间默认所有的数据是非共享的,如果数据是共享的,编译器会自动插入内存隔离等等,并且让types系统防止意外共享。

D2还增加了一些function,使D对库编写者更友好,比如引用返回,别名(基本上是一个隐式的转换运算符),模板别名参数(基本上将任何编译时符号作为parameter passing给模板),模板约束(类似于C ++ 0x概念)和真正的闭包。

这里的信息是,给D时间。 D1是一个不错的,但相对保守的语言。 大多数真正令人印象深刻的杀手function在D2中,但仍然是alpha。

一般来说,没有成熟的图书馆和支持文件(大部分的工作是由志愿者完成的,然后离开)

另外,我认为最近Tango创造的分裂根本没有帮助D。

对我来说,这是缺乏高品质的IDE。 如果像Visual Studio甚至Code :: Blocks这样的IDE完全支持D,我会开始在心跳中使用它。

当你build立像C ++和Java这样的语言时,为什么还要麻烦换一种新的语言呢? 而且,C ++和Java已经发展了多年,有无数的库可以和它们一起使用。 没有多less人愿意投入时间为一种新语言重新创build这些图书馆,因为这将是一种重复的努力。

因为C ++程序员不相信他们需要别的东西。 D提供了很多很酷的东西,但是它并没有改变C和C ++对开发者来说足够的事实。 另外,我认为它被认为是一个“系统”编程语言,它被贴在D主页上让人们甚至在看它之前就会转身离开。

我可以想到几个原因:

  1. 用户群很小。 新语言难以获得足够的动力,让他们与老玩家竞争,因为程序员转向他们的动机不大。
  2. 较小的知识体(见前)。 很难find图书馆,代码示例,经验丰富的开发人员等。这在许多情况下抵消了语言本身必须提供的优势。
  3. 也许语言不是问题,而(另一种)语言不是我们所需要的。 D旨在通过语言特征实现的大部分内容可以用其他语言以图书馆forms实现。

我喜欢D,因为它是一个较低级别的(C / C ++级别)语言,具有许多我喜欢的C#中的约定和function。 这是一个很好的组合。 不过现在确实有很多缺点:

1)标准库拆分 – Phobos与Tangos拆分了在D中完成的所有代码。这可以在D 2.0中修复Phobos的改进,但是我认为这一切都持续到Digital Mars采用社区运行Tango作为官方标准。

2)版本分割 – D 1.0是编写代码的一个相当稳定和可靠的平台,但是D 2.0承诺许多新特性,其中一些突破。 这也是一个明显不稳定的平台。 在D 2.0稳定并发布之前,语言不会在哪里。

3)没有好的IDE – 那里没什么了不起。 Eclipse插件和一些半熟的编辑器存在,但没有真正的编码环境。 我认为这只是一个时间问题,因为许多好的开始都在那里,正在努力。

4)缺乏图书馆/杀手级应用程序 – 这是一个鸡/鸡蛋的情况。 D有一些伟大的库,特别是因为你可以很容易地包装任何用C编写的库。 实际上有很多好的D库,还有一些不错的应用程序。 我认为当上述问题得到解决后,更多的程序员会来到D,然后它将会拥有吸引更广泛基础所需的酷应用程序。

对我来说,D最令人兴奋的function是以UTF-8编码的能力。 那有多棒!

可能有其他语言允许使用国际字符(不是C ++!),但是我已经在C和C ++世界中,而D是我所知道的唯一支持UTF-8的语言。

当口音被删除时,find明确的符号名是非常累人的:döndür()和dondur()在土耳其语中有完全不同的含义:'return'和'freeze'。

考虑sıkıcı()与sikici(); 意思是“无聊”与[发誓的词]。

我认为如果国际性的支持被推进,D将会非常受欢迎,我将在土耳其D网站上做这个工作。

阿里

我的猜测是D被定位为“更好的C ++”,但是C ++足够好,并且具有巨大的惯性,所以D不会很大。

对于更高层次的编码,你已经有了比C ++或D更好的语言。

我用D.我喜欢的是快速的编译速度。 我有一个想法,我可以很快实现。 想象一下,编译速度大约是1秒。 (一个类似的程序在C ++中编译8秒)如果有人知道该怎么做,可以飞。 语言的灵活性是希望实现的许多次。 这发生在我身上,我想到了一个function,我试了一下,它被实现了。 有用的语言结构:foreach,模板,列表可以在C ++中指定/初始化,结构可以在其定义中初始化,自动types推断,易于初始化结构,编译时function评估,关联数组和dynamic数组内置为以及可以被closures的垃圾收集。

我可以添加有问题(如其他人已经提到):错误的链接器,缺less高质量的IDE,不是最好的debugging器(DDBG)(C ++debugging器更好),库比C ++更less,运算符重载更具限制性运算符可以重载),不支持多重inheritance(有mixin)。 请注意,C库可以使用,C ++也可以使用的限制(我还没有尝试过)。

我使用D作为控制台程序。

这个问题的答案总是归结为两件事

  1. 工具链,文档,标准库,第三方库正在build设中
  2. 已经有像C和C ++这样的语言,尽pipe可能不那么方便和容易,但可以充分完成工作

这两个都可以说是正确的。

我来自Java,对我来说D语言非常有吸引力。 我喜欢D的现代性和相对的简单性,以及它的力量。

D社区希望得到更广泛的接受是可以理解的。 如果你做出了美丽和酷的东西,你会想要认可,你想分享。 我很同情,但我个人并不担心有多less人使用D.只要社区足够大以保持项目的可行性,那么爱D的人就可以继续使用它。

出于这个原因,一次促销一次,不能伤害:)

我认为有几个问题:

  • Tango / Phobos split – 编译器编写者使用Phobos,但几乎所有人都更喜欢Tango,并最终使用它。
  • 缺乏一个伟大的编译器 – DMD是相当麻烦的,所有其他编译器使用相同的前端。 这很容易崩溃。 我真的希望看到dil(用D编写的D编译器)工作,但是在它将成为一个好的竞争对手之前,他们还有很多工作要做。
  • 竞争 – Java和C#是非常相似的,并有更多的支持,所以每个人都使用这些。

目前我正在研究这个问题,到目前为止,评估的最大障碍是缺乏对语言的明确指导。

过去,语言随书附带(当你需要大约80个软盘来安装一种语言的时候),然后是解释语言,Java和C#。 这些都具有良好的基于​​Web的指南,清晰易懂的文档或具有某种forms的智能化IDE。 所有这些资源(甚至只有其中的一个)都可以指出你所需要的任何方向,只要你有任何简单的问题(而且总是最简单的事情就是让你上路)。

D语言没有简单的参考指南。 正如在其他post中提到的,你不能很容易地谷歌(虽然'D编程'或'D语言'有时工作)。

我有一个例子是如何从string中去除标点符号,“string”对象暴露了什么方法(没有像D的javadocs这样的资源,所以需要谷歌它)。 事实certificate,我需要导入和使用std.regex,并且相当简单,但我仍然没有任何文档告诉我到底是什么string公开(或任何其他对象的事情)。

在一个相关的说明,不是专门关于D虽然(顺便说一句,这只能是我)。 在开始的时候,我依赖于真正了解我在里面使用的语法和库,现在我发现我通常只知道我使用的库的摘要,并使用intellisense或javadoc(或其他语言)细节。 没有简单引用的文件系统的任何语言都将处于劣势。

另一个原因可能是,与C ++不同,这个语言没有国际标准。 这有效地防止了第三方实施D语言系统。

我已经看了D,我喜欢我所看到的,特别是第2版。不幸的是,直到现在,似乎只有合理的Linux和Windows支持,但不适用于Mac OS X.在Mac OS X上,它远没有生产就绪,这是我的杀手。 太糟糕了,因为它真的看起来像本地应用程序开发的一个合理的select,甚至C库的集成对于我迄今为止所使用的内容来说都是非常简单的。

我一直在寻找像D. AC这样的东西,它有一些粗糙的边缘被剥离和现代化。 很多时候我已经安装并试图让D工作。 D不能很好地工作,它是一个移动的目标。 但是,真正的问题是它与传统C代码不兼容。 哦,你说呢? 不,不。 你还说呢? 不,不。 问题是虽然它将与C .o文件绑定,但.H文件不兼容。 这意味着我必须重新编写所有想要链接的标题,然后在将来更新.h文件时再将其转换为D格式。 这个过程不能自动化,而且很糟糕。 这是让我失望的主要原因。 也可以称之为Q或Frak,因为它与广告所涉及的C不相关。

我认为这是一个时机问题。 这是那些挑选新语言的解释和字节码语言的一天。 Python,JavaScript,Ruby,C#,Java,Scala,Groovy,PHP,ActionScript等,而不是潜入C ++的新竞争对手。

任何使用C或C ++的人都可能对C或C ++非常满意。 把他们从熟悉的生产环境中解放出来,让他们学习一种听起来像是碰撞C的语言,有什么吸引人的论点?

对我来说,这个语言不够反光。 它没有reflection,所以程序员不显示兴趣。 它不支持reflection,可能是由于它的机器依赖性。

如果您看到使用C#或Java开发的最新框架,则倾向于通过控制反转来支持dynamic。 IOC允许以XML /其他格式configuration系统,并在运行时创build对象。 如果支持反思,大部分创新是可能的。 DLL和可执行文件应该提供关于它自己的元信息。

类,函数,属性必须被钩住。 否则,我会放松对黑客的兴趣。

我不知道谁是市场化的Perl或Python或Ruby。 如果语言吸引黑客,他们倾向于在家里创build框架或应用程序,最终会吸引其他程序员。

可能值得一提的是,对于一个系统语言来说,find一个编译器是非常困难的,这个编译器可以让你编写系统代码,而不需要给出一个奇怪的,经常是神秘的错误消息。

就我个人而言,我正在为LLVM前端交叉手指,使其成为一个比停滞不前的GNU gdc更为有用的生物,以及笨重的Digital Mars dmd编译器。

仔细阅读D2,如果能够很好地实施,并且具有合理水平的工具支持,那么这应该是一个非常好的语言。

免责声明:我与D的经验仅限于看到几个例子,阅读维基百科页面和走廊谈话。

正如我在前面的评论中所说的那样,D似乎没有人会发痒。 但除此之外,像这样的垃圾:

注意:所有D用户都同意,通过下载和使用D,或阅读D规格,他们将在发送给Digital Mars的任何张贴或通过电子邮件发送的反馈中,通过版权或专利声明明确标识对知识产权的任何声明。

保证我不会阅读规范,或者做任何事情来促进它的使用。 很高兴能马上开始学习,呃?

I don't see in the example the site is illustring, any real noticable difference between it and C#. I think that C# is more clear and clean.

I don't see why I should use it instead and I don't figure out what benefit it offers…