C is one of the most important programming languages in the history of computing. Today, many different programming languages have popped up offering many different features, but in many ways, C provided the basis for such languages.
C was born out of necessity.
It is unclear whether its creators had envisioned the great things C would go on to achieve. Like most innovations, C underwent many changes over time. Probably one of its greatest achievements has been its ability to stay relevant even in modern, dynamic times. It must be fulfilling for the creators of C to observe that their creation is not considered outdated or categorized as useful for only a few niche areas. Instead, C has come to be recognized as a general-purpose, strong language which could be applied to many areas. (Find out more about the history of programming languages in Computer Programming: From Machine Language to Artificial Intelligence.)
The Beginnings of C
Developing C was not originally the objective of its founders. In fact, various circumstances and problems created the ideal situation for its creation. In the 1960s, Dennis Ritchie, who was an employee of Bell Labs (AT&T), along with some of his colleagues, had been working on developing an operating system which could be used by many users simultaneously. This operating system was known as Multics, and it was meant to allow many users to share common computing resources. Multics offered many benefits, but also had many problems. It was a large system and it seemed – from a cost-benefit perspective – that the costs outweighed the benefits. Gradually, Bell Labs withdrew from the project.
That's when Ritchie joined Ken Thompson and Brian Kernighan in another project. The project involved developing a new file system. Thompson developed a new file system for the DEC PDP-7 supercomputer in assembly language. Thereafter, the creators of the file system made many improvements to it, resulting in the birth of the UNIX operating system. Even the origin of the name UNIX can be traced to its predecessor, Multics. Originally, the name was Unics (Uniplexed Information and Computing Service) as a pun on Multics (Multiplexed Information and Computer Services). Later, Unics changed to UNIX. UNIX was written in assembly language which, though ideal for machines, was a difficult proposition for human beings. To interpret and operate UNIX, the languages Fortran and B were used. It is here that the idea of developing the C language began to form in the minds of its creators.
Why C Was Developed
The B language was a useful one in the context of the challenges the creators of UNIX faced with the operating system. The B language was taken from BCPL by Martin Richards. As already stated, UNIX was written in assembly language. To perform even small operations in UNIX, one needed to write many pages of code. B solved this problem. Unlike assembly language, B needed significantly fewer lines of code to carry out a task in UNIX. Still, there was a lot that B could not do. Much more was expected from B in the context of rapidly changing requirements. For example, B did not recognize data types. Even with B, data types were expressed with machine language. B also did not support data structures.
It was clear something had to change. So, Ritchie and his colleagues got down to overcoming the limitations. The C language was developed in 1971-73. Note that for all its limitations, C owes its birth to B because C retained a lot of what B offered, while adding features such as data types and data structures. The name C was chosen because it succeeded B. In its early days, C was designed keeping UNIX in mind. C was used to perform tasks and operate UNIX. So, keeping performance and productivity in mind, many of the UNIX components were rewritten in C from assembly language. For example, the UNIX kernel itself was rewritten in 1973 on a DEC PDP-11.
Ritchie and Kernighan documented their creation in the form of a book called "The C Programming Language." Though Kernighan claimed that he had no role in the design of C, he was the author of the famous "Hello World" program and many other UNIX programs.
Evolution of C
Over time, C began to be used in personal computers for developing software applications and other purposes.
The first change (even if only a little) came when the American National Standards Institute (ANSI) formed a committee in 1983 to standardize C. After a review of the language, they modified it a little so that it was also compatible with other programs that preceded C. So the new ANSI standard came into being in 1989, and is known as ANSI C or C89. The International Organization for Standardization (ISO) has also contributed to the standardization of C.
Do you use Microsoft Windows? Then you have C to thank, because Windows' development is mostly in C. The same goes for MacOS, Linux, Android, iOS and Windows Phone as well, so nearly all modern operating systems are based on C. It's also widely used in embedded systems, such as those found in vehicles, smart TVs and countless internet of things (IoT) devices.
All of the applications of C are too numerous to be listed here, but some others include:
- Development of compilers, databases and spreadsheets
- Computer and mobile games
- Updating the UNIX kernel
- Evaluating mathematical equations
- Designing network devices
Just like most of the world's greatest inventions, C was born out of necessity. Circumstances and problems provided the inspiration. However, unlike many programming languages that are now extinct or almost extinct, C has stood the test of time and thrived. Some languages are now categorized as niche languages – for example, Fortran is now mostly used only for engineering purposes and COBOL is struggling to stay relevant. C has not only stayed relevant, but has also provided inspiration for the development of many other programming languages. Even powerful technology waves like IoT, AI and automation have failed to dislodge C from its position of prominence. It appears that this language will continue to be with us long into the future as well.