[閒聊] 關於D語言

看板C_and_CPP (C/C++)作者 (嗚啦啦)時間7年前 (2017/07/11 20:03), 7年前編輯推噓21(210112)
留言133則, 20人參與, 最新討論串1/2 (看更多)
小弟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://www.ptt.cc/bbs/C_and_CPP/M.1499774611.A.334.html

07/11 20:07, , 1F
問題可能是:為什麼要學?
07/11 20:07, 1F
新語言的開發、維護成本不一定比舊語言高 有時候這就是一種學習動機了

07/11 20:07, , 2F
想成為 C/C++ 繼任者的語言何其多
07/11 20:07, 2F

07/11 20:08, , 3F
同意一樓,至少要有一個殺手級應用,某一個大型專案採納
07/11 20:08, 3F

07/11 20:11, , 4F
這樣這個專案的開發者們才會去學習這個語言並放出資源
07/11 20:11, 4F

07/11 20:19, , 5F
就沒有 killer application 啊,無法吸引更多使用者
07/11 20:19, 5F

07/11 20:19, , 6F
後續就會造成函式庫少,線上文章少,變成惡性循環
07/11 20:19, 6F

07/11 20:20, , 7F
同意樓上的看法
07/11 20:20, 7F
兩位大大說的是,這倒是真的... 是說殺手級應用感覺也很運氣 D也有facebook在使用,但好像不比google這種大企業名聲?

07/11 20:25, , 8F
我感覺 rust 都比他夯
07/11 20:25, 8F
痾,這完全沒碰過

07/11 20:37, , 9F
站在 project leader 的角度而言,他是有權選擇 D 語言
07/11 20:37, 9F

07/11 20:38, , 10F
但之後要召募新血時,要求條件是會 D 語言,人才不好找
07/11 20:38, 10F

07/11 20:39, , 11F
以前戰鬥機的航電系統用 ADA,後來改用 C/C++ 就是這原因
07/11 20:39, 11F
有時候會覺得學校教的跟不上資訊的更新 不知道現在學校教的還是C/C++為主嗎?

07/11 20:45, , 12F
其實會寫C++的人 對語言學習應該都沒啥障礙就是
07/11 20:45, 12F
同意,搞懂C++的複雜應用 看很多語言會變很簡單

07/11 20:46, , 13F
樓上講的這件事我有很深刻的體會
07/11 20:46, 13F

07/11 20:47, , 14F
在大學時同班同學都很強,一兩天內上手新語言毫無問題
07/11 20:47, 14F

07/11 20:47, , 15F
工作時才知道這是很稀有的超能力...
07/11 20:47, 15F
只用一兩天就會一些進階應用,那真的很強 個人最怕搞混 有時候語言的發展是承先啟後,一不小心就搞混了

07/11 20:49, , 16F
可是我寫慣C/C++寫script語言就覺得很卡orz
07/11 20:49, 16F

07/11 20:50, , 17F
變數不用先宣告,函式參數與回傳不用寫Type就很不慣orz
07/11 20:50, 17F
我一開始也是這樣 後來就搞懂script的理念,寫script就變真的超簡單 XD

07/11 20:51, , 18F
不用先宣告會讓我搞不清楚變數的 scope ...
07/11 20:51, 18F

07/11 21:56, , 19F
你說的那些特點, 可以用個小例子來說明嗎?
07/11 21:56, 19F

07/11 21:57, , 20F
只有文字敘述, 感覺不出來威力。
07/11 21:57, 20F
安全性就用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

07/11 22:21, , 21F
rust++
07/11 22:21, 21F
※ 編輯: wudidog (123.193.71.98), 07/12/2017 00:09:46

07/12 00:22, , 22F
板友提的都是原因,但有幾個因素導致go搶了更多user
07/12 00:22, 22F

07/12 00:24, , 23F
1. go在設計上就非常適合開發後端
07/12 00:24, 23F

07/12 00:25, , 24F
D雖然也OK,但go一開始就給了goroutine與channel
07/12 00:25, 24F

07/12 00:25, , 25F
儘管go會有比較多的gc,但偏偏這對後端來說可接受
07/12 00:25, 25F

07/12 00:27, , 26F
2. go直接拋棄了generics與exception這幾項困難的功能
07/12 00:27, 26F

07/12 00:29, , 27F
拿掉這些功能讓語言變得容易實作
07/12 00:29, 27F

07/12 00:30, , 28F
同時使用者的學習曲線也大幅降低
07/12 00:30, 28F

07/12 00:39, , 29F
D 相較與 C++ 來說當然是簡單很多
07/12 00:39, 29F

07/12 00:40, , 30F
但go的學習曲線是script等級的,團隊更容易導入
07/12 00:40, 30F
還有 69 則推文
還有 11 段內文
07/13 14:02, , 100F
行期效能也沒犧牲多少編譯期效能,而是把時間成本轉嫁到
07/13 14:02, 100F

07/13 14:03, , 101F
程式設計師動手寫作的時期了吧?
07/13 14:03, 101F

07/13 14:11, , 102F
結果這篇大家都在講RUST XD
07/13 14:11, 102F
好吧~ 只好提供D compiler的下載連結惹 https://dlang.org/download.html

07/13 15:03, , 103F
要用簡單的工具寫伺服器,用 Go 就好了,資源還比較多
07/13 15:03, 103F

07/13 15:04, , 104F
但是 Go 和外部 C 程式橋接比較不好,大概 Google 也
07/13 15:04, 104F

07/13 15:05, , 105F
不注重這塊。要寫元件的話,Rust 的確可以考慮
07/13 15:05, 105F

07/13 15:58, , 106F
可是我還是覺得 C 語言比較棒 ( 被揍
07/13 15:58, 106F
C在底層的應該還是很難被取代啦 但C++就不知道了~~ (雖然十年前就有人講C++會GG)

07/13 17:45, , 107F
寫 C++ 還用 array? 可以用 std::vector 啊
07/13 17:45, 107F
要看什麼情況,像Android framework都是用array

07/13 18:32, , 108F
rust 才是真的
07/13 18:32, 108F
DDDDDDDD DD DD DD DD DD DD DD DD DD DD DDDDDDDD 不會輸der~~ ※ 編輯: wudidog (123.193.71.98), 07/13/2017 23:53:27

07/14 09:26, , 109F
為什麼我build一個只有空main的rust產生3MB的執行檔orz
07/14 09:26, 109F

07/14 15:47, , 110F
rust預設是static link
07/14 15:47, 110F

07/15 00:42, , 111F
07/15 00:42, 111F

07/15 00:43, , 112F
不過 3MB 有點誇張, 你是 Windows?
07/15 00:43, 112F

07/15 00:54, , 113F
ldd下去就知道原因啦 XD
07/15 00:54, 113F

07/15 00:55, , 114F
阿抱歉 應該是nm, ldd是拿來看動態連結的
07/15 00:55, 114F

07/15 06:06, , 115F
我是用Linux(ubuntu)按照官網安裝rustc試著編譯的
07/15 06:06, 115F

07/15 06:06, , 116F
試過用nm跑出來的symbols超多
07/15 06:06, 116F
來來來~ 要不要試試看D~~~ ※ 編輯: wudidog (123.193.71.98), 07/15/2017 07:42:16

07/15 10:37, , 117F
你可以用 -C prefer-dynamic 切換到動態連接
07/15 10:37, 117F

07/15 10:39, , 118F
但部署時就要自己把符合版本的runtime一起發出去
07/15 10:39, 118F

07/15 10:39, , 119F
然後D沒有比較好,gdc預設選項編出的hello world是6M
07/15 10:39, 119F

07/15 10:40, , 120F
這類新語言預設用static link很正常
07/15 10:40, 120F

07/15 10:40, , 121F
因為不是每個環境都有裝他們的runtime
07/15 10:40, 121F
不一樣喔,空的main和hello world有差 用gdc(back-end gcc) 或dmd(official) 編出來也有差 我編出來的只有幾kb而已 不過沒錯啦,靜態連結是一大原因 ※ 編輯: wudidog (123.193.71.98), 07/15/2017 12:35:03

07/15 17:30, , 122F
07/15 17:30, 122F

07/15 17:31, , 123F

07/15 17:35, , 124F

07/15 17:36, , 125F
go 好杯具啊...
07/15 17:36, 125F

07/15 17:37, , 126F
生個老二要等五年...
07/15 17:37, 126F

07/17 02:44, , 127F
用大版號速度來判斷悲劇也是滿好笑的
07/17 02:44, 127F

07/17 08:03, , 128F
說實話,一天到晚改來改去的語言才悲劇吧…
07/17 08:03, 128F

07/18 08:13, , 129F
還沒穩定的語言這挺正常的 看看那個python2->3 XD
07/18 08:13, 129F

07/18 08:14, , 130F
連無法向後相容這種糗事都發生了 還一堆人轉不過去
07/18 08:14, 130F

07/18 08:14, , 131F
但是我還是得說,這其實挺正常的,沒那麼嚴重
07/18 08:14, 131F

07/18 13:57, , 132F
無法向後相容不是糗事吧, 永遠無法拋棄向後相容才是悲劇
07/18 13:57, 132F

07/18 13:58, , 133F
維護過任何一個大型專案就知道這只是正常的取捨
07/18 13:58, 133F
文章代碼(AID): #1PPBwJCq (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文
完整討論串 (本文為第 1 之 2 篇):
21
133
文章代碼(AID): #1PPBwJCq (C_and_CPP)