宣言型プログラミング
宣言的UIは、命令的なオブジェクト指向UI(OOUI)と対比されて一長一短があるが、軽量さと再描画速度での利点が挙げられやすい。徹底的な遅延結合を旨とするOOUIでは、何かの更新イベントが発生する度に、UI要素間のメソッドの呼び合い(メッセージ)とUI要素それぞれの総合的な再解釈が行われがちである。宣言的UIでは、各UI要素は青写真としての不変部分を持ち、可変部分に適用される引数はメモ化されていて、同じ引数が渡された場合は計算スキップされる。更新イベントは各UI要素への引数に変換されて、差異引数を渡されたUI要素だけが再解釈されるので再描画計算量は軽減されやすい。そこでは以前の描画状態を鑑みる必要はない。このようにしなくていい計算を明確化して全体の最適化に繋げるのが宣言型のアプローチである。
また、宣言的構造は不変部分と可変部分が明確に区分けされるので、何もかもが遅延結合のミュータブルになりがちなオブジェクト/メッセージ構造よりも平易かつ明瞭になるという利点もある。
式はほかへの引数にもなり、高階論理の式は他の式を引数にする。微分の導関数と同様に、式の返り値を式にすることもできる。引数や返り値にもできる式は、第一級とされる。
問い合わせ言語のSQLのクエリは宣言的とされるが、データベースの更新という副作用が伴なわれる場合はそうとは言えない。論理プログラミングも通常の導出原理は宣言的であるが、その過程で知識表現の追加が行われる場合はそうと言えなくなる。関数型言語の多くは、コマンドと副作用の取り扱いも許容している命令型と宣言型の折衷になっている。純粋関数型言語は宣言的に徹しており、プログラム正当性の形式的検証を可能にしている。 宣言型の専売特許である形式的検証に対して、命令型ではクラスやオブジェクトを宣言的フレームワークに内包して局面的な宣言的オペレータにしてその動作を検証することがある。JavaテストフレームワークJUnitなどが例である。
宣言型は並行プログラミングとの親和性が高いことも特筆される。これはセマフォやミューテックスや読み書きロックなどを駆使して同期的な並行性を実現することが多い命令型に対するアドバンテージである。宣言型は、式としてのプロセスを代数として扱えるので、その代数を他のプロセスへの引数としてのメッセージにしつつ、部分計算や評価戦略を応用しての非同期な並行性を実現できる。