KELI:一种让函数式编程成为用户乐趣的编程语言

2020-08-31 23:04:40

毫无疑问,对于大多数函数式编程(FP)语言来说,这是一个悲伤但真实的故事。我个人认为,像Haskell这样的FP语言提供了非常统一和纯粹的编程概念(即一切都是函数,函数和组合都很好,等等)。然而,Haskell的语法是一团糟(看看语法),有很多边缘情况(例如奇怪的缩进规则)。当然,这个问题不仅仅局限于Haskell,其他FP语言如Erlang、F#、OCaml等也存在类似的问题,所以我相信这也是大多数人觉得FP语言难的根本原因。

这就是我所希望的,因此我的动机是创建一种名为Keli(以我女朋友的名字命名)的语言,它希望成为一种具有良好用户体验(UX)的FP语言。

在下一节中,我将描述FP语言的UX问题以及如何在其他编程语言中解决这些问题。

这是一个问题,用户在不查看文档的情况下无法正确判断将函数参数正确放置在何处。这个问题实际上在所有支持前缀函数调用的编程语言中都很普遍,例如C、Bash、汇编语言和大多数FP语言。

例如,如果不参考文档或以前的经验,即使用户拥有领域知识(在本例中是基础英语),也永远无法知道以下哪一项会产生预期的结果。

在面向对象编程(OOP)语言中,由于它们的中缀函数调用特性,这个问题略有缓解。例如,在Java或Scala中,可以以更易于理解的方式重写上面的代码:

但是,每当函数/方法参数的数量超过两个时,OOP语言也会遇到同样的问题,例如:

幸运的是,这个问题实际上是由一种名为Smalltalk的语言解决的,这种语言由Alan Kay设计,旨在供所有年龄段的儿童使用。SmallTalk通过使用其消息语法来解决此问题,例如:

而且这种语法的好处是,无论您的函数采用多少个参数,它都是可伸缩的,例如:

FP语言的另一个问题是它们对智能感知(IntelliSense)不友好,换句话说,它们不能很好地与集成开发环境(IDE)集成。

这也是因为它们的前缀函数调用特性,这不允许IntelliSense提供良好的代码完成建议。他们最多只能提供一些低级的智能感知,例如:

与OOP语言相比,这种智能感知相形见绌,后者提供更高级别的智能感知,即:

简而言之,Keli努力填补下表中的空白,它将成为一种IDE友好的函数式编程语言。