C_and_CPP 板


LINE

小弟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呢? --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.135.196.10
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1499774611.A.334.html
1F:推 james732: 问题可能是:为什麽要学?07/11 20:07
新语言的开发、维护成本不一定比旧语言高 有时候这就是一种学习动机了
2F:→ Schottky: 想成为 C/C++ 继任者的语言何其多07/11 20:07
3F:→ Schottky: 同意一楼,至少要有一个杀手级应用,某一个大型专案采纳07/11 20:08
4F:→ Schottky: 这样这个专案的开发者们才会去学习这个语言并放出资源07/11 20:11
5F:推 Neisseria: 就没有 killer application 啊,无法吸引更多使用者07/11 20:19
6F:→ Neisseria: 後续就会造成函式库少,线上文章少,变成恶性循环07/11 20:19
7F:→ Neisseria: 同意楼上的看法07/11 20:20
两位大大说的是,这倒是真的... 是说杀手级应用感觉也很运气 D也有facebook在使用,但好像不比google这种大企业名声?
8F:推 s25g5d4: 我感觉 rust 都比他夯07/11 20:25
痾,这完全没碰过
9F:→ Schottky: 站在 project leader 的角度而言,他是有权选择 D 语言07/11 20:37
10F:→ Schottky: 但之後要召募新血时,要求条件是会 D 语言,人才不好找07/11 20:38
11F:→ Schottky: 以前战斗机的航电系统用 ADA,後来改用 C/C++ 就是这原因07/11 20:39
有时候会觉得学校教的跟不上资讯的更新 不知道现在学校教的还是C/C++为主吗?
12F:→ Killercat: 其实会写C++的人 对语言学习应该都没啥障碍就是07/11 20:45
同意,搞懂C++的复杂应用 看很多语言会变很简单
13F:→ Schottky: 楼上讲的这件事我有很深刻的体会 07/11 20:46
14F:→ Schottky: 在大学时同班同学都很强,一两天内上手新语言毫无问题07/11 20:47
15F:→ Schottky: 工作时才知道这是很稀有的超能力...07/11 20:47
只用一两天就会一些进阶应用,那真的很强 个人最怕搞混 有时候语言的发展是承先启後,一不小心就搞混了
16F:→ james732: 可是我写惯C/C++写script语言就觉得很卡orz07/11 20:49
17F:→ james732: 变数不用先宣告,函式参数与回传不用写Type就很不惯orz07/11 20:50
我一开始也是这样 後来就搞懂script的理念,写script就变真的超简单 XD
18F:→ Schottky: 不用先宣告会让我搞不清楚变数的 scope ...07/11 20:51
19F:→ descent: 你说的那些特点, 可以用个小例子来说明吗?07/11 21:56
20F:→ descent: 只有文字叙述, 感觉不出来威力。07/11 21:57
安全性就用array来说好了,C++不会check boundary 虽然因此提升performance 也导致hacker喜欢用这点来攻击C++程式码,这点在D已经被改善了 OO的程度,可能有点见仁见智,毕竟OO是个概念,只举几个小例子 在constructor语法的小改变上就可以看出来,用的是this()这种词汇 https://dlang.org/cpptod.html#structcmp 而struct compare也都封装好,不需要再实作底层的东西 另外D语言也引入GC,诸如此类 创始人就是个C++大师,OO对他应该非常熟悉 取名D原因之一也是目标成为比C++更高阶的语言 performace, memory部分已经有网路资料可查证,都与C++差不多 和C#, Java这些相比不用说,和C++同等级,消耗memory小,performance快 补充一些比较,Andrei Alexandrescu本人曾回答网友问题时 就有点出他认为D的优势和劣势在哪 原文: https://goo.gl/t99pba 其他网友翻译: http://www.gegugu.com/2015/12/21/9099.html
21F:推 soheadsome: rust++07/11 22:21
※ 编辑: wudidog (123.193.71.98), 07/12/2017 00:09:46
22F:推 littleshan: 板友提的都是原因,但有几个因素导致go抢了更多user07/12 00:22
23F:→ littleshan: 1. go在设计上就非常适合开发後端07/12 00:24
24F:→ littleshan: D虽然也OK,但go一开始就给了goroutine与channel07/12 00:25
25F:→ littleshan: 尽管go会有比较多的gc,但偏偏这对後端来说可接受07/12 00:25
26F:→ littleshan: 2. go直接抛弃了generics与exception这几项困难的功能07/12 00:27
27F:→ littleshan: 拿掉这些功能让语言变得容易实作07/12 00:29
28F:→ littleshan: 同时使用者的学习曲线也大幅降低07/12 00:30
29F:→ littleshan: D 相较与 C++ 来说当然是简单很多07/12 00:39
30F:→ littleshan: 但go的学习曲线是script等级的,团队更容易导入07/12 00:40
31F:→ littleshan: 3. 最後是go有google大神在背後支援07/12 00:42
32F:→ littleshan: 一开始toolset就满完整的,改版速度也快07/12 00:43
33F:→ littleshan: 相较之下,尽管D已经出现了很久07/12 00:45
34F:→ littleshan: 却一直摆脱不了「这工具是否已经稳定」的疑虑07/12 00:46
35F:→ littleshan: 这对开发团队导入是非常大的阻碍07/12 00:46
36F:推 steve1012: 要是想写更快会想写Python 想要效率会直接写c++ 不知道07/12 00:53
37F:→ steve1012: 特别用d的purpose07/12 00:53
从Java或C#的角度来看 C++比较像是半个OO的C 对於写一个大型程式专案来说 C++设计师还是要处理太多琐碎的事 好听叫作有弹性、功能强大,难听点就是做一堆重复的事 我是觉得D语言比较像强化OO程度及简化语法後的C++ (但Andrei也讲过,D能做到许多C++无法做到的事) 却不会像Java或C#都需要大量记忆体或在效能上减损 这是我觉得D会吸引人的地方
38F:→ PkmX: 我也觉得rust未来发展性比D好很多...07/12 01:55
39F:→ freeunixer: go 正在思考甚麽样的泛型是实用又好用的,也许将来会有07/12 09:56
40F:→ freeunixer: C 可以用巨集的方式於不同 type 引入不同实作的定义07/12 09:58
41F:→ freeunixer: 大家说泛型难用,事实上 go 仍然因没这个被靠杯到快死07/12 09:59
42F:→ freeunixer: 至於 D,使用者不活跃,而且没有"别人全被它甩尾"的领域07/12 10:08
43F:→ freeunixer: 有些企业用 erlang,在它的强项,别人都看不到它的车尾07/12 10:13
44F:→ freeunixer: 一个语言要红,一是它能赢别人一段,二是用它的公司很火07/12 10:24
45F:→ freeunixer: rust 是它选择另一个路,而这条路是某类少数人才适合走07/12 10:26
46F:→ freeunixer: "人普遍都有某些倾向",比如说,好吃懒做,混吃等死.07/12 10:28
47F:→ freeunixer: 你今天说有样东西适合自律甚严,意志过人的人来做,07/12 10:28
48F:→ freeunixer: 你觉得下场会怎样?07/12 10:29
49F:→ freeunixer: 大部分的人做事都是"做事只求六十分,年薪必求破百万",07/12 10:31
50F:→ freeunixer: 你定一个太龟毛的门槛,事实上,大部分死老百姓都没挡头07/12 10:32
rust没碰过,但概略看了一下rust的理念 就觉得不是我的型 XD
51F:推 Neisseria: Rust 真的蛮硬派的,後来都不太碰这个语言 冏rz07/12 10:54
52F:推 johnlinvc: LLVM 作者的 Swift 也不错,可以写 Apple 生态圈07/12 11:00
53F:推 CoNsTaR: 因为c++使用者多社群大流通广啊07/12 11:29
54F:→ CoNsTaR: 你说你懂c++人家还知道你个大概07/12 11:29
55F:→ CoNsTaR: 你说你懂D???07/12 11:29
56F:→ CoNsTaR: 然後呢???根本没必要啊…07/12 11:29
57F:→ CoNsTaR: 如果要自己学爽的精进当然ok07/12 11:29
58F:→ CoNsTaR: 但是做事还是看环境做决定吧07/12 11:29
真的,感觉大部分台企想找的是最多人学的语言 而不是适合某些应用的语言(好像只有外商比较会这样)
59F:推 CoNsTaR: 而且学更高阶语言是为了增加自己写程式的智慧07/12 11:37
60F:→ CoNsTaR: 而不是把自己绑在高阶语言上,看不起低阶语言07/12 11:37
61F:→ CoNsTaR: 学了高阶语言之後再回去用那些比较低阶的语言07/12 11:37
62F:→ CoNsTaR: 我相信你考虑的层面和视野一定也和之前不同了07/12 11:38
63F:→ CoNsTaR: 我想这才是学高阶语言最大的意义07/12 11:38
我是常在C, C++, Java到处晃 接触C最多,C++其次,Java则是最不情愿的 一直想找个高阶语言是可以兼顾效率和记忆体 但多数语言不是吃记忆体,就是执行效能不佳 在不然就是绑平台,像是obj-C, swift这类的 像C/C++这类跨平台,又能兼顾记忆体、效能、底层操作 真的很少 ※ 编辑: wudidog (220.135.196.10), 07/12/2017 14:04:39
64F:推 steve1012: 跟台企没关吧 其实很多公司都有热门较多人用的语言 你07/12 14:38
65F:→ steve1012: 要跟别人合作自然会配合别人07/12 14:38
也有可能,这也只是我的经验啦~
66F:→ freeunixer: C# 是你的选择. .net core 已经可以在 linux 上 run07/12 14:40
67F:→ freeunixer: Object-C、Swife 也都可以在 linux 上 run07/12 14:41
恩恩,这些资讯我知道,不过像C#开源还是让人有点疑惑 因为C#在win上吃得开,是因为有平台配合,换到Linux上用C#不见得有麽好处 而且performace如何,有点怀疑 我之前也写过obj-c,感觉有点不习惯,swift还在观望 不知道在其他平台上表现会怎样
68F:→ cs8425: 稍微看了一下 跟go有点像 那怎不用go就好@@?07/12 15:12
我的理解是... go是真的很简单,简单到可能有点简化了 一些复杂应用如果用go可能会比较吃力 (转述一些使用者的评论)
69F:推 littleshan: 楼上完美示范go为何抢走D user XD07/12 16:20
别这样说嘛~~~
70F:→ littleshan: 另外,你想要兼顾效能记忆体底层操作和跨平台07/12 16:21
71F:→ littleshan: 那C++以外的答案其实就是rust07/12 16:21
72F:→ littleshan: 说它不符合你的理念其实很矛盾07/12 16:35
我看到的资讯是,rust很强调程式安全性,所以有blablabla限制 另外还有一些比较特别的语法 引用Andrei对Rust的评论来说好了,他的描述大致内容就是... "memory的存取安全性是个议题,但对很多语言而言,不会是最重要的" 这我蛮同意的,程式逻辑、程式的用途、使用者行为 都可能对程式的安全性有影响,应该是看开发需要,来做调整 如果一直把安全性放第一,结果牺牲很多直觉性的用法 这代价我自己是很难接受~~ 再加上他的一些特别语法,就感觉没什麽动力了
73F:→ freeunixer: rust 就像三年前的 swift 还没转大人,都不要 call lib 07/12 17:46
74F:→ freeunixer: 说有多爽都随便.一但要 call system lib,就硬不起来了07/12 17:47
75F:→ freeunixer: swift 能转那麽快,是因为它的靠山够高够大座, rust...07/12 17:48
76F:→ freeunixer: 学东西,基础跟实用性要兼顾,要是你已经是武林高手,07/12 17:49
77F:→ freeunixer: 你要花多少时间去练九阳神功或紫阳神功都行,07/12 17:51
78F:→ freeunixer: 刚要开始入门拜师,那别去找一个没举世高手成名的绝技,07/12 17:52
79F:→ freeunixer: 想也知道这种赌人品的事少做,成高手的机会才会大一点.07/12 17:54
80F:→ freeunixer: 现在想玩 rust,你只有去刻 servo 这 101 个选择了...07/12 18:10
@@"
81F:推 littleshan: 或是刻 dropbox 的底层07/12 20:29
82F:→ freeunixer: 想太多,人家跟 google 一样自己设计硬体去存放资料,07/12 20:54
83F:→ freeunixer: 要将记忆体快取最小化,又没有 google 有坚强 C++ 实力07/12 20:55
84F:→ freeunixer: 所以人家找 MIT 出身的一把折凳用接近 C++ 的 rust 刻07/12 20:57
85F:→ freeunixer: 我想请问,以上在座的,哪位自己设计硬体、开发储存系统07/12 20:59
86F:→ freeunixer: 或者再加上是 MIT、CMU 等 CS 名校出身,有本钱耍任性?07/12 21:01
87F:推 littleshan: 我从来没说rust很简单,只说了它有C++的效能而已07/12 22:29
88F:→ littleshan: 要兼顾效能记忆体底层操作本来就是高成本07/12 22:29
89F:→ littleshan: 不管哪个语言都一样的,即使是C++07/12 22:29
90F:→ littleshan: dropbox大部份後端用go,少部份用rust07/12 22:40
91F:→ littleshan: 这点可以说明「接近C++的效能」通常不是主要考量07/12 22:42
如果以安全性来考量,检查的东西多了 rust效能应该还是会比C++慢一些 当然,如果C++也进行相同的检查,相信两者速度应该差不了多少 (这可能也跟compiler的编译有关) 网路应用上,我相信会有一些改变 因为不少是bytecode或script语言主宰 go在网路功能上的定位应该没问题,有机会取代这些缓慢的程式,就可能是个商机 rust着重的应该还是安全性,感觉rust应该不会牺牲安全性去换取效能(?) 感觉rust这样的发展得再观察一下... 本来就不好学,到最後还没人用,这样代价有点高呀~ D的学习代价不高,而且可以确定C++能做的事,D也能用差不多的方式完成 虽然资源也不多,至少也经过facebook的验证 我的感觉是,D是个很便宜的选择
92F:推 Neisseria: Rust 没那麽难写,只是把一些常见错误放到编译期07/13 09:26
93F:→ Neisseria: 强迫你写到对才编译通过。其实就是一些 C/C++ 常见的07/13 09:27
94F:→ Neisseria: 错误,用编译器「提醒」你07/13 09:27
95F:→ Neisseria: 现在 Rust 的问题是函式库不够丰富,吸不到一般使用者07/13 09:28
96F:→ Neisseria: 一些会自己写函式库的公司已经在用 Rust 写东西了07/13 09:29
97F:→ Neisseria: 补充:其实只有 ownership 要适应一下而已07/13 09:30
98F:→ pnpncat: rust的安全检查是在编译期呀,而且因为安全规范多,很多07/13 14:01
99F:→ pnpncat: 问题都早早预防了,编译也不慢。认真来说,它既没牺牲执07/13 14:02
100F:→ pnpncat: 行期效能也没牺牲多少编译期效能,而是把时间成本转嫁到07/13 14:02
101F:→ pnpncat: 程式设计师动手写作的时期了吧?07/13 14:03
102F:→ james732: 结果这篇大家都在讲RUST XD07/13 14:11
好吧~ 只好提供D compiler的下载连结惹 https://dlang.org/download.html
103F:推 Neisseria: 要用简单的工具写伺服器,用 Go 就好了,资源还比较多07/13 15:03
104F:→ Neisseria: 但是 Go 和外部 C 程式桥接比较不好,大概 Google 也07/13 15:04
105F:→ Neisseria: 不注重这块。要写元件的话,Rust 的确可以考虑 07/13 15:05
106F:推 Hazukashiine: 可是我还是觉得 C 语言比较棒 ( 被揍07/13 15:58
C在底层的应该还是很难被取代啦 但C++就不知道了~~ (虽然十年前就有人讲C++会GG)
107F:→ red0210: 写 C++ 还用 array? 可以用 std::vector 啊07/13 17:45
要看什麽情况,像Android framework都是用array
108F:推 elements: rust 才是真的07/13 18:32
DDDDDDDD DD DD DD DD DD DD DD DD DD DD DDDDDDDD 不会输der~~ ※ 编辑: wudidog (123.193.71.98), 07/13/2017 23:53:27
109F:推 james732: 为什麽我build一个只有空main的rust产生3MB的执行档orz07/14 09:26
110F:→ Chikei: rust预设是static link07/14 15:47
111F:→ uranusjr: http://d.pr/UH3sLt07/15 00:42
112F:→ uranusjr: 不过 3MB 有点夸张, 你是 Windows?07/15 00:43
113F:→ Killercat: ldd下去就知道原因啦 XD07/15 00:54
114F:→ Killercat: 阿抱歉 应该是nm, ldd是拿来看动态连结的07/15 00:55
115F:推 james732: 我是用Linux(ubuntu)按照官网安装rustc试着编译的07/15 06:06
116F:→ james732: 试过用nm跑出来的symbols超多 07/15 06:06
来来来~ 要不要试试看D~~~ ※ 编辑: wudidog (123.193.71.98), 07/15/2017 07:42:16
117F:→ littleshan: 你可以用 -C prefer-dynamic 切换到动态连接07/15 10:37
118F:→ littleshan: 但部署时就要自己把符合版本的runtime一起发出去 07/15 10:39
119F:→ littleshan: 然後D没有比较好,gdc预设选项编出的hello world是6M07/15 10:39
120F:→ littleshan: 这类新语言预设用static link很正常 07/15 10:40
121F:→ littleshan: 因为不是每个环境都有装他们的runtime07/15 10:40
不一样喔,空的main和hello world有差 用gdc(back-end gcc) 或dmd(official) 编出来也有差 我编出来的只有几kb而已 不过没错啦,静态连结是一大原因 ※ 编辑: wudidog (123.193.71.98), 07/15/2017 12:35:03
122F:→ freeunixer: rust http://tinyurl.com/yaos5da5 07/15 17:30
123F:→ freeunixer: go https://blog.golang.org/toward-go2 07/15 17:31
124F:→ freeunixer: d https://wiki.dlang.org/Vision/2017H2_draft 07/15 17:35
125F:→ freeunixer: go 好杯具啊... 07/15 17:36
126F:→ freeunixer: 生个老二要等五年... 07/15 17:37
127F:→ uranusjr: 用大版号速度来判断悲剧也是满好笑的 07/17 02:44
128F:推 CoNsTaR: 说实话,一天到晚改来改去的语言才悲剧吧… 07/17 08:03
129F:→ Killercat: 还没稳定的语言这挺正常的 看看那个python2->3 XD 07/18 08:13
130F:→ Killercat: 连无法向後相容这种糗事都发生了 还一堆人转不过去 07/18 08:14
131F:→ Killercat: 但是我还是得说,这其实挺正常的,没那麽严重 07/18 08:14
132F:→ uranusjr: 无法向後相容不是糗事吧, 永远无法抛弃向後相容才是悲剧 07/18 13:57
133F:→ uranusjr: 维护过任何一个大型专案就知道这只是正常的取舍 07/18 13:58







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP