宣告式編程

宣告式編程英語:)或译为声明式编程,是一種编程范式,与指令式編程相對立。它描述目標的性質,讓電腦明白目標,而非流程。声明式编程不用告诉电脑问题领域,从而避免随之而来的副作用。而指令式编程则需要用算法来明确的指出每一步该怎么做。

宣告式编程通常被看做是形式逻辑的理论,把计算看做推导。宣告式编程因大幅简化了并行计算的编写难度,自2009起备受关注。

宣告式語言套件包括資料庫查詢語言(SQLXQuery),正则表达式,逻辑编程,函数式编程和组态管理系统。

宣告式編程透過函數推理规则重写規則,來描述變數之間的關係。它的語言執行器(編譯器解释器)採用了一個固定的算法,以從這些關係產生結果。

宣告式編程語言通常用作解決人工智能約束滿足問題

定义

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

  • 声明式编程是告诉计算机需要计算“什么”而不是“如何”去计算
  • 任何没有副作用的编程语言,或者更确切一点,任何参照透明的编程语言
  • 任何有严格计算逻辑的编程语言[1]

这些定义有一些是重合的。

子编程范式

声明式编程是一个大的概念,其下包含一些有名的子编程范式。

约束式编程

约束式编程英語:)中,变量之间的关系是在约束中说明的,定义了问题的解的范围。这些约束然后被应用程序来求解,以使得每个变量获得一个值,并让最多的约束得到满足。

约束式编程经常被用作函数式編程、逻辑编程甚至命令式编程的补充。

领域专属语言

一些著名的声明式领域专属语言(DSLs)包括yacc语法分析器,编译说明语言MakePuppet管理配置语言,正则表达式SQL的一些子集(例如Select queries等)。DSLs有时非常有用,并且不需要是图灵完全的,这往往让其很容易以一种纯宣告式的方式来表达。

很多文本标记语言例如HTMLMXMLXAMLXSLT往往是声明式的。

函数式编程

函数式编程,特别是纯函数式编程,尝试最小化状态带来的副作用,因此被认为是宣告式的。大多数函数式编程语言,例如SchemeClojureHaskellOCamlStandard MLUnlambda,允许副作用的存在。

逻辑式编程

逻辑式编程语言如Prolog声明关系并且对关系进行提问。同函数式编程一样,许多逻辑编程语言允许副作用的存在。

參見

參考

  1. Chakravarty, Manuel M. T. (Doctoral dissertation). 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.

外部連結

「宣告式」與「指令式」

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.