從古典邁向現代

    Write Once, Compile Anywhere

    Pascal 是命令式 (imperative) 高階編譯語言。而 Object Pascal 是基於 Pascal 加上物件導向等特性的語言。該語言在 80 年代曾是大專院校間流行的教學工具,後來 Pascal 的角色被 C++、Java、C# 等語言取代,現在使用這個語言的程式設計者就少了。

    然而,Pascal 並沒有死亡,而是進化成一個具有 WOCA (Write Once, Compile Anywhere) 哲學的通用型程式語言,可用來撰寫多種型態的應用程式。在 Delphi (商業版本 Pascal) 的官方頁面中展示了 Delphi 的應用層面,藉此可理解 Pascal 的可能性。

    Pascal 的版本演進

    雖然 Pascal 有國際標準,但 Pascal 的標準對使用 Pascal 來說不太重要。所以,本節的內容只是給讀者了解一下 Pascal 的發展歷史。

    早期的發展

    Pascal 是瑞士電腦科學家 Niklaus Wirth 教授所設計和開發的程式語言,其目的是做為教學工具。Niklaus Wirth 教授在 Algorithms + Data Structures = Programs 這本教科書的第一版使用 Pascal 來寫範例程式碼。這本書的書名也成了資訊界的經典金句。

    由於 Pascal 一開始尚未標準化,理所當然以 Niklaus Wirth 教授所設計的 Pascal 編譯器為準。另外,早期的 Mac 系統曾經使用 Pascal 做為其應用程式語言。

    Pascal

    雖然 Pascal 有國際標準 (ISO 7185),但該標準本身設計不良,故現行的 Pascal 編譯器很少遵守這個版本的 Pascal 方言,而會加入其他的特性。

    Extended Pascal

    這個標準 (ISO 10206) 承襲了原有的 Pascal 標準。但真正實作這個標準的 Pascal 編譯器不多,所以這個標準不太重要。

    Object Pascal

    Object Pascal 是 Turbo Pascal 和 Delphi 所用的 Pascal 方言。由於 Delphi 是目前最成功的商業 Pascal 開發環境,所以現在的 Pascal 大抵上都以這個 Pascal 方言為準。雖然 Object Pascal 曾經有標準化提案,但最後沒有發展成真正的國際標準。

    Pascal 實作品

    語言標準只是文件,真正決定語言特性的是其實作品。由於 Pascal 的標準不太重要,使用 Pascal 的方式就是選好 Pascal 的實作品,根據該實作品所提供的特性來撰寫 Pascal 程式。

    Delphi

    Delphi 是指 Pascal 方言和同名的軟體開發工具。由於 Delphi 是目前最成功的商業 Pascal 開發工具,Delphi 幾乎成為 Pascal 的同義詞。Pascal 初學者可先用免費的 Community 版,日後需要進階的功能時再購買進階的版本即可。

    Free Pascal

    Free Pascal 是免費的 Pascal 和 Object Pascal 編譯器,且為自由軟體。該編譯器的 Pascal 語法和 Delphi 不完全相同,但提供 Delphi 相容模式。

    由於 Free Pascal 支援多種系統,故 Pascal 具有 WOCA (Write once, compile anywhere) 哲學。換句話說,Pascal 是跨平台軟體,如同 C++、Java 或 .NET Core。

    GNU Pascal

    GNU Pascal 是 GNU 計畫的項目之一。由於 GNU Pascal 已經停止開發,故不建議繼續使用此軟體撰寫 Pascal 程式。

    Object Pascal 目前的生態

    以內建的功能來說,Object Pascal 所提供的函式庫還算齊全。目前 Object Pascal 分成 Delphi (商業軟體) 和 Free Pascal (自由軟體) 兩種。兩套系統的語法和函式庫不完全相容,所以要分開來看。

    Delphi 主要有三套函式庫:

    • Run-Time Library:基本而常見的任務
    • VCL (Visual Component Library):Windows 平台的圖形界面程式元件,也有非圖形界面程式的元件
    • FireMonkey:跨平台的圖形界面程式函式庫

    Free Pascal 主要也有三套函式庫:

    • Run-Time Library:基本而常見的任務
    • FCL (Free Component Library):類似於 VCL,但只有非圖形界面程式的部分
    • LCL (Lazarus Component Library):跨平台的圖形界面程式元件,為選擇性的功能

    Free Pascal 的函式庫和 Delphi 的函式庫部分相容,讓 Delphi 程式設計者轉換開發環境更容易。

    但 Object Pascal 現在不是主流語言,所以第三方函式庫較少,學習資源也比較少。要有耐心找尋資料,必要時得看函式庫的原始碼來學習。

    Object Pascal 的替代品

    由於 Object Pascal 本身非主流語言,此處所列的 Pascal 替代品都比 Pascal 本身熱門得多。本節的目的是讓讀者觀察 Object Pascal 的定位。

    C++

    C++ 可說是 Object Pascal 的直接競爭者,因為兩者都是跨平台 (cross-platform)、靜態型態 (statically-typed)、編譯語言 (compiled language)。兩者皆可生成有效率的機械碼,而非位元組碼 (bytecode)。

    兩者在語法特性上也有相似之處。C++ 和 Object Pascal 皆支援命令式 (imperative)、物件導向 (object-oriented)、泛型 (generic) 程式設計,但 Object Pascal 缺乏函數式程式設計的特性。

    Pascal 內建的函式庫功能還算豐富,但 Pascal 非主流語言,故社群函式庫的數量輸 C++ 一大截。

    Java

    Java 算是簡化過的 C++,移除了指標、記憶體管理及一些易出錯的特性,故 Java 比 C++ 簡單得多。代價則是 Java 依賴著龐大的運行環境。所以,Java 也可用來替代 Object Pascal。

    雖然 Java 使用位元組碼而非機械碼,但 Java 平台經多年優化,效能還算不錯。在和 Free Pascal 比較的 benchmark 中,兩者互有勝負 (參考這裡)。

    C#

    C# 是為了和 Java 競爭而開發的語言,基本上和 Java 的使用領域是重疊的。而且 .NET Core 近年來重視跨平台應用,和 Delphi 的市場重疊性很高。故可以用 C# 取代 Object Pascal。

    值得一提的是,C# 的首席架構師 Anders Hejlsberg 原本是 Delphi 的首席架構師。微軟將 Hejlsberg 從 Borland 挖角過去。這件事也影響了 Delphi 的發展。

    附註

    在本系列文章中,我們會使用 Free Pascal 來編譯 Pascal 程式碼,並在大部分程式碼中使用預設模式來編譯。

    【分享本文】
    Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Yahoo
    【追蹤本站】
    Facebook Facebook Twitter Plurk