In an era with other available general-purpose programming languages, such as Java, Python and Ruby, C and its various .NET relatives remain important languages for developers. Despite its age, developers worldwide still commonly work in C, C#, C++ and Objective-C to create sophisticated portfolios of modern applications.
This article takes a quick look at the storied history of the C programming language and its role in high-level software development efforts. By understanding its history, developers can garner the context necessary to understand what makes C-based languages useful for embedded systems management, dynamic data processing and other complex programming projects.
The beginning of C
The history of the C programming language started with its use to move kernel code within AT&T’s original Unix operating system. The goal was to perform the process of moving a kernel, or core, of an application using as few lines of code as realistically possible.
Ken Thompson, a Bell Labs employee, had already endeavored to create a programming language for the Unix platform that could accomplish this goal. This resulted in a modified version of the Basic Combined Programming Language (BCPL) that he called B, which featured characteristics such as generalized assignment operators for calculations and a simplified syntax.
Another Bell Labs employee, Dennis Ritchie, eventually built upon Thompson’s work to create C in 1972, focusing on addressing some of the weaknesses in B’s semantic model, such as its clunky character-handling mechanisms, as well as its slow threaded-code approach. Eventually, the language carried the fundamentals of the existing BCPL and imbued it with its own type structure.
Although development of the Unix OS began in 1969, its code was rewritten from assembly language to C in 1972. C’s design as a Unix system implementation language is documented in a Bell Labs paper titled, “The Development of the C Language.”
Early implementations of C
By early 1973, the modern C language was complete, and its compiler was powerful enough to warrant implementation across various software systems within Bell. In time, the C-based Unix OS garnered use across research-oriented academic and government organization environments.
In 1978, Dennis Ritchie and Brian Kernighan published the book The C Programming Language, which served as a common source of reference for C. This period of C’s history is often referred to as the K&R version of C, in reference to Kernighan and Ritchie.
This new iteration of C boasted innovative new development features, such as:
- a standard I/O library;
- unsigned and long int data types;
- various compound assignment operators (such as =+);
- void() functions;
- struct data type assignments;
- enumerated types; and
- the ability to store different data types in one memory location.
In 1983, the American National Standards Institute (ANSI) established the ANSI X3.159-1989: Programming Language C, known as ANSI C. Another successive standard of the language was released and called ISO C (or C90). Successive modifications occurred in 1995, 1999 and 2011, with each one called C95, C99 and C11, respectively. C11, which took about five years to complete, added another swath of innovative features to C and its libraries, such as:
- bounds-checked functions;
- anonymous structures;
- atomic operations;
- multithreading capabilities;
- Unicode support; and
- type-generic macros.
Modern use cases of C
Today, the C programming language powers leading technologies encompassing everything from operating systems to embedded systems. C typically carries a manageable memory footprint, as well as reasonable runtime resource requirements. It runs close to the hardware, is highly portable, and features a deterministic approach for using resources that suits modern applications.
To illustrate, here is a list of some of C’s most common use cases:
C is still a preferred language when it comes to working with system kernels and device drivers. Kernels of Linux, macOS, iOS, Microsoft Windows and Android operating systems are all examples of places where C programming has found a home.
Databases such as MySQL, PostgreSQL and Microsoft SQL Server prominently feature codebases written in C. For example, even though the Oracle database was written in assembly language upon its conception in 1977, it was eventually rewritten in C for the release of Oracle v3 in 1983.
Many of the compilers and interpreters used in newer languages like Perl and Python operate using C-based approaches, because the association with C often makes the code more comprehensible for the average machine.
Many of the drivers in everyday home and personal electronics, such as alarm clocks, remote controls, coffee makers and microwaves, are programmed in C. Even automotive features like dashboard displays, childproof locks, keyless entry systems, airbag controls and heated seats are often coded in C, thanks to its historic compatibility with machine-based hardware.
Many application suites used for developing 3D movies are built using C and C++, due to the need to process large amounts of data and perform a large number of calculations every second.