從編譯器對指令集的要求看API設計原則

摘要:最近看《計算機體系結構:量化研究方法(第五版)》,發現指令集設計中的一些原則,對API設計也同樣適用,給大家分享一下。

本文中的所有內容來自工作和學習過程中的心得整理,如需轉載請註明出處。周榮華@燧原科技

1 正交

指令集需要滿足操作、數據類型和尋址方式三個方面的功能就是正交的。所以API設計應該也要滿足對外的一些功能需求,一般是基本操作、數據類型定義和內存訪問方式。

正交的要求不只是接口設計要覆蓋所有功能,還需要盡量減少冗餘接口。

2 提供原語而不是解決方案

API應該提供完成解決方案需要的一些原語的集合,而不是某個解決方案。

提供解決方案到API中的最大缺點是穩定性太差,這些解決方案可能在當前適用,但過幾個月,有新的解決方案的時候,原來的API被廢掉的概率非常大。

當然,對部分多個解決方案中共用的一些功能,即使能夠用現有原語實現,額外提供一些公共功能的接口也是一種不錯的選擇,但切忌不要過於特定化。

3 簡化候選項之間的權衡

如果完成一個功能有多種選項,必須要有嚴格的使用場景約束。

多個選項都可以用,會額外增加測試覆蓋的負擔,用戶制定解決方案的時候,也會不知道該選擇哪個,往往會通過多個原型測試驗證來推動API的實際選擇,但這種測試得到的結果,在多個版本的API之間可能是不穩定的,這也會給客戶的版本升級帶來巨大負擔。

4 常量編譯期綁定

部分調用比較頻繁的接口,如果對性能要求特別苛刻的話,需要對外提供inline函數,方便性能的極致優化。

 

參考文檔://ict.iitk.ac.in/wp-content/uploads/CS422-Computer-Architecture-patterson-5th-edition.pdf

Tags: