APartSML(1)——背景介绍
课程前言:Programming Languages是University of Washington的一门介绍编程语言基本概念的课程,特别强调函数式编程。课程分成三个部分,分别使用ML(A部分)、Racket(B部分)和Ruby(C部分)语言来讲解编程语言。课程核心不是为了学习特定的语言语法,而是提供一个框架,帮助理解如何有效地使用语言构造,以及如何设计正确优雅的程序,这种思路对于任何语言的学习都是非常有用的。 (1)PartA ML:函数式编程基本概念 (2)PartB Racket:动态类型语言 (3)PartC Ruby:动态类型面向对象
1.ML软件安装
1.1 安装背景
在学习Part A之前需要大致安装以下内容:ML是一个编程语言的家族或范式,类似于C 语言家族(C++,C#),包括多个变体或标准化的实现,如 Standard ML (SML)、OCaml 和 F#。SML/NJ是用于实现SML的编译器,可以和Emac配合使用。简单理解,SML类比Python(编程语言),SML/NJ类比CPython(编译器),Emacs类比VS Code + Python 插件(文本编辑器)。
- ML (Meta Language)
ML 是一种通用的函数式编程语言,诞生于 1970 年代,最初用于证明定理的编程框架中。ML 强调强类型系统和模式匹配,是现代许多函数式编程语言的先驱。ML 家族包括多种语言,比如 SML 和 OCaml。
- SML (Standard ML)
SML 是 ML 语言的标准化版本,发展于 1980 年代。SML 提供了一个强静态类型系统和模式匹配机制,并以模块系统著称。它的设计以形式化和可验证性为目标,常用于编译器构造、程序语言研究等领域。
- SML/NJ (Standard ML of New Jersey)
SML/NJ 是 Standard ML 的一个具体实现(编译器)。它由普林斯顿大学开发,是 SML 语言的重要实现之一。SML/NJ 提供了一个强大的编程环境,除了基本的编译器功能,还包括垃圾回收、运行时调试器、和标准库支持。
- Emacs
Emacs 是一种强大的、可扩展的文本编辑器,由于其高可定制性,Emacs 可以用来支持多种编程语言的开发。通过安装相关插件,Emacs 可以用来编辑、编译和调试 SML 或 SML/NJ 代码。Emacs 常与 SML/NJ 配合使用,以增强编程体验。
1.2 安装过程
1.2.1 安装SML/NJ
(1)下载安装SML/NJ:Standard ML of New Jersey (2)将SML/NJ路径添加到系统环境变量:Installing SML/NJ under macOS MacOS系统下默认路径/usr/local/smlnj/bin,参考Painless installation of SML on OS X,首先打开bash_profile配置文件,允许用户自定义 shell 环境的各种设置。
1
open -t ~/.bash_profile
然后在配置文件里加入
1
export PATH=/usr/local/smlnj/bin:$PATH
重新加载配置文件
1
source ~/.bash_profile
此时在终端输入sml会出现SML/NJ交互界面,代表安装成功
1
sml
1.2.2 安装Emacs
在终端使用SML/NJ不太方便,可以再结合Emacs来编译SML项目 (1)下载安装Emacs:Emacs For Mac OS X
(2)在Emacs中添加SML Mode,运行命令M-x list-packages,回车键会出现包列表,找到sml-mode,点击安装下载,安装成功后回显示Package sml-mode is installed.,退出重启Emacs 
1.2.3 Emac打开sml文件
(1)Emac创建文件,C-x C-f test.sml,进入SML mode界面,可以在框中编写sml代码 (2)打开编译器界面,C-c C-s return出现SML/NJ编译器

