§1 General information about the language. Stages of program design

History of creation

The language originated in the early 1980s, when Bell Labs employee Björn Stroustrup came up with a number of improvements to the C language for his own needs. When Stroustrup began working at Bell Labs in the late 1970s on problems in queuing theory (as applied to modeling phone calls), he found that attempts to use the modeling languages ​​available at the time were ineffective, and the use of highly efficient machine languages ​​was too difficult due to their limited expressiveness. Thus, the Simula language has features that would be very useful for developing large software, but is too slow, and BCPL is fast enough, but too close to low-level languages ​​and not suitable for large software development.

Recalling the experience of his dissertation, Stroustrup decided to supplement the C language (BCPL's successor) with the capabilities available in the Simula language. C, being the base language of the UNIX system on which Bell computers ran, is fast, feature-rich, and portable. Stroustrup added the ability to work with classes and objects. As a result, practical modeling problems turned out to be easy to solve both in terms of development time (thanks to the use of Simula-like classes) and in terms of computation time (thanks to the speed of C). First of all, classes (with encapsulation), class inheritance, strong type checking, inline functions and default arguments were added to C. Early versions of the language, originally called "C with classes", became available in 1980.

While developing C with classes, Stroustrup wrote the program cfront, a translator that reworks source C with classes into the source code of simple C. This made it possible to work on a new language and use it in practice, using the infrastructure already available in UNIX for development in C. The new language, unexpectedly for the author, gained great popularity among colleagues and soon Stroustrup could no longer personally support him by answering thousands of questions.

When creating C++, Björn Stroustrup wanted
  • Get a general-purpose language with static data types, the efficiency and portability of the C language.
  • Directly and comprehensively support a variety of programming styles, including procedural programming, data abstraction, object-oriented programming, and generic programming.
  • Give the programmer freedom of choice, even if it gives him the opportunity to choose wrongly.
  • Maintain compatibility with C as much as possible, thereby making an easy transition from C programming possible.
  • Avoid discrepancies between C and C++: any construct that is valid in both languages ​​must mean the same thing in each of them and lead to the same program behavior.
  • Avoid features that are platform dependent or not universal.
  • “Don't pay for what you don't use”—no language feature should cause performance degradation for programs that don't use it.
  • Do not require an overly complicated programming environment.

The choice of C as the basis for creating a new programming language is explained by the fact that the C language:

1. is a multi-purpose, concise and relatively low-level language;
2. suitable for solving most system problems;
3. performed everywhere and on everything;
4. interfaces with the UNIX programming environment.

— B. Stroustrup. C++ programming language. Section 1.6

Despite a number of known shortcomings of the C language, Stroustrup decided to use it as a basis, since “C has its problems, but a language developed from scratch would have them, and we know the problems of C.” In addition, this made it possible to quickly obtain a prototype compiler (cfront), which only translated the added syntactic elements into the original C language.

As C++ developed, other features were included that covered the capabilities of C constructs, and therefore the question of abandoning language compatibility by removing obsolete constructs was repeatedly raised. However, compatibility has been maintained for the following reasons:

  • preservation of the current code, originally written in C and directly transferred to C++;
  • eliminating the need to retrain programmers who previously studied C (they only need to learn new C++ tools);
  • eliminating confusion between languages ​​when used together (“if two languages ​​are used together, their differences should be either minimal or so great that it is impossible to confuse the languages”).

By 1983, new features had been added to the language, such as virtual functions, function and operator overloading, references, constants, user control over free memory management, improved type checking, and a new comment style (//). The resulting language was no longer just an augmented version of classic C and was renamed from C with classes to “C++”. Its first commercial release took place in October 1985.

The resulting language name comes from the C++ unary postfix increment operator (increasing the value of a variable by one).

Before official standardization began, the language was developed mainly by Stroustrup in response to requests from the programming community. The function of standard descriptions of the language was performed by printed works written by Stroustrup on C++ (language description, reference manual, and so on).

History of standards

In 1985, the first edition of The C++ Programming Language was published, providing the first description of the language, which was extremely important due to the lack of an official standard.


In 1989, C++ version 2.0 was released. Its new features included multiple inheritance, abstract classes, static member functions, constant functions, and protected members. In 1990, the “Annotated Reference Guide to C++” was published, which later became the basis of the standard. Latest updates included templates, exceptions, namespaces, new types of casting, and the Boolean type.

The C++ Standard Library also evolved with it. The first addition to the C++ standard library was I/O streams, which provide a means to replace the traditional C printf and scanf functions. Later the most significant development standard library was the inclusion of the Standard Template Library.

In 1998, the language standard ISO/IEC 14882:1998 (known as C++98), developed by the C++ Standards Committee (ISO/IEC JTC1/SC22/WG21 working group), was published. The C++ standard does not describe how objects are named, some exception handling details, and other implementation-detailed features, making object code produced by different compilers incompatible. However, to achieve this, many standards have been created by third parties for specific architectures and operating systems.

In 2005, Library Technical Report 1 (abbreviated as TR1) was released. While not officially part of the standard, the report describes extensions to the standard library that the authors expected to be included in the next version of the C++ language. TR1 support is improving in almost all supported C++ compilers.

Since 2009, work has been carried out to update the previous standard, the preliminary version of the new standard was first C++09, and a year later C++0x, today C++11, which included additions to the core of the language and an expansion of the standard library, including including most of TR1.

C++ continues to evolve to meet today's demands. One of the groups developing the C++ language and submitting proposals for its improvement to the C++ standardization committee is Boost, which is engaged, among other things, in improving the capabilities of the language by adding metaprogramming features to it.

Nobody owns the rights to the C++ language; it is free. However, the language standard document itself (excluding drafts) is not available for free.

C++ (pronounced c-plus-plus) is a compiled, statically typed programming language general purpose, on which you can create programs of any level of complexity.
For more than 20 years, this language has been among the three most popular and in-demand programming languages. (You can verify this by visiting the TIOBE website).
The language originated in the early 1980s, when Bell Labs employee Björn Stroustrup came up with a number of improvements to the C language for his own needs.

Bjarne Stroustrup – creator of the C++ language

Stroustrup decided to extend the C language with the capabilities found in the Simula language. C, being the base language of the UNIX system on which Bell computers ran, is fast, feature-rich, and portable. Stroustrup added the ability to work with classes and objects. As a result, practical modeling problems turned out to be easy to solve both in terms of development time (thanks to the use of Simula-like classes) and in terms of computation time (thanks to the speed of C).
Here's how the language developer himself talks about it:



In 1998, the first language standard, known as C++98, was published by a standards committee. C++ continues to evolve to meet today's demands. One of the groups developing the C++ language and submitting proposals for improving it to the C++ Standards Committee is Boost, which is engaged, among other things, in improving the capabilities of the language by adding metaprogramming features to it. The latest standard was released in 2017 and is called C++17. The next standard will not be long in coming and is expected to appear in 2020.
Nobody owns the rights to the C++ language; it is free. In March 2016, Russia was created working group RG21 C++. The group was organized to collect proposals for the C++ standard, send them to a committee and defend them at general meetings of the International Organization for Standardization.
C++ is a multi-paradigm language (from the word paradigm - writing style computer programs), including a wide range of different programming styles and technologies. It is often classified as an object-oriented language, but strictly speaking, this is not the case. During the work process, the developer receives absolute freedom in choosing tools so that the problem solved using a particular approach is solved as efficiently as possible. In other words, C++ does not force the programmer to adhere to only one style of program development (for example, object-oriented).
C++ has a rich standard library that includes common containers and algorithms, I/O, regular expressions, multithreading support, and other features. C++ has influenced many programming languages, including: Java, C#, D. Since C++ belongs to a family of languages ​​based on the syntax of the C language, you can easily master other programming languages ​​of this family: JavaScript, PHP, Perl, Objective-C and many others . etc., including the parent language itself - C. ()
During its existence, the C++ language has acquired persistent myths that are easily refuted (see here: Part 1 and Part 2)

History of the language and standards release

1983

The creator of the language is Björn Stroustrup, a Bell Labs employee, introduced an early version of the C++ language (“C with classes”)

1985

First commercial release of C++, the language takes on its modern name

1986

Release of the first edition of The C++ Programming Language - a book dedicated to C++ written by Björn Stroustrup

1998

The international standard for the C++ language has been ratified: ISO/IEC 14882:1998 “Standard for the C++ Programming Language”

2003
2005

Library Technical Report 1 (TR1) has been released. While not officially part of the standard, the report described extensions to the standard library that should be included in the next version of the C++ language.

2011

Release of a new standard – C++11 or ISO/IEC 14882:2011; the new standard included additions to the language core and expansion of the standard library, including most of TR1

2014

Release of the C++14 standard (“International Standard ISO/IEC 14882:2014(E) Programming Language C++”); C++14 can be seen as a small extension over C++11, containing mostly bug fixes and minor improvements

2017

The release of a new standard – C++1z (C++17). This standard introduced many changes and additions. For example, STD included libraries of the C11 standard, file system, based on boost::filesystem, a large part of the experimental TS I library.

2020

C++20 is the unofficial name of the ISO/IEC standard for the C++ programming language, which is expected to follow C++17. Draft N4800 standard.

C++ Philosophy

In his book The Design and Evolution of C++ (2007), Björn Stroustrup describes the principles he followed when designing C++ (abbreviated):

  • Get a general-purpose language with static data types, the efficiency and portability of the C language.
  • Directly and comprehensively support a variety of programming styles.
  • Give the programmer freedom of choice, even if it gives him the opportunity to choose wrongly.
  • Maintain compatibility with C as much as possible, thereby making an easy transition from C programming possible.
  • Avoid discrepancies between C and C++: any construct that is valid in both languages ​​must mean the same thing in each of them and lead to the same program behavior.
  • Avoid features that are platform dependent or not universal.
  • “Don't pay for what you don't use” - no language feature should lead to a decrease in the performance of programs that do not use it.
  • Do not require an overly complicated programming environment.

C and C++

The syntax of C++ is inherited from the C language. Although, formally, one of the principles of C++ remains maintaining compatibility with the C language, in fact, the standardization groups for these languages ​​do not interact, and the changes they make not only do not correlate, but often fundamentally contradict each other ideologically. Thus, the elements that the new C standards add to the kernel are in the C++ standard elements of the standard library and are not in the kernel at all, for example, dynamic arrays, arrays with fixed boundaries, parallel processing facilities. According to Stroustrup, combining the development of these two languages ​​would be of great benefit, but it is unlikely to be possible for political reasons. So practical compatibility between C and C++ will gradually be lost.
In this example, depending on the compiler used, either “C++” or “C” will be output:

Program 9.1

#include int main() ( printf("%s\n", (sizeof("a") == sizeof(char)) ? "C++" : "C"); return 0; )

This is due to the fact that character constants in C are of type int , and in C++ they are of type char , but the sizes of these types are different.

Application Lifecycle Models

Life cycle software is a period of time that begins from the moment a decision is made about the need to create software product and ends at the moment of its complete withdrawal from service. This cycle is the process of building and developing software. There are several life cycle models.
Cascade model life cycle (English waterfall model) was proposed in 1970 by Winston Royce. It provides for the sequential implementation of all stages of the project in a strictly fixed order. The transition to the next stage means the complete completion of work at the previous stage. The requirements defined at the stage of requirements formation are strictly documented in the form terms of reference and are recorded for the entire development of the project. Each stage culminates in the release of a complete set of documentation sufficient to allow development to be continued by another development team.
Project stages according to the waterfall model:

  1. Formation of requirements;
  2. Design;
  3. Implementation;
  4. Testing;
  5. Implementation;
  6. Operation and maintenance.

In the cascade model, the transition from one project phase to another assumes that the result of the previous phase is completely correct. In large projects this is almost impossible to achieve. Therefore, this model is only suitable for developing a small project. (W. Royce himself did not adhere to this model and used an iterative model).
Iterative model
An alternative to the cascade model is the iterative and incremental development (IID) model, which received from T. Gilb in the 70s. name of the evolutionary model. The IID model involves breaking the project life cycle into a sequence of iterations, each of which resembles a “mini-project”, including all development processes applied to the creation of smaller pieces of functionality compared to the project as a whole. The goal of each iteration is to obtain a working version of the software system, including functionality defined by the integrated content of all previous and current iterations. The result of the final iteration contains all the required functionality of the product. Thus, with the completion of each iteration, the product receives an increment - an increment - to its capabilities, which, therefore, develop evolutionarily.


Various variants of the iterative approach are implemented in most modern development methodologies:

Development Process - Rational Unified Process (RUP)

Rational Unified Process (RUP)(rational unified process) is a software development methodology maintained by Rational Software (IBM). The methodology provides recommendations for all stages of development: from business modeling to testing and commissioning of the finished program. The Unified Modeling Language (UML) is used as a modeling language.
The complete product development life cycle consists of four phases, each of which includes one or more iterations.

  • Initial stage (Inception)
  • Determining the scope of the project and the amount of resources required. The basic requirements, limitations and key functionality of the product are determined. Risks are assessed. Action planning. At the end of the initial phase, the achievement of the Lifecycle Objective Milestone is assessed, which presupposes an agreement between stakeholders to continue the project.

  • Clarification
  • Documenting requirements. Design, implementation and testing of executable architecture. Clarification of terms and costs. Reducing key risks. Successful completion of the development phase means reaching the Lifecycle Architecture Milestone.

  • Construction
  • In the “Build” phase, most of the product’s functionality is implemented: the application design is completed, the source code is written. The Build phase ends with the first external release of the system and the Initial Operational Capability milestone.

  • Introduction
  • In the “Implementation” phase, a Final version product and is transferred from the developer to the customer. This includes a beta testing program, user training, and determining the quality of the product. If the quality does not meet user expectations or the criteria set in the Start phase, the Implementation phase is repeated again. Completing all goals means achieving the Product Release milestone and completing the full development cycle.



« Information technology. System and software engineering. Lifecycle Processes software". This standard was adopted by the Federal Agency for Technical Regulation and Metrology of the Russian Federation and is similar to the international standard ISO/IEC 12207:2008. This standard, establishes a general framework for software life cycle processes that can be used to guide the software industry. The standard does not propose a specific life cycle model. Its provisions are common to any life cycle models, methods and technologies for software creation. It describes the structure of life cycle processes without specifying how to implement or complete the activities and tasks included in those processes.

Presentation for the lesson
Message topics
  • Free Software Foundation (FSF)
  • Free software licenses
  • FreeSoftware and Open Source
  • History of the development of programming languages
  • The history of the C language. C and C++
  • Story
  • Criticism of C++
  • History of UNIX
  • Spiral software life cycle model
  • UML (Unified Modeling Language)
  • Microsoft Solutions Framework
  • IDE for C/C++ programming on Windows
  • C/C++ compilers
  • Creating a Console Application on Windows
Questions
  1. Why cascade model software development is not used in large projects?
  2. What is the difference between waterfall and iterative development models?
  3. List the stages of software development in the Rational Unified Process (RUP) methodology

Tags: History of C, ANSI C, ISO C, C99, C11, ISO/IEC C, C standardization.

Origins

C and is a “spin-off product” derived from the creation of the UNIX operating system, which was developed at Bell Laboratories by Ken Thompson, Denis Ritchie and co. Thompson single-handedly wrote the original version of UNIX, which ran on the DEC PDP-7, one of the first minicomputers with only 8K words of main memory (it was 1969, after all).

Like other operating systems of the time, UNIX was written in assembly language. Debugging assembly language programs is a real pain and difficult to improve, and UNIX was no exception. Thompson decided that a high-level language was needed for further development of the OS and came up with a small language B. Thompson took the BCPL language, a system programming language developed in the mid-60s, as a basis. BCPL, in turn, originates from ALGOL 60, one of the earliest (and most influential) languages.

Ritchie soon joined the UNIX project and began writing in B. In 1970, Bell Labs purchased a PDP-11 for the project. Since B was ready to run on the PDP-11, Thompson rewrote part of UNIX into B. In 1971 it became clear that B was not quite suitable for the PDP-11, so Ritchie began creating an expanded version of B. At first he called it NB (New B ), but when the language became very different from B, the name was changed to C. By 1973, the language had become stable enough for UNIX to be rewritten in it. Switching to C provided an important advantage: portability. By writing a C compiler for each of the machines at Bell Labs, the development team could port UNIX to them.

Standardization

C continued to evolve in the 70s, especially between 1977 and 1979, when the first book on C was published. The C Programming Language, written by Brian Kernighan and Denis Ritchie and published in 1978, became the bible of C programmers. In the absence of an official standard, this book - also known as K&R, or the "White Book" as C fans like to call it - has become the de facto standard. In the 70s there were few C programmers and most of them were UNIX users. However, in the 80s C went beyond narrow frames UNIX world. C compilers have become available on a variety of machines running different operating systems. In particular, C began to spread on the rapidly developing IBM PC platform.

Along with the increase in popularity came problems. Programmers who wrote new compilers took the language described in K&R as a basis. Unfortunately, in K&R some features of the language were described vaguely, so compilers often interpreted them at their own discretion. In addition, the book did not make a clear distinction between what is a feature of the language and what is a feature of the UNIX operating system. What made the situation worse was that after the publication of K&R, C continued to develop: new features were added to it and old ones were cut out of it. Soon there was an obvious need for a comprehensive, accurate and modern description of the language. Without such a standard, dialects of the language began to appear, which interfered with portability - the greatest strength of the language.

The development of the American C standard began in 1983 under the auspices of the American National Standards Institute (ANSI). After many revisions, the standard was finalized in 1988 and formally adopted in December 1989 as ANSI X3.159-1989. In 1990, it was approved by the International Organization for Standardization (ISO) as the international standard ISO/IEC 9899:1990. This version of the language is usually called C89 or C90, to avoid confusion with the original version of C, which is usually called K&R C.

The language underwent minor changes in 1995 (the changes are described in a document commonly called Amendment 1). More significant changes occurred in 1999, when the ISO/IEC 9899:1999 standard was published. The language described in this standard is usually called C99. The terms "ANSI C", "ANSI/ISO C" and "ISO C", once used to describe C99, have two meanings due to the existence of two standards.

In 2011, along with the revision of the C++ language, the C11 standard was released. Despite the existence of the '11 standard, many compilers still do not fully support even the C99 versions, so the use of the C11 standard will be explicitly stated.

C language and UNIX

Programming language WITH(read "C") was created in the early 70s, when Ken Thompson and Dennis Ritchie from Bell Labs developed the UNDC operating system. First they created the compiler part WITH, then used it to compile the rest of the compiler WITH and finally used the resulting compiler to compile UNIX. The UNIX operating system was originally distributed in source code to WITH among universities and laboratories, and the recipient could compile the source code in the language WITH into machine code using a suitable compiler WITH.

The distribution of source code made the UNIX operating system unique; the programmer could change the operating system, and the source code could be transferred from one hardware platform to another. Today, the POSIX standard defines the standard set of UNIX system calls available in WITH, which must be implemented in versions of UNIX that are POSIX-compliant. C was the third language that Thomson and Ritchie developed during the creation of UNIX; the first two were, of course, A And IN.

C mobile assembly language

Compared to earlier language - BCPL, language WITH has been improved by adding data types of specific lengths. For example, the int data type could be used to create a variable with a specific number of bits (typically 16), while the long data type could be used to create an entire variable with a large number bits (usually 32). Unlike other high level languages, WITH could work with memory addresses directly using pointers and references. Because the WITH retains the ability to directly access hardware, it is often classified as a middle-level language or jokingly called "mobile assembly language".

C - structured programming language

As for grammar and syntax, then WITH is a structured programming language. While many modern programmers think in terms of classes and objects, programmers WITH think in terms of procedures and functions. IN WITH You can define your own abstract data types using the struct keyword. Similarly, you can describe your own integer types (enumerations) and give other names existing types data using keyword typedef In this sense WITH is a structured language with the germs of object-oriented programming.

Standardization of the C language

Widespread language C on different types of computers (sometimes called hardware platforms) has unfortunately led to many variations of the language. They were similar, but incompatible with each other. This was a major problem for software developers who needed to write compatible programs that could run on multiple platforms. It became clear that a standard version was needed C. In 1983 ANSI (American National Standards Committee) formed technical committee X3J11 to create a language standard C(to "provide an unambiguous and machine-independent definition of the language"). In 1989 the standard was approved. ANSI has partnered with ISO (International Standards Organization) to standardize C internationally; a joint standard was published in 1990 and named ANSI/ISO 9899:1990. This standard is still being improved and is supported by most compiler development companies.

Birth of C++

Bjarne Stroustrup unleashes object-oriented potential WITH by transferring class capabilities Simula 67 V WITH. Initially, the new language bore the name "C with classes" and only then began to be called C++. Language C++ achieved popularity after being developed at Bell Labs, it was later transferred to other industries and corporations. Today it is one of the most popular (and authoritative) programming languages ​​in the world. C++ inherits both good and bad sides WITH.

Revelations of Bjarna Stroustrup

Bjarne Stroustrup: "I came up with C++, wrote down its initial definition and completed the first implementation. I selected and formulated design criteria C++, developed its main features and was responsible for the fate of proposals for expanding the language in the standardization committee C++", writes the author of the most popular programming language. - "The language C++ owes a lot to language C, and language C remains a subset C++ language(but C++ has fixed several serious flaws in the C type system). I also saved funds C, which are low-level enough to handle the most critical system tasks. Language C, in turn, owes a lot to its predecessor, BCPL; By the way, the comment style // was taken from C++ from BCPL. Another main source of inspiration was language Simula67. The concept of classes (with derived classes and virtual functions) was borrowed from it. A means of overloading operators and the ability to place announcements anywhere where an instruction can be written recalls Algol68. "

Why C++

Name C++ invented by Rick Massitti. The name indicates the evolutionary nature of the transition to it from C. "++" is an increment operation in C. Slightly shorter name C+ is a syntax error; in addition, it has already been used as a name for a completely different language. Semantics experts C find that C++ worse than ++C. Titles D the language didn't get it because it's an extension of C and doesn't try to cure its problems by throwing out various features.

Why was C++ needed?

Initially C++ programming language was designed so that the author and his friends do not have to program in assembly, C, or other modern high-level languages. Its main purpose was to write good programs simpler and more enjoyable for the individual programmer. Development plan C++ never existed on paper; design, documentation and implementation moved simultaneously. Of course, the external interface C++ was written in C++. There has never been a "C++ Project" or a "C++ Development Committee". That's why C++ has evolved and continues to evolve in all directions to cope with the challenges faced by users and through discussions between the author and his friends and colleagues.

True object-oriented C++

IN C++ language The principles of object-oriented programming are fully supported, including the three pillars on which it stands: encapsulation, inheritance and polymorphism. Encapsulation in C++ supported through the creation of non-standard (custom) data types called classes. Language C++ supports inheritance. This means that you can declare a new data type (class) that is an extension of an existing one.

Although C++ programming language rightly called a continuation WITH and any workable program in the language WITH will be supported by the compiler C++, when moving from WITH To C++ A very significant leap has been made. Language C++ benefited from its affinity with language WITH for many years, as many programmers have found that in order to take full advantage of C++ language, they need to unlearn some of their previous knowledge and acquire new ones, namely, learn a new way of conceptualizing and solving programming problems. Before you start learning C++, Stroustrup and most other programmers using C++ consider language learning WITH optional.

Programming language C++ is currently considered the dominant language used to develop commercial products, 90% of games are written in C++ using DirectX.

Literature

Sources:

  • H.M.Deitel, P.J.Deitel "How to Program in C++"
  • Bjarne Stroustrup "The C++ Programming Language. 3rd Edition."
  • Simon Robinson, Ollie Cornes, Jay Glynn and others. "C# for professionals"
  • Jess Liberty "Teach yourself C++ in 21 days"
  • Stanislav Gornakov "DirectX, programming lessons in C++"

C++ is a general-purpose compiled programming language that combines the properties of both high-level and low-level programming languages. In comparison with its predecessor, the C programming language, the greatest attention is paid to supporting object-oriented and generic programming. The name "C++ programming language" comes from the C programming language, in which the unary operator ++ denotes the increment of a variable.

The C++ programming language is widely used for software development. Namely, the creation of various application programs, the development of operating systems, device drivers, as well as video games and much more. It was created in the early 1980s by Björn Stroustrup. He came up with a number of improvements to the C programming language for his own needs. those. Initially there were no plans to create the C++ programming language.

It supports programming paradigms such as procedural programming, object-oriented programming, generic programming, provides modularity, separate compilation, exception handling, data abstraction, declaration of object types (classes), virtual functions.

The resulting language name comes from the C++ unary postfix increment operator (increasing the value of a variable by one). The name C+ was not used because it was a syntax error in C and also because the name was occupied by another language. The language was also not named D because it "is an extension of C and does not attempt to fix problems by removing elements of C."

Advantages of the language:

1. Scalability. Programs are developed in C++ for a wide variety of platforms and systems.

2. Ability to work at a low level with memory, addresses, ports.

3. The ability to create generalized algorithms for different types of data, their specialization, and calculations at the compilation stage using templates.

4. Cross-platform. Compilers available for large quantity platforms, programs are developed in C++ for a wide variety of platforms and systems.

5. Efficiency. The language is designed to give the programmer maximum control over all aspects of program structure and execution order.

Disadvantages of the language:

1. The presence of many features that violate the principles of type safety leads to the fact that subtle errors can easily creep into C++ programs.

2. Poor support for modularity. Connecting the interface of an external module via preprocessor insertion of a header file (#include) seriously slows down compilation when connecting a large number of modules.

3. The C++ language is difficult to learn and compile.

4. Some type conversions are unintuitive. In particular, an operation on an unsigned and a signed number produces an unsigned result.

5. Some people consider the lack of a built-in garbage collection system to be a disadvantage of the C++ language. On the other hand, C++ has enough tools to almost eliminate the use of dangerous pointers; there are no fundamental problems in the implementation and use of garbage collection (at the library level, not the language level). The absence of built-in garbage collection allows the user to choose their own resource management strategy.