各有特色, 但目前 golang 更實用, nim 更吸引我.
-
golange 能跟 C binding, 且通過 cgo 只要 include header 不需手動描述 (compiler 認得 C)
- 只能與 C binding
- 但 C 類型的數據官方不建議嵌在 golang struct 中
- golange 數據不建議 C 代碼保存, 就算只是短時間的暫存
- function pointer 需要通過 inject C 代碼間接的調用
- 數據在 C <-> golang 間的傳遞, 無可避免的需要 copy
-
語言設計精簡, 易讀, 跟舊版間的兼容性維持得很好
-
除了配置了 OS 資源的 type 需要配合 defer 調用如
Close()
釋放, 其他開發過程不需過多專注在語言上 -
更好的是, 在 golang 中, compiler 會識別一個 object 被使用的範圍, 自動決定放在 stack (快) 或是 heap 上
-
無 generic, 無 macro
- 但有 generator
- Standard library 有成熟的庫支持 golang 的 parsing & AST 的存取
-
採用 duck typing 的方式實現 interface
- 不需要像 Java, C#, C++ 之類的語言一定要把 method 的實現集語在一個區塊 (這也是現在新語言的驅勢)
- 雖然是 duck typing, 但在 compile time 就會檢查出是否滿足 (實現) 了特定的 interface
- 完整的 reflection 機制
-
產生的 symbol 可讀性高
-
nim 的話, compiler 基本上是個轉換器, 能將 nim 轉換成 C, C++, Objective C, JavaScript
- 所以如果 nim 跟轉換目標語言的底層 compiler 如果是相同的情況下, binding 基本上能做到 0 成本溝通
- 使用現有開發好的庫, 基本也不用管理資源, 但像 file 的 close 等操作還是必須注意的 (所有語言都無法避免)
- 在 1.2 版加上了 destructor 及 move 語意後, 資源的配置, 移動, 複掣, 釋放能更清楚的控制 (類似於 C++ & Vala 了)
- binding 的話, 需要手動產生, 配合 pragma 告知 compiler 目標的長像, 行為, 資源交換的方式
- 號稱 GC pause 的時間控制能達到 hard realtime (所謂 realtime, 不是指多有效率, 而是指一件事能否在限定的, 預期的時限內完成)
- 語言大量採用符號及 operator overloading, 讓編程
-
產生的 symbol 可讀性非常低