成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

開發者需要了解的領域特定語言(DSL)

開發 后端
領域特定語言是在特定領域下用于特定上下文的語言。作為開發者,很有必要了解領域特定語言的含義,以及為什么要使用特定領域語言。

[[317344]]

領域特定語言是在特定領域下用于特定上下文的語言。作為開發者,很有必要了解領域特定語言的含義,以及為什么要使用特定領域語言。

領域特定語言domain-specific language(DSL)是一種旨在特定領域下的上下文的語言。這里的領域是指某種商業上的(例如銀行業、保險業等)上下文,也可以指某種應用程序的(例如 Web 應用、數據庫等)上下文。與之相比的另一個概念是通用語言general-purpose language(GPL,LCTT 譯注:注意不要和 GPL 許可證混淆),通用語言則可以廣泛應用于各種商業或應用問題當中。

DSL 并不具備很強的普適性,它是僅為某個適用的領域而設計的,但它也足以用于表示這個領域中的問題以及構建對應的解決方案。HTML 是 DSL 的一個典型,它是在 Web 應用上使用的語言,盡管 HTML 無法進行數字運算,但也不影響它在這方面的廣泛應用。

而 GPL 則沒有特定針對的領域,這種語言的設計者不可能知道這種語言會在什么領域被使用,更不清楚用戶打算解決的問題是什么,因此 GPL 會被設計成可用于解決任何一種問題、適合任何一種業務、滿足任何一種需求。例如 Java 就屬于 GPL,它可以在 PC 或移動設備上運行,嵌入到銀行、金融、保險、制造業等各種行業的應用中去。

DSL 的類別

從使用方式的角度,語言可以劃分出以下兩類:

  • DSL:使用 DSL 形式編寫或表示的語言
  • 宿主語言host language:用于執行或處理 DSL 的語言

由不同的語言編寫并由另一種宿主語言處理的 DSL 被稱為外部external DSL。

以下就是可以在宿主語言中處理的 SQL 形式的 DSL:

  1. SELECT account
  2. FROM accounts
  3. WHERE account = '123' AND branch = 'abc' AND amount >= 1000

因此,只要在規定了詞匯和語法的情況下,DSL 也可以直接使用英語來編寫,并使用諸如 ANTLR 這樣的解析器生成器parser generator以另一種宿主語言來處理 DSL:

  1. if smokes then increase premium by 10%

如果 DSL 和宿主語言是同一種語言,這種 DSL 稱為內部internalDSL,其中 DSL 由以同一種語義的宿主語言編寫和處理,因此又稱為嵌入式embedded DSL。以下是兩個例子:

  • Bash 形式的 DSL 可以由 Bash 解釋器執行:

    1. if today_is_christmas; then apply_christmas_discount; fi

    同時這也是一段看起來符合英語語法的 Bash。

  • 使用類似 Java 語法編寫的 DSL:

    1. orderValue = orderValue
    2. .applyFestivalDiscount()
    3. .applyCustomerLoyalityDiscount()
    4. .applyCustomerAgeDiscount();

    這一段的可讀性也相當強。

實際上,DSL 和 GPL 之間并沒有非常明確的界限。

DSL 家族

以下這些語言都可以作為 DSL 使用:

  • Web 應用:HTML
  • Shell:用于類 Unix 系統的 sh、Bash、CSH 等;用于 Windows 系統的 MS-DOS、Windows Terminal、PowerShell 等
  • 標記語言:XML
  • 建模:UML
  • 數據處理:SQL 及其變體
  • 業務規則管理:Drools
  • 硬件:Verilog、VHD
  • 構建工具:Maven、Gradle
  • 數值計算和模擬:MATLAB(商業)、GNU Octave、Scilab
  • 解析器和生成器:Lex、YACC、GNU Bison、ANTLR

為什么要使用 DSL?

DSL 的目的是在某個領域中記錄一些需求和行為,在某些方面(例如金融商品交易)中,DSL 的適用場景可能更加狹窄。業務團隊和技術團隊能通過 DSL 有效地協同工作,因此 DSL 除了在業務用途上有所發揮,還可以讓設計人員和開發人員用于設計和開發應用程序。

DSL 還可以用于生成一些用于解決特定問題的代碼,但生成代碼并不是 DSL 的重點并不在此,而是對專業領域知識的結合。當然,代碼生成在領域工程中是一個巨大的優勢。

DSL 的優點和缺點

DSL 的優點是,它對于領域的特征捕捉得非常好,同時它不像 GPL 那樣包羅萬有,學習和使用起來相對比較簡單。因此,它在專業人員之間、專業人員和開發人員之間都提供了一個溝通的橋梁。

而 DSL 最顯著的缺點就在于它只能用于一個特定的領域和目標。盡管學習起來不算太難,但學習成本仍然存在。如果使用到 DSL 相關的工具,即使對工作效率有所提升,但開發或配置這些工具也會增加一定的工作負擔。另外,如果要設計一款 DSL,設計者必須具備專業領域知識和語言開發知識,而同時具備這兩種知識的人卻少之又少。

DSL 相關軟件

開源的 DSL 軟件包括:

  • Xtext:Xtext 可以與 Eclipse 集成,并支持 DSL 開發。它能夠實現代碼生成,因此一些開源和商業產品都用它來提供特定的功能。用于農業活動建模分析的多用途農業數據系統Multipurpose Agricultural Data System(MADS)就是基于 Xtext 實現的一個項目,可惜的是這個項目現在已經不太活躍了。
  • JetBrains MPS:JetBrains MPS 是一個可供開發 DSL 的集成開發環境Integrated Development Environment,它將文檔在底層存儲為一個抽象樹結構(Microsoft Word 也使用了這一概念),因此它也自稱為一個投影編輯器projectional editor。JetBrains MPS 支持 Java、C、JavaScript 和 XML 的代碼生成。

DSL 的優秀實踐

如果你想使用 DSL,記住以下幾點:

  • DSL 不同于 GPL,DSL 只能用于解決特定領域中有限范圍內的問題。
  • 不必動輒建立自己的 DSL,可以首先嘗試尋找已有的 DSL。例如 DSLFIN 這個網站就提供了很多金融方面的 DSL。在實在找不到合適的 DSL 的情況下,才需要建立自己的 DSL。
  • DSL 最好像平常的語言一樣具有可讀性。
  • 盡管代碼生成不是一項必需的工作,但它確實會大大提高工作效率。
  • 雖然 DSL 被稱為語言,但 DSL 不需要像 GPL 一樣可以被執行,可執行性并不是 DSL 需要達到的目的。
  • DSL 可以使用文本編輯器編寫,但專門的 DSL 編輯器可以更輕松地完成 DSL 的語法和語義檢查。

 

 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2017-01-15 17:48:04

Java開發者編程語言

2016-12-26 17:53:05

Java開發者編程語言

2017-02-05 16:00:35

Java編程語言

2025-05-30 01:33:00

2013-04-19 09:23:34

2013開發者開發趨勢和技能

2011-09-20 09:27:50

Web

2017-06-26 15:32:59

前端編譯原理語言知識

2013-07-10 11:11:05

PythonGo語言

2021-05-10 10:01:04

JavaScript開發技巧

2012-02-06 09:14:24

2018-06-15 08:43:33

Java堆外內存

2020-04-03 09:00:00

微服務前端架構

2021-06-07 21:02:44

語言業務領域

2016-08-05 16:28:05

javascripthtml前端

2011-12-08 09:16:12

2015-08-11 08:41:58

游戲數據游戲開發

2009-03-12 14:31:15

QCon

2014-07-08 10:30:59

開發者開發語言

2015-12-23 10:00:04

多種編程語言

2016-06-13 14:13:27

開發者全新編程語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美无乱码久久久免费午夜一区 | 久久综合久| 亚洲一二三区在线观看 | 在线看91 | 国产精品99久久久久久久久久久久 | 国产精品99999999 | 香蕉久久久 | xx性欧美肥妇精品久久久久久 | 日韩高清中文字幕 | 美女毛片免费看 | 91精品国产综合久久婷婷香蕉 | 日本在线一区二区三区 | 色婷婷精品国产一区二区三区 | 中文字幕在线视频免费观看 | 国产伦精品一区二区三区精品视频 | 亚洲欧美在线免费观看 | 欧美一区二区三区国产 | 夜夜爽99久久国产综合精品女不卡 | 在线看一区二区三区 | 女同久久 | 精品国产一区二区三区性色av | 激情六月丁香 | 日本a级大片 | 精品国产黄a∨片高清在线 成人区精品一区二区婷婷 日本一区二区视频 | 中文无吗 | av首页在线 | 精品一区二区免费视频 | 久久免费精品 | 中文一区 | 麻豆精品国产91久久久久久 | 狠狠躁躁夜夜躁波多野结依 | 日本天天色 | 亚洲欧美国产精品一区二区 | 亚洲精选久久 | 久久高潮| 久久久成人一区二区免费影院 | 91精品久久久久久久久久入口 | 最新国产福利在线 | 欧洲在线视频 | 亚洲欧美一区二区三区1000 | 国产在线视频一区 |