看板 C_and_CPP 關於我們 聯絡資訊
這篇是聊 Rust,但是放在 C/C++ 版是因為 Rust 的特性 如果版主覺得不適合就刪文吧 XD 最近利用空閒時間在學 Rust 發現到 Rust 和其他語言結合得蠻好的,像是和 C 結合: Rust --> Rust FFI --> C library 或是和 Python 或 Ruby 等高階語言合作: 高階語言 --> 高階語言 FFI --> Rust (as C library) 當然,也可以直接做成執行檔 其時,Rust 有點像 C++ 的角色 需要編譯語言,但是又不想寫 C 時,就用 Rust 寫 反正編成機械碼後,從電腦的角度來存取都一樣 根據小弟摸一小段時間 Rust,感受到的一些優缺點: Pros: - 語言體質佳:支援 OOP、generics、functional programming 等 寫起來有某些部分像高階語言 - 平台支援好:同一套程式碼可直接用,不用根據平台寫 #if 條件句,交叉編譯也很方便 有點像高階語言的程式環境,只是 Rust 是編譯語言 - 編譯檢查嚴格:能通過編譯的程式相對發生問題的機會少 - 可做系統語言:不使用 GC,允許 stack allocation 也允許在 unsafe block 中 進行指標操作,可以達到 C/C++ 等級的效能 (感謝 littleshan 說明) Cons: - 社群資源少:和 C/C++/Java 相比差非常多,新的語言多多少少都有這個問題 如果要拉 C 函式庫,要自行處理,跨平台的優點就消失一半 - 學習資源少:目前大部分都要靠官方文件,目前市面上只有一本 Rust 書籍 明年二月到四月,會再陸續出兩三本,總體上還是很少 - 語言不穩定:Rust 經歷過一些改動,在 1.0 版以前某些特性實作後又放棄掉 使得網路上一些 Rust 相關的資訊變成錯的 另外,目前 Rust 分為 stable, beta, nightly 三個版本 某些函式庫作者會偷用 nightly 的版本,使得函式庫不穩定 - 上手不易:也是因為編譯檢查嚴格,學習 Rust 總是要和 Rust 編譯器奮戰一陣子 Orz 其中有些東西和指標有關,如果 C/C++ 學得好,撞牆期會比較短 Rust 底層用到 LLVM,但 Rust 包裝得很好,使用者不會碰到 LLVM 雖然小弟時常和 Rust 編譯器角力 = =|||,基本上還算欣賞這個語言 但是畢竟還很新,若要引入專案可能還是要考慮一下 不知道各位大大會將 Rust 用在自己的專案嗎?side project 也可以 就當成閒聊吧,聽聽看大家的看法 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 175.182.166.115 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1482668235.A.3D0.html
wtchen: 只要跟C/C++相關,准你發。 12/25 20:39
damody: 語言不穩定是硬傷,又不像swift有apple在推 12/25 21:11
wtchen: 聽說有用Rust開發的作業系統,是真的嗎? 12/25 21:39
http://www.redox-os.org/ 可參考
eye5002003: Rust是直接建立C lib還是先創造C程式碼再編譯? 12/25 23:41
Rust 沒有建立 C 程式碼,會直接編譯成 C lib
CoNsTaR: 不想要 functional 的麻煩又想要 functional 的嚴謹推 Ru 12/26 03:22
CoNsTaR: st 12/26 03:22
CaptainH: rust的lifetime syntax醜得可怕 12/26 07:51
lc85301: lifetime syntax 很醜是定番了,所有批評都會看到這條XD 12/26 17:32
lc85301: 然後還有編譯器很GY,這也是定番XD 12/26 17:33
Rust 的某些語法的確不太美觀,再加上那個 GY 的編譯器... 只能靠多練習來克服 冏rz
lc85301: swift-apple, golang-google, rust-mozilla 12/26 17:35
lc85301: rust 比較沒大公司撐腰也是真的 12/26 17:36
shadow0326: 'a 'b 'c 'd 'wtf 12/26 19:04
makeman: 'w 't 'f 12/26 20:27
descent: 什麼時候不想用 c/c++ 而想用 rust 呢? 12/27 00:42
小弟沒有維護 C/C++ 專案的包袱,可以自由使用新的語言 目前還在學習階段,都是拿來寫簡單的 sample code 而已 其實也沒有非用 Rust 不可,主要是欣賞 Rust 的一些設計 學一陣子 Rust 在回頭學 C++,會增進對 C++ 的了解,蠻有趣的
stupid0319: 主要是錢景吧,錢景大概swift>java>C#>>>>>>>Rust 12/27 01:15
※ 編輯: Neisseria (175.180.97.96), 12/27/2016 06:17:22
ronin728: 如果它有GC又去掉Ownership的話,我也許會考慮。 12/27 11:01
ronin728: 但他目前這種特性來說,即便它更高階,我還是寧願用C++ 12/27 11:04
ronin728: Swift有ARC(自動插入reference counter, 並解決循環引用 12/27 11:06
ronin728: ),我覺得這就很不錯 12/27 11:06
Klauhal: 版標XD 12/27 14:59
uranusjr: ARC 哪裡有解決循環引用, 幻想的嗎... 12/27 15:07
lc85301: 版標XDD 12/27 15:43
yoco315: 小妹我也在學 rust ^^~* 大家一起唷~~~ 12/27 18:13
littleshan: rust 明明就有 smart pointer 12/27 18:48
littleshan: 你用 smart pointer 存指標就不需要處理 lifetime 12/27 18:53
littleshan: 不想負擔smart pointer的額外成本時就要處理lifetime 12/27 18:54
littleshan: rust 是給你選擇權的,和 C++ 的理念並無太大差異 12/27 18:55
CaptainH: rust的賣點就是不必手動管理記憶體嗎?結果還是要用smar 12/27 19:03
CaptainH: t ptr這種半自動的東西? 12/27 19:03
uranusjr: Rust 現在已經沒有 smart pointers 了 12/28 00:01
littleshan: 呃,perl 的 reference 其實也是 smart pointer 12/28 01:25
littleshan: 所以 perl 不算自動管理記憶體? 12/28 01:25
littleshan: 然後,rust 的 Box/Rc/Arc 不就是 smart pointer 嗎? 12/28 01:28
CaptainH: Perl本來就是很糟糕的語言啊 rust是要跟perl比? 12/28 08:38
littleshan: perl 的問題與它使用 reference counting 無關 12/28 10:35
littleshan: 沒有人會否認 perl 有自動化的記憶體管理 12/28 10:40
ronin728: 對不起,我錯了,我誤會了 Swift Orz 12/28 12:05
uranusjr: @littleshan 原來你說的是廣義的 smart pointer, 誤會了 12/28 17:30
uranusjr: 因為 Rust 早期就有一種東西叫做 smart pointer 12/28 17:31
uranusjr: @CaptainH 好嘛那不提 Perl, Python Objective-C Swift 12/28 17:31
uranusjr: 也都是用 ref counting, 你講的根本站不住腳 12/28 17:32
uranusjr: 高階如 Python 都有專門的 weakref 模組來處理循環引用 12/28 17:33
makeman: 似乎沒繼承 也沒多重繼承 有個類似interface的東西? 12/28 18:12
Rust 的 trait 可以繼承,也可以多重繼承,是繼承別的 trait trait 本身不能實體化,只有 struct 可以實體化 但 trait 可做為 method 的參數來使用 struct 可以實作 trait 所定義的 method 但 struct 間不能繼承,只能透過組成 (composition) 結合 可以想成 struct 是 class,trait 是 interface + abstract class 我以前以為 trait 只有 method 定義,而沒有 method 實作 但其實 trait 可以有 method 的實作,例如 Rust 的 Iterator: https://github.com/rust-lang/rust/blob/master/src/libcore/iter/iterator.rs 程式設計者也可以實作自己的 Iterator,只要實作 next 這個 method 其他所有的高階函式,都由 Iterator 這個 trait 提供 有點像 Java 8 的 interface,可以實作 code 在 interface 裡
makeman: gui的話,好的framework大多偏oop的寫法rust能勝任嗎? 12/28 18:15
Rust 是有一些 GUI,大概都是 language binding 像是 GTK: http://gtk-rs.org/ 或是 QT: https://github.com/cyndis/qmlrs (只是其中一個) 看起來,GTK 那邊似乎比較活躍 目前來說,GUI 應該不算強項 如果要做的軟體是以 GUI 為重,可能要選別的方案比較好 但我還沒深入學 gtk-rs,可能有誤,僅供參考 Rust 的 OOP 和 C++ 或 Java 不同,寫的方式要調整一下 剛開始會不太習慣,後來就會自動調整成 Rusty way ※ 編輯: Neisseria (175.182.138.65), 12/28/2016 20:13:16
littleshan: 真要做到 C++ 式繼承可以用 composition+deref trait 12/29 02:47
littleshan: 不過 OOP 原則上都是鼓勵多用組合少用繼承 12/29 02:51
littleshan: 這樣的設計我認為沒什麼大礙,GoF 的 design pattern 12/29 02:54
littleshan: 都可以實現,除了 singleton 以外 XD 12/29 02:54
其實可以做 singleten,用 lazy_static! + Mutex 本來我也不會做,但 stackoverflow 有強者解答這個問題: http://bit.ly/2i99XvW (Stackoverflow 網址) ※ 編輯: Neisseria (175.180.171.62), 12/29/2016 07:33:36
firejox: 那我也來推Crystal (′・ω・`) 12/29 17:38
如果大大有整理 Crystal 的心得,歡迎來 Ruby 版貼 有在用 Ruby 的人應該會對 Crystal 蠻有興趣的 ※ 編輯: Neisseria (175.180.171.62), 12/29/2016 19:54:25
SLMT: 路過,看到版標寫 Rust 進來看看 01/03 02:19
SLMT: 小的半年前開始摸,以為台灣沒什麼人在玩 Rust 01/03 02:20
SLMT: 看到這麼多人對 Rust 有這麼深入的了解感覺台灣還是有眾多 01/03 02:21
SLMT: 高手的XD 01/03 02:21
SLMT: 不過 Rust 的學習曲線真有點陡峭 01/03 02:22
SLMT: Ownership 的觀念要花點時間消化,嚴格的編譯器也常讓人沮 01/03 02:24
SLMT: 喪 01/03 02:24