A programming language developed by Bjarne Stroustrup at Bell Labs since 1979, as an extension of the C programming language. As a programming language it was designed with the following paradigms, among others:
- General-purpose: The opposite of a domain-specific programming languages, such as those developed for business applications, and thus contain built-in salary calculation functions. C++ can be used for the widest array of applications.
- Imperative: Uses statements that change a program's state. In much the same way that the imperative mood in natural languages expresses commands (e.g. “Add 2 plus 2”). Its opposite would be declarative programming, in which commands are conjured in the form of what the programmer wants, and leaves the software to find the route to do so (e.g. “sort a list”). Imperative languages assume a “very stupid, yet fast computer,” while declarative languages assume a “fairly competent” end which understand complex commands.
- Object-oriented: The foremost paradigm that distinguishes C++ from its predecessor, C. With object-oriented programming (OOP), programs are designed by making them out of “objects” that interact with one another. These can contain data and functions, and can be instantiated, their functions used, have their values modified, and destroyed (deleted from memory) during the lifetime of the program. These instances are based upon “classes,” which are their blueprints.
- Low-level memory manipulation: “Close to the metal programming,” such as direct operations on memory with pointers, in which data stored in the memory chip is accessed by its direct address. In other words, the language syntax can talk directly in CPU primitives and less like English. With this great power comes great responsibility, such as security (some memory addresses contain private information such as passwords), memory leaks (the program assumes memory is being used when it’s not), and insidious bugs. In other words, C++ allows you to write “unsafe code,” while other programming languages built fences around dangerous operations.
- Statically typed: The type of every entity (e.g. objects, values) must be known to the compiler at its point of use. The type of an object determines the operations that can be applied to it.
It was designed with a bias toward system programming and embedded, resource-constrained and large systems, with performance, efficiency and flexibility of use as its design highlights.
Beam uses C++17, the later iteration of C++.