[闲聊] 关于D语言

楼主: wudidog (呜啦啦)   2017-07-11 20:03:27
小弟PO在这里是因为内容部分与C/C++有关
如有违反板规,还请告知
一直有个疑问想询问板上有用过D语言的前辈们
D语言目标是成为C++的继任者
发展D语言的创始人之一,就是撰写《modern c++ design》这本玄学书的大师
Andrei Alexandrescu
个人用D语言以后,发现这个语言真的不错用
不但发展C++的理念
还弥补一些C++安全性上的缺点
也更强化物件导向的概念
编译后的performance和C++差不多
程式消耗的memory也和C++差不多
对工程师而言,在学习曲线上,负担也非常小 (语法非常相似)
编译环境上还有强大的GNU compiler支持
一些新的C++书籍也都有作者推荐使用D语言
虽然新兴的程式语言,资源不比老牌程式语言
但D发展的速度甚至比Go这类更年轻的程式语言慢
个人觉得D优点蛮多,但发展已经十几年了,怎么还是这么少人用呢?
C++和D语言应该是最相近的了
官网上给C++使用者的使用手册只有短短15页
( https://dlang.org/cpptod.html )
是什么原因让C++的使用者不愿意学习D呢?
作者: james732 (好人超)   2017-07-11 20:07:00
问题可能是:为什么要学?
作者: Schottky (顺风相送)   2017-07-11 20:07:00
想成为 C/C++ 继任者的语言何其多同意一楼,至少要有一个杀手级应用,某一个大型专案采纳这样这个专案的开发者们才会去学习这个语言并放出资源
作者: Neisseria (Neisseria)   2017-07-11 20:19:00
就没有 killer application 啊,无法吸引更多使用者后续就会造成函式库少,线上文章少,变成恶性循环同意楼上的看法
作者: s25g5d4 (function(){})()   2017-07-11 20:25:00
我感觉 rust 都比他夯
作者: Schottky (顺风相送)   2017-07-11 20:37:00
站在 project leader 的角度而言,他是有权选择 D 语言但之后要召募新血时,要求条件是会 D 语言,人才不好找以前战斗机的航电系统用 ADA,后来改用 C/C++ 就是这原因
作者: Killercat (杀人猫™)   2017-07-11 20:45:00
其实会写C++的人 对语言学习应该都没啥障碍就是
作者: Schottky (顺风相送)   2017-07-11 20:46:00
楼上讲的这件事我有很深刻的体会在大学时同班同学都很强,一两天内上手新语言毫无问题工作时才知道这是很稀有的超能力...
作者: james732 (好人超)   2017-07-11 20:49:00
可是我写惯C/C++写script语言就觉得很卡orz变量不用先宣告,函式参数与回传不用写Type就很不惯orz
作者: Schottky (顺风相送)   2017-07-11 20:51:00
不用先宣告会让我搞不清楚变量的 scope ...
作者: descent (“雄辩是银,沉默是金”)   2017-07-11 21:56:00
你说的那些特点, 可以用个小例子来说明吗?只有文字叙述, 感觉不出来威力。
作者: soheadsome (师大狗鼻哥)   2017-07-11 22:21:00
rust++
作者: littleshan (我要加入剑道社!)   2017-07-12 00:22:00
板友提的都是原因,但有几个因素导致go抢了更多user1. go在设计上就非常适合开发后端D虽然也OK,但go一开始就给了goroutine与channel尽管go会有比较多的gc,但偏偏这对后端来说可接受2. go直接抛弃了generics与exception这几项困难的功能拿掉这些功能让语言变得容易实作同时使用者的学习曲线也大幅降低D 相较与 C++ 来说当然是简单很多但go的学习曲线是script等级的,团队更容易导入3. 最后是go有google大神在背后支援一开始toolset就满完整的,改版速度也快相较之下,尽管D已经出现了很久却一直摆脱不了“这工具是否已经稳定”的疑虑这对开发团队导入是非常大的阻碍
作者: steve1012 (steve)   2017-07-12 00:53:00
要是想写更快会想写Python 想要效率会直接写c++ 不知道特别用d的purpose
作者: PkmX (阿猫)   2017-07-12 01:55:00
我也觉得rust未来发展性比D好很多...
作者: freeunixer (御剑客)   2017-07-12 09:56:00
go 正在思考什么样的泛型是实用又好用的,也许将来会有C 可以用宏的方式于不同 type 引入不同实作的定义大家说泛型难用,事实上 go 仍然因没这个被靠杯到快死至于 D,使用者不活跃,而且没有"别人全被它甩尾"的领域有些企业用 erlang,在它的强项,别人都看不到它的车尾一个语言要红,一是它能赢别人一段,二是用它的公司很火rust 是它选择另一个路,而这条路是某类少数人才适合走"人普遍都有某些倾向",比如说,好吃懒做,混吃等死.你今天说有样东西适合自律甚严,意志过人的人来做,你觉得下场会怎样?大部分的人做事都是"做事只求六十分,年薪必求破百万",你定一个太龟毛的门槛,事实上,大部分死老百姓都没挡头
作者: Neisseria (Neisseria)   2017-07-12 10:54:00
Rust 真的蛮硬派的,后来都不太碰这个语言 冏rz
作者: johnlinvc (阿翔)   2017-07-12 11:00:00
LLVM 作者的 Swift 也不错,可以写 Apple 生态圈
作者: CoNsTaR ((const *))   2017-07-12 11:29:00
因为c++使用者多社群大流通广啊你说你懂c++人家还知道你个大概你说你懂D???然后呢???根本没必要啊…如果要自己学爽的精进当然ok但是做事还是看环境做决定吧而且学更高阶语言是为了增加自己写程式的智慧而不是把自己绑在高阶语言上,看不起低阶语言学了高阶语言之后再回去用那些比较低阶的语言我相信你考虑的层面和视野一定也和之前不同了我想这才是学高阶语言最大的意义
作者: steve1012 (steve)   2017-07-12 14:38:00
跟台企没关吧 其实很多公司都有热门较多人用的语言 你要跟别人合作自然会配合别人
作者: freeunixer (御剑客)   2017-07-12 14:40:00
C# 是你的选择. .net core 已经可以在 linux 上 runObject-C、Swife 也都可以在 linux 上 run
作者: cs8425 (cs)   2017-07-12 15:12:00
稍微看了一下 跟go有点像 那怎不用go就好@@?
作者: littleshan (我要加入剑道社!)   2017-07-12 16:20:00
楼上完美示范go为何抢走D user XD另外,你想要兼顾效能内存底层操作和跨平台那C++以外的答案其实就是rust说它不符合你的理念其实很矛盾
作者: freeunixer (御剑客)   2017-07-12 17:46:00
rust 就像三年前的 swift 还没转大人,都不要 call lib说有多爽都随便.一但要 call system lib,就硬不起来了swift 能转那么快,是因为它的靠山够高够大座, rust...学东西,基础跟实用性要兼顾,要是你已经是武林高手,你要花多少时间去练九阳神功或紫阳神功都行,刚要开始入门拜师,那别去找一个没举世高手成名的绝技,想也知道这种赌人品的事少做,成高手的机会才会大一点.现在想玩 rust,你只有去刻 servo 这 101 个选择了...
作者: littleshan (我要加入剑道社!)   2017-07-12 20:29:00
或是刻 dropbox 的底层
作者: freeunixer (御剑客)   2017-07-12 20:54:00
想太多,人家跟 google 一样自己设计硬件去存放资料,要将内存快取最小化,又没有 google 有坚强 C++ 实力所以人家找 MIT 出身的一把折凳用接近 C++ 的 rust 刻我想请问,以上在座的,哪位自己设计硬件、开发储存系统或者再加上是 MIT、CMU 等 CS 名校出身,有本钱耍任性?
作者: littleshan (我要加入剑道社!)   2017-07-12 22:29:00
我从来没说rust很简单,只说了它有C++的效能而已要兼顾效能内存底层操作本来就是高成本不管哪个语言都一样的,即使是C++dropbox大部份后端用go,少部份用rust这点可以说明“接近C++的效能”通常不是主要考量
作者: Neisseria (Neisseria)   2017-07-13 09:26:00
Rust 没那么难写,只是把一些常见错误放到编译期强迫你写到对才编译通过。其实就是一些 C/C++ 常见的错误,用编译器“提醒”你现在 Rust 的问题是函式库不够丰富,吸不到一般使用者一些会自己写函式库的公司已经在用 Rust 写东西了补充:其实只有 ownership 要适应一下而已
作者: pnpncat (meow)   2017-07-13 14:01:00
rust的安全检查是在编译期呀,而且因为安全规范多,很多问题都早早预防了,编译也不慢。认真来说,它既没牺牲执行期效能也没牺牲多少编译期效能,而是把时间成本转嫁到程式设计师动手写作的时期了吧?
作者: james732 (好人超)   2017-07-13 14:11:00
结果这篇大家都在讲RUST XD
作者: Neisseria (Neisseria)   2017-07-13 15:03:00
要用简单的工具写服务器,用 Go 就好了,资源还比较多但是 Go 和外部 C 程式桥接比较不好,大概 Google 也不注重这块。要写元件的话,Rust 的确可以考虑
作者: Hazukashiine (私は幸せです)   2017-07-13 15:58:00
可是我还是觉得 C 语言比较棒 ( 被揍
作者: red0210 (My Name Is Red)   2017-07-13 17:45:00
写 C++ 还用 array? 可以用 std::vector 啊
作者: elements (Helianthus annuns)   2017-07-13 18:32:00
rust 才是真的
作者: james732 (好人超)   2017-07-14 09:26:00
为什么我build一个只有空main的rust产生3MB的执行档orz
作者: Chikei ( )   2017-07-14 15:47:00
rust默认是static link
作者: uranusjr (←這人是超級笨蛋)   2017-07-15 00:42:00
http://d.pr/UH3sLt不过 3MB 有点夸张, 你是 Windows?
作者: Killercat (杀人猫™)   2017-07-15 00:54:00
ldd下去就知道原因啦 XD阿抱歉 应该是nm, ldd是拿来看动态连结的
作者: james732 (好人超)   2017-07-15 06:06:00
我是用Linux(ubuntu)按照官网安装rustc试着编译的试过用nm跑出来的symbols超多
作者: littleshan (我要加入剑道社!)   2017-07-15 10:37:00
你可以用 -C prefer-dynamic 切换到动态连接但部署时就要自己把符合版本的runtime一起发出去然后D没有比较好,gdc默认选项编出的hello world是6M这类新语言默认用static link很正常因为不是每个环境都有装他们的runtime
作者: freeunixer (御剑客)   2017-07-15 17:30:00
作者: uranusjr (←這人是超級笨蛋)   2017-07-17 02:44:00
用大版号速度来判断悲剧也是满好笑的
作者: CoNsTaR ((const *))   2017-07-17 08:03:00
说实话,一天到晚改来改去的语言才悲剧吧…
作者: Killercat (杀人猫™)   2017-07-18 08:13:00
还没稳定的语言这挺正常的 看看那个python2->3 XD连无法向后相容这种糗事都发生了 还一堆人转不过去但是我还是得说,这其实挺正常的,没那么严重
作者: uranusjr (←這人是超級笨蛋)   2017-07-18 13:57:00
无法向后相容不是糗事吧, 永远无法抛弃向后相容才是悲剧维护过任何一个大型专案就知道这只是正常的取舍

Links booklink

Contact Us: admin [ a t ] ucptt.com