位元詩人 [Nim] 語言程式教學:簡介

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

前言

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 對於語法本身的說明也採取較為精簡的方式,對於沒程式設計經驗的讀者可能較不易理解。本系列文章將其重新整理,儘量讓初學者也能夠理解。

關於作者

身為資訊領域碩士,位元詩人 (ByteBard) 認為開發應用程式的目的是為社會帶來價值。如果在這個過程中該軟體能成為永續經營的項目,那就是開發者和使用者雙贏的局面。

位元詩人喜歡用開源技術來解決各式各樣的問題,但必要時對專有技術也不排斥。閒暇之餘,位元詩人將所學寫成文章,放在這個網站上和大家分享。