各有特色, 但目前 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 可讀性非常低