Menu
Is free
registration
home  /  Internet/ When was created c. Adventik is a full-service digital agency

When was c. Adventik is a full-service digital agency

What is the reason for this status of the C language? Historically, this language is inseparable from the operating room. Unix systems, which today is experiencing its rebirth. The 60s were the era of the formation of operating systems and high-level programming languages. During that period, OS and compilers were independently developed for each type of computer, and often even their own programming languages ​​(remember, for example, PL / I). At the same time, the commonality of the problems arising from this has already become apparent. The answer to the realization of this community was an attempt to create a universal mobile operating system, and this required an equally versatile and mobile programming language. C became such a language, and Unix became the first OS to be almost entirely written in a high-level language.

The close relationship with Unix gave C a testing ground that no other language had at the time. Systems programming was considered the most challenging in the industry at the time. For the most part, they were so machine-dependent that many did not at all think of their solution differently than in assembler. High-level languages ​​were intended for application programming and only very limitedly implemented the functions necessary for system works, and often only for a certain type of machine.

The C language was created from the very beginning so that it was possible to write system tasks in it. The creators of C did not develop an abstract model of the language executor, but simply implemented in it those capabilities that were most needed in the practice of systems programming. These were, first of all, the means of direct work with memory, structural control structures and the modular organization of the program. And in fact nothing else was included in the language. Everything else was relegated to the runtime library. Therefore, ill-wishers sometimes refer to the C language as a structured assembler. But no matter what they chatted, the approach turned out to be very successful. Thanks to him, new level by the ratio of simplicity and language capabilities.

There is, however, another factor that has determined the success of the language. The creators very skillfully divided machine-dependent and independent properties in it. Thanks to this, most programs can be written universally - their performance does not depend on the architecture of the processor and memory. Few of the same hardware-dependent parts of the code can be localized in separate modules. And using the preprocessor, you can create modules that, when compiled on different platforms, will generate the corresponding machine-dependent code.

The syntax of the C language has caused a lot of controversy. The abbreviation techniques used in it can make the program completely unreadable if used excessively. But, as Dijkstra said, - the means are not to blame for the fact that they are used illiterately. In fact, the syntax abbreviations proposed in C correspond to the most common stereotypical situations in practice. If abbreviations are considered idioms for expressive and compact representation of such situations, then the benefits of them become unconditional and obvious.

So, C emerged as a universal system programming language. But he did not stay within this framework. By the end of the 80s, the C language, having pushed Fortran as the leader, gained massive popularity among programmers all over the world and began to be used in a wide variety of applied tasks. The spread of Unix (and hence C) in the university environment, where a new generation of programmers was trained, played a significant role here.

Like all languages, C was gradually improved, but most of the improvements were not radical in nature. The most significant of them, perhaps, should be considered the introduction of a strict specification of the types of functions, which significantly increased the reliability of inter-module interaction in C. All such improvements were in 1989 enshrined in the ANSI standard, which still defines the C language.

But if everything is so cloudless, then why are all other languages ​​still in use, which supports their existence? The Achilles' heel of the C language was that it turned out to be too low-level for the tasks that were put on the agenda of the 90s. Moreover, this problem has two aspects. On the one hand, too low-level tools were built into the language - first of all, it is working with memory and address arithmetic. It is not for nothing that the change in the bit depth of processors is very painful for many C programs. On the other hand, C lacks high-level facilities - abstract data types and objects, polymorphism, exception handling. As a result, in C programs, the technique of the task implementation often dominates over its content side.

The first attempts to correct these shortcomings began in the early 1980s. Even then, Bjarne Stroustrup at AT&T Bell Labs began to develop an extension of the C language under the code name. The development style was quite consistent with the spirit in which the C language itself was created - certain possibilities were introduced into it in order to make more comfortable work specific people and groups. The first commercial translator of a new language called C ++ appeared in 1983. It was a preprocessor that translated the program into C code. However, the actual birth of the language can be considered the release of Stroustrup's book in 1985. It was from this moment that C ++ began to gain worldwide popularity.

The main innovation in C ++ is the class mechanism, which makes it possible to define and use new data types. The programmer describes the internal representation of a class object and a set of function-methods for accessing this representation. One of the cherished goals in the creation of C ++ was the desire to increase the percentage of reuse of already written code. The concept of classes suggested an inheritance mechanism for this. Inheritance allows you to create new (derived) classes with extended representation and modified methods without affecting the compiled code of the original (base) classes. At the same time, inheritance provides one of the mechanisms for the implementation of polymorphism - the basic concept of object-oriented programming, according to which, to perform the same type of processing different types data, the same code can be used. Actually, polymorphism is also one of the methods of ensuring code reuse.

The introduction of classes does not exhaust all the innovations of the C ++ language. It implements a full-fledged structured exception handling mechanism, the absence of which in C made it much difficult to write reliable programs, the templating mechanism is a sophisticated macro-generation mechanism deeply embedded in the language, opening another path to code reusability, and much more.

Thus, the general line of development of the language was aimed at expanding its capabilities by introducing new high-level constructions while maintaining as much as possible full compatibility with ANSI C. operations, so that the programmer actually stops working directly with memory and system-dependent entities. However, the language does not contain mechanisms forcing the developer to structure the program correctly, and the authors have not issued any systematic recommendations on the use of its rather sophisticated constructs. They did not take care of the timely creation of standard library classes that implement the most common data structures.

All this led to the fact that many developers were forced to explore the labyrinths of language semantics themselves and independently search for successfully working idioms. So, for example, at the first stage of the development of the language, many creators of class libraries sought to build a single class hierarchy with a common base class Object. This idea was borrowed from Smalltalk - one of the most famous object-oriented languages. However, it turned out to be completely unviable in C ++ - carefully thought-out class library hierarchies were inflexible, and the work of classes was not obvious. In order for the class libraries to be usable, they had to be shipped in source.

The appearance of the template classes completely refuted this direction of development. They began to use inheritance only in those cases when it was required to generate a specialized version of an existing class. Libraries began to be composed of separate classes and small, unrelated hierarchies. However, along the way, code reuse began to decline, since C ++ cannot polymorphically use classes from independent hierarchies. The widespread use of templates leads to an unacceptable increase in the amount of compiled code - let's not forget that templates are implemented using macro generation methods.

One of the hardest drawbacks of C ++, inherited from the C syntax, is that the description is available to the compiler. internal structure of all used classes. As a consequence, a change in the internal structure of the representation of a library class leads to the need to recompile all programs where this library is used. This greatly limits library developers in terms of their modernization, because, by releasing new version, they must maintain binary compatibility with the previous one. It is this problem that makes many experts believe that C ++ is unsuitable for running large and super-large projects.

And yet, despite the listed shortcomings and even the unavailability of the language standard (this is after more than fifteen years of use!), C ++ remains one of the most popular programming languages. Its strength is, first of all, in almost complete compatibility with the C language.Thanks to this, C ++ programmers have access to all the developments made in C. At the same time, C ++, even without the use of classes, brings a number of such important additional opportunities and the conveniences that many use it simply as an improved S.

Concerning object model C ++, as long as your program is not very large (hundreds of thousands of lines), it is quite possible to use it. The recently emerging trend of transition to component software only strengthens the position of C ++. When developing individual components, the drawbacks of C ++ do not yet appear, and the linking of components into a working system is no longer performed at the language level, but at the operating system level.

In light of all that has been said, the outlook for C ++ does not look bleak. Although the monopoly on the market of programming languages ​​does not shine for him. Perhaps, we can only say with confidence that this language will not survive another modernization-extension. No wonder, when Java appeared, so close attention was paid to it. The language, which is close in syntax to C ++, which means that it seems familiar to many programmers, has been rid of the most egregious shortcomings of C ++, inherited from the 70s. However, Java does not seem to be up to the role that some have entrusted to it.

The special role of C / C ++ languages ​​in modern programming makes it almost meaningless to provide specific addresses on the Internet where you can find materials on them. There are simply too many places like this. However, if you are interested in learning more about the evolution of C ++, then start with a small article. http://citforum.syzran.ru/programming/prg96/76.shtml.

Alexander Sergeev, [email protected]
Article from BYTE magazine / Russia, March 2000

In order to clearly demonstrate the use of the described languages ​​in practice, we chose a problem in which it was required to enter a series of integers from standard input or from a file, and then output only odd ones, and in the reverse order. This is one of the simplest tasks, which essentially requires working with arrays, loops, branching and I / O to solve it, and also allows you to demonstrate subroutine calls. Moreover, it is visible and easily perceived.

Listing 1.C

1 #include / * Connect input-output functions * / 2 3 void main (void) 4 (5 int М; / * Array of 10 integers, count from 0 * / 6 int N; 7 for (N = 0; N<10; ++N) /* Вводим не более 10 чисел */ 8 if (EOF == scanf ("%d, M+N)) 9 break; /* Если конец файла, прерываем цикл */ 10 11 for (-N; N>= 0; --N) / * Go through the array in reverse * / 12 if (M [N]% 2) / * order and print odd ones * / 13 printf ("% d \ n", M [N]); fourteen )

  • Line 3. In C / C ++, program execution always starts with the main function.
  • Lines 7 and 11. In the loop header, the initial setting, the continuation condition, and the rule for recalculating the loop parameter are specified with semicolons. Operations ++ and -/- - the most famous of the abbreviations of the C language, meaning the increment and decrement of a variable, that is, increasing and decreasing its value by one.
  • Line 8. Function scanf enters, according to the format specified by the first parameter, the values ​​of the variables whose addresses are specified by the remaining parameters. Here, the address where the value is entered is calculated using address arithmetic, to the address of the location of the array M offset by N elements. The same effect can be obtained by writing & M [N].
  • Line 12. Operation % calculates the remainder of the division. Operator condition if is considered fulfilled if the numerical value of the expression is nonzero.
  • Line 13. Function printf- printing by format works in the same way scanf, but instead of addresses, it is passed the values ​​to be displayed.
1 #include 2 3 template class Array 4 (5 public: Array (T Size = 1): M (new T), N (Size), n (0) () 6 Array (void) (delete M;) 7 T Count (void) const ( return n;) 8 T operator (int i) const (return M [i];) 9 void Add (T Data); 10 private: 11 T * M; // Address of allocated memory 12 int N, n; // N - allocated; n - used 13); 14 15 template void Array :: Add (T Data) 16 (if (N-n) // If all allocated 17 (int * P = new T; // space is used, allocate more 18 for (int i = 0; i A; // Array of integers of variable size 28 while (1) // Endless loop 29 (int N; 30 cin >> N; // cin - standard input stream 31 if (cin.eof ()) break; // Exit the loop by end of file 32 A.Add (N); // Add the entered number to array 33) 34 for (int N = A.Count () - 1; N> = 0; --N) // Loop through the array 35 if ( A [N]% 2) 36 cout<, and frees up memory
  • Lines 3-13. The template class is declared Array with parameter T... It is a variable-sized array of objects like T... Of course, in our task there is no need to use a template class. However, we wanted to demonstrate how a polymorphic data structure is created in C ++ that can work with any type of element.
  • Line 5. Class constructor. It initializes the representation of the object. For example, in the field M the address of the memory block ordered by the operation is entered new T.
  • Line 8. An example of overloading an operation. Function operator will be called when square brackets appear to the right of the class object Array.
  • Line 9. This function is the main one in the implementation. It adds elements to the array, expanding it as needed. Since it is more complex than the others, its definition is taken from the class description. The functions described in the body of the class are implemented in C ++ not by calling, but by inline substitution. This speeds up the program, although it increases its size.
  • Lines 15-24. Function definition Arrau :: Add (T)(by the way, this is her full name).
  • Line 27. We create an object of type Array... Templet Aggau parameterized by type int.

C ++ (reads C-plus-plus) is a compiled, statically typed general-purpose programming language in which you can create programs of any complexity.
For more than 20 years, this language has been in the top three most popular and demanded 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 enhancements to the C language to suit his own needs.

Bjarne Stroustrup - the creator of the C ++ language

Stroustrup decided to complement the C language with the capabilities of the Simula language. C, as 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 to it. As a result, practical problems of modeling turned out to be available for solving 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).
This is how the language developer himself says about it:



In 1998, the first language standard, known as C ++ 98, was published by a committee for standardization. C ++ continues to evolve to meet modern requirements. One of the groups that develop the C ++ language and send suggestions for improving it to the C ++ Standardization Committee is Boost, which is engaged in, among other things, improving the capabilities of the language by adding metaprogramming features to it. The last standard was released in 2017 and is called C ++ 17... The next standard will not be long in coming and will appear as expected in 2020.
Nobody owns the rights to the C ++ language, it is free. In March 2016, a working group WG21 C ++ was created in Russia. The group was organized to collect proposals for the C ++ standard, send them to the committee and defend them at general meetings of the International Organization for Standardization.
C ++ is a multi-paradigm language (from the word paradigm - the style of writing computer programs), which includes a wide range of different styles and technologies of programming. It is often referred to as an object-oriented language, but strictly speaking it is not. In the process of work, the developer gains absolute freedom in the choice of tools so that the problem solved using this or that approach is solved as efficiently as possible. In other words, C ++ does not force the programmer to stick 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 more. C ++ influenced many programming languages, including: Java, C #, D. Since C ++ belongs to the 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. ... others, including the parent language itself - C. ()
During its existence, the C ++ language has entrenched stable myths that are easily refuted (see here: Part 1 and Part 2)

History of the language and the release of standards

1983

The creator of the language - Bjorn Stroustrup, Bell Labs employee, introduced an early version of C ++ (“C with Classes”)

1985

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

1986

First edition of The C ++ Programming Language, a book on C ++ written by Björn Stroustrup

1998

Ratified the international standard for the C ++ language: ISO / IEC 14882: 1998 "Standard for the C ++ Programming Language"

2003
2005

Library Technical Report 1 (TR1) 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

The release of a new standard - C ++ 11 or ISO / IEC 14882: 2011; the new standard included additions to the core of the language and an extension of the standard library, including most of TR1

2014

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

2017

New standard released - C ++ 1z (C ++ 17). This standard has introduced many changes and additions. For example, the STD includes libraries of the C11 standard, a file system based on boost :: filesystem, most of the experimental TS I library.

2020

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

C ++ philosophy

In The Design and Evolution of C ++ (2007), Björne Stroustrup describes the principles that he followed in the design of C ++ (abbreviated):

  • Get a generic language with static data types, efficiency and portability of the C language.
  • Support many programming styles directly and comprehensively.
  • Give the programmer the freedom to choose, even if it gives him the opportunity to choose the wrong one.
  • Maintain compatibility with C as much as possible, thereby making possible an easy transition from C programming.
  • Avoid confusion between C and C ++: any construct allowed in both languages ​​must mean the same in each of them and lead to the same program behavior.
  • Avoid features that are platform dependent or not generic.
  • Don't pay for what's not used — no language tool should degrade the performance of programs that don't use it.
  • Don't 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 the preservation of compatibility with the C language, in fact, the groups for the standardization of these languages ​​do not interact, and the changes they make not only do not correlate, but often fundamentally contradict each other ideologically. For example, the elements that the new C standards add to the core are elements of the standard library in the C ++ standard and are completely absent in the core, for example, dynamic arrays, arrays with fixed boundaries, parallel processing facilities. It would be very beneficial to combine the development of the two languages, Stroustrup said, but it is unlikely to be politically feasible. So the practical compatibility between C and C ++ will gradually be lost.
In this example, depending on the compiler used, it will output either “C ++” or “C”:

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 a software product and ends at the time of its complete retirement. This cycle is the process of building and developing software (software). There are several life cycle models.
Cascade model life cycle (eng. waterfall model) was proposed in 1970 by Winston Royce. It provides for the sequential execution of all stages of the project in a strictly fixed order. The transition to the next stage means the complete completion of the work at the previous stage. Requirements, determined at the stage of requirements formation, are strictly documented in the form of technical specifications and are fixed for the entire period of project development. Each stage ends with the release of a complete set of documentation sufficient for 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 a waterfall model, the transition from one phase of the project to another assumes the complete correctness of the result of the previous phase. 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 waterfall model is the iterative and incremental development (IID) model obtained from T. Gilb in the 70s. the name of the evolutionary model. The IID model involves breaking the project life cycle into a series of iterations, each of which resembles a "mini-project", including all development processes applied to create 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 that includes the 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 versions of the iterative approach are implemented in most modern development methodologies:

Development process - Rational Unified Process (RUP)

Rational Unified Process (RUP)(Lean Unified Process) is a software development methodology supported 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 the modeling language.
The complete product development lifecycle consists of four phases, each of which includes one or more iterations.

  • Initial stage (Inception)
  • Determine the scope of the project and the amount of resources required. The basic requirements, limitations and key functionality of the product are identified. 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 the stakeholders on the continuation of the project.

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

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

  • Transition
  • In the "Implementation" phase, the final version of the product is created and transferred from the developer to the customer. This includes a beta testing program, user training, and product quality determination. If the quality does not meet the expectations of users or the criteria set in the Start phase, the Implementation phase is repeated again. Meeting all goals means reaching the Product Release milestone and completing the full development cycle.



"Information technology. System and software engineering. Software Life Cycle Processes ”. 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 guided in the software industry. The standard does not offer a specific life cycle model. Its provisions are common to any life cycle models, methods and technologies for creating software. It describes the structure of life cycle processes without specifying how to implement or perform the activities and tasks included in these processes.

Lesson presentation
Message topics
  • Free Software Foundation (FSF)
  • Free software licenses
  • FreeSoftware and Open Source
  • History of the development of programming languages
  • The history of C. C and C ++
  • Story
  • C ++ criticism
  • UNIX history
  • Spiral software life cycle model
  • UML (English 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 isn't the waterfall model of software development applied to 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

When your reputation works for your profit

Community management

Creation of Tone of Voice. Prompt processing of both negative and positive comments on behalf of the brand. Communication management according to specified scenarios. Broadcast of problematic moments to the customer.

Agents of influence

Creation and implementation of "virtuals" on forums and social networks. There is a database of upgraded and live accounts on more than 300 sites.

Working with reviews

Writing, agreeing and posting brand reviews on top platforms and review sites. Processing and overlapping negative comments with positive ones. As a result, the negative is gradually being squeezed out of the search results.

Social media monitoring

Working with Youscan, IQbuzz, Brand Analytics systems. Control of brand mentions. Identification of key insights, prompt response to negativity. An indispensable tool for monitoring customer feedback.

Analytics and research

Analysis of the information field, research of the product category and the main competitors of the brand. This tool covers tasks from reputation control and real-time marketing to in-depth research.

SERM

Detailed analysis of search results for the selected keywords. Collecting mentions of the client in social networks, forums and news sites. Development of a strategy for dealing with negative information. The client receives a fully controlled issue in the TOP10.

History of creation

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

Recalling the experience of his dissertation, Stroustrup decided to complement the C language (successor to BCPL) with the capabilities of the Simula language. C, as 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 to it. As a result, practical problems of modeling turned out to be available for solving 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, C added classes (with encapsulation), class inheritance, strong type checking, inline functions, and default arguments. Early versions of the language, originally called "C with classes", have been available since 1980.

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

When creating C ++, Björn Stroustrup wanted
  • Get a generic language with static data types, efficiency and portability of the C language.
  • Support many programming styles directly and comprehensively, including procedural programming, data abstraction, object-oriented programming, and generic programming.
  • Give the programmer the freedom to choose, even if it gives him the opportunity to choose the wrong one.
  • Maintain compatibility with C as much as possible, thereby making possible an easy transition from C programming.
  • Avoid confusion between C and C ++: any construct allowed in both languages ​​must mean the same in each of them and lead to the same program behavior.
  • Avoid features that are platform dependent or not generic.
  • Don't pay for what's not used — no language tool should degrade the performance of programs that don't use it.
  • Don't 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 multipurpose, concise and relatively low-level language;
2. suitable for most system tasks;
3. performed everywhere and on everything;
4. docks 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 own problems, but a language developed from scratch would have them, and we know C problems." It also made it possible to quickly develop a prototype compiler (cfront) that only translated the added syntax elements into the original C language.

As C ++ was developed, other features were included that overlapped the capabilities of C constructs, in connection with which 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, written originally in C and directly ported to C ++;
  • elimination of the need to retrain programmers who previously studied C (they only need to learn new C ++ tools);
  • elimination of confusion between languages ​​when they are used together ("if two languages ​​are used together, their differences should be either minimal, or so large that the languages ​​cannot be confused").

By 1983, new features were 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 style of comments (//). The resulting language has ceased to be just an extended version of classic C and has been 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).

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

History of standards

In 1985, the first edition of The C ++ Programming Language was released, 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 C ++ Commented Reference Guide was published, which later became the basis for the standard. Recent updates have included templates, exceptions, namespaces, new casts and booleans.

The C ++ Standard Library has 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. More recently, the most significant development of the standard library was the inclusion of the Standard Template Library.

In 1998, the ISO / IEC 14882: 1998 language standard (known as C ++ 98) was published, developed by the C ++ standardization committee (ISO / IEC JTC1 / SC22 / WG21 working group). The C ++ standard does not cover naming conventions for objects, some of the details of exception handling, and other features related to implementation details, which makes object code generated by different compilers incompatible. However, to do this, third parties have created many standards for specific architectures and operating systems.

In 2005, the Library Technical Report 1 (called TR1 for short) 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 being improved 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 extension of the standard library, including including most of TR1.

C ++ continues to evolve to meet modern requirements. One of the groups developing the C ++ language and sending suggestions for improving it to the C ++ Standardization Committee is Boost, which is engaged in, among other things, 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 (with the exception of drafts) is not available free of charge.

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

Origins

C and is a "companion product" 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 that ran on the DEC PDP-7, one of the first minicomputers with only 8K words in main memory (it was 1969, after all).

Like other operating systems at the time, UNIX was written in assembly language. Debugging assembly language programs is painful and difficult to improve, and UNIX was no exception. Thompson decided that a high-level language was needed to further develop 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 acquired the PDP-11 for the project. Since B was ready to run on the PDP-11, Thompson rewrote part of UNIX in B. In 1971, it became clear that B was not quite suitable for the PDP-11, so Ritchie began to create an extended 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 was stable enough to rewrite UNIX in it. The move to C provided an important benefit: 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 from 1977 to 1979, when the first book on C. 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 the 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 1980s, C moved beyond the narrow confines of the UNIX world. C compilers have become available on a variety of machines running different operating systems. In particular, Xi began to spread on the rapidly evolving IBM PC platform.

Along with the rise in popularity, problems arose. The programmers who wrote the new compilers took the language described in K&R as a basis. Unfortunately, some features of the language were vaguely described in K&R, so compilers often interpreted them at their discretion. In addition, the book did not have a clear distinction between what is a feature of the language and what is a feature of the UNIX operating system. The situation was worsened by the fact 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 up-to-date description of the language. Without such a standard, dialects of the language began to emerge that interfered with portability - the language's strongest side.

Development of the American C standard began in 1983 under the auspices of the American National Standards Institute (ANSI). After many improvements, the standard was completed in 1988 and formally adopted in December 1989 as the ANSI X3.159-1989 standard. 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, in order not to be confused 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 referred to as Amendment 1). More significant changes occurred in 1999 when ISO / IEC 9899: 1999 was published. The language described in this standard is commonly referred to as C99. The terms "ANSI C", "ANSI / ISO C" and "ISO C", once used to describe C99 due to the existence of two standards, are ambiguous.

In 2011, together with the C ++ edition, the C11 standard was released. Despite the existence of the 11 year standard, many compilers still do not fully support even the C99 versions, so the use of the C11 standard will be specified explicitly.