Boost C++ 函式庫

...世界上最受推崇且設計精良的 C++ 函式庫專案之一。 Herb SutterAndrei Alexandrescu,《C++ 程式設計規範

以文字和 HTML 格式呈現的功能模型圖

作者:Beman Dawes

簡介

Czarnecki 和 Eisenecker (簡稱 C&E) 在其開創性的著作《產生式程式設計》中描述了如何建構功能模型 [C&E 4.4],其中包含功能圖以及語義、原理和其他屬性。功能模型接著用於驅動設計週期,最終導向手動或自動組裝配置。

功能模型提供了一種語言來描述函式庫的可變性,這在 boost.org 的討論中經常是一個重要的議題。沃爾夫假說「語言塑造我們的思維方式,並決定我們可以思考什麼」似乎適用於此處。在討論函式庫可變性議題時,由於缺乏良好的語言,我們一直束手無策。有了功能模型,我們現在有了一種語言可以繼續對話。

C&E 提出的圖形功能圖不適合 boost.org 所依賴的電子郵件討論。功能圖的階層性質可以透過簡單的基於文字的功能圖語言來表示。功能模型還可以利用 HTML 中固有的超連結。

語法

功能圖語言的語法以擴展巴科斯範式表示;::= 代表產生式,[...] 代表選項,{...} 代表零個或多個實例,| 代表替代方案。

feature-model       ::= concept-name details { feature }

feature             ::= feature-name [details]

details             ::= "(" feature-list ")"      // required features
                      | "[" feature-list "]"      // optional features

feature-list        ::= element { "|" element }   // one only
                      | element { "+" element }   // one or more
                      | element { "," element }   // all
                                                  // [a+b] equivalent to [a,b]

element             ::= feature
                      | details
concept-name        ::= name

feature-name        ::= name

套用常用的詞彙慣例。名稱不區分大小寫,由一個首字母組成,後接字母、數字、底線或連字號,不允許空格。

每個名稱至少應有一個實例超連結到對應的功能描述

雖然此語法旨在供人們之間進行書面溝通,但它也可以很容易地被機器解析,以供自動化工具使用。

描述性資訊與每個概念或功能相關聯。根據 [C&E 4.4.2],這包括:

  • 語義描述。
  • 原理。
  • 利害關係人和客戶程式。
  • 範例系統。
  • 約束和預設依賴規則。
  • 可用性站點、綁定站點和綁定模式。
  • 開啟/關閉屬性。

什麼是功能?

功能 [C&E 4.9.1] 是「使用者或客戶程式可能想要控制的概念的任何方面。因此,在功能建模期間,我們不僅記錄功能性特徵……還記錄實作功能……各種最佳化、替代實作技術等等。」

範例

special-container ( organization,
                    performance,
                    interface  )         // all required

organization [ ordered + indexed ]       // zero or more (4 configurations)

indexed [ hash-function ]                // zero or one  (2 configurations)

performance ( fast | small | balanced )  // exactly one  (3 configurations)

interface ( STL-style + cursor-style )   // one or more  (3 configurations)

應提供 some-container、organization、ordered、indexed、hash-function、performance、fast、small、balanced、interface、STL-style 和 cursor-style 的功能描述。

在沒有約束的情況下,可能的配置數量為 (2 + 2*2) * 3 * 3 = 54。

存在等效的表示方法。例如:

special-container ( organization[ ordered+indexed[ hash-function ]],
                    performance( fast|small|balanced ),
                    interface( STL-style+cursor-style ) )

參考文獻

Krzysztof Czarnecki 和 Ulrich W. Eisenecker,《產生式程式設計》,Addison-Wesley,2000 年,ISBN 0-201-30977-7