A história e as pessoas da teoria da programação funcional

A programação funcional tem sido um tema quente nos últimos anos, mas alguns conceitos e teorias foram retransmitidos camada por camada, e muitas vezes é difícil identificar a autenticidade. Isso fez com que a programação funcional se tornasse a área mais atingida da ciência da computação. Este artigo tenta esclarecer a história de algumas teorias de programação funcional. Links para alguns artigos originais também são fornecidos com figuras mestras, na esperança de ajudar a todos a discernir.

O cálculo lambda original: Alonzo Church

Quando se trata de fórmulas funcionais, devemos primeiro falar sobre Alonzo Church (Alonzo Church), o inventor do cálculo lambda.

A idade da própria vida de Alonzo Church determina que ele tenha pouco a ver com computadores. Alonzo Church é um matemático puro.A intenção original do cálculo lambda que ele inventou era criar uma base teórica unificada para a matemática.

A invenção mais antiga do lambda foi ainda anterior à pesquisa de Turing. Estudos posteriores mostraram que o cálculo lambda é equivalente às máquinas de Turing.

Para os amantes da matemática, basta incluir um eu \lambda é sem dúvida mais elegante que a máquina de Turing que é também uma fita de papel e uma ordem.

A maioria das linguagens de programação baseadas em cálculo lambda nas gerações posteriores também herdou essas características. A maioria delas defende a abstração unificada e é bonita em sintaxe concisa e mecanismo de tempo de execução. Isso também formou uma cadeia de desprezo pela programação funcional para outros paradigmas de programação.

Computabilidade de lambdas: John Barkley Rosser

John Barkley Rosser é aluno de Church, seguiu a escola acadêmica de seu mentor e se dedicou ao desenvolvimento e pesquisa do cálculo lambda.

Ele cooperou com seu mentor Church para provar o teorema de Church-Rosser, que é uma importante pedra angular da "computabilidade" no sistema lambda, e as gerações posteriores também levaram às características paralelas superiores da computação funcional.

Como a teoria equivalente das máquinas de Turing, o cálculo lambda, que tenta lançar a pedra fundamental para a matemática, também é atormentado pela versão lambda do problema da parada e pela incompletude da lógica de primeira ordem. Ele descobriu e provou o Kleene-Rosser paradoxo Rosser fez muito neste trabalho de pesquisa de campo.

Lógica Combinatória: Haskell Brooks Curry

Haskell Brooks Curry também é uma figura que deve ser mencionada na história da programação funcional.As três partes de seu nome se tornaram os nomes de três linguagens de computador influentes.

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

结语

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

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

Acho que você gosta

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