H ? « »

Language peer sets for B:
United States
United States/1970
Designed 1970
1970s languages
Third generation
High Cold War
Genus CPL, BCPL and B
Multi-purpose
CPL, BCPL and B
CPL Algols
Generation of Algol 60
CPL, BCPL and B/1970
CPL Algols/1970
Generation of Algol 60/1970
CPL, BCPL and B/United States
CPL Algols/United States
Generation of Algol 60/United States
Multi-purpose
Multi-purpose/1970
Multi-purpose/us

B(ID:492/b::002)

Systems Programming Language 

alternate simple view
Country: United States
Designed 1970
Published: 1970
Genus: CPL, BCPL and B
Sammet category: Multi-purpose


Thompson, Bell Labs 1970.
A systems language written for Unix on the PDP-11, intended for recursive, primarily non-numeric applications, typified by system programming.

Derived from BCPL, and very similar to it except for syntax. B was the predecessor of C. Used as the systems language on Honeywell's GCOS-3. Still on offer for GCOS-8 at THinkage in Canada.


People:
Related languages
BCPL B   Evolution of
TMG B   Written using
B Eh   Based on
B IMP   Extension of
B NB   Evolution of

References:
  • Findler, Nicholas (1972) Findler, Nicholas [Foreword]
          in Findler, Nicholas et al (1972) Findler, Nicholas et al "Four high-level extension of FORTRAN IV : SLIP, AMPPL-II, TREETRAN, SYMBOLANG" New York : Spartan Books, 1972
  • Thompson, Ken (1972) Thompson, Ken "Users' Reference to B" Internal Bell Labs Technical Memorandum dated January 7, 1972 Abstract Online copy
          in Findler, Nicholas et al (1972) Findler, Nicholas et al "Four high-level extension of FORTRAN IV : SLIP, AMPPL-II, TREETRAN, SYMBOLANG" New York : Spartan Books, 1972
  • Johnson, S. C., and Kernighan, B. W., (1973) Johnson, S. C., and Kernighan, B. W., "THE PROGRAMMING LANGUAGE B." Computing Science Technical Report No. 8, Bell Labs., Murray Hill, N. J. 07974 (Jan. 1973). Abstract Onlnie version at Bell Labs
          in Findler, Nicholas et al (1972) Findler, Nicholas et al "Four high-level extension of FORTRAN IV : SLIP, AMPPL-II, TREETRAN, SYMBOLANG" New York : Spartan Books, 1972
  • Johnson, Steve (1973) Johnson, Steve "User's Reference to B on MH-TSS"
          in Johnson, S. C., and Kernighan, B. W., (1973) Johnson, S. C., and Kernighan, B. W., "THE PROGRAMMING LANGUAGE B." Computing Science Technical Report No. 8, Bell Labs., Murray Hill, N. J. 07974 (Jan. 1973).
  • Kernighan, Brian (1973) Kernighan, Brian "A Tutorial Introduction to the Language B" Extract: From the introduction pdf
          in Johnson, S. C., and Kernighan, B. W., (1973) Johnson, S. C., and Kernighan, B. W., "THE PROGRAMMING LANGUAGE B." Computing Science Technical Report No. 8, Bell Labs., Murray Hill, N. J. 07974 (Jan. 1973).
  • Sammet, Jean E. (1973) Sammet, Jean E. "Roster of Programming Languages for 1973" p147
          in (1974) ACM Computing Reviews 15(04) April 1974
  • Sammet, Jean E (1978) Sammet, Jean E "Roster of programming languages for 1976-77" pp56-85
          in [SIGPLAN] (1978) SIGPLAN Notices 13(11) Nov 1978
  • Ritchie, Dennis M. (1996) Ritchie, Dennis M. "The development of the C programming language" in "History of Programming Languages", ACM Press/Addison-Wesley Publishing Company, New York (1996) ed Bergin and Gibson Extract: B
          in [SIGPLAN] (1978) SIGPLAN Notices 13(11) Nov 1978
  • (1997) Ritchie, Dennis: Commentary on B Internal Memo in 1997 Abstract Online copy
          in [SIGPLAN] (1978) SIGPLAN Notices 13(11) Nov 1978
  • (1997) Ritchie, Dennis: Commentary on B Technical Report in 1997 Abstract Online copy
          in [SIGPLAN] (1978) SIGPLAN Notices 13(11) Nov 1978
    Resources
    • Usenet postings by Martin Bader, recued by Clive Feather
    • Usenet postings by Alan Watson, recued by Clive Feather
    • Thinkage tools GCOS B Compiler
      B has proved itself time and again as one of the most versatile languages for writing system software under GCOS-8. It supports all modern program logic structures: IF-THEN-ELSE, WHILE loops, SWITCH statements, and so on. Its operators allow programmers to perform all the normal integer, floating point, and character operations, as well as low-level actions like bit shifting, ANDing, and ORing. Because B is a stack-oriented language, recursion is permitted.

      B comes complete with a reference manual, a tutorial guide, and on-line descriptions of all library functions. The B compiler and B programs can be prepared to run under either batch or TSS.
    • Oral History interview by Mahoney with Thompson
      MSM: How did you come up with it, it?s an English language wasn?t it?


      Thompson: Ah yes, but the guy who did, Martin Richards, actually developed it at MIT. It was available in a very informal way, on CTSS and we pulled it off of CTSS and got a version running on GECOS here and did system programming there. It was too big a language to run on the UNIX machines that were 4K machines. That?s when B was developed. Which was ...

      MSM: Did you develop B?

      Thompson: I did B.

      MSM: As a subset of BCPL

      Thompson: It wasn?t a subset. It was almost exactly the same. It was a interpreter instead of a compiler. It had two passes. One went into intermediate language and which one was the interpreter of the intermediate language. Dennis wrote a compiler for B, that worked out of the intermediate language. It was very portable and in less than a day you could get very versatile (not clear). Typically the interpreter was a set macros for your interpreter, they were very field orientated and you just define these macros with these fields and then write a little interpreter that would switch the set routines, and you had to write about twenty three-line routines, and it would run. And it was very small, very clean. It was the same language as BCPL, it looked completely different, syntactically it was, you know, a redo. The semantics was exactly the same as BCPL. And in fact the syntax of it was, if you looked at, you didn?t look too close, you would say it was C. Because in fact it was C, without types. There?s no word like interchar or struct or anything like that. The word for... There was a word for extern, which means to declare an external thing. There was a word auto, which declared an auto thing. So, it would be like auto XYZ, instead int XYZ and it meant "word". Which was the only time.

      MSM: So it operated really at the machine level.


      Thompson: Yeah. It was used to a very small extent. It was written in its own language. That?s why it?s so portable. Because you just pull it through and it?s up real quickly. Um... But, the interpreters, the interpreter for the 11 was having some trouble. It wasn?t a word machine, and this thing had a word notion, and so on almost every operator you had shift left and shift right, shift left and shift right. It was just not a good match at all and part of this is we didn?t have a good -on top of the interpreter problem-, it wasn?t even a good interpreter on the 11, because of the mismatch of the machine and that we wanted something better as the systems language is what prompted Dennis to slowly permute it into C.

      MSM: So C essentially contains B?

      Thompson: Well, some of the anachronisms of C, that are now gone, or, at least are not or are unpublished to the point that no one knows they?re there, are B anachronisms. Like auto. There?s a word called auto. No one knows, I think it?s actually ANSI finally. The word oriented parts of C, as C emerged were in fact the basic routines. And in fact one of the major, at least in my view (not clear) with C is that a arrays to are promoted to the address of the base of the array every time you touch them and that?s one of the fundamental things of the NBCPL. That there?s no such thing as an array but there?s these things called vectors. A vector is a list of words and declaration of a vector is a word containing a pointer to a list of words. If you say auto x of 5, there?s no such thing as x of five, you know, that?s a type, and there is no types in this language. So, what it is, it?s a single word called x and then five words that are unnamed and a pointer, initialization of a pointer into x to the base of the five words. To keep that semantics and develop a notion of an array, which we want to promote. The name of an array into the address to do it at run time. Anyway,

      MSM: It always seems to be one of the neat features. The way you could step through an array with arithmetic.

      Thompson: Oh yeah, yeah.

      MSM: You prompted a question when you talked about portability of B and of course one makes a great deal of the portability of UNIX itself and it?s a portability, if I understand you correctly, based on self-reference, or almost self-modification, which was the theme you were pursuing in your Turing Award talk, largely to suggest the dangers of doing it. Is that a theme of continuing interest to you?

      Thompson: Have I got it right to start with? I guess it?s wrapped up. Von Neumann machines in the real sense. There?s a lot of power in executing data --generating data and executing data. In fact, that?s how languages work and in college I worked for the comp center and it was thrown upon me to maintain a language called NELIAC and it?s no longer wanted. Then later on then another language called Smalgol as a subset of Algol. Which were compilers both written in their own language. You get a sense of, I don?t know, bootstrapping and of self-modifying programs and of self-replicated programs when you are in a position of maintaining a language written in its own language. Even if it?s written in a simple language, you know, you get this feeling of bootstrapping and moving on and I used to do a lot of that stuff, earlier. In fact, the Turing talk was about work I did a long, long time ago. I?m really sure I referenced the date that it was done in the talk.


    Search in: Google  Google scholar  World Cat  Yahoo  Overture  DBLP  Monash bib  NZ  IEEE  ACM portal  CiteSeer  CSB  ncstrl  jstor  Bookfinder