1. 程式人生 > >聲明式編程

聲明式編程

規則 簡單的 嘗試 描述 編程 content 引用 [1] 讓其

首先在聲明式編程裏面有2大家族,那就是函數式編程和數據流編程,數據流編程下面就是響應式編程,而函數響應式編程是”繼承”於函數式編程和響應式編程的

聲明式編程(英語:Declarative programming)是一種編程範式,與命令式編程相對立。它描述目標的性質,讓計算機明白目標,而非流程。聲明式編程不用告訴計算機問題領域,從而避免隨之而來的副作用。而命令式編程則需要用算法來明確的指出每一步該怎麽做。

聲明式編程通常被看做是形式邏輯的理論,把計算看做推導。聲明式編程因大幅簡化了並行計算的編寫難度,自2009起備受關註。

聲明式語言包包括數據庫查詢語言(SQL,XQuery),正則表達式,邏輯編程,函數式編程和組態管理系統。

聲明式編程透過函數、推論規則或項重寫(term-rewriting)規則,來描述變量之間的關系。它的語言運行器(編譯器或解釋器)采用了一個固定的算法,以從這些關系產生結果。

聲明式編程語言通常用作解決人工智能和約束滿足問題。

  • 中文名 聲明式編程
  • 外文名 Declarative programming
  • 類別 編程形式
  • 作用 解決人工智能和約束滿足問題

定義

聲明式編程通常被定義為除命令式以外的編程範式。同時存在一些其他的定義,這些定義不是簡單的將聲明式編程和命令式編程做對比,例如:
  • 聲明式編程是告訴計算機需要計算“什麽”而不是“如何”去計算
  • 任何沒有副作用的編程語言,或者更確切一點,任何引用透明的編程語言
  • 任何有嚴格計算邏輯的編程語言
這些定義有一些是重合的。

子編程範式

聲明式編程是一個大的概念,其下包含一些有名的子編程範式。

約束式編程

在約束式編程中,變量之間的關系是在約束中說明的,定義了問題的解的範圍。這些約束然後被應用程序來求解,以使得每個變量獲得一個值,並讓最多的約束得到滿足。 約束式編程經常被用作函數式編程、邏輯編程甚至命令式編程的補充。

領域專屬語言

一些著名的聲明式領域專屬語言(DSLs)包括yacc語法分析器,編譯說明語言Make,Puppet管理配置語言,正則表達式和SQL的一些子集(例如Select queries等)。DSLs有時非常有用,並且不需要是圖靈完全的,這往往讓其很容易以一種純聲明式的方式來表達。 很多文本標記語言例如HTML、MXML、XAML和XSLT往往是聲明式的[1]。

函數式編程

函數式編程,特別是純函數式編程,嘗試最小化狀態帶來的副作用,因此被認為是聲明式的。大多數函數式編程語言,例如Scheme、Clojure、Haskell、OCaml、Standard ML和Unlambda,允許副作用的存在。

邏輯式編程

邏輯式編程語言如Prolog聲明關系並且對關系進行提問。同函數式編程一樣,許多邏輯編程語言允許副作用的存在。

參見

  • (對立的)命令式編程
  • 函數式編程和邏輯編程

https://wapbaike.baidu.com/item/聲明式編程

聲明式編程