2009-10-21 6 views
22

Est-ce que quelqu'un sait où je pourrais obtenir un bon compilateur B? J'ai cherché un compilateur B depuis un certain temps, mais j'ai eu du mal à trouver quelque chose de complet pour un système Windows ou Linux.Est-ce que quelqu'un a un compilateur B fonctionnel?

Voici un exemple de B:

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

Un débordement de pile similaire pourrait-il être cloné le 4 juillet? ;) – Oorang

+0

https://github.com/sergev/b a quelques trucs liés à B, en particulier certains PDF. – yeti

+0

Mes excuses à Anthony, et à tous ceux qui auraient pu être découragés par mon commentaire précédent. C'était irrespectueux, inapproprié, et n'a pas fourni d'informations utiles. –

Répondre

8

Avez-vous un GCOS en cours d'exécution Honeywell 6050 pour l'exécuter sur? Ou peut-être un émulateur? Je sais que les 360 et 370 d'IBM ont été émulés mais je n'ai pas encore entendu parler d'un émulateur Honeywell 6000. À l'Université de Waterloo, en 1974-1976, je me souviens avoir écrit des devoirs de CS en B plutôt qu'Algol-60 que la plupart des gens de la classe utilisaient. J'ai continué à écrire un émulateur pour un mini-ordinateur HP 2100A, mais ce code est perdu depuis longtemps. Pour autant que je sache, B n'a été implémenté sur le Honeywell avec sa longueur de mot de 36 bits, son ASCII 9 bits, etc. Et puisque son successeur C, a frappé les universités en même temps, il n'a pas t durer longtemps. Si je me souviens bien, Trevor Thompson, l'un des fondateurs de MKS, a écrit une bibliothèque d'E/S standard pour B et a également écrit un jeu d'échecs en 3D. Si vous parvenez à le traquer, c'est quelqu'un qui, à un moment donné, a eu les mains sur un compilateur B. J'ai regardé LinkedIn et je l'ai trouvé. Il est l'un des propriétaires de Satori Solutions. Si vous avez une machine exécutant GCOS, ou un émulateur Honeywell série 60 exécutant GCOS, alors vous pouvez utiliser le compilateur B inclus dans le UW Tools Package de Thinkage. Il prend en charge les programmes batch et TSS.

+0

B a également été implémenté dans la première édition d'Unix, bien qu'il ait été rapidement remplacé par C. –

11

Poussé par cette question, il y a maintenant un compilateur B disponible ici: https://github.com/Leushenko/ybc

Fonctionne sous Windows, Linux et Mac OS X (binaires fournis, dans l'esprit de la question, il est écrit dans une langue obscure) , où il produit l'assemblage x86-32 de très mauvaise qualité. Devrait être compatible avec GCC. Il est reconstruit à partir du matériel de référence disponible sur B et ne reflète presque certainement pas la langue telle qu'elle était dans les années 1960. Notamment, en l'absence d'informations de type (B est non typé), la règle &a[b] == &*(a + b)ne peut pas contenir sur x86, ce qui signifie que cette tâche est effectivement impossible (sans recourir à un interprète). En dehors de cela, le commentaire de Pavel Minaev est juste: le langage comme décrit est extrêmement petit, beaucoup plus petit que C, et un programmeur de compilateur expérimenté/compétent pourrait probablement écrire un pour vous dans un après-midi.

Malheureusement, ce n'est qu'une réponse partielle, car je ne pouvais pas vous dire où trouver un bon B compilateur.

+2

Cool! Avec '.' étant un identifiant valide dans B, nous pouvons peut-être confondre certains types de BrainF * ck avec le code golf :) –

+1

Ceci est excellent.J'ai réussi à implémenter un fizzbuzz en B. Merci! https://github.com/jurgemaister/fizzbuzz/blob/master/fizzbuzz.b – jurgemaister

+1

@ 500-InternalServerError: Comment '.' est-il un identifiant valide dans B? Selon [le manuel B] (http://cm.bell-labs.com/cm/cs/who/dmr/kbman.pdf), un identifiant est un * alpha * suivi de 0 à 7 * alphas * ou * chiffres *. "La variable syntaxique 'alpha' n'est pas définie, elle représente les caractères de A à Z, de a à z, _ et de retour arrière." (Je ne sais pas pourquoi backspace est inclus.) –

Questions connexes