LPC 語言 (lpc)


* LPC 是什麼 ?

LPC 是撰寫 MudOS (及 LPmud) 物件所使用的語言. LPC 是「Lars Pensj| C」的縮寫. 看到此名字, 您也許會猜到 LPC 是以 C 的語法 (syntax) 為基礎的. LPC 提供了 C 語言的 while 迴圈 (loop)、 for 迴圈、 if 敘述 (statement)、switch 敘述、改寫過的 sscanf 、整數 (integer) 資料型態 (LPC 也提供了其他 C 語言所無的資料型態, 像是物件 (object) 和映射 (mapping) ) . LPC 使用 C 的語法定義函式與呼叫函式、宣告變數. 請注意, LPC 的字串資料型態與 C 語言所提供的字串, 有著極大的差異. 詳細的資料請參考 LPC 的語法和語言結構的教學文件.

以下是 LPC 與 C 之間的一些相異之處:

LPC 物件中, 不需要名為 main 的函式 (雖然有一個叫做 create 的函式).

遊戲驅動程式 (gamedriver) 提供的外部函式 (efun)  (或稱為系統呼叫 (system calls) ), 與 C 函式庫 (library) (即 libc.a) 中所提供的完全不同.

LPC 裡沒有 malloc(). 倒是有一個 allocate( 整數 value ) 外部函式可以為陣列 (arrays) 配置記憶體. 請注意, allocate 參數 (argument) 的單位不是位元組 (bytes), 而是元素 (element) 的數目.

記憶體不會明確地釋放掉 (never explicitly deallocated). 遊戲驅動程式會追蹤一份資料被參考 (reference) 多少次. 當參考數 (reference count) 降為零 (沒有任何物件有此變數的拷貝) , 就會重新宣告此變數使用的記憶體空間 (垃圾回收).

LPC 中的字串資料型態比較接近 BASIC. 字串不像 C 語言宣告成字元陣列 (arrays of character), 而如同一個基本的內部型態 (basic intrinsic type). 多個字串可以用 + 運算子 (operator) 連結成一個.

舉例來說, 以下的 LPC 敘述:

與下面的 C 敘述相同: LPC 是一個需要解譯的語言 (interpreted language)﹝雖然 LPC 在解譯之前, 會編譯 (compile) 為一個內部的簡潔代用型式﹝internal compact tokenized form) ﹞.

LPC 沒有結構資料型態 (structure) 或聯合資料型態 (union). 實際上, 「->」運算子用於指示其他物件的函式呼叫. 而某些情形下, 映射 (mapping) 資料型態可以當作結構資料型態的代用品.

sscanf 的用法與 C 的不同. sscanf 的參數不是指標 (pointer) (因為 LPC 沒有明確的指標資料型態) . 而且, sscanf( arg, "%s %s ", str1, str2 ) 運作的結果也與 C 的程式設計師所預期的不同. 在 C 裡, 參數的第一個字 (譯按: 此處的「字」, 指的是英文的單字, 每個字之間以空白字元 (space) 隔開. ) 會複製到 str1 , 而參數的第二個字複製為 str2. 但是在 LPC, 第一個字同樣是複製到 str1,  不同之處是字串剩下的內容卻全部複製到 str2.


翻譯: Spock @ FF 97.Aug.8.

回到上一頁