FazBrowse Wikipedia Viewer | Main Page |
Search Wikipedia:
|
Viewing: https://en.wikipedia.org/wiki/Computer_programs

Computer program

Contents
    Analytical Engine
    Universal Turing machine
    ENIAC
    Imperative languages
        C++
        Lisp
        ML
    Object-oriented programming
    Syntax and semantics
Software engineering and computer programming
    Performance objectives
    Cost objectives
    Waterfall model
    Computer programmer
    Program modules
    Cohesion
    Coupling
    Data flow analysis
Functional categories
    Application software
Notes

Source code for a computer program written in the JavaScript language. It demonstrates the appendChild() method. The method adds a new child node to an existing parent node. It is commonly used to dynamically modify the structure of an HTML document.
Program execution
General concepts
Types of code
Compilation strategies
Notable runtimes
Notable compilers & toolchains

Improvements in software development are the result of improvements in computer hardware. At each stage in hardware's history, the task of computer programming changed dramatically.

Analytical Engine

edit
Lovelace's description from Note G

In 1837, Jacquard's loom inspired Charles Babbage to attempt to build the Analytical Engine. The names of the components of the calculating device were borrowed from the textile industry. In the textile industry, yarn was brought from the store to be milled. The device had a store which consisted of memory to hold 1,000 numbers of 50 decimal digits each. Numbers from the store were transferred to the mill for processing. The engine was programmed using two sets of perforated cards. One set directed the operation and the other set inputted the variables. However, the thousands of cogged wheels and gears never fully worked together.

Ada Lovelace worked for Charles Babbage to create a description of the Analytical Engine (1843). The description contained Note G which completely detailed a method for calculating Bernoulli numbers using the Analytical Engine. This note is recognized by some historians as the world's first computer program.

Universal Turing machine

edit

In 1936, Alan Turing introduced the Universal Turing machine, a theoretical device that can model every computation. It is a finite-state machine that has an infinitely long read/write tape. The machine can move the tape back and forth, changing its contents as it performs an algorithm. The machine starts in the initial state, goes through a sequence of steps, and halts when it encounters the halt state. All present-day computers are Turing complete.

ENIAC

edit
Glenn A. Beck changing a tube in ENIAC

The Electronic Numerical Integrator And Computer (ENIAC) was built between July 1943 and Fall 1945. It was a Turing complete, general-purpose computer that used 17,468 vacuum tubes to create the circuits. At its core, it was a series of Pascalines wired together. Its 40 units weighed 30 tons, occupied Machine language monitor on a W65C816S microprocessor

The evolution of programming languages began when the EDSAC (1949) used the first stored computer program in its von Neumann architecture. Programming the EDSAC was in the first generation of programming language.

  • The second generation of programming language is assembly language. Assembly language allows the programmer to use mnemonic instructions instead of remembering instruction numbers. An assembler translates each assembly language mnemonic into its machine language number. For example, on the PDP-11, the operation 24576 can be referenced as ADD R0,R0 in the source code. The four basic arithmetic operations have assembly instructions like ADD, SUB, MUL, and DIV. Assemblers also have instructions like DW (Define Word) to reserve memory cells. Then the MOV instruction can copy integers between registers and those memory cells.
  • The basic structure of an assembly language statement is a label, operation, operand, and comment.
  • Labels allow the programmer to work with variable names. The assembler will later translate labels into physical memory addresses.
  • Operations allow the programmer to work with mnemonics.
  • Operands tell the assembler which data the operation will process. The assembler will later translate mnemonics and operands into instruction numbers.
  • Comments allow the programmer to articulate a narrative because the instructions alone may be opaque to humans.
The key characteristic of an assembly language program is it forms a one-to-one mapping to its corresponding machine language target.

Imperative languages

edit
intincrement_counter(){ staticintcounter=0; counter++; returncounter; }
  • The stack region is a contiguous block of memory located near the top memory address. Variables placed in the stack are populated from top to bottom. A stack pointer is a special-purpose register that keeps track of the last memory address populated. Variables are placed into the stack via the assembly language PUSH instruction. Therefore, the addresses of these variables are set during runtime. The method for stack variables to lose their scope is via the POP instruction.
  • Local variables declared without the static prefix, including formal parameter variables, are called automatic variables and are stored in the stack. They are visible inside the function or block and lose their scope upon exiting the function or block.
  • The heap region is located below the stack. It is populated from the bottom to the top. The operating system manages the heap using a heap pointer and a list of allocated memory blocks. Like the stack, the addresses of heap variables are set during runtime. An out of memory error occurs when the heap pointer and the stack pointer meet.
  • C provides the malloc() library function to allocate heap memory. Populating the heap with data is an additional copy function. Variables stored in the heap are economically passed to functions using pointers. Without pointers, the entire block of data would have to be passed to the function via the stack.

C++

edit

In the 1970s, software engineers needed language support to break large projects down into modules. One obvious feature was to decompose large projects physically into separate files. A less obvious feature was to decompose large projects logically into abstract datatypes. At the time, languages supported concrete (scalar) datatypes like integer numbers, floating-point numbers, and strings of characters. Abstract datatypes are structures of concrete datatypes, with a new name assigned. For example, a list of integers could be called IntegerList.

Classes
edit
// Student.cpp exportmodulewikipedia.examples.Student; importstd; importwikipedia.examples.Grade; importwikipedia.examples.Person; usingstd::string; namespacewikipedia::examples{ // 'Student' is a subclass of 'Person' exportclassStudent:publicPerson{ private: Gradegrade; public: Student(conststring&name,constGrade&grade): Person(name),grade{grade}{} GradegetGrade()const{ returngrade; } }; }

The syntax public Person means that the Student class extends the Person class, inheriting all of its variables and methods (such as name and getName()).

This is a driver program for demonstration:

printf("%d",range(10,4,7)); will print 6.

Functional languages are used in computer science research to explore new language features. Moreover, their lack of side-effects have made them popular in parallel programming and concurrent programming. However, application developers prefer the object-oriented features of imperative languages.

Lisp

edit

Lisp (1958) stands for "LISt Processor". It is tailored to process lists. A full structure of the data is formed by building lists of lists. In memory, a tree data structure is built. Internally, the tree structure lends nicely for recursive functions. The syntax to build a tree is to enclose the space-separated elements within parenthesis. The following is a list of three elements. The first two elements are themselves lists of two elements:

((A B) (HELLO WORLD) 94)

Lisp has functions to extract and reconstruct elements. The function head() returns a list containing the first element in the list. The function tail() returns a list containing everything but the first element. The function cons() returns a list that is the concatenation of other lists. Therefore, the following expression will return the list x:

cons(head(x), tail(x))

One drawback of Lisp is when many functions are nested, the parentheses may look confusing. Modern Lisp environments help ensure parenthesis match. As an aside, Lisp does support the imperative language operations of the assignment statement and goto loops. Also, Lisp is not concerned with the datatype of the elements at compile time. Instead, it assigns (and may reassign) the datatypes at runtime. Assigning the datatype at runtime is called dynamic binding. Whereas dynamic binding increases the language's flexibility, programming errors may linger until late in the software development process.

Writing large, reliable, and readable Lisp programs requires forethought. If properly planned, the program may be much shorter than an equivalent imperative language program. Lisp is widely used in artificial intelligence. However, its usage has been accepted only because it has imperative language operations, making unintended side-effects possible.

ML (1979) stands for "Meta Language". ML checks to make sure only data of the same type are compared with one another. For example, this function has one input parameter (an integer) and returns an integer:

billows_fire(X) :- is_a_dragon(X).

2) A creature billows fire if one of its parents billows fire:

is_a_creature(X) :- is_a_dragon(X).

5) Norberta is a dragon, and Puff is a creature. Norberta is the mother of Puff.

X = norberta X = puff

Practical applications for Prolog are knowledge representation and problem solving in artificial intelligence.

Object-oriented programming

edit

Object-oriented programming is a programming method to execute operations (functions) on objects. The basic idea is to group the characteristics of a phenomenon into an object container and give the container a name. The operations on the phenomenon are also grouped into the container. Object-oriented programming developed by combining the need for containers and the need for safe functional programming. This programming method need not be confined to an object-oriented language. In an object-oriented language, an object container is called a class. In a non-object-oriented language, a data structure (which is also known as a record) may become an object container. To turn a data structure into an object container, operations need to be written specifically for the structure. The resulting structure is called an abstract datatype. However, inheritance will be missing. Nonetheless, this shortcoming can be overcome.

This is a C header file for the Grade datatype in an application modelling a school:

// Person.h #pragma once typedefstruct{ char*name; }Person; Person*person_new(char*name); voidperson_delete(Person*p);

Here is a C source file for the Person datatype in an application modelling a school:

\n#include \"Person.h\"\n\nPerson *person_new(char *name) {\n Person *person;\n\n // Error checking omitted\n person = calloc(1, sizeof(Person));\n\n person->name = name;\n return person;\n}\n\nvoid person_delete(Person *p) {\n free(p);\n}\n"}}'>// Person.c #include<stdlib.h> #include"Person.h" Person*person_new(char*name){ Person*person; // Error checking omitted person=calloc(1,sizeof(Person)); person->name=name; returnperson; } voidperson_delete(Person*p){ free(p); }

This is a C header file for the Student datatype in an application modelling a school:

// Main.c #include<stdio.h> #include"Student.h" intmain(){ Student*john=student_new("John Doe"); john->grade=grade_new('A'); printf( "Student name: %s, with grade %d\n" john->person->name, john->grade->letter ); grade_delete(john->grade); student_delete(john); return0; }

The formal strategy to build object-oriented objects is to:

  • Identify the objects. Most likely these will be nouns.
  • Identify each object's attributes. What helps to describe the object?
  • Identify each object's actions. Most likely these will be verbs.
  • Identify the relationships from object to object. Most likely these will be verbs.

For example:

  • A person is a human identified by a name.
  • A grade is an achievement identified by a letter.
  • A student is a person who earns a grade.

Syntax and semantics

edit
Production rules consist of a set of terminals and non-terminals.

The syntax of a computer program is a list of production rules which form its grammar. A programming language's grammar correctly places its declarations, expressions, and statements. Complementing the syntax of a language are its semantics. The semantics describe the meanings attached to various syntactic constructs. A syntactic construct may need a semantic description because a production rule may have an invalid interpretation. Also, different languages might have the same syntax; however, their behaviors may be different.

The syntax of a language is formally described by listing the production rules. Whereas the syntax of a natural language is extremely complicated, a subset of the English language can have this production rule listing:

  1. a sentence is made up of a noun-phrase followed by a verb-phrase;
  2. a noun-phrase is made up of an article followed by an adjective followed by a noun;
  3. a verb-phrase is made up of a verb followed by a noun-phrase;
  4. an article is 'the';
  5. an adjective is 'big' or
  6. an adjective is 'small';
  7. a noun is 'cat' or
  8. a noun is 'mouse';
  9. a verb is 'eats';

The words in bold-face are known as non-terminals. The words in 'single quotes' are known as terminals.

From this production rule listing, complete sentences may be formed using a series of replacements. The process is to replace non-terminals with either a valid non-terminal or a valid terminal. The replacement process repeats until only terminals remain. One valid sentence is:

  • sentence
  • noun-phrase verb-phrase
  • article adjective noun verb-phrase
  • the adjective noun verb-phrase
  • the big noun verb-phrase
  • the big cat verb-phrase
  • the big cat verb noun-phrase
  • the big cat eats noun-phrase
  • the big cat eats article adjective noun
  • the big cat eats the adjective noun
  • the big cat eats the small noun
  • the big cat eats the small mouse

However, another combination results in an invalid sentence:

  • the small mouse eats the big cat

Therefore, a semantic is necessary to correctly describe the meaning of an eat activity.

One production rule listing method is called the Backus–Naur form (BNF). BNF describes the syntax of a language and itself has a syntax. This recursive definition is an example of a metalanguage. The syntax of BNF includes:

  • ::= which translates to is made up of a[n] when a non-terminal is to its right. It translates to is when a terminal is to its right.
  • | which translates to or.
  • < and > which surround non-terminals.

Using BNF, a subset of the English language can have this production rule listing:

::= <noun-phrase><verb-phrase>\n<noun-phrase> ::= <article><adjective><noun>\n<verb-phrase> ::= <verb><noun-phrase>\n<article> ::= the\n<adjective> ::= big | small\n<noun> ::= cat | mouse\n<verb> ::= eats\n"}}'><sentence> ::= <noun-phrase><verb-phrase> <noun-phrase> ::= <article><adjective><noun> <verb-phrase> ::= <verb><noun-phrase> <article> ::= the <adjective> ::= big | small <noun> ::= cat | mouse <verb> ::= eats

Using BNF, a signed-integer has the production rule listing:

::= <sign><integer>\n<sign> ::= + | -\n<integer> ::= <digit> | <digit><integer>\n<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9\n"}}'><signed-integer> ::= <sign><integer> <sign> ::= + | - <integer> ::= <digit> | <digit><integer> <digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Notice the recursive production rule:

::= <digit> | <digit><integer>\n"}}'><integer> ::= <digit> | <digit><integer>

This allows for an infinite number of possibilities. Therefore, a semantic is necessary to describe a limitation of the number of digits.

Notice the leading zero possibility in the production rules:

::= <digit> | <digit><integer>\n<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9\n"}}'><integer> ::= <digit> | <digit><integer> <digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Therefore, a semantic is necessary to describe that leading zeros need to be ignored.

Two formal methods are available to describe semantics. They are denotational semantics and axiomatic semantics.

Software engineering and computer programming

edit
Prior to programming languages, Betty Jennings and Fran Bilas programmed the ENIAC by moving cables and setting switches.

Software engineering is a variety of techniques to produce quality computer programs. Computer programming is the process of writing or editing source code. In a formal environment, a systems analyst will gather information from managers about all the organization's processes to automate. This professional then prepares a detailed plan for the new or modified system. The plan is analogous to an architect's blueprint.

Performance objectives

edit

The systems analyst has the objective to deliver the right information to the right person at the right time. The critical factors to achieve this objective are:

  1. The quality of the output. Is the output useful for decision-making?
  2. The accuracy of the output. Does it reflect the true situation?
  3. The format of the output. Is the output easily understood?
  4. The speed of the output. Time-sensitive information is important when communicating with the customer in real time.

Cost objectives

edit

Achieving performance objectives should be balanced with all of the costs, including:

  1. Development costs.
  2. Uniqueness costs. A reusable system may be expensive. However, it might be preferred over a limited-use system.
  3. Hardware costs.
  4. Operating costs.

Applying a systems development process will mitigate the axiom: the later in the process an error is detected, the more expensive it is to correct.

Waterfall model

edit

The waterfall model is an implementation of a systems development process. As the waterfall label implies, the basic phases overlap each other:

  1. The investigation phase is to understand the underlying problem.
  2. The analysis phase is to understand the possible solutions.
  3. The design phase is to plan the best solution.
  4. The implementation phase is to program the best solution.
  5. The maintenance phase lasts throughout the life of the system. Changes to the system after it is deployed may be necessary. Faults may exist, including specification faults, design faults, or coding faults. Improvements may be necessary. Adaption may be necessary to react to a changing environment.

Computer programmer

edit

A computer programmer is a specialist responsible for writing or modifying the source code to implement the detailed plan. A programming team is likely to be needed because most systems are too large to be completed by a single programmer. However, adding programmers to a project may not shorten the completion time. Instead, it may lower the quality of the system. To be effective, program modules need to be defined and distributed to team members. Also, team members must interact with one another in a meaningful and effective way.

Computer programmers may be programming in the small: programming within a single module. Chances are a module will execute modules located in other source code files. Therefore, computer programmers may be programming in the large: programming modules so they will effectively couple with each other. Programming-in-the-large includes contributing to the application programming interface (API).

Program modules

edit

Modular programming is a technique to refine imperative language programs. Refined programs may reduce the software size, separate responsibilities, and thereby mitigate software aging. A program module is a sequence of statements that are bounded within a block and together identified by a name. Modules have a function, context, and logic:

  • The function of a module is what it does.
  • The context of a module are the elements being performed upon.
  • The logic of a module is how it performs the function.

The module's name should be derived first by its function, then by its context. Its logic should not be part of the name. For example, function compute_square_root( x ) or function compute_square_root_integer( i : integer ) are appropriate module names. However, function compute_square_root_by_division( x ) is not.

The degree of interaction within a module is its level of cohesion. Cohesion is a judgment of the relationship between a module's name and its function. The degree of interaction between modules is the level of coupling. Coupling is a judgement of the relationship between a module's context and the elements being performed upon.

Cohesion

edit

The levels of cohesion from worst to best are:

  • Coincidental Cohesion: A module has coincidental cohesion if it performs multiple functions, and the functions are completely unrelated. For example, function read_sales_record_print_next_line_convert_to_float(). Coincidental cohesion occurs in practice if management enforces silly rules. For example, "Every module will have between 35 and 50 executable statements."
  • Logical Cohesion: A module has logical cohesion if it has available a series of functions, but only one of them is executed. For example, function perform_arithmetic( perform_addition, a, b ).
  • Temporal Cohesion: A module has temporal cohesion if it performs functions related to time. One example, function initialize_variables_and_open_files(). Another example, stage_one(), stage_two(), ...
  • Procedural Cohesion: A module has procedural cohesion if it performs multiple loosely related functions. For example, function read_part_number_update_employee_record().
  • Communicational Cohesion: A module has communicational cohesion if it performs multiple closely related functions. For example, function read_part_number_update_sales_record().
  • Informational Cohesion: A module has informational cohesion if it performs multiple functions, but each function has its own entry and exit points. Moreover, the functions share the same data structure. Object-oriented classes work at this level.
  • Functional Cohesion: a module has functional cohesion if it achieves a single goal working only on local variables. Moreover, it may be reusable in other contexts.

Coupling

edit

The levels of coupling from worst to best are:

  • Content Coupling: A module has content coupling if it modifies a local variable of another function. COBOL used to do this with the alter verb.
  • Common Coupling: A module has common coupling if it modifies a global variable.
  • Control Coupling: A module has control coupling if another module can modify its control flow. For example, perform_arithmetic( perform_addition, a, b ). Instead, control should be on the makeup of the returned object.
  • Stamp Coupling: A module has stamp coupling if an element of a data structure passed as a parameter is modified. Object-oriented classes work at this level.
  • Data Coupling: A module has data coupling if all of its input parameters are needed and none of them are modified. Moreover, the result of the function is returned as a single object.

Data flow analysis

edit
A sample function-level data-flow diagram

Data flow analysis is a design method used to achieve modules of functional cohesion and data coupling. The input to the method is a data-flow diagram. A data-flow diagram is a set of ovals representing modules. Each module's name is displayed inside its oval. Modules may be at the executable level or the function level.

The diagram also has arrows connecting modules to each other. Arrows pointing into modules represent a set of inputs. Each module should have only one arrow pointing out from it to represent its single output object. (Optionally, an additional exception arrow points out.) A daisy chain of ovals will convey an entire algorithm. The input modules should start the diagram. The input modules should connect to the transform modules. The transform modules should connect to the output modules.

Functional categories

edit
A diagram showing that the user interacts with the application software. The application software interacts with the operating system, which interacts with the hardware.

Computer programs may be categorized along functional lines. The main functional categories are application software and system software. System software includes the operating system, which couples computer hardware with application software. The purpose of the operating system is to provide an environment where application software executes in a convenient and efficient manner. Both application software and system software execute utility programs. At the hardware level, a microcode program controls the circuits throughout the central processing unit.

Application software

edit
NOT gate
NAND gate
NOR gate
AND gate
OR gate

A microcode program is the bottom-level interpreter that controls the datapath of software-driven computers. (Advances in hardware have migrated these operations to hardware execution circuits.) Microcode instructions allow the programmer to more easily implement the digital logic level—the computer's real hardware. The digital logic level is the boundary between computer science and computer engineering.

A logic gate is a tiny transistor that can return one of two signals: on or off.

  • Having one transistor forms the NOT gate.
  • Connecting two transistors in series forms the NAND gate.
  • Connecting two transistors in parallel forms the NOR gate.
  • Connecting a NOT gate to a NAND gate forms the AND gate.
  • Connecting a NOT gate to a NOR gate forms the OR gate.

These five gates form the building blocks of binary algebra—the digital logic functions of the computer.

Microcode instructions are mnemonics programmers may use to execute digital logic functions instead of forming them in binary algebra. They are stored in a CPU's control store. These hardware-level instructions move data throughout the data path.

The micro-instruction cycle begins when the microsequencer uses its microprogram counter to fetch the next machine instruction from random-access memory. The next step is to decode the machine instruction by selecting the proper output line to the hardware module. The final step is to execute the instruction using the hardware module's set of gates.

A symbolic representation of an ALU

Instructions to perform arithmetic are passed through an arithmetic logic unit (ALU). The ALU has circuits to perform elementary operations to add, shift, and compare integers. By combining and looping the elementary operations through the ALU, the CPU performs its complex arithmetic.

Microcode instructions move data between the CPU and the memory controller. Memory controller microcode instructions manipulate two registers. The memory address register is used to access each memory cell's address. The memory data register is used to set and read each cell's contents.

Notes

edit
Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 7. ISBN 0-201-71012-9. An alternative to compiling a source program is to use an interpreter. An interpreter can directly execute a source program[.]
  • ↑ Tanenbaum, Andrew S. (1990). Structured Computer Organization, Third Edition. Prentice Hall. p. 32. ISBN 978-0-13-854662-5.
  • ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 31. ISBN 0-201-71012-9.
  • 1 2 3 4 5 6 McCartney, Scott (1999). ENIAC – The Triumphs and Tragedies of the World's First Computer. Walker and Company. p. 16. ISBN 978-0-8027-1348-3.
  • ↑ Rosen, Kenneth H. (1991). Discrete Mathematics and Its Applications. McGraw-Hill, Inc. p. 654. ISBN 978-0-07-053744-6. Turing machines can model all the computations that can be performed on a computing machine.
  • ↑ McCartney, Scott (1999). ENIAC – The Triumphs and Tragedies of the World's First Computer. Walker and Company. p. 102. ISBN 978-0-8027-1348-3.
  • ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 27. ISBN 0-201-71012-9.
  • ↑ To the Digital Age: Research Labs, Start-up Companies, and the Rise of MOS. Johns Hopkins University Press. 2002. ISBN 9780801886393. Archived from the original on February 2, 2023. Retrieved February 3, 2022.
  • ↑ "1959: Practical Monolithic Integrated Circuit Concept Patented". Computer History Museum. Retrieved 13 August 2019.
  • ↑ "360 Revolution" (PDF). Father, Son & Co. 1990. Archived (PDF) from the original on 2022-10-10. Retrieved February 5, 2022.
  • ↑ Stroustrup, Bjarne (2013). The C++ Programming Language, Fourth Edition. Addison-Wesley. p. 11. ISBN 978-0-321-56384-2.
  • 1 2 Weiss, Mark Allen (1994). Data Structures and Algorithm Analysis in C++. Benjamin/Cummings Publishing Company, Inc. p. 29. ISBN 0-8053-5443-3.
  • ↑ Stair, Ralph M. (2003). Principles of Information Systems, Sixth Edition. Thomson. p. 160. ISBN 0-619-06489-7. The first generation of programming languages is machine language, which requires the use of binary symbols (0s and 1s).
  • ↑ Tanenbaum, Andrew S. (1990). Structured Computer Organization, Third Edition. Prentice Hall. p. 399. ISBN 978-0-13-854662-5.
  • ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 26. ISBN 0-201-71012-9.
  • 1 2 3 4 Wilson, Leslie B. (1993). Comparative Programming Languages, Second Edition. Addison-Wesley. p. 75. ISBN 978-0-201-56885-1.
  • ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 24. ISBN 0-201-71012-9.
  • 1 2 "Memory Layout of C Programs". 12 September 2011. Archived from the original on 6 November 2021. Retrieved 6 November 2021.
  • 1 2 Kerrisk, Michael (2010). The Linux Programming Interface. No Starch Press. p. 121. ISBN 978-1-59327-220-3.
  • ↑ Kernighan, Brian W.; Ritchie, Dennis M. (1988). The C Programming Language Second Edition. Prentice Hall. p. 187. ISBN 0-13-110362-8.
  • 1 2 Stroustrup, Bjarne (2013). The C++ Programming Language, Fourth Edition. Addison-Wesley. p. 22. ISBN 978-0-321-56384-2.
  • ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 39. ISBN 0-201-71012-9.
  • ↑ Gregoire, Marc (2024). Professional C++ (6th ed.). John Wiley and Sons, Inc. p. 9. ISBN 9781394193172. Namespaces address the problem of naming conflicts between different pieces of code.
  • ↑ Gregoire, Marc (2024). Professional C++ (6th ed.). John Wiley and Sons, Inc. p. 5. ISBN 9781394193172. If the program did not import that module, it would be unable to perform its only task of printing text.
  • ↑ Hunter, David (1999). The Essentials of C++. Research & Education Association. p. 46. ISBN 0-87891-748-9.
  • ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 217. ISBN 0-201-71012-9.
  • ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 240. ISBN 0-201-71012-9.
  • 1 2 3 Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 220. ISBN 0-201-71012-9.
  • ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 227. ISBN 0-201-71012-9.
  • 1 2 Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 235. ISBN 0-201-71012-9.
  • ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 35. ISBN 0-201-71012-9. Simula was based on Algol 60 with one very important addition — the class concept. ... The basic idea was that the data (or data structure) and the operations performed on it belong together[.]
  • ↑ Weiss, Mark Allen (1994). Data Structures and Algorithm Analysis in C++. Benjamin/Cummings Publishing Company, Inc. p. 57. ISBN 0-8053-5443-3.
  • ↑ Wilson, Leslie B. (2001). Comparative Programming Languages, Third Edition. Addison-Wesley. p. 78. ISBN 0-201-71012-9. The main components of an imperative language are declarations, expressions, and statements.
  • 1 2 Rosen, Kenneth H. (1991). Discrete Mathematics and Its Applications. McGraw-Hill, Inc. p. 615. ISBN 978-0-07-053744-6.
  • ↑ Rosen, Kenneth H. (1991). Discrete Mathematics and Its Applications. McGraw-Hill, Inc. p. 623. ISBN 978-0-07-053744-6.
  • ↑ Schach, Stephen R. (1990). Software Engineering. Aksen Associates Incorporated Publishers. p. Preface. ISBN 0-256-08515-3.
  • 1 2 3 Stair, Ralph M. (2003). Principles of Information Systems, Sixth Edition. Thomson. p. 514. ISBN 0-619-06489-7.
  • ↑ Stair, Ralph M. (2003). Principles of Information Systems, Sixth Edition. Thomson. p. 517. ISBN 0-619-06489-7.
  • ↑ Schach, Stephen R. (1990). Software Engineering. Aksen Associates Incorporated Publishers. p. 331. ISBN 0-256-08515-3.
  • ↑ Schach, Stephen R. (1990). Software Engineering. Aksen Associates Incorporated Publishers. p. 226. ISBN 0-256-08515-3.
  • 1 2 Schach, Stephen R. (1990). Software Engineering. Aksen Associates Incorporated Publishers. p. 259. ISBN 0-256-08515-3.
  • 1 2 3 Stair, Ralph M. (2003). Principles of Information Systems, Sixth Edition. Thomson. p. 147. ISBN 0-619-06489-7.
  • ↑ Stair, Ralph M. (2003). Principles of Information Systems, Sixth Edition. Thomson. p. 148. ISBN 0-619-06489-7. Heading: Proprietary Software; Subheading: Advantages; Quote: Being involved in the development offers a further level of control over the results.
  • ↑ Tanenbaum, Andrew S. (1990). Structured Computer Organization, Third Edition. Prentice Hall. p. 11. ISBN 978-0-13-854662-5.
  • 1 2 Bach, Maurice J. (1986). The Design of the UNIX Operating System. Prentice-Hall, Inc. p. 152. ISBN 0-13-201799-7.
  • ↑ Kernighan, Brian W.; Ritchie, Dennis M. (1988). The C Programming Language Second Edition. Prentice Hall. p. 185. ISBN 0-13-110362-8. malloc calls upon the operating system to obtain more memory as needed.
  • ↑ Kerrisk, Michael (2010). The Linux Programming Interface. No Starch Press. p. 23. ISBN 978-1-59327-220-3.
  • ↑ Haviland, Keith (1987). Unix System Programming. Addison-Wesley Publishing Company. p. 121. ISBN 0-201-12919-1.
  • 1 2 Tanenbaum, Andrew S. (2013). Structured Computer Organization, Sixth Edition. Pearson. p. 5. ISBN 978-0-13-291652-3.
  • 1 2 Tanenbaum, Andrew S. (2013). Structured Computer Organization, Sixth Edition. Pearson. p. 147. ISBN 978-0-13-291652-3.
  • ↑ Tanenbaum, Andrew S. (2013). Structured Computer Organization, Sixth Edition. Pearson. p. 255. ISBN 978-0-13-291652-3.
  • ↑ Tanenbaum, Andrew S. (2013). Structured Computer Organization, Sixth Edition. Pearson. p. 249. ISBN 978-0-13-291652-3.

  • View original on Wikipedia | Back | FazBrowse Home