La historia y la gente de la teoría de la programación funcional

La programación funcional es un tema candente en los últimos años, pero algunos de los conceptos y teorías se han transmitido capa por capa y, a menudo, es difícil identificar la autenticidad. Esto ha llevado a que la programación funcional se convierta en el área más afectada de la informática. Este artículo intenta ordenar la historia de algunas teorías de programación funcional También se proporcionan enlaces a algunos artículos originales con figuras maestras, con la esperanza de ayudar a todos a discernir.

El cálculo lambda original: Alonzo Church

Cuando se trata de fórmulas funcionales, primero debemos hablar de Alonzo Church (Alonzo Church), el inventor del cálculo lambda.

La edad de la propia vida de Alonzo Church determina que poco tiene que ver con las computadoras. Alonzo Church es un matemático puro. La intención original del cálculo lambda que inventó fue crear una base teórica unificada para las matemáticas.

La primera invención de la lambda fue incluso anterior a la investigación de Turing. Estudios posteriores han demostrado que el cálculo lambda es equivalente a las máquinas de Turing.

Para los amantes de las matemáticas, solo incluye un yo \lambda es sin duda más elegante que la máquina de Turing que es también una cinta de papel y una orden.

La mayoría de los lenguajes de programación basados ​​en cálculo lambda en generaciones posteriores también heredaron estas características. La mayoría de ellos abogan por la abstracción unificada y son hermosos en sintaxis concisa y mecanismo de tiempo de ejecución. Esto también ha formado una cadena de desprecio por la programación funcional hacia otros paradigmas de programación.

Computabilidad de lambdas: John Barkley Rosser

John Barkley Rosser es alumno de Church, siguió la escuela académica de su mentor y se dedicó al desarrollo e investigación del cálculo lambda.

Cooperó con su mentor Church para probar el teorema de Church-Rosser, que es una piedra angular importante de la "computabilidad" en el sistema lambda, y las generaciones posteriores también conducen a las características paralelas superiores de la computación funcional.

Como teoría equivalente de las máquinas de Turing, el cálculo lambda, que trata de sentar las bases de las matemáticas, también está plagado de la versión lambda del problema de la detención y la incompletitud de la lógica de primer orden. paradoja Rosser ha hecho mucho en este trabajo de investigación de campo.

Lógica combinatoria: Haskell Brooks Curry

Haskell Brooks Curry también es una figura que debe mencionarse en la historia de la programación funcional.Las tres partes de su nombre se han convertido en los nombres de tres lenguajes informáticos influyentes.

Haskell Brooks Curry 师从数学大家希尔伯特,他在lambda演算的基础上,提出了组合子逻辑。

他从与John Rosser的通信中了解到了Kleene-Rosser悖论,然而与Church,Kleene和Rosser不同的是,柯里并没有放弃基础的方法,他说他不想“逃离这个悖论”。

Haskell的研究并不能突破Kleene-Rosser悖论本身,但他的组合子逻辑和其它工作为高级语言提供了非常重要的理论支持,如果说Church和Rosser是纯粹的数学家,那么Haskell可以说是真正对计算机语言有研究的数学家。

因此他在程序员中的地位和知名度要超过Church等人。

闭包:Peter John Landin

随着lambda演算和组合子逻辑逐渐被计算机学家关注,Peter John Landin,一位真正的实战派计算机学家开始了对这方面的研究。

他从计算机的视角出发,提出了"闭包"的概念,为计算机执行lambda表达式提供了理论基础。

Peter John Landin的工作不仅仅在理论计算方面,他在编程语言设计的理论和实践都颇有建树,他提出的SECD自动机,是第一个被精确描述的虚拟机,至今仍影响着很多高级语言的运行时机制。

Peter John Landin还发明了自己的编程语言,ISWIM。这一语言尽管没有被广泛实用,但是在理论计算机领域有非常重要的地位,它影响了后世很多语言的设计。你至今仍可以在Haskell语言中看到一些它的影子。

The mechanical evaluation of expressions

λ v \lambda_v λ n \lambda_n : Gordon Plotkin

随着理论计算机学术界对lambda的关注,古典的lambda演算不足以为新的计算机语言提供理论支持。

以Gordon Plotkin为代表的计算机学家开始研究对lambda演算的扩展。

Gordon Plotkin最为著名的研究是早年对ISWIM语言的建模。它在lambda中尝试引入了"二等公民",值类型,以此构建了 λ v \lambda_v 演算,并在其中重新推导了Church-Rosser等基础定理。

在同一论文中,Gordon 也讨论了call-by-name的编程语言建模,引入了 λ n \lambda_n 演算。

Gordon的学派致力于函数式编程的理论基础,他在后期还主导了在编程语言中引入Algebraic Effects(代数效果)概念的一系列相关研究。

Algebraic Operations and Generic Effects

Handlers of Algebraic Effect

Call-by-name, Call-by-value, and The λ-Calculus

Monad与范畴论:Eugenio Moggi

受导师的研究启发,Gordon 的学生 Eugenio Moggi 在他的博士论文中提出了 λ p \lambda_p 演算,即"Partial(部分的)"lambda演算,这一理论进一步提升了lambda的相等性判定能力。

毕业之后,Eugenio Moggi仍致力于lambda的相等性判定的研究,他在尝试构建 λ c \lambda_c 演算的过程中,提出了一个重要的抽象:在函数式编程中引入范畴论。

在论文中,他以 Monad 和 Kleisli 范畴对计算建模,考虑了现代编程语言中的各种特性,如:

  • 部分计算
  • 不确定性计算
  • 副作用
  • 异常
  • 可恢复中断执行
  • 交互输入
  • 交互输出

这些特性的计算都可以用 Monad 进行抽象。

这个抽象模型对后世的影响甚至超越了 λ c \lambda_c 演算本身。

Notions of computation and monads

结语

函数式编程发展历史比较长,大部分资料符号化程度又比较高,所以属于比较难以学习的内容。

本文试图从函数式编程理论的历史与人物角度出发,梳理了历史上关键的理论和人物,供有兴趣的同学顺藤摸瓜,阅读相关论文。因为描述中基本都是主观描述,如你认为不正确,欢迎评论指出。

Supongo que te gusta

Origin juejin.im/post/7250686419168395320
Recomendado
Clasificación