程式相容性

老司機的詩和遠方發表於2020-04-06

程式碼版本可以提供各種不同形式的相容性:原始碼相容性,連結相容性,執行相容性,和程式相容性。這些都是根據C++程式建立各個過程命名的,
1、如果沒有使用者需要重新編譯任何程式碼,那麼程式庫的版本n和版本m就具有原始碼相容性
2、如果沒有使用者需要重新編譯任何目標檔案,那麼版本n和版本m就具有連結相容性
3、如果沒有任何目標檔案等需要重新連結,那麼版本n和版本m程式相容性
4、儘量將重新擴充套件的程式碼隔離成儘可能少的幾個檔案,那麼當程式庫升級的時候,重新編譯的就只會是幾個檔案而已

理論原始碼相容性

原始碼相容性主要指的是由於版本升級導致介面程式碼增加,而如果使用者的執行程式碼的平臺資源緊張的話就會導致使用者不得不重新進行程式碼設計和優化。理論上C++程式庫的每個改變幾乎都具有原始碼不相容性。

實際原始碼相容性

通常實際中,那些既沒有刪除也沒有改變已有功能的更改,在實際中都是原始碼相容。
1、增加一個成員函式
2、授權友元關係
3、放寬成員或者基類的保護級別
4、把先前的外聯函式改變成為行內函數
5、行內函數改變成為外聯
另外,刪除功能的改變往往都是原始碼不相容,藉助於被棄用或者除黑移植技術,使用者可以更容易地處理原始碼不相容性,與其把函式從程式庫中刪除,不如在相應文件中建議不再使用,這樣子可以使得舊的程式可以繼續執行,新編寫的程式將不再使用這個函式。
某個函式即使被棄用了,但它的描述還應該依然在文件中存在,因為有些程式設計師還需要維護使用這個函式的舊程式程式碼。

執行相容性

如果程式庫版本n和早期版本m是執行相容,那麼只要通過再次執行程式,使用版本m的程式就可以得到升級,這裡,為了提供執行相容性使用機制就是動態連結機制。

總結

程式庫開發者應該著重考慮,為他們現在的使用者提供向後相容(相容老的版本),並且預料向前相容性(也就是考慮後面升級擴充套件)。

相關文章