Saturday, January 13, 2018

API v.s. DSL

API 與 DSL 是不同的概念,偏偏有一句電腦科學的諺語: library design is language design.

查一下 stackoverflow ,也查到了還不錯的解釋與比較。

DSL (domain specific language) 是「程式語言」。它們可以是編譯的、直譯的、資料查詢用的 (如 SQL)、標記語言 (如 JSON, XML)。總之,DSL 會是個語言。 DSL 這個詞描述的是它們的本質 (nature),而不是它們的用途 (purpose)。

API (application programming interface) 是「讓軟體元件可以被其它元件使用的溝通介面」。這個詞彙描述的是它們的用途 (purpose) ,而不是它們的本質 (nature) 。所以 API 可以是各種不同的形式: 物件方法、 C 語言的函式等等。

在 Martin Fowler 的 DslBoundary 一文中則是特別討論了算是一種特例的 embedded DSL :
1. API 強調提供新的「功能」
2. DSL 的重點則是在於:以一種『新的語法、編程方式』來提供新的「功能」