2009-10-21 12 views
22

¿Alguien sabe dónde podría obtener un buen compilador de B? He buscado un compilador B desde hace un tiempo, pero he tenido algunas dificultades para encontrar algo completo para un sistema Windows o Linux.¿Alguien tiene un compilador B en funcionamiento?

Aquí es un ejemplo de B:

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

¿Algo así como el desbordamiento de pila podría ser clonado en un fin de semana del 4 de julio? ;) – Oorang

+0

https://github.com/sergev/b tiene algunas cosas relacionadas con B, especialmente algunos archivos PDF. – yeti

+0

Mis disculpas a Anthony, y a cualquier persona que podría haber sido desalentada por mi comentario anterior. Fue irrespetuoso, inapropiado y en realidad no proporcionó información útil. –

Respuesta

8

¿Tiene un GCOS corriendo Honeywell 6050 de ejecutarlo en? ¿O tal vez un emulador? Sé que IBM 360 y 370 se han emulado, pero aún no he oído hablar de un emulador Honeywell 6000.

En la Universidad de Waterloo en 1974-76 marco de tiempo Recuerdo escribir asignaciones de CS en B en lugar de Algol-60 que la mayoría de las personas en la clase estaban usando. Seguí escribiendo un emulador para un miniordenador HP 2100A, pero ese código hace tiempo que se perdió.

Hasta donde yo sé, B solo se implementó en Honeywell con su longitud de palabra de 36 bits, ASCII de 9 bits, etc. Y como su sucesor C, estaba llegando a las universidades al mismo tiempo, no lo hizo durar mucho tiempo

Si mal no recuerdo, Trevor Thompson, uno de los fundadores de MKS, escribió una biblioteca de E/S estándar para B y también escribió un juego de ajedrez en 3D. Si logras localizarlo, es alguien que, en algún momento, tuvo en sus manos un compilador B. Acabo de echar un vistazo a LinkedIn y lo encontré. Él es uno de los propietarios de Satori Solutions.

Si tiene una máquina que ejecuta GCOS, o un emulador de la serie 60 de Honeywell que ejecuta GCOS, entonces podría usar el compilador B incluido en el UW Tools Package de Thinkage. Es compatible con los programas por lotes y TSS.

+0

B también se implementó en la primera edición de Unix, aunque fue rápidamente reemplazado por C. –

11

Impulsados ​​por esta pregunta, ahora hay un compilador B disponibles desde aquí: https://github.com/Leushenko/ybc

ejecuta en Windows, Linux y OSX (binarios siempre; en el espíritu de la cuestión está escrito en un lenguaje oscuro) , donde produce ensamblaje x86-32 de muy mala calidad. Debe ser compatible con GCC. Se reconstruye a partir del material de referencia disponible en B, y casi con certeza no refleja el lenguaje tal como era en la década de 1960. Notablemente, en ausencia de información de tipo (B está sin tipo), la regla &a[b] == &*(a + b)no puede contener en x86, lo que significa que esta tarea es efectivamente imposible (sin recurrir a un intérprete).

Aparte de eso, el comentario de Pavel Minaev es correcto: el lenguaje tal como se describe es extremadamente pequeño, mucho menor que C, y un programador experimentado compilador/competente probablemente podría escribir una para ti en una tarde.

Lamentablemente, esta es solo una respuesta parcial, ya que no pude decirle dónde encontrar un buen compilador B.

+2

¡Genial! Con '.' siendo un identificador válido en B, quizás podamos confundir finalmente algunos de los tipos de BrainF * ck en el código de golf :) –

+1

Esto es excelente.Pude implementar un fizzbuzz en B. ¡Gracias! https://github.com/jurgemaister/fizzbuzz/blob/master/fizzbuzz.b – jurgemaister

+1

@ 500-InternalServerError: ¿Cómo es '.' un identificador válido en B? De acuerdo con [el manual B] (http://cm.bell-labs.com/cm/cs/who/dmr/kbman.pdf), un identificador es un * alfa * seguido de 0 a 7 * alphas * o * dígitos *. "La variable sintáctica 'alfa' no está definida. Representa los caracteres A a Z, a z, _ y retroceso". (No tengo idea de por qué se incluye el retroceso). –

Cuestiones relacionadas