前言
在本文中,我們介紹建置 Pascal 開發環境的過程。
選擇 Delphi 版本
Delphi 是商業版本 Pascal 開發環境。目前有以下四個版本:
- Community
- Professional
- Enterprise
- Architect
Community 版和 Professional 版可用來建立單機程式,包括 Windows 桌面軟體和行動軟體。Community 版可免費使用,但僅限於專案年收入 5000 美元以下的軟體,而且不能使用本地端資料庫。而 Professional 版沒有 Community 版的限制。
Enterprise 版和 Architect 版除了 Professional 版的功能外,還可以建立在 Windows 或 GNU/Linux 上運行的伺服程式。Enterprise 版的伺服程式也有專案年收入 5000 美元的限制,而 Architect 版無此限制。此外,Architect 比 Enterprise 多一些功能。
對於剛學 Pascal 的程式設計者來說,先用 Community 版來練功即可。或者可以用免費的 Free Pascal 來代替,詳見下一節的說明。
安裝 Free Pascal 和 Lazarus
Free Pascal 是仿 Turbo Pascal 和 Delphi 的 Pascal 編譯器,但沒有圖形介面程式的部分。Lazarus 則是 Free Pascal 的 IDE 及圖形介面程式函式庫。
Lazarus 分為三個部分:
- Free Pascal
- (選擇性) Free Pascal 的原始碼
- (選擇性) Lazarus
如果不需要撰寫圖形介面程式,也不需要 IDE,可以只裝 Free Pascal。若要裝 Lazarus,則三項皆需安裝。
在 Windows 上安裝
到 Lazarus 官網下載 Lazarus 的安裝程式,即會同時安裝前述的三項軟體。
在 macOS 上安裝
到 Lazarus 官網下載 Lazarus 的 pkg 安裝程式。三個 pkg 檔是分開的,請依前述順序安裝。由於近年來的 Mac 主機採用 64 位元 CPU,請安裝 64 位元的 Lazarus。
早期的 Lazarus 是 32 位元軟體,基於 Carbon。但新版的 macOS 把 Carbon 拿掉了。幸好新版的 Lazarus 已逐漸遷移到 Cocoa,並有 64 位元的版本。
在 GNU/Linux 上安裝
GNU/Linux 版本的 Lazarus 基於 GTK,在安裝 Lazarus 時會一併安裝。許多 GNU/Linux 已經預先包好 Lazarus,就不需要到官網下載套件。
在 Debian/Ubuntu/Linux Mint 可參考以下指令:
$ sudo apt install fpc fpc-source lazarus
在 openSUSE 可參考以下指令:
$ sudo zypper install fpc fpc-src lazarus
由於 CentOS 8 拿掉 Free Pascal 和 Lazarus,要到 Lazarus 官網下載 RPM 套件,使用 dnf
安裝。參考以下指令:
$ sudo dnf install fpc-3.0.4-1.x86_64.rpm fpc-src-3.0.4-1.x86_64.rpm lazarus-2.0.6-0.x86_64.rpm
使用 dnf
而非 rpm
來安裝的原因是前者可自動安裝相依套件。
(選擇性) 建立 C 開發環境
Pascal 本身是跨平台的編譯語言,但 Pascal 本身的社群資源較少,有時候會使用以 C 函式庫實作的 Pascal binding。雖然一開始不需要,必要時還是得安裝 C 開發環境,用來安裝 C 函式庫。
筆者先前在介紹 C 語言時,已經介紹建置 C 開發環境的方式,此處不再重覆。需要的讀者可看一下筆者先前所寫的文章:
選擇編輯器
在撰寫圖形介面程式時,通常會以 Delphi 或 Larazus 這類 RAD (快速應用程式開發) 軟體來寫。這些軟體兼具 IDE (整合式開發環境) 的功能,所以不需要使用其他編輯器。
在撰寫非圖形介面程式時,前述的 RAD 軟體就顯得肥大了些。可以用比較輕量的編輯器,再自行搭配 Make、CMake 等軟體來管理專案。以下是常見的編輯器:
- Atom
- Sublime Text
- VS Code
管理 Pascal 程式碼專案
原本 Pascal 沒有專案的概念,可以沿用 Make、CMake 等跨語言的編譯自動化軟體來管理 Pascal 程式碼。以 Make 來說,Make 沒有內建 Pascal 相關的變數,故需自行設置。
如果使用 Delphi 來撰寫 Pascal 程式的話,可以直接使用 Delphi 內建的專案管理功能來管理 Pascal 專案。同理,如果使用 Lazarus 來撰寫 Pascal 程式的話,該 IDE 就有專案管理的功能。
如果是在命令列環境下編譯 Pascal 程式碼的話,可以用 Free Pascal 附的 fpcmake 來自動生成相對應的 Makefile 。透過這項工具,就不需自行撰寫 Makefile 。
此外,Free Pascal 有自己的套件格式 FPMake。如果只用 Free Pascal 來撰寫程式的話,可以直接使用該套件格式。
自動編排 Pascal 程式碼
雖然 Pascal 對於空白、縮進、換行等相對自由,將程式碼排列整齊有助於閱讀程式碼。除了手動編排程式碼外,也可以用 Free Pascal 附帶的 ptop
(Pascal to Pascal) 進行自動程式碼編排。
使用方式如下:
$ ptop input.pas output.pas
在不加設定檔時,ptop
會自動以內建的風格來編排程式碼。如果想要更動編排風格,要使用設定檔。
使用 ptop
即可生成預設設定檔:
$ ptop -g ptop.cfg
接著修改 ptop.cfg 。有關設定檔的格式,請看這裡。
修改設定檔蠻花時間的,建議修改好後,將設定檔保存起來,日後就套用同一份設定檔。如果在維護團隊專案時,應該會有現成的設定檔可用。
然後重新用新的設定檔來編排程式碼:
$ ptop -c ptop.cfg input.pas output.pas
檢查記憶體洩露 (Memory Leak) 或損壞 (Memory Corruption)
Pascal 不會自動管理記憶體,程式設計者需要自行管理記憶體。所幸,Free Pascal 內建監控記憶體洩露或損壞的功能,可以協助我們確認記憶體使用是否有問題。在編譯程式時加上 -gh
參數即可。參考以下指令:
$ fpc -gh -oprogram source.pas
以下是實例:
$ ./program
Heap dump by heaptrc unit
68 memory blocks allocated : 2588/2824
68 memory blocks freed : 2588/2824
0 unfreed memory blocks : 0
True heap size : 163840 (160 used in System startup)
True free heap : 163680
等確認完沒有記憶體洩露,要把程式上線時,移除 -gh
參數再重新編譯一次程式即可。