领域特定语言

此條目可参照英語維基百科相應條目来扩充。若您熟悉来源语言和主题,请协助参考外语维基百科扩充条目。请勿直接提交机械翻译,也不要翻译不可靠、低品质内容。依版权协议,译文需在编辑摘要注明来源,或于讨论页顶部标记{{Translated page}}标签。

領域特定語言(英語:Domain-specific language,縮寫:DSL),也稱為特定域語言,是專門針對特定應用領域[註解 1]的计算机语言,和可以用在多種領域的通用語言(英语:general-purpose language)(GPL)恰好相反。像HTML專門用在網頁設計上,就屬於領域特定語言,也有些領域特定語言只用在一個或幾個軟體上,例如MUSH(英语:MESH)軟體碼。領域特定語言還可以依使用的語言分類,像是領域特定的標記語言、領域特定的建模語言(或更廣義的規格語言)以及領域特定的程式語言。從電腦發明開始,就已出現特定用途的電腦語言。而「領域特定語言」一詞是隨著特定域建模(domain-specific modeling)的興起,才開始廣為使用。簡單的領域特定語言(特別是只有單一應用程式使用的領域特定語言),有時也會稱為迷你語言。

領域特定語言和通用語言之間沒有明確的界線,因為可能某计算机语言原來有一些適用於特定領域的特徵,但也可以應用在更通用的範圍,相反的,也有可能某计算机语言理論上可以用在多種領域,但實務上只用在特定領域中。像Perl一開始是設計為文字處理語言以及膠水語言(和AWK、shell script的領域相同),但後來成為通用的程式語言。相反的,PostScript是圖靈完備的語言,但實際上只用作頁面描述語言(領域特定語言)。

用途[编辑]

設計及使用適合的語言,是領域工程(英语:domain engineering)中重要的一環,作法可能是選擇適合此領域的現有語言(可能是某個領域特定語言或通用電腦語言),也可能是開發一種新的領域特定語言。面向语言的程序设计會把為了描述問題而創建特定語言一事,視為問題解決流程的標準步驟之一。假如用一種新的領域特定語言描述某種問題,會比用現有語言描述更加清楚,而且這種問題又常常出現,那麼創建此一領域特定語言(以及配合的軟體)就是值得的。領域特定語言可以針對特定的問題領域、特定的問題表示方式、特定的解決方案技術,或是某一領域的其他層面。

用在設計和實現上[编辑]

领域特定语言是在設計和實現上有特定目的的語言(或是宣告的語法或是文件)。领域特定语言可以是視覺對話語言(visual diagramming language),例如Generic Eclipse Modeling System(英语:Generic Eclipse Modeling System)中建立的語言,可以是程式化抽象,例如Eclipse Modeling Framework,也可以是文字語言。例如,命名列工具grep中正则表达式語法,可以在文字中尋找特殊排列規則的文字。sed工具定義了匹配和取代正则表达式的語法。一般來說,這些小工具可以在殼層內整合使用,以達到複雜的系統工作。

有時领域特定语言和腳本語言之間沒有清楚的分界,不過领域特定语言多半沒有處理檔案系統的低階功能、跨行程控制、以及一些全功能程式語言或腳本語言必須有的功能。許多领域特定语言不會編譯成字节码或是可執行檔,而會轉換為許多不同的媒體格式。像GraphViz可以輸出PostScript、GIF檔、JPEG檔等。Csound則會編譯成聲音檔。像是POV-Ray之類的光線追蹤(ray-tracing)领域特定语言會轉換為圖形檔。像是SQL之類的電腦語言會有種特殊的情形:SQL是針對特定領域(存取和維護關聯資料庫)的,所以的確是领域特定语言,也常會其他應用程式呼叫,但SQL的關鍵字及函數比許多腳本語言都多,一般也會視為是獨立的語言,有可能是因為在程式中資料庫使用的普及性,以及要成為此語言專家需要有的掌握程度。

許多领域特定语言也有提供API,因此可以在其他程式執行時呼叫此API,不影響原程式的流程,此運作方式類似程式的函式庫,和腳本語言之間的差異就更小了。

程式開發工具[编辑]

有些领域特定语言會隨著時間擴展,加入全功能的程式開發工具,因此更增加了該語言是否是领域特定语言的問題難度。

在模型驱动工程中,有許多领域特定语言的例子,像是用斷言說明模型的OCL(英语:Object Constraint Language)、或是领域特定的轉換语言QVT(英语:QVT),不過统一建模语言(UML)反而是通用的建模語言。

有一個類推可以說明超小型語言及领域特定语言:超小型語言像是刀,有許多不同的使用方式,從切食物到鋸樹都可以。领域特定语言像是電鑽,也有很多不同的使用方式,不過都是用來在東西上鑽洞上。通用特定语言是完整的完整的工作台,有許多特別用來進行特定工作的工具。程式設計師使用领域特定语言的方式類似他們看工具台,知道他們需要一個較好的電鑽,而且找到一個剛好適用的领域特定语言。

優點和缺點[编辑]

領域特定語言的一些優點如下[1][2]:

領域特定語言可以使解決方案以較簡潔的方式呈現,而且達到問題域上的抽象層次。意思就是領域專家自身可以理解、驗證、修改,甚至開發領域特定語言的程式。不過,可以達到此程度的例子不多[3]。

領域特定語言可以達到領域層次的计算机安全。只要其語言構造(language construct)是安全的,以此寫的所有程式碼可以視為是安全的[來源請求]。

領域特定語言有助於將商業資訊系統的開發,從傳統的軟體開發者轉到領域專家身上,此一群體人數較多,對此一領域有較深入知識,但程式技術較為不足[4]。

若領域特定語言的scope較小,會比較容易學習。

領域特定語言的一些缺點如下:

學習新語言的成本。

應用範圍受限。

設計、實現及維護領域特定語言以及開發工具(集成开发环境)的成本。

尋找、設定及維護適當的語言scope。

設計領域特定語言時,需在領域專門的語言構造,以及通用的語言構造之間取捨平衡。

相較於程式設計師撰寫的程式碼,領域特定語言的效率可能會比較低。

同一領域可能有計多種非標準語言,例如不同保險公司開發、使用的領域特定語言[5]。

非技術背景的領域專家不容易自行撰寫或修改領域特定語言的程式[3]。

領域特定語言和(用通用語言撰寫的)IT系統其他模組不易整合。

特定領域特定語言的專家人數較少,會帶來人力成本的增加。

不容易找到相同領域特定語言的程式碼範例。

註解[编辑]

^ 此處的領域也可能是指业务领域(business area),例如壽險政策、戰鬥模擬、薪資計算、帳單管理等

相關條目[编辑]

語言工作檯(英语:Language workbench)

架構描述語言

專門用途語言(英语:Language for specific purposes)

行話

元語言抽象(英语:Metalinguistic abstraction)

程式設計領域(英语:Programming domain)

參考資料[编辑]

^ Marjan Mernik, Jan Heering, and Anthony M. Sloane. When and how to develop domain-specific languages. ACM Computing Surveys, 37(4):316–344, 2005.doi:10.1145/1118890.1118892

^ Diomidis Spinellis. Notable design patterns for domain specific languages (页面存档备份,存于互联网档案馆). Journal of Systems and Software, 56(1):91–99, February 2001. doi:10.1016/S0164-1212(00)00089-3

^ 3.0 3.1 Freudenthal, Margus. Domain Specific Languages in a Customs Information System. IEEE Software. 1 January 2009: 1. doi:10.1109/MS.2009.152.

^ Aram, Michael; Neumann, Gustaf. Multilayered analysis of co-development of business information systems (PDF). Journal of Internet Services and Applications. 2015-07-01, 6 (1) [2022-10-08]. S2CID 16502371. doi:10.1186/s13174-015-0030-8 . (原始内容存档 (PDF)于2015-09-07).

^ Miotto, Eric. On the integration of domain-specific and scientific bodies of knowledge in Model Driven Engineering (PDF). [2010-11-22]. (原始内容 (PDF)存档于2011-07-24).

查论编编程语言类别(維基數據:Q116481801)范型

指令式

过程式

函数式

逻辑式

基于类

面向对象

基于原型

基于对象

面向方面

数据流程

同步式

动态

脚本

元编程

反射式

事件驱动

并发

基于演员

管道

阵列

串接式

面向堆栈

宣告式

模板

可扩展

基于规则

领域特定

多范型

触控

层次

机器

汇编

编译

解释

低级

高级

极高级

有关

世代

非英语基础

可视化

查论编计算机科学的主要领域注:该模板大致遵循ACM 电脑分类系统。计算机硬件

印刷电路板

外部设备

集成电路

超大规模集成电路

单片系统

绿色计算

電子設計自動化

硬件加速

处理器

系统架构管理

電腦系統架構

嵌入式系统

实时计算

网络

网络传输协议

路由

网络拓扑

网络服务

软件管理

直譯器

中间件

虛擬機器

操作系统

软件质量

软件符号和工具

编程范型

编程语言

編譯器

领域特定语言

軟體框架

集成开发环境

软件配置管理

函式庫

软件开发

软件开发过程

需求分析

软件设计

软件部署

軟體維護

开源模式

计算理论

自动机

可计算性理论

計算複雜性理論

量子计算

数值计算方法

计算机逻辑

形式语义学

算法

算法分析

算法设计

算法效率

随机化算法

计算几何

计算数学

离散数学

信息与计算科学

统计学

数学软件

数理逻辑

集合论

数论

图论

类型论

范畴论

信息论

数值分析

数学分析

信息系统

数据库管理系统

数据库

存储器

企业信息系统(英语:Enterprise information system)

社会性软件

地理信息系统

决策支持系统

过程控制

数据挖掘

數位圖書館

系统平台

數位行銷

万维网

信息檢索

安全

密码学

形式化方法

入侵检测系统

网络安全

信息安全

人机交互

计算机辅助功能

用户界面

可穿戴计算机

普适计算

虚拟现实

聊天機器人

并发性

并发计算

并行计算

分布式计算

多线程

多元處理

人工智能

自动推理

计算语言学

计算机视觉

进化计算

专家系统

自然语言处理

机器人学

机器学习

監督式學習

無監督學習

强化学习

交叉驗證

计算机图形学

计算机动画

可视化

渲染

修飾照片

圖形處理器

扩展现实

增强现实

混合现实

虚拟现实

图像处理

图像压缩

实体造型

应用计算

量子计算

电子商务

企业级软件

计算数学

计算物理学

计算化学

计算生物学

計算社會科學

医学信息学

数字艺术

電子出版

網絡戰

电子游戏

文字处理器

運籌學

教育技术学

生物信息学

认知科学

文档管理系统(英语:Document management system)

分类

主题

专题

维基共享

友情链接