有人拥有可用的B编译器吗?

26

有人知道在哪里可以获取一个好的B编译器吗?我已经寻找B编译器有一段时间了,但是在Windows或Linux系统上找到完整的东西比较困难。

这里是B的一个示例:

main( ) {
auto a, b, c, sum;
a = 1; b = 2; c = 3;
sum = a+b+c;
putnumb(sum);
}

11
就像堆栈溢出可以在一个七月四日的周末被复制一样? ;) - Oorang
1
https://github.com/sergev/b 有一些与B语言相关的东西,尤其是一些PDF文件。 - user3466446
1
对于安东尼和任何可能被我早先评论所波及的人,我深表歉意。那是不尊重、不恰当的,并且实际上没有提供任何有用的信息。 - Pavel Minaev
也许将这个问题移动到 https://retrocomputing.stackexchange.com ... ??? - user3466446
请返回翻译后的文本。 - user3466446
2个回答

19
受到这个问题的启发,现在可以从这里获取B编译器:https://github.com/Leushenko/ybc。它可以在Windows、Linux和OSX上运行(提供二进制文件;为了回答问题它是用一种晦涩的语言编写的),生成非常低质量的x86-32汇编代码,应该与GCC兼容。它是由B的可用参考资料重构而来,几乎肯定不能反映出20世纪60年代实际的语言情况。值得注意的是,在没有类型信息的情况下(B是无类型的),在x86上,&a[b] == &*(a + b)规则不适用,这意味着这项任务实际上是不可能完成的(除非使用解释器)。除此之外,Pavel Minaev的评论是正确的: 所描述的语言非常小,比C小得多,有经验/能干的编译器程序员可能可以在一个下午内为您编写一个。不幸的是,这只是部分答案,因为我无法告诉您哪里可以找到一个好的B编译器。

3
太酷了!由于在B语言中, .是一个有效的标识符,也许我们最终可以混淆一些在代码高尔夫中使用BrainF*ck的人 :) - 500 - Internal Server Error
1
太棒了!我成功地在B语言中实现了FizzBuzz。谢谢!https://github.com/jurgemaister/fizzbuzz/blob/master/fizzbuzz.b - Jørgen R
1
@500-服务器内部错误:在B语言中,如何将 . 视为有效标识符?根据 B手册 ,标识符是以 alpha 开头,后跟0到7个 alphasdigits 。 “语法变量'alpha'未定义。它代表字符A到Z,a到z,_和退格键。”(我不知道为什么包括退格键。) - Keith Thompson
2
@KeithThompson 在“用户参考 MH-TSS 上的 B”中,被列为字母字符之一,该文档描述了与 Thompson 手册略有不同的语言版本(B 没有标准化;我认为设计师会随时添加功能)。 - Alex Celeste
3
在x86上,&a[b] == &*(a + b) 不成立的原因很简单。请记住B是按寻址而不是按字节寻址。将指针加一并不能使其增加到下一个字节,而是增加到下一个字——在像x86这样的非字寻址平台上,您需要在解引用指针时将它乘以字大小。(B根本无法寻址字节。) 这个问题可以轻松地修复。 - David Given
显示剩余2条评论

12
您有使用Honeywell 6050运行GCOS的设备吗?或者有模拟器吗?我知道IBM的360和370已经被模拟,但我还没有听说过有Honeywell 6000模拟器。在滑铁卢大学的1974-76年期间,我记得写CS作业时用的是B语言而不是班上大多数人使用的Algol-60。后来我为HP 2100A小型计算机编写了一个模拟器,但那段代码早就失落了。据我所知,B只在Honeywell上实现,并且它的字长为36位,ASCII采用9位等。由于它的后继者C也同时出现在大学里,所以它没有持续很长时间。如果我没记错的话,MKS的创始人之一Trevor Thompson为B编写了标准I/O库,并在其中编写了一个3D棋盘游戏。如果您能找到他,他曾经掌握着B编译器。我看了一下LinkedIn,发现他是Satori Solutions的所有者之一。如果您有运行GCOS的机器,或者运行GCOS的Honeywell系列60模拟器,则可以使用Thinkage的UW工具包中包含的B编译器。它支持批处理和TSS程序。

B 也是 Unix 第一版中实现的,尽管它很快就被 C 取代了。 - ctype.h

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接