LWN:Racket: 学习Lisp的好机会

640

点击上方蓝色“Linux News搬运工”关注我们~

Racket: Lisp for learning

By Jake Edge

Lisp是目前还在使用的最古老的一个编程语言了——Fortran比它早一年,不过Lisp社区目前比起Fortran要活跃得多。看起来Lisp还是有很多地方在不断的改进。最近我还刚刚了解到了Lisp的一个变种Racket语言。当然,这其实反映了我在这方面比较无知,很多年前我知道Lisp以来,个人一直没有花太多时间深入去了解。直到今年初的时候我参加了linux.conf.au的一次Lisp会议,才刚刚了解到Racket并且开始有些感兴趣,然后做了一些调查。

Lisp的活跃度高,意味着有很多项目、子项目、语言变种、子语言等等。Lisp本身已经发展成为三种主要变种(方言):Common Lisp,Scheme,Clojure。Common Lisp和Scheme各自也都有很多种实现。Racket是基于Scheme的,在5.0版本于2010年发布之前,它也被称为"PLT Scheme"(因为这个语言是由PLT组织支持的)。

Descended from Scheme

所以,Racket其实就是Scheme发展出来的descendant(后代)语言,而不是Scheme的一种实现(implementation)。在主页上的介绍说这是一个跨平台的通用(general-purpose)语言,用于面向语言的编程(language-oriented programming)。Racket的宣言里面讲得更加具体:“首先,编程其实就是描述并解决问题,因此编程工作的上下文通常都有自己的特定论述语言;好的程序员应该能把这种语言转化为编程语言。因此,Racket就是一个用来创建新的编程语言的编程语言。”

实际上,Racket已经定义出好几种语言了,包括一个web-application语言,一个类似Prolog的基于逻辑的语言名为datalog;用于生成HTML和PDF文档的Scribble语言,等等。Racket同Python一样,打的旗号是“batteries included”(自带电池,形容语言本身功能齐备方便开搞)的语言,拥有一个包含了很多有用module的标准库(standard library),包括graphics和GUI,网络,格式解析,left-pad(方便数字输出格式化)等等。Racket文档页面有指向整个生态系统文档的众多链接。

Racket创建时的部分目标是供开发者进行教研所用,当时的开发者大多数是计算机科学的教授或者研究生。有一本基于Racket编程语言的《How to Design Programs》课本,也使用了Racket的集成开发环境(IDE),不过并没有直接教Racket语言本身。它是先介绍了Beginning Student Language (BSL),然后迁移到各种更高级的变种语言上去了。这些语言都是针对开发者新人的,尤其是设计了更易调查error的机制方便初学者。就像此书序言所说:“教学用到的语言都是由Racket来实现的,Racket本身是一个我们用来创建新的编程语言的编程语言。Racket已经从实验室传播到真实工作中,这个编程平台拥有各种配置选项,从游戏到望远镜阵列控制都有支持。虽然书中教的语言有从Racket语言借用了不少特性,但是本书并不教Racket,而完成本书学习的学生也会可以很容易能迁移到Racket。”

DrRacket

DrRacket是Racket的IDE,它在"interactions window"窗口提供了一个交互式的read-eval-print loop (REPL),还有一个"definitions window"提供了程序编辑界面。可以参考下图截屏。"definitions window"就是上部(包含火箭和LWN企鹅标志),有一半是帮助信息,会随着所用的命令而即时出现。interactive window就是下面这部分,这里右上方有一个箭头用于即时获取帮助信息。图形元素都是由其他一些数据类型来处理的。Quick introduction提供了语言要用graphics功能所需的介绍信息,逐步介绍这个语言的主要功能(当然,是类Lisp的语言)。会一直介绍所有binding, 函数, 宏,等等,最终过一下GUI库里面各个模块。

640

这些介绍都是使用了Racket的一个"#lang slideshow"方言,通常来说"#lang"会用在definitions window来指定使用了哪个语言。#lang racket就是标准语言,还有"typed/racket","racket/gui","web-server/insta","datalog",等等许多语言变种可以在这里指定。DrRacket有很完善的括号匹配处理功能,语法高亮,调试工具等等。它是针对新手开发的工具,不过对有经验的开发者来说也不会显得太弱而根本不想用。

至少对新人来说,所有这些Racket演化出来的不同的语言和方言可能会让他感到有些摸不着头脑,不过其实它还可能更加复杂。有一个正在开发的Racket版本是基于Chez Scheme语言的,而不是基于当前的C语言。这个新版本被称为"Racket on Chez Scheme"或者"Racket CS"。最终目标是让它成为标准的Racket,因为这样能让code base更加容易维护。此项目在2017年开始,在2019年1月发布了进展汇报。Racket CS跟Racket大部分是兼容的,肯定会有例外(尤其是那些使用了C API的扩展会有问题),因此当前C版本的Racket肯定还需要继续维护。

这就意味着用户从7.4版本开始,安装Racket的时候就可以多一个选择了。Racket CS会开始进行beta发布。对Linux用户来说,如果想试一下Racket,其实大多数Linux发行版都支持了(例如Fedora 29就带有Racket 7.0)。如果想要使用最新版本,那就可以使用相应的shell脚本安装binary。Racket的代码都在GitHub上,遵循LGPLv3协议。Racket也是Software Freedom Conservancy的一个成员项目。

Parting thoughts

要想钻研进Racket,是需要很大勇气的。本文跟一般的介绍文章类似,都只是很粗浅的说了一下Racket能提供什么。对于有志于深入研究类Lisp语言的人来说,Racket是一个很不错的选择,它有不少文档,教科书,以及多个场景的tutorial入门教程,有很多信息可供研究和借鉴。尤其是这本教科书,我也打算深入看一下。虽然我不是第一次对Lisp产生兴趣,不过这次Racket确实又给了我一次机会钻研进去。

全文完

LWN文章遵循CC BY-SA 4.0许可协议。

极度欢迎将文章分享到朋友圈 
热烈欢迎转载以及基于现有协议修改再创作~

长按下面二维码关注:Linux News搬运工,希望每周的深度文章以及开源社区的各种新近言论,能够让大家满意~

640?wx_fmt=jpeg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值