ScholarGate
助手

语言范式

编程范式是组织计算表达方式的基础风格,从命令式状态突变到函数式、逻辑式和声明式模型。

用 PaperMind 寻找选题即将推出Find papers & topics
Tools & resources
下载幻灯片
Learn & explore
视频即将推出

Definition

编程范式是用于在语言中组织计算的一套连贯的概念和结构原则,它定义了程序的基本单元(语句、表达式、对象、关系)以及它们如何组合。

Scope

该领域涵盖了编程语言的主要范式及其基础计算模型:基于可变状态和消息传递的命令式和面向对象编程;基于表达式求值和高阶函数的函数式编程;基于关系和搜索的逻辑和约束编程;以及程序操纵程序的元编程。它探讨了范式如何塑造语言设计、它们所体现的权衡,以及现代多范式语言如何将它们结合起来。

Sub-topics

Core questions

  • 一个范式与另一个范式有何区别?这些区别是截然的还是侧重点不同?
  • 范式如何影响程序的正确性、模块化和推理?
  • 命令式和声明式风格能否统一?混合使用会带来什么收益或损失?
  • 底层计算模型(冯·诺依曼机器、λ演算、归结)如何影响范式?

Key theories

作为程序代数的函数式编程
巴克斯认为,基于组合子的函数式编程通过为程序提供一套用于推理和转换的等式定律代数,将语言从冯·诺依曼瓶颈中解放出来。
算法 = 逻辑 + 控制
科瓦尔斯基将问题的逻辑规范与用于解决问题的控制策略分离,这奠定了声明式/逻辑范式的基础,并阐明了它与过程式代码的区别。
多范式核心语言框架
范罗伊和哈里迪将范式呈现为小型核心语言的增量扩展,展示了如何添加或移除状态、并发和惰性等概念以恢复每种范式。

Clinical relevance

范式选择对软件工程具有实际影响:函数式和声明式风格有助于等式推理、可测试性和并行化,而面向对象分解支持大规模模块化。现代语言日益融合多种范式,因此理解它们的权衡有助于语言选择和惯用设计。

History

命令式编程源于存储程序的冯·诺依曼体系结构和Fortran、Algol等早期语言。Lisp(1958)引入了根植于λ演算的函数式思想。20世纪70年代出现了逻辑编程(Prolog)以及结构化编程和面向对象编程(Simula, Smalltalk)的兴起。巴克斯1977年的图灵奖演讲明确了对命令式风格的函数式批判,随后的几十年产生了越来越多的多范式语言。

Debates

命令式与声明式作为主要组织原则的争论
一场长期争论权衡了命令式代码的直接性和性能控制与声明式和函数式风格的推理和可组合性优势;大多数现代语言通过同时支持两者来解决这一问题。

Key figures

  • John Backus
  • Robert Kowalski
  • Peter Van Roy
  • Harold Abelson
  • Gerald Jay Sussman

Related topics

Seminal works

  • backus1978
  • kowalski1979
  • vanroy2004
  • abelson1996

Frequently asked questions

面向对象编程与命令式编程是独立的范式吗?
面向对象编程通常被视为一种构建在命令式范式之上的结构化规程:它将可变状态组织成具有封装行为的对象,但仍然依赖于状态改变和序列化。
范式是互斥的吗?
不是。许多广泛使用的语言是多范式语言,结合了函数式、面向对象和命令式特性,以便程序员可以根据任务选择最合适的风格。

Methods for this concept

Related concepts