C language history

Was C the first language ?

Nowadays, the well-known, one might say almost legendary, C language is used almost everywhere and is considered the father of many other languages.
But was C the first programming language? No. This honorary title belongs to assembly language and machine codes. Or maybe this is the first high-level language? Nope. FORTRAN, developed between 1954 and 1957, takes this title for itself.
So was the C language the first in anything ?
For sure, the C language was, de facto, the first and last “Universal assembler” language. Which provides the same speed as an assembler, but at the same time allows you to write programs for different platforms without changing the code, that is, cross-platform.

Why does C even exist ?

Almost the entire early digital age was created by enthusiasts and hobbyists. Excuse me for the expression, but back then people were obsessed with the idea of writing, developing, and implementing something new—not always innovative, but at least useful for its authors.
Denies Ritchi
Dennis Ritchie
Brian Kernigan
Brian Kernighan
This concept works well for the C language too.
According to one version, its creator, Dennis Ritchie, was upset with the capabilities of his server, and the limited control of his ship, in a game that he loved to play with Kernighan. So they ported the game to the PDP-7, and then to the PDP-11.
Oh yes, I forgot to say that these machines did not have an OS, so they wrote their own in Assembly.
PDP-7 computer
PDP-7
PDP-11 computer
PDP-11
And in the future, to make it easier to port programs and operating systems, the C language was developed.
There is also a version that it was an April Fool's joke. A joke that went too far.
But most likely, Bell Labs needed a language to support Unix systems on different computers and with different processor architectures. And within 4 years, from 1969 to 1973, the C language was developed.

Features of the C language

The language had many features, not just the ones mentioned before: cross-platform and speed of assembler. Among other things:
  • Rich standard library. Of course, this is compared to other programming languages in the 70s
  • Dynamic memory allocation.
  • Focus on a structural approach to problem solving. A large problem was broken down into several smaller ones that could be solved by writing a function for each.
  • Modularity. The ability to divide a program into elementary elements and then use them in other programs.
  • Extensibility. It is very easy to write new functionality for the language.
  • Case sensitivity. For example, FORTRAN is not case-sensitive.
  • Strictly speaking, C is a high-level language, but it is much closer to low-level languages than anyone else. Sometimes referred to as middle-level language.
  • Pointer arithmetic and full control over memory management. Ability to work with memory addresses, like in an assembler.
  • Procedural language.
  • Fast and efficient.
And, as the creator says:
Chevron
Dennis Ritchie
C is quirky, flawed, and an enormous success.

C standards

The history of the language is clearly shown by the development of its standards. Specifically, what the developers focus on, what they remove or add, and what agreements they come up with.

Time before standards and any rules

If we consider the current C standard to be minimalistic, then the first version of the language released in 1972, which was given the name NB (type New B), had at its disposal only the ability to include header files and two preprocessor directives for inserting and replacing lines #include or #define.
Of course, the language did not stand still and quickly expanded. In 1973, a portable C compiler was written by Stephen K. Johnson.

About K&R C

In 1978, the legendary book from Brian Kernighan and Dennis Ritchie was published C Programming Language.
The c programming language cover
This book became the standard for many years, before the appearance of the ANSI C standard. But even after the appearance of this standard, it was believed that every compiler must follow the K&R C specifications.
In 1978, C acquired the following features:
  • Standard I/O library
  • Several new data types
  • Some compound operators, such as =- =+ =* =/ ... were eliminated because it was not entirely clear what they were supposed to do. Each compiler interpreted this differently.

ANSI C or C89

As you might guess, the standard was adopted in 1989, and the second edition of The C Programming language was published.
The new standard includes:
  • Function prototypes
  • Void pointers
  • Support for characters from other languages
  • The preprocessor was expanded.

C95

It hasn't changed much. Mostly changed some of the roughness of the C89. Also expanded the number of supported international characters and added digraphs. As alternative symbols to some others.

C99

A key feature of this standard was the change in the operation of some keywords and the emergence of new ones, for example, inline. Here's what's new:
  • The appearance of the inline keyword
  • New variadic macros
  • Adding a preprocessor #pragma
  • Ability to use CVR + static in [ ] inside function declarations
  • The variable __func__ is predefined
  • Ability to perform initialization in a for loop
  • The main() function returns 0 by default
  • Truncating the results of division to the smallest of integer values
  • Compound literals appeared
  • Hexadecimal floating point constants appeared
  • Ability to leave a comma at the end of the enumeration of enum constants
  • Improve array, struct, and union initialization using {}
  • Implementation of a variable-length array
  • Flexible Array Members
  • The emergence of new data types
    • _Bool
    • long long and unsigned long long
    • _Complex
    • _Imaginary
  • Appearance of single-line comments //
  • Pointers can now be used with the restrict keyword

C11

  • mproved multithreading, with the addition:
  • Expanded Unicode character support
  • Added _Generic expression
  • Now you can make anonymous members for the struct and union
  • Expanded lifetime of temporary objects
  • Now there is a static assert

C17

There were almost no changes. Except for canceling some macros and functions. Go ahead.

С language today, C23

And although this standard has not yet been fully implemented by compilers and is not as popular as C99, it would not hurt to find out what new was offered to us in the last year.
So here's what's new :
  • Added many new data types
  • New constant u8
  • Implemented empty initialization
  • Attributes appeared
  • static_assert is now a keyword
  • thread_local is now a keyword
  • nullptr is already a constant with type nullptr_t
  • Now true and false become keywords
  • New preprocessor directives
    • #elifdef
    • #elifndef
    • #warning
    • #embed
  • New options for #pragma
    • FENV_ROUND
    • FENV_DEC_ROUND

C family. (Descendant languages)

Only two direct descendants of the language can be distinguished. This is Objective-C, which is based on a new approach to programming, that is, OOP. The second one is much more famous, and that is C++, which complements C with its functionality and introduces a lot of new things. Now a little about how an ancestor differs from his children.

Objective-C

Unlike C++, whose syntax is 99% comparable to C, Objective-C is a completely different story. Its syntax has changed a lot.
And if C is platform-independent, then Objective-C is used only on macOS and iOS.
Code example objective-c
Example of source code of Objective-C
Code example c language
Example of source code of C language

C++

C++ is much more complicated than C. And in general, it can be called the most complex programming language.
This complexity is caused by its extensive functionality, which causes a lot of criticism from C fans and other language fans.
The main differences between C++ and C are:
  • OOP
  • Templates
  • Exception handler
  • Operator overloading
  • More flexible and secure memory management model, smart pointers.
  • Support for multi-threaded programming, out-of-the-box.
  • There is a STL that defines containers such as vector, array, list, deque, map, set, etc.
Code example c++
Example of source code of C++

C-like languages

In addition to the direct descendants of the C language, there are also languages whose syntax is very similar to our “Universal Assembler”.
In addition to the above-mentioned descendants, the following have similar syntax:
  • Java Code example java
  • C# Code example c#
  • D Code example d language
  • JavaScript Code example JS
  • Perl Code example perl

Relevance of the C language (Its popularity)

I noticed an interesting phenomenon on the Internet. Almost everyone is trying to prove that C is not dead and is very much in use—that is, a popular language. That is, all sorts of bloggers believe that many others believe that C is dead. But in fact, few people think so.
Honestly, I still don’t understand why everyone suddenly decided to prove that he is not dead. That is, the original source of this thesis is not known to me. Maybe this is because of age, or maybe because Python is so highly extolled that everyone sees how once-popular languages are no longer so popular.
If you look at the statistics on the popularity of programming languages from the TIOBE Index
Popularity of programming languages over time
You can notice that C, in fact, almost never fell below 2nd place. And among the most popular will always be Java and C++. Python has become so popular relatively recently.
Why is C so popular even nowadays? I don't know. And I cannot give an unambiguous, comprehensive, and unbiased answer. But I can share my almost 4 years of experience. I used to program a lot in C++; in fact, that’s where I started this journey. And only occasionally do I touch C. Now my stack has changed, and I use other languages and technologies.
But what’s interesting is that when I return to C, it becomes easier for me—just easier. Compared to the overloaded syntax of C++ or the monstrous number of modules that you have to remember when writing in Python, returning to the fold of C is a relief for me.
Something like this.
Chevron
Linus Torvalds
C++ is a horrible language. It’s made more horrible by the fact that a lot of substandard programmers use it, to the point where it’s much much easier to generate total and utter crap with it. Quite frankly, even if the choice of C were to do *nothing* but keep the C++ programmers out, that in itself would be a huge reason to use C.

heart
0
3 connected dots
0

Used termins

Related questions