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/m.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燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP