[閒聊] Rust 的實用性?
這篇是聊 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
推
12/25 20:39, , 1F
12/25 20:39, 1F
推
12/25 21:11, , 2F
12/25 21:11, 2F
推
12/25 21:39, , 3F
12/25 21:39, 3F
推
12/25 23:41, , 4F
12/25 23:41, 4F
Rust 沒有建立 C 程式碼,會直接編譯成 C lib
推
12/26 03:22, , 5F
12/26 03:22, 5F
→
12/26 03:22, , 6F
12/26 03:22, 6F
推
12/26 07:51, , 7F
12/26 07:51, 7F
推
12/26 17:32, , 8F
12/26 17:32, 8F
→
12/26 17:33, , 9F
12/26 17:33, 9F
Rust 的某些語法的確不太美觀,再加上那個 GY 的編譯器...
只能靠多練習來克服 冏rz
推
12/26 17:35, , 10F
12/26 17:35, 10F
→
12/26 17:36, , 11F
12/26 17:36, 11F
推
12/26 19:04, , 12F
12/26 19:04, 12F
推
12/26 20:27, , 13F
12/26 20:27, 13F
→
12/27 00:42, , 14F
12/27 00:42, 14F
小弟沒有維護 C/C++ 專案的包袱,可以自由使用新的語言
目前還在學習階段,都是拿來寫簡單的 sample code 而已
其實也沒有非用 Rust 不可,主要是欣賞 Rust 的一些設計
學一陣子 Rust 在回頭學 C++,會增進對 C++ 的了解,蠻有趣的
推
12/27 01:15, , 15F
12/27 01:15, 15F
※ 編輯: Neisseria (175.180.97.96), 12/27/2016 06:17:22
推
12/27 11:01, , 16F
12/27 11:01, 16F
→
12/27 11:04, , 17F
12/27 11:04, 17F
→
12/27 11:06, , 18F
12/27 11:06, 18F
→
12/27 11:06, , 19F
12/27 11:06, 19F
推
12/27 14:59, , 20F
12/27 14:59, 20F
→
12/27 15:07, , 21F
12/27 15:07, 21F
推
12/27 15:43, , 22F
12/27 15:43, 22F
推
12/27 18:13, , 23F
12/27 18:13, 23F
推
12/27 18:48, , 24F
12/27 18:48, 24F
→
12/27 18:53, , 25F
12/27 18:53, 25F
→
12/27 18:54, , 26F
12/27 18:54, 26F
→
12/27 18:55, , 27F
12/27 18:55, 27F
推
12/27 19:03, , 28F
12/27 19:03, 28F
→
12/27 19:03, , 29F
12/27 19:03, 29F
→
12/28 00:01, , 30F
12/28 00:01, 30F
→
12/28 01:25, , 31F
12/28 01:25, 31F
→
12/28 01:25, , 32F
12/28 01:25, 32F
→
12/28 01:28, , 33F
12/28 01:28, 33F
推
12/28 08:38, , 34F
12/28 08:38, 34F
→
12/28 10:35, , 35F
12/28 10:35, 35F
→
12/28 10:40, , 36F
12/28 10:40, 36F
→
12/28 12:05, , 37F
12/28 12:05, 37F
→
12/28 17:30, , 38F
12/28 17:30, 38F
→
12/28 17:31, , 39F
12/28 17:31, 39F
→
12/28 17:31, , 40F
12/28 17:31, 40F
→
12/28 17:32, , 41F
12/28 17:32, 41F
→
12/28 17:33, , 42F
12/28 17:33, 42F
推
12/28 18:12, , 43F
12/28 18:12, 43F
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 裡
→
12/28 18:15, , 44F
12/28 18:15, 44F
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
推
12/29 02:47, , 45F
12/29 02:47, 45F
→
12/29 02:51, , 46F
12/29 02:51, 46F
→
12/29 02:54, , 47F
12/29 02:54, 47F
→
12/29 02:54, , 48F
12/29 02:54, 48F
其實可以做 singleten,用 lazy_static! + Mutex
本來我也不會做,但 stackoverflow 有強者解答這個問題:
http://bit.ly/2i99XvW (Stackoverflow 網址)
※ 編輯: Neisseria (175.180.171.62), 12/29/2016 07:33:36
推
12/29 17:38, , 49F
12/29 17:38, 49F
如果大大有整理 Crystal 的心得,歡迎來 Ruby 版貼
有在用 Ruby 的人應該會對 Crystal 蠻有興趣的
※ 編輯: Neisseria (175.180.171.62), 12/29/2016 19:54:25
推
01/03 02:19, , 50F
01/03 02:19, 50F
→
01/03 02:20, , 51F
01/03 02:20, 51F
→
01/03 02:21, , 52F
01/03 02:21, 52F
→
01/03 02:21, , 53F
01/03 02:21, 53F
→
01/03 02:22, , 54F
01/03 02:22, 54F
→
01/03 02:24, , 55F
01/03 02:24, 55F
→
01/03 02:24, , 56F
01/03 02:24, 56F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
閒聊
22
56