BLISS

Hacker News Top 工具

摘要

BLISS是一种系统编程语言,于1970年左右在卡内基梅隆大学开发,以其无类型设计和优化编译器而闻名。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/07/11 19:26

# BLISS 来源:https://en.wikipedia.org/wiki/BLISS 来自维基百科,自由的百科全书 关于其他用途,请参见Bliss(https://en.wikipedia.org/wiki/Bliss_(disambiguation))。 BLISS | 项目 | 信息 | |------|------| | 范式(https://en.wikipedia.org/wiki/Programming_paradigm) | 结构化(https://en.wikipedia.org/wiki/Structured_programming)、命令式(https://en.wikipedia.org/wiki/Imperative_programming)(过程式(https://en.wikipedia.org/wiki/Procedural_programming)) | | 设计者(https://en.wikipedia.org/wiki/Software_design) | W. A. Wulf(https://en.wikipedia.org/wiki/William_Wulf)、D. B. Russell、A. N. Habermann(https://en.wikipedia.org/wiki/Nico_Habermann) | | 开发者(https://en.wikipedia.org/wiki/Software_developer) | 卡内基梅隆大学(https://en.wikipedia.org/wiki/Carnegie_Mellon_University) | | 首次出现 | 1970年,56年前 | | 稳定版本(https://en.wikipedia.org/wiki/Software_release_life_cycle) | BLISS-64 | | 类型系统(https://en.wikipedia.org/wiki/Type_system) | 无类型(https://en.wikipedia.org/wiki/Data_type) | | 作用域(https://en.wikipedia.org/wiki/Scope_(computer_science)) | 词法作用域(https://en.wikipedia.org/wiki/Scope_(computer_science)) | | 平台(https://en.wikipedia.org/wiki/Computing_platform) | PDP-10(https://en.wikipedia.org/wiki/PDP-10)、PDP-11(https://en.wikipedia.org/wiki/PDP-11)、VAX(https://en.wikipedia.org/wiki/VAX)、PRISM(https://en.wikipedia.org/wiki/DEC_PRISM)、MIPS(https://en.wikipedia.org/wiki/MIPS_architecture)、DEC Alpha(https://en.wikipedia.org/wiki/DEC_Alpha)、IA-32(https://en.wikipedia.org/wiki/IA-32)、IA-64(https://en.wikipedia.org/wiki/IA-64)、x86-64(https://en.wikipedia.org/wiki/X86-64) | | 操作系统(https://en.wikipedia.org/wiki/Operating_system) | 跨平台(https://en.wikipedia.org/wiki/Cross-platform) | | 网站 | pdp-10.trailing-edge.com/bb-m836d-bm/ (http://pdp-10.trailing-edge.com/bb-m836d-bm/) | | 方言(https://en.wikipedia.org/wiki/Programming_language#Dialects,_flavors_and_implementations) | Common BLISS | | 受启发于 | ALGOL(https://en.wikipedia.org/wiki/ALGOL) | **BLISS** 是一种系统编程语言(https://en.wikipedia.org/wiki/System_programming_language),由 W. A. Wulf(https://en.wikipedia.org/wiki/William_Wulf)、D. B. Russell 和 A. N. Habermann(https://en.wikipedia.org/wiki/Nico_Habermann)于 1970 年左右在卡内基梅隆大学(https://en.wikipedia.org/wiki/Carnegie_Mellon_University)(CMU)开发。在几年后 C 语言(https://en.wikipedia.org/wiki/C_(programming_language))问世之前,它可能是最著名的系统语言。此后,C 语言变得流行且普遍,而 BLISS 则逐渐淡出人们的视线。 BLISS 是一种无类型(https://en.wikipedia.org/wiki/Data_type)的块结构(https://en.wikipedia.org/wiki/Block_(programming))编程语言(https://en.wikipedia.org/wiki/Structured_programming),基于表达式而非语句,并包含异常处理(https://en.wikipedia.org/wiki/Exception_handling)、协程(https://en.wikipedia.org/wiki/Coroutine)和宏(https://en.wikipedia.org/wiki/Macro_(computer_science))等构造。它不包含 goto(https://en.wikipedia.org/wiki/Goto)语句。 该名称有多种说法,一说是 "Basic Language for Implementation of System Software"(实现系统软件的基础语言)的缩写,另一说是 "System Software Implementation Language, Backwards"(系统软件实现语言,反向拼写)。然而,Wulf 在 2015 年为巴贝奇研究所计算机安全历史项目所做的口述历史中声称,该缩写最初是基于 "Bill's Language for Implementing System Software"(比尔用于实现系统软件的语言)这一名称。[\[1\]](https://en.wikipedia.org/wiki/BLISS#cite_note-1) 最初卡内基梅隆大学的编译器(https://en.wikipedia.org/wiki/Compiler)以其对优化(https://en.wikipedia.org/wiki/Optimizing_compiler)的广泛使用而著称,并成为经典著作《优化编译器的设计(https://en.wikipedia.org/wiki/The_Design_of_an_Optimizing_Compiler)》的基础。 数字设备公司(https://en.wikipedia.org/wiki/Digital_Equipment_Corporation)(DEC)为其 PDP-10(https://en.wikipedia.org/wiki/PDP-10)[\[2\]](https://en.wikipedia.org/wiki/BLISS#cite_note-bliss-history-2)、PDP-11(https://en.wikipedia.org/wiki/PDP-11)[\[2\]](https://en.wikipedia.org/wiki/BLISS#cite_note-bliss-history-2)、VAX(https://en.wikipedia.org/wiki/VAX)[\[2\]](https://en.wikipedia.org/wiki/BLISS#cite_note-bliss-history-2)、DEC PRISM(https://en.wikipedia.org/wiki/DEC_PRISM)[\[3\]](https://en.wikipedia.org/wiki/BLISS#cite_note-3)、MIPS(https://en.wikipedia.org/wiki/MIPS_architecture)[\[2\]](https://en.wikipedia.org/wiki/BLISS#cite_note-bliss-history-2)、DEC Alpha(https://en.wikipedia.org/wiki/DEC_Alpha)[\[2\]](https://en.wikipedia.org/wiki/BLISS#cite_note-bliss-history-2) 和 Intel IA-32(https://en.wikipedia.org/wiki/IA-32)[\[2\]](https://en.wikipedia.org/wiki/BLISS#cite_note-bliss-history-2) 开发并维护了 BLISS 编译器。该语言在客户中并未流行起来,拥有编译器的用户很少,[\[4\]](https://en.wikipedia.org/wiki/BLISS#cite_note-dacruz198870916-4) 但 DEC 在 20 世纪 80 年代内部大量使用了该语言;OpenVMS(https://en.wikipedia.org/wiki/OpenVMS)操作系统(https://en.wikipedia.org/wiki/Operating_system)的大部分实用程序都是用 BLISS-32 编写的。DEC BLISS 编译器已移植到 IA-64(https://en.wikipedia.org/wiki/IA-64)和 x86-64(https://en.wikipedia.org/wiki/X86-64)架构,作为 OpenVMS 移植到这些平台的一部分。[\[2\]](https://en.wikipedia.org/wiki/BLISS#cite_note-bliss-history-2)[\[5\]](https://en.wikipedia.org/wiki/BLISS#cite_note-5) x86-64 BLISS 编译器使用 LLVM(https://en.wikipedia.org/wiki/LLVM)作为其后端代码生成器(https://en.wikipedia.org/wiki/Code_generation_(compiler)),取代了用于 Alpha 和 IA-64 的专有 GEM 后端。 ## 语言描述 [编辑(https://en.wikipedia.org/w/index.php?title=BLISS&action=edit&section=1)] *[过度引用(https://en.wikipedia.org/wiki/Wikipedia:Quotations#Specific_recommendations)*] > BLISS 拥有许多其他现代高级语言的特性。它具有块结构、自动堆栈以及定义和调用递归例程的机制……它提供各种预定义的数据结构以及……测试和迭代的功能……另一方面,BLISS 省略了其他高级语言的某些特性。它没有内置的输入/输出功能,因为系统软件项目通常会开发自己的输入/输出,或者基于基本监视器 I/O 或屏幕管理服务……它允许访问机器特定的功能,因为系统软件通常需要此功能。BLISS 具有在高级语言中不常见的特性。名称……被统一解释为该段的地址,而不是该段的值……此外,BLISS 是一种"表达式语言"而非"语句语言"。[\[6\]](https://en.wikipedia.org/wiki/BLISS#cite_note-Manual-6) BLISS 语言具有以下特性: - 所有*常量*都是所使用的机器的完整字长,例如,在 PDP-11(https://en.wikipedia.org/wiki/PDP-11)这样的 16 位机器上,常量为 16 位;在 VAX(https://en.wikipedia.org/wiki/VAX)计算机上,常量为 32 位;在 PDP-10(https://en.wikipedia.org/wiki/PDP-10)上,常量为 36 位。 - *对变量的引用*始终指向该变量的地址。例如,指令 `Z+8` 指的是将 8 加到 Z 的*地址*上,而不是它的*值*。如果需要将 8 加到 Z 的*值*上,必须在变量前加上一个点号;因此需要输入 `.Z+8` 来执行此功能,即将 8 加到 Z 的*内容*上。 - *赋值*使用标准的 `=` 符号,例如 `Z=8` —— 这意味着创建一个包含 8 的完整字常量,并将其存储在该地址对应 Z 的位置。因此 `Z+12=14`(或者 `12+Z=14`,尽管根据 Digital 的 BLISS 文档,这种形式被认为是不良实践)将常量 14 放置到 Z 地址之后的第 12 个字的位置。 - *块语句*与 ALGOL(https://en.wikipedia.org/wiki/ALGOL)类似:块以 `BEGIN` 语句开始,以 `END` 结束。与 ALGOL 一样,语句之间用分号(";")分隔。当计算出一个值时,该值会被保存到下一个语句结束符——这意味着如果愿意,可以计算一个值,将其赋值给一个变量,并传递到下一个语句。或者,可以使用左括号开始一个块,用右括号结束该块。当表达式中包含括号时,使用标准的优先级(https://en.wikipedia.org/wiki/Order_of_operations)规则,即先计算括号内的表达式。 - *条件执行*使用 `IF` 表达式,它测试一个真-假条件,执行替代操作,并返回一个结果。 - *比较*使用关键字,如 `EQL` 表示相等(而不是重载(https://en.wikipedia.org/wiki/Operator_overloading)= 符号用于相同目的),`GTR` 表示大于,`NEQ` 表示不等于。例如,以下代码将 Z 的绝对值赋给 Q 所指示的地址: `Q = (IF .Z GTR 0 THEN .Z ELSE -.Z);` - *标识符*(变量和常量)必须在使用前声明,通常使用 `OWN` 关键字。声明变量通常会导致编译器为其分配空间;必要时,可以通过 `BIND` 声明为变量分配固定的机器地址。此功能主要用于访问机器寄存器或某些特殊地址。 - *子程序(https://en.wikipedia.org/wiki/Subroutine)*在语言中被称为*routines*,并使用关键字 `ROUTINE` 声明。 - *宏*,允许文本替换,使用关键字 `MACRO` 声明。 - 该语言支持*数组(https://en.wikipedia.org/wiki/Array_data_structure)*,它们被称为*structures*,并使用关键字 `VECTOR` 声明。 - 该语言支持一些*高级编程语言(https://en.wikipedia.org/wiki/High-level_programming_language)构造*,例如: - 通过 `CASE` 表达式实现*替代执行路径* - 通过使用 `INCR` 表达式实现*循环*,该表达式类似于 ALGOL 的 FOR 语句 - 内置的*字符串(https://en.wikipedia.org/wiki/String_(computer_science))函数* - 某些自动的*数据转换*(数字到字符串等) 以下示例直接取自《Bliss 语言手册》:[\[6\]](https://en.wikipedia.org/wiki/BLISS#cite_note-Manual-6) ``` 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-10 方言: - BLISS-10 - CMU 为 PDP-10 开发的原生编译器 - BLISS-11 方言: - BLISS-11 - CMU 的 PDP-11 跨平台编译器(https://en.wikipedia.org/wiki/Cross_compiler),宿主为 PDP-10 - 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 - 用于 Alpha/AXP 的原生 32 位编译器[\[7\]](https://en.wikipedia.org/wiki/BLISS#cite_note-7) - BLISS-64EN - 用于 Alpha/AXP 的原生 64 位编译器 - BLISS-32IN - 用于 IA64 的原生 32 位编译器 - BLISS-64IN - 用于 IA64 的原生 64 位编译器 - BLISS-32XN - 用于 x86-64 的原生 32 位编译器 - BLISS-64XN - 用于 x86-64 的原生 64 位编译器 1. ↑ (https://en.wikipedia.org/wiki/BLISS#cite_ref-1)Wulf, William A. (https://en.wikipedia.org/wiki/William_Wulf) (2015年6月23日)."An Interview with WILLIAM A. WULF OH 477" (https://conservancy.umn.edu/bitstream/handle/11299/178985/oh477waw.pdf?sequence=1&isAllowed=y) (PDF) (访谈). 采访者:Jeffrey R. Yost. 弗吉尼亚州夏洛茨维尔. 2. 1 (https://en.wikipedia.org/wiki/BLISS#cite_ref-bliss-history_2-0)2 (https://en.wikipedia.org/wiki/BLISS#cite_ref-bliss-history_2-1)3 (https://en.wikipedia.org/wiki/BLISS#cite_ref-bliss-history_2-2)4 (https://en.wikipedia.org/wiki/BLISS#cite_ref-bliss-history_2-3)5 (https://en.wikipedia.org/wiki/BLISS#cite_ref-bliss-history_2-4)6 (https://en.wikipedia.org/wiki/BLISS#cite_ref-bliss-history_2-5)7 (https://en.wikipedia.org/wiki/BLISS#cite_ref-bliss-history_2-6)Brender, Ronald F. (2002)."The BLISS programming language: a history" (https://www.cs.tufts.edu/~nr/cs257/archive/ronald-brender/bliss.pdf) (PDF).*Software: Practice and Experience*.**32** (10):955–981.doi (https://en.wikipedia.org/wiki/Doi_(identifier)):10.1002/spe.470 (https://doi.org/10.1002%2Fspe.470).S2CID (https://en.wikipedia.org/wiki/S2CID_(identifier))45466625 (https://api.semanticscholar.org/CorpusID:45466625). 3. ↑ (https://en.wikipedia.org/wiki/BLISS#cite_ref-3)MacLaren, Don (1987年8月27日)."DECWest Compiler Project, Description, and Plan" (http://bitsavers.org/pdf/dec/prism/mica/870827_DECwest_Compiler_Project.pdf) (PDF).*Bitsavers.org*. 4. ↑ (https://en.wikipedia.org/wiki/BLISS#cite_ref-dacruz198870916_4-0)da Cruz, Frank (1987年9月16日)."News about Kermit Programs for VAX/VMS" (http://www.columbia.edu/kermit/ftp/e/mail.87a).*Info-Kermit Digest* (邮件列表). Kermit Project, Columbia University. 检索于2019年5月5日.Kermit-32 (https://en.wikipedia.org/wiki/Kermit_(protocol)) 使用 Bliss 语言编写,这是 DEC 的"企业实现语言"(最初由 CMU 开发)。Bliss 从未在 DEC 的客户中流行起来;很少有站点拥有 Bliss 编译器。 5. ↑ (https://en.wikipedia.org/wiki/BLISS#cite_ref-5)"2017 LLVM Developers' Meeting: J. Reagan "Porting OpenVMS using LLVM"" (https://www.youtube.com/watch?v=xTaBkCBYskA).*YouTube (https://en.wikipedia.org/wiki/YouTube)*. 2017年10月31日.原始内容存档 (https://ghostarchive.org/varchive/youtube/20211221/xTaBkCBYskA)于2021-12-21. 6. 1 (https://en.wikipedia.org/wiki/BLISS#cite_ref-Manual_6-0)2 (https://en.wikipedia.org/wiki/BLISS#cite_ref-Manual_6-1)*Bliss Language Manual* (http://www.digiater.nl/openvms/freeware/v80/bliss/documentation/blslref.pdf) (PDF).Digital Equipment Corporation (https://en.wikipedia.org/wiki/Digital_Equipment_Corporation). 1987. 7. ↑ (https://en.wikipedia.org/wiki/BLISS#cite_ref-7)"VSI BLISS V1.15-148 for OpenVMS x86-64 Systems" (https://docs.vmssoftware.com/bliss-x86-v115-148-release-notes/).*vmssoftware.com*. VSI. 2025年11月. 检索于2025-11-12. - Wulf, W. A. (https://en.wikipedia.org/wiki/William_Wulf); Russell, D. B.; Habermann, A. N. (https://en.wikipedia.org/wiki/Nico_Habermann) (1971年12月)."BLISS: A Language for Systems Programming" (http://www.cs.arizona.edu/classes/cs520/spring06/bliss.pdf) (PDF).*Communications of the ACM (https://en.wikipedia.org/wiki/Communications_of_the_ACM)*.**14** (12):780–790.doi (https://en.wikipedia.org/wiki/Doi_(identifier)):10.1145/362919.362936 (https://doi.org/10.1145%2F362919.362936).S2CID (https://en.wikipedia.org/wiki/S2CID_(identifier))9564255 (https://api.semanticscholar.org/CorpusID:9564255).另见:"BLISS: A Language for Systems Programming" (http://vms.process.com/scripts/fileserv/fileserv.com?BLISS-ARTICLE). (PostScript) - Wulf, W. A.; Johnson, R. K.; Weinstock, C. B.; Hobbs, S. O.; Geschke, C. M. (

相似文章

Blorp 语言

Lobsters Hottest

Blorp 是一种新的低摩擦、高性能编程语言,可编译为 C 语言,具有显式效果、类型化失败、结构化并发和纯度追踪等特点。

CPPL:一种电路提示编程语言

Hacker News Top

CPPL是一个编译器中介框架,通过使用Python领域特定语言和基于JSON的中间表示,连接大语言模型与硬件设计,从而实现可静态检查、可优化的RTL生成。

SBCL: 终极汇编代码面包板 (2014)

Hacker News Top

一篇技术博客文章,探讨如何使用SBCL作为汇编代码的面包板,重点介绍基于堆栈的虚拟机技术,如旋转堆栈和高效的原语操作分发,并引用了F18处理器和x87堆栈。