C and UNIX

The development of C runs almost parallel to the development of UNIX, a multi-user, multithreaded operating system environment well suited for the development of programs. UNIX is also the first major operating system to written in a higher level language than assembly when it was rewritten in the early seventies with C.

In the years following the ALGOL 60 report, Combined Programming Language or CPL was developed to provide a language that was closer to computing hardware. The idea was to have a language that was both a high level language that was easier to read, but also be a low level language that didn't require much translation to machine code. It's use was intended for solving all types of problems including numeric, non-numeric, and system. In contrast to Pascal principles intended to encourage reliable structured programs, CPL was designed to allow as wide a range of applications as possible. Due to it's size it never gained much popularity but a smaller Basic CPL (BCPL) was used somewhat.

Meanwhile Ken Thompson and Dennis Ritchie were working together at the then Bell Labs, experimenting with computer operating systems. At the time they worked with a system called MULTiplexed Information and Computing Service or MULTICS. Programmers liked the system because rather than the usual method of submitting a pile of punch cards to an operator and waiting for an eventual print out, they could immediately access a keyboard and get instant results. Unfortunately the system was too expensive and was in the process of being phased out.

Eventually the core of UNIX was written in assembly language using some of the features from MULTICS that Ritchie and Thompson didn't want to give up by going back to the old punch card days. At the the time it was done just for themselves and some of their colleagues and wasn't intended to be much more. But it quickly caught favor and they soon realized that if it was to really gain a more universal acceptance it would require more development.

So Ken Thompson started by creating a smaller version of BCPL which he called B. B resembled the eventual C except that it did not use data typing, which Dennis Ritchie did when he transformed B into C. Once this was done he was able to rewrite UNIX using C and as a result was able to make UNIX easily portable to any machine.

Like it's immediate ancestors, C is both a high level and low level language. This makes it extremely flexible for almost any purpose one can conceive of. C is a programmer's language with short syntax and not a very large vocabulary. However its readability is confined to those who use it often, and as such it isn't suited very well for business or scientific applications. It is perfectly suited for more performance demanding applications such as operating systems, compilers, and other system level software. Many of the standard applications that run the Internet are written with C.

With C as its major programming language, UNIX grew into a rich programming environment, and certain features can be considered the genesis of many modern programs and ideas. From the beginning many small programs were written for basic functions and became a "toolkit" for programmers. Early in the development the concept of pipes was introduced, where the output of one program could be "piped" directly into the input of another program. Strings of such programs could quickly and easily be stitched together and create essentially a new program out of many smaller ones. As such this can be considered the forerunner of today's Object Oriented Programming paradigm. Considering two of the bigger applications on the Internet today, Email and instant messaging, both of these applications have been available to UNIX system users long before the Internet became the entity we know today.