我一直在深入研究BCPL的历史,因为我被问到了使用前缀"0x“表示十六进制数的原因。
在我的搜索中,我偶然发现了一个关于这个标记背后的历史的非常好的解释。(为什么十六进制数字前缀为0x?)
然而,从这篇文章中又引出了另一个问题:
对于八进制常量,BCPL是使用8 <digit> (按照规范:http://cm.bell-labs.com/cm/cs/who/dmr/bcpl.pdf)还是使用#<digit> (按照manual.pdf),还是在不同的语言实现中都是有效的?
我还找到了第二个答案,它使用了#语法,这进一步吸引了我对这个主题的兴趣。(为什么前导零用来表示八进制数?)
任何历史见解都会受到极大的赞赏。
发布于 2013-11-19 05:02:01
在BCPL语法上有许多细微的变化。
例如,虽然我们使用的单元格有16位单元格(因此x!y从x + y的单词地址(单词地址为字节地址的一半)中给出了16位单词),但我们也需要从字节地址和字节值中提取(因为我们主要是在6809字节可寻址的CPU上创建操作系统和控制软件)。
因此,除了:
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实现)。但是请记住,Project是最早的迭代--在那之后也有很多进步。
例如,2013年修订了BCPL用户指南(参见马丁主页),该指南将#b、#o和#x指定为各种非十进制基数的前缀。
https://stackoverflow.com/questions/18987911
复制相似问题