跳轉到內容

Scribunto:入門/背景

來自華夏公益教科書,開放的世界,開放的書籍

什麼是 Scribunto?

[編輯 | 編輯原始碼]

要了解什麼是 Scribunto,首先需要了解 MediaWiki。MediaWiki 是為維基百科(一個流行的線上百科全書)提供支援的軟體。它是一個維基引擎,這意味著任何人都可以隨時編輯任何頁面。MediaWiki 是為維基百科而構建的,維基百科的成功也意味著 MediaWiki 的蓬勃發展。截至 2014 年 2 月,超過 9,000 個網站使用 MediaWiki,[1] 並且已經編寫了超過 2,000 個核心 MediaWiki 軟體擴充套件。[2]

Scribunto 是這 2,000 個擴充套件之一。Scribunto 這個名字在拉丁語中意為他們將會寫,這很恰當,因為 Scribunto 允許使用者在 MediaWiki 維基上編寫計算機程式。具體來說,它允許使用者嵌入用 Lua 程式語言編寫的指令碼。維基媒體基金會是一個非營利組織,運營著維基百科並監督 MediaWiki 軟體的開發,他們將這些指令碼視為現有 MediaWiki 模板系統的一種替代方案。與 MediaWiki 模板相比,Lua 指令碼具有顯著的效能優勢,尤其是在更復雜的模板中,這些模板具有許多引數和多個子模板。Lua 指令碼也比 MediaWiki 模板更靈活,在某些情況下,可以顯著減少相同功能的程式碼大小。

什麼是 Lua?

[編輯 | 編輯原始碼]

Lua 是一種程式語言,由巴西里約熱內盧天主教大學的計算機科學家於 1993 年開發。它快速輕便,使其成為嵌入式應用的理想選擇。它還具有相對簡單的語法,並以學習曲線短而聞名。

Scribunto 的起源在於 MediaWiki 的模板系統。最初,模板旨在作為一種在許多不同頁面上重複使用相同內容的方法。例如,在維基百科上,它們被用於製作需要改進的文章的維護橫幅,以及用於連結相關文章的導航框。這極大地簡化了文章的維護,因為使用者只需對模板進行一次編輯,就可以對數百篇文章進行更改。

在 1.3 版中,MediaWiki 開發人員添加了在模板中使用引數的功能,這意味著同一個模板可以在不同頁面上顯示不同的輸出。此外,從 MediaWiki 1.6 開始,這些引數可以接受預設值。這使得模板變得更加靈活,但也有意想不到的缺點。透過操作引數名稱和預設值,可以將條件邏輯新增到模板中。

使用條件邏輯的能力使模板可以作為一種程式語言使用。模板從未被設計用於執行此類工作,以這種方式使用它們存在幾個缺點。其中一個是顯示程式碼與邏輯程式碼混合在一起,結果是模板不能輕易縮排以幫助理解。另一個是它們很慢;MediaWiki 已經用具有條件邏輯(PHP)的程式語言編寫,在它之上新增另一種準程式語言會帶來顯著的效能成本,尤其是對於複雜的模板而言。一個名為“qif”的特定模板,提供了一種比直接操作模板引數更簡單的方式來使用條件邏輯,並在維基百科上得到了廣泛使用,相應的對效能產生了負面影響。

為了嘗試改善這種情況,MediaWiki 的主要開發人員之一 Tim Starling 編寫了 ParserFunctions 擴充套件,它引入了包括#if#switch在內的邏輯運算子。這在一定程度上提高了效能,但從未打算作為永久性解決方案。果然,基於 ParserFunctions 的模板變得比那些使用 qif 的模板更復雜。

MediaWiki 1.12 中引入了一個進一步的創新來解決模板效能問題,它以 MediaWiki 解析器的新預處理器形式出現。這個新的預處理器旨在僅在必要時才評估模板程式碼。因此,如果一個模板使用了#if 解析器函式,MediaWiki 將僅在測試評估為true時才評估“true”程式碼,並且僅在測試評估為false時才評估“false”程式碼。同樣,這個預處理器在提高 MediaWiki 的解析效能方面取得了成功,但在使用許多複雜模板的頁面上仍然很慢。

Scribunto 是解決 MediaWiki 模板效能問題的最新努力。MediaWiki 開發人員沒有對解析器函式或 MediaWiki 的核心軟體進行更多改進,而是選擇允許使用者在維基頁面上使用成熟的指令碼語言。這意味著基於 Scribunto 的模板與基於 ParserFunctions 的模板相比,效能有顯著提高。根據模板的不同,Scribunto 版本的速度可以是 ParserFunctions 版本的兩倍到 50 倍。[3] Scribunto 還提供邏輯程式碼和顯示程式碼的適當分離,這意味著基於 Scribunto 的模板可以輕鬆縮排和添加註釋以提高可讀性。

  1. https://wikiapiary.com/wiki/Statistics
  2. https://www.mediawiki.org/wiki/Extension_Matrix/AllExtensions
  3. http://en.wikipedia.org/wiki/User:Dragons_flight/Lua_performance
華夏公益教科書