本页使用了标题或全文手工转换

宣告式編程

维基百科,自由的百科全书
(重定向自声明式编程
跳到导航 跳到搜索

宣告式編程(英語:Declarative programming)或译为声明式编程,是對與指令式編程不同的編程範型的一種合稱。它们建造计算机程序的结构和元素,表达计算的逻辑而不用描述它的控制流程[1]

概述[编辑]

常見的宣告式語言包括:資料庫查詢語言SQL的查询子集和XQuery英语XQuery正则表达式配置管理系统如Puppet管理配置语言。歸入這種範型的很多語言,描述问题领域英语Domain knowledge内目標的性質,讓電腦明白目標,而非流程,从而尝试极小化有关的副作用[2]。而指令式编程则需要用语言原语英语Language primitive来明确的指出每一步该怎么做[3]

可归入声明式编程范型的领域专属语言(DSL)还包括:yacc语法解析器,编译说明语言Make等。DSL不需要是图灵完全的,往往容易以一种纯声明式的方式来表达。很多文本标记语言例如HTMLMXMLXAMLXSLT往往是声明式的。

定义[编辑]

声明式编程,通常被定义为除指令式以外的任何编程范型。同时存在一些其他的定义,简单的将宣告式编程和命令式编程做对比,例如:

这些定义存在着一些重合。

子编程范型[编辑]

声明式编程是一个笼统的概念,除了一些特定的领域专属语言之外,一些更加知名的编程范型也被归类为其子范型。

逻辑式编程[编辑]

逻辑编程通常被看做是形式逻辑的理论,把计算看做推导,透過函數推理规则重写規則,來描述變數之間的關係。它的語言執行器(編譯器解释器)採用了一個固定的算法,以從這些關係產生結果。作为典型代表的Prolog语言,声明关系并且对关系进行提问;它和许多逻辑编程语言,都允许副作用的存在。

函数式编程[编辑]

函数式编程,尝试最小化状态英语State (computer science)带来的副作用,因此可以被归类入宣告式编程,它現在因大幅简化了并行计算的编写难度而备受关注[5]。除了纯函数式编程语言如Haskell,多数函数式编程语言如SchemeClojureOCamlStandard ML等,允许副作用的存在。

约束式编程[编辑]

约束式编程中,变量之间的关系是在约束中说明的,定义了问题的解的范围。这些约束然后被应用程序来求解,以使得每个变量获得一个值,并让最多的约束得到满足。约束式编程经常被用作函数式編程、逻辑编程甚至指令式编程的补充,用来解決人工智能中的約束滿足問題

參見[编辑]

參考[编辑]

  1. ^ Lloyd, J.W., Practical Advantages of Declarative Programming 
  2. ^ declarative language. FOLDOC. 17 May 2004 [26 January 2020]. (原始内容存档于2015-08-10). 
  3. ^ Sebesta, Robert. Concepts of programming languages. Boston: Pearson. 2016. ISBN 978-0-13-394302-3. OCLC 896687896. 
  4. ^ Chakravarty, Manuel M. T. On the Massively Parallel Execution of Declarative Programs (学位论文). Technische Universität Berlin. 14 February 1997 [26 February 2015]. (原始内容存档于2015-09-23). In this context, the criterion for calling a programming language declarative is the existence of a clear, mathematically established correspondence between the language and mathematical logic such that a declarative semantics for the language can be based on the model or the proof theory (or both) of the logic. 
  5. ^ Marlow, Simon. Parallel and Concurrent Programming in Haskell: Techniques for Multicore and Multithreaded Programming. O'Reilly Media. 18 June 2013. ISBN 978-1449335946. 

外部連結[编辑]