Application life cycle models. §1 General information about the language. Stages of program design. Application Life Cycle Models Student Project History of the C Programming Language

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 70's 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 appear that interfered with portability - the strongest side of the language.

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 ANSI X3.159-1989. In 1990, it was approved by the International Organization for Standardization (ISO) as an 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 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, have two meanings.

In 2011, together with the C ++ language 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.

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 replaced from 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 selected keywords. Collecting mentions of the client in social networks, forums and news sites. Development of a strategy for working with negative information. The client receives a fully controlled issue in the TOP10.

What is the reason for this status of the C language? Historically, this language is inseparable from the Unix operating system, which is now 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 obvious. An attempt to create a universal mobile operating system was the answer to the realization of this commonality, and this required an equally universal 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. System programming tasks were 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 work, 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 has been relegated to the runtime library. Therefore, ill-wishers sometimes refer to the C language as a structural assembly language. But whatever they talked about, the approach turned out to be very successful. Thanks to him, a new level was reached in terms of 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 abbreviations used in it can make the program completely unreadable if used excessively. But, as Dijkstra said, it is not the fault of the means 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 intermodular 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 tools - 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 features were introduced into it in order to make the work of specific people and groups more convenient. 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 offered 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 implementing polymorphism - the basic concept of object-oriented programming, according to which the same code can be used to perform the same type of processing of different data types. 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 more difficult to write reliable programs, the templating mechanism is a sophisticated macro-generation mechanism deeply embedded in the language, opening another path to code reuse, 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 properly structure the program, 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 a standard class library that implements 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 tried 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 supplied in source.

The appearance of the template classes completely refuted this direction of development. Inheritance began to be used only in cases where 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, code reuse began to decline along the way, 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 gravest drawbacks of C ++, inherited from the C syntax, is that the compiler has access to a description of the internal structure of all used classes. As a consequence, changing 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 when releasing a 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, introduces a number of such important additional features and conveniences to C that many use it simply as an improved C. ...

As far as the C ++ object model is concerned, as long as your program is not very large (hundreds of thousands of lines), it is quite possible to use it. The recent trend towards 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 assigned to it by some.

The special role of the 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 short 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 number 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 that essentially requires working with arrays, loops, branching and I / O to solve it, and also allows you to demonstrate subroutine calls. At the same time, 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 indicated separated by 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 an offset is added 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 Array :: 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 and UNIX

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

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

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 (usually 16), while the long data type could be used to create an integer variable with a large number of bits (usually 32). Unlike other high-level languages, WITH could work with memory addresses directly using pointers and references. Insofar as WITH retained the ability to directly access hardware, it is often referred to as a middle-level language or is jokingly referred to as "mobile assembly language".

С - 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 in WITH think in terms of procedures and functions. V 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 to existing data types using the typedef keyword. In this sense WITH is a structured language with the seeds of object-oriented programming.

Standardization of the C language

Widespread use of the language C on different types of computers (sometimes called hardware platforms) has led, unfortunately, 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 a 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 firms.

The birth of C ++

Björn Stroustrup Unleashed Object Oriented Potential WITH by transferring the capabilities of the classes Simula 67 v WITH... Initially, the new language bore the name "C with classes" and only then began to be called C ++... Language C ++ It achieved popularity when it was developed at Bell Labs, and later it was transferred to other industries and corporations. Today it is one of the most popular (and respected) programming languages ​​in the world. C ++ inherits both good and bad sides WITH.

Bjorn Stroustrup's revelations

Bjorn Stroustrup: "I came up with C ++, wrote down its original definition and did the first implementation. I chose 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. -" Language C ++ owes a lot to the language C, and language C remains a subset C ++ language(but C ++ fixes several major flaws in the C type system). I also saved funds C that are low-level enough to handle the most critical system tasks. Language C owes much to its predecessor, BCPL; by the way, the comment style // was taken in C ++ from BCPL. Language was another major source of inspiration. Simula67... The concept of classes (with derived classes and virtual functions) was borrowed from it. The means of overloading operators and the ability to place announcements anywhere where the instruction can be written, reminds 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; moreover, it has already been used as the name of a completely different language. Connoisseurs of semantics C find that C ++ worse than ++ C... Names D the language did not get it, because it is an extension of C and it does not attempt to cure problems by throwing away 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 make writing good programs easier and more enjoyable for the individual programmer. Development plan C ++ never was on paper; design, documentation and implementation moved at the same time. Of course, the external interface C ++ was written in C ++... The C ++ Project and the C ++ Development Committee never existed. That's why C ++ has evolved and continues to evolve in all directions to cope with the complexities faced by users, as well as in the course of discussions between the author and his friends and colleagues.

Real Object Oriented C ++

V 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 the existing one.

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

Programming language C ++ 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, et al. "C # for Professionals"
  • Jess Liberty "Learn C ++ on your own in 21 days"
  • Stanislav Gornakov "DirectX, C ++ programming lessons"

C ++ (reads C-plus-plus) is a compiled, statically typed general-purpose programming language that can be used to 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, 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 modeling problems 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).
Here's how the language developer himself says about it:



In 1998, the first language standard, known as C ++ 98, was published by a standardization committee. 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 one or another 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 - Björn 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 C ++ book written by Bjorn 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) 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örn Stroustrup describes the principles he followed when designing 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 freedom of choice, 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 programming to C.
  • 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.
  • Do not pay for what is not used — no language tool should degrade the performance of programs that do not 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. Stroustrup said it would be very beneficial to combine the development of the two languages, but it is unlikely to be possible for political reasons. So the 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 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 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 identified at the stage of requirements formation are strictly documented in the form of a technical assignment and are fixed for the entire duration of the 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 assumes the division of the project life cycle into a series of iterations, each of which resembles a "mini-project", including all development processes as 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 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 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 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 of 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, which 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 ++
  • History
  • 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