前言
Nim 是一個新興的通用型程式語言,根據 Nim 官方網站可知,其主要特色為 3E,即效率 (efficiency)、表達力 (expressivity)、優雅 (elegance)。在這三者之中,效率是最重要的考量,在這個前提下,儘可能讓語言同時具有表達力和優雅;筆者將會逐一介紹這些特性。
站在巨人的肩膀上
Nim 程式具有效率的策略在於 Nim 程式碼會先轉換為相對應的 C 程式碼,再呼叫 C 編譯器將其轉為機械碼。C 語言經歷 40 年以上的實務經驗,一些主流的 C 編譯器,像是 GCC 或 clang 等,有許多優化程式碼效率的策略,Nim 可以沿用前人的智慧,而不需再重造輪子;如果要沿有已有的 C 函式庫,Nim 提供易於使用的介面。Nim 程式碼也可以轉換為 C++、Objective-C、JavaScript 程式碼,不過目前仍然是以轉成 C 程式碼為主。
由於 Nim 設計成較高階的語言,在編譯程式時引入垃圾回收 (garbage collection) 的機制。根據 Nim 官網的實測,Nim 的垃圾回收器效率良好。此外,Nim 可以在編譯程式時,根據不同的需求選擇不同的垃圾回收器,甚至可以移除垃圾回收器,改為手動回收記憶體。對於有即時運算的程式設計者來說,可以做更細微的調整。不過,目前 Nim 的標準函式庫是以程式設計者有使用垃圾回收的前提下設計,目前將 Nim 視為有垃圾回收的語言較佳。
Nim 的語法特性
Nim 語言吸收了 Python、Pascal 和數個語言的特性,支援指令式 (imperative)、物件導向 (objective-oriented)、函數式 (functional) 等多種範式 (paradigms)。除了一些基本的語法外,Nim 也支援一些進階的元程式 (metaprogramming) 特性,像是泛型 (generics)、模板 (template)、巨集 (macro) 等。覺得元程式過於困難的程式設計者也不用擔心,即使不使用這些特性,仍然可以使用 Nim 撰寫程式。
分散式的套件管理
近幾年來,許多程式設計者會使用 Git 或 Mercurial 等版本控制軟體來管理專案,而 Nim 也順應此一潮流。Nimble,Nim 的套件管理程式,可借助 GitHub 或 Bitbucket 等專案管理網站,透過呼叫 Git 或 Mercurial 自動抓取 Nim 套件;程式設計者也可透過 GitHub 或 Bitbucket 等網站,很快地建立新的 Nim 套件。
Nim 語言尚待突圍
雖然 Nim 有許多優點,但 Nim 仍有一些尚待努力的議題:
- 到目前為止,Nim 僅支援單一繼承,也缺乏介面或 mixin 等替代方案
- Nim 編譯器的錯誤訊息不是很友善,不易了解真正的錯誤為何
- 目前 Nim 社群套件和學習資源較少,這是新興語言必經的關卡
Nim 的官方線上文件相對精簡;此外,Nim 目前唯一的實體書籍 Nim in Action 對於語法本身的說明也採取較為精簡的方式,對於沒程式設計經驗的讀者可能較不易理解。本系列文章將其重新整理,儘量讓初學者也能夠理解。