[閒聊] 關於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