投影式編輯
2008 年 1 月 14 日
替代 原始碼編輯 的概念是,系統的核心定義應保存在模型中,並透過投影進行編輯。
要討論這種風格的環境,我發現以系統的多重表示方式來思考會很方便
- 可編輯表示方式:您編輯以變更系統的內容。
- 儲存表示方式:系統定義的永久記錄。
- 可執行表示方式:執行以使系統運作的內容,即執行檔。
- 抽象表示方式:用於操作和推論系統定義。
- 視覺化表示方式:系統定義的不可編輯檢視。
原始碼結合了可編輯和儲存表示方式。它透過將原始碼轉換為可執行表示方式來執行原始碼,這可以透過一個可觀察步驟(解釋)或透過編譯器執行多個步驟。為了執行此動作,它通常會將原始碼轉換為抽象表示方式作為中間步驟,但此抽象表示方式是暫時的,只會在編譯期間存在。原始碼被視為系統的核心定義。

使用投影式編輯時,抽象表示方式是系統的核心定義。工具會操作抽象表示方式,並投影多個可編輯表示方式,讓程式設計師變更系統定義。工具會將抽象表示方式保留在儲存表示方式中,但這與它所投影的任何可編輯表示方式完全分離。與可執行表示方式的關係大致相同,可執行檔是透過從抽象表示方式進行一系列轉換而產生的。

原始碼和投影式編輯環境之間的重要差異在於永久儲存和編輯之間的分離。投影式編輯系統可以選擇任何他們選擇的永久儲存機制,而原始碼系統需要具備一些通用儲存機制,這就是它們幾乎總是文字檔案的原因。
抽象表示方式可以透過多個投影進行編輯,每個投影都可以顯示有限的總資訊量,而這些資訊量與抽象表示方式的實際結構無關。因此,投影式編輯通常會顯示更廣泛的編輯環境,包括圖形和表格結構,而不仅仅是文字形式。
精密的基於原始碼的 IDE 也會顯示多個投影,例如側邊窗格顯示類別的方法清單,並加上圖形註解以指出其 存取修飾詞。然而,這些投影通常與原始碼編輯器非常次要,而且通常無法直接編輯投影,您必須變更原始碼並查看投影更新。
例如 PostIntelliJ IDE 會在載入原始程式碼檔案時,建立一個抽象表示(這也是它們啟動時需要花費一些時間的原因)。它們也會使用抽象表示來執行許多其他程式碼協助功能,例如語境相關程式碼完成和重構。
投影編輯中一個重要的實際問題是,儲存表示並沒有普遍接受的格式。程式設計人員可讀的文字是原始程式碼檔案的普遍選擇,這表示可以建構許多工具來處理它們:編輯器、原始程式碼控制、差異視覺化工具等。投影系統必須自行處理所有這些,這通常就是這些功能經常不足的原因。特別是,許多投影環境因為沒有適當的組態控制系統而深受其害,這使得多人難以在同一個系統定義上進行協作。這與具有大量原始程式碼控制系統來執行此任務的原始程式碼環境形成鮮明的對比。
基於投影的系統與 ModelDrivenSoftwareDevelopment 密切相關,儘管我不認為兩者完全同義。在 MDSD 的背景下,抽象表示通常稱為模型。當然,幾乎所有 MDSD 工具都是基於儲存庫的,但許多基於儲存庫的工具(例如 Microsoft Access)不會將自己視為 MDSD。
(我最初在我的 語言工作台 論文中探討了這種觀看環境的方式。我之所以在此處描述它,是因為我認為投影環境的概念比語言工作台更廣泛。)