AI模型BLISS正式亮相
速览
BLISS是一款新型AI模型,在自然语言处理任务上展现出显著优势。该模型采用创新架构,能够高效处理复杂查询。其发布标志着AI领域的重要进展,有望推动相关应用落地。
AI 深度解读
背景
BLISS 是一种系统编程语言,由 Carnegie Mellon University(CMU)的 W. A. Wulf、D. B. Russell 和 A. N. Habermann 在 1970 年左右开发。在 C 语言于几年后问世之前,BLISS 可以说是最著名的系统语言。然而随着 C 语言的流行和普及,BLISS 逐渐湮没无闻。
该语言名称的含义有多种说法:最常见的解释是 "Basic Language for Implementation of System Software" 或逆向缩写 "System Software Implementation Language, Backwards"。但 Wulf 在 2015 年接受 Babbage Institute 口述历史访谈时表示,最初的首字母缩写实际上是基于 "Bill's Language for Implementing System Software"。
核心内容
BLISS 是一种无类型的块结构编程语言,基于表达式而非语句。它包含异常处理、协程和宏等构造,但没有 goto 语句。
编译器与平台支持
CMU 的原始编译器以其广泛的优化技术而闻名,并成为经典著作《The Design of an Optimizing Compiler》的基础。
Digital Equipment Corporation(DEC)为多种架构开发并维护了 BLISS 编译器,包括 PDP-10、PDP-11、VAX、DEC PRISM、MIPS、DEC Alpha 和 Intel IA-32。虽然该语言在客户中并不流行,拥有编译器的站点很少,但 DEC 在内部大量使用 BLISS 直至 1980 年代;OpenVMS 操作系统的大部分实用程序都是用 BLISS-32 编写的。随着 OpenVMS 向 IA-64 和 x86-64 平台的移植,DEC 的 BLISS 编译器也随之移植。x86-64 的 BLISS 编译器使用 LLVM 作为后端代码生成器,取代了此前用于 Alpha 和 IA-64 的专有 GEM 后端。
语言特性
BLISS 具有许多现代高级语言的特征:块结构、自动栈、定义和调用递归例程的机制、多种预定义数据结构以及测试和迭代设施。然而,它省略了输入/输出的内置设施——因为系统软件项目通常会自行开发 I/O 或基于基本的监控 I/O 或屏幕管理服务。它也允许访问机器特定特性,因为系统软件常常需要这样做。
BLISS 有一些在高级语言中不常见的特性:
- 对名字的引用统一解释为该段的地址,而非该段的值。
- 它是“表达式语言”而非“语句语言”。
具体语法和语义
- 所有常量都是当前机器全字长:PDP-11 上为 16 位,VAX 上为 32 位,PDP-10 上为 36 位。
- 对变量的引用总是取其地址。例如
Z+8表示将 8 加到变量 Z 的地址上。若要操作 Z 的值,则需要在变量前加句点:.Z+8表示将 8 加到 Z 的内容上。 - 赋值使用标准
=符号。例如Z = 8将全字常量 8 存储到 Z 地址所指示的位置。Z+12 = 14将常量 14 存储在 Z 地址后第 12 个字的位置。 - 块语句与 ALGOL 类似:由
BEGIN开始,END结束;语句用分号分隔。计算的值会被保留到下一个语句终结符,因此可以计算、赋值并传递到下一个语句。也可以使用圆括号(和)开始和结束块。 - 条件执行使用
IF表达式,测试真/假条件,执行不同分支并返回结果。 - 比较使用关键字:
EQL(等于)、GTR(大于)、NEQ(不等于)。例如:Q = (IF .Z GTR 0 THEN .Z ELSE -.Z);将 Z 的绝对值赋给 Q 地址。 - 标识符在使用前必须声明,通常使用
OWN关键字。必要时可通过BIND声明将变量绑定到固定的机器地址(主要用于访问寄存器或特殊地址)。 - 子程序称为例程,使用
ROUTINE关键字声明;宏使用MACRO声明。 - 数组称为结构,使用
VECTOR声明。 - 支持高级构造:
CASE表达式、类似 ALGOL 的FOR的INCR循环、内置字符串函数、自动数据转换(如数字转字符串)等。
源代码示例(摘自 BLISS 语言手册):
MODULE E1 (MAIN = CTRL) =
BEGIN
FORWARD ROUTINE
CTRL,
STEP;
ROUTINE CTRL =
!+
! This routine inputs a value, operates on it, and
! then outputs the result.
!-
BEGIN
EXTERNAL ROUTINE
GETNUM, ! Input a number from terminal
PUTNUM; ! Output a number to terminal
LOCAL
X, ! Storage for input value
Y; ! Storage for output value
GETNUM(X);
Y = STEP(.X);
PUTNUM(.Y)
END;
ROUTINE STEP(A) =
!+
! This routine adds 1 to the given value.
!-
(.A+1);
END
ELUDOM
版本历史
BLISS 有多个方言和编译器版本:
- BLISS-10:CMU 为 PDP-10 开发的本地编译器
- BLISS-11:CMU 的 PDP-10 宿主编译器,交叉编译至 PDP-11
- Common BLISS 方言(所有 DEC 编译器):
- BLISS-16:VMS 宿主的 PDP-11 交叉编译器
- BLISS-16C:PDP-10 宿主的翻译器,将 Common BLISS 子集转换为 BLISS-11
- BLISS-32:VAX/VMS 本地编译器
- BLISS-36C:PDP-10 宿主的翻译器,将 Common BLISS 子集转换为 BLISS-10
- BLISS-36:PDP-10 本地编译器
- BLISS-32EN / BLISS-64EN:Alpha/AXP 的 32/64 位编译器
- BLISS-32IN / BLISS-64IN:IA-64 的 32/64 位编译器
- BLISS-32XN / BLISS-64XN:x86-64 的 32/64 位编译器
关键要点
- 设计理念:BLISS 是完全基于表达式的语言,没有传统的语句概念;所有构造都返回值。
- 地址语义:变量名直接表示地址而非值,访问内容必须使用句点前缀(
.),这种设计在高级语言中极为罕见。 - 无类型:BLISS 是无类型语言,所有常量按机器全字长处理。
- 系统编程导向:缺失 I/O 内置设施、允许直接访问机器地址和寄存器,适合编写操作系统和编译器。
- 优化先驱:CMU 编译器本身是优化编译技术的典范,影响了后续编译器设计。
- DEC 内部核心语言:OpenVMS 大部分实用程序用 BLISS-32 编写,DEC 长期将其作为公司内部实现语言。
- 现代延续:随着 OpenVMS 移植到 IA-64 和 x86-64,BLISS 编译器被移植并改用 LLVM 后端,使该语言在现代架构上仍能运行。
意义与影响
BLISS 虽未在商业上广泛流行,但在系统软件实现领域有着深远影响。它是早期系统编程语言向 C 语言过渡的重要一环,其编译器优化技术直接催生了经典教材《The Design of an Optimizing Compiler》。DEC 对 BLISS 的长期内部使用证明了它作为工业级系统语言的能力,OpenVMS 操作系统的可靠性部分归功于 BLISS 的特性。更重要的是,BLISS 的“表达式语言”设计哲学和地址语义启发了后续语言中对低级系统特性的抽象方式。即便在 C 语言主导的时代,BLISS 的某些思想(如以地址为原语)仍在嵌入式系统、操作系统内核编程中隐隐可见。而 LLVM 后端的采用则展示了 Legacy 语言通过现代编译
