我一直在深入研究BCPL的历史,因为我被问及关于使用前缀“0x”代表十六进制数字的原因。
在我的搜索中,我偶然发现了对此标记背后的历史的一个非常好的解释。 (Why are hexadecimal numbers prefixed with 0x?)
然而,在这篇文章中,引发了另一个问题:
对于八进制常量,BCPL使用8 <digit>
(根据规格:http://cm.bell-labs.com/cm/cs/who/dmr/bcpl.pdf)或使用#<digit>
(根据http://rabbit.eng.miami.edu/info/bcpl_reference_manual.pdf)或两者都是这些语法在语言的不同实现中有效吗?
我也能在这里找到第二个使用#语法的答案,这进一步引起了我的兴趣。 (Why are leading zeroes used to represent octal numbers?)
非常感谢任何历史见解。
答案 0 :(得分:4)
BCPL中的语法略有不同。
例如,虽然我们使用的那个具有16位单元(因此x!y
从x + y
的字地址给出了16位字(a字地址是字节地址的一半),我们还需要从字节地址和字节值中提取(因为我们主要是在6809字节可寻址的CPU上创建OS和控制软件)。 / p>
因此除了:
x!y - get word from byte address (x + y) * 2
我们也有
x!%y - get byte from byte address (x * 2) + y
x%!y - get word from byte address x + (y * 2)
x%%y - get byte from byte address x + y
我很确定它们是特定于实现的,因为我从未在其他任何地方看到它们。 BCPL早在语言标准与今天一样重要之前就已存在。
规范语言规范应该是Richards自编写语言以来的早期规范(并且您的第二个文档是大约十年后的Essex BCPL实现)。但请记住,MAC项目是最早的迭代 - 之后也有很多进步。
例如,2013年修订了BCPL用户指南(请参阅Martin's home page),其中指定#b
,#o
和#x
作为各种非小数基数的前缀