Programming Languages

The theory of programming

PDF generated using the open source mwlib toolkit. See for more information. PDF generated at: Thu, 04 Oct 2012 07:53:16 UTC

Computer programming History of programming languages Comparison of programming languages Computer program Programming language Abstraction Programmer Language primitive Assembly language Machine code Source code Command Execution 1 8 14 45 50 64 72 76 77 89 92 95 96 98 98 102 115 117 118 120

Programming language theory Type system Strongly typed programming language Weak typing Syntax Scripting language

Article Sources and Contributors Image Sources, Licenses and Contributors 124 127

Article Licenses
License 128

Computer programming


Computer programming
Computer programming (often shortened to programming or coding) is the process of designing, writing, testing, debugging, and maintaining the source code of computer programs. This source code is written in one or more programming languages (such as Java, C++, C#, python, etc.). The purpose of programming is to create a set of instructions that computers use to perform specific operations or to exhibit desired behaviors. The process of writing source code often requires expertise in many different subjects, including knowledge of the application domain, specialized algorithms and formal logic.

Within software engineering, programming (the implementation) is regarded as one phase in a software development process. There is an ongoing debate on the extent to which the writing of programs is an art form, a craft or an engineering discipline.[1] In general, good programming is considered to be the measured application of all three, with the goal of producing an efficient and evolvable software solution (the criteria for "efficient" and "evolvable" vary considerably). The discipline differs from many other technical professions in that programmers, in general, do not need to be licensed or pass any standardized (or governmentally regulated) certification tests in order to call themselves "programmers" or even "software engineers." Because the discipline covers many areas, which may or may not include critical applications, it is debatable whether licensing is required for the profession as a whole. In most cases, the discipline is self-governed by the entities which require the programming, and sometimes very strict environments are defined (e.g. United States Air Force use of AdaCore and security clearance). However, representing oneself as a "Professional Software Engineer" without a license from an accredited institution is illegal in many parts of the world. Another ongoing debate is the extent to which the programming language used in writing computer programs affects the form that the final program takes. This debate is analogous to that surrounding the Sapir–Whorf hypothesis[2] in linguistics and cognitive science, which postulates that a particular spoken language's nature influences the habitual thought of its speakers. Different language patterns yield different patterns of thought. This idea challenges the possibility of representing the world perfectly with language, because it acknowledges that the mechanisms of any language condition the thoughts of its speaker community.

. had been for control. Charles Babbage adopted the use of punched cards around 1830 to control his Analytical Engine. called unit record equipment.[4] The Kurdish medieval scientist Al-Jazari built programmable Automata in 1206 AD. The first computer program was written for the Analytical Engine by mathematician Ada Lovelace to calculate a sequence of Bernoulli Numbers. which were kept in order and computer memory. first known as "Hollerith cards" he invented the tabulator.Computer programming 2 History Ancient cultures had no conception of computing beyond simple arithmetic. Prior uses of machine readable media. along with a way to organize and input instructions in a manner relatively easy for humans to conceive and produce. "After some initial trials with paper tape. Development of computer programming accelerated through the Industrial Revolution. The loom could produce entirely different weaves using different programmer. which Joseph Marie Jacquard developed in 1801. he settled on punched cards."[8] To process these punched cards. which would sequentially trigger levers that in turn operated percussion instruments. not data. Later. In the late 1880s. The invention of the von Data and instructions could be stored on external Neumann architecture allowed computer programs to be stored in punched cards. the Antikythera mechanism. above. The output of this device was a small drummer playing various rhythms and drum patterns. One system employed in these devices was the use of pegs and cams placed into a wooden drum at specific locations. and which is consistent for calculating the dates of the Olympiads. In 1896 he founded the Tabulating Machine Company (which later became the core of IBM). was the first mechanical calculator utilizing gears of various sizes and configuration to perform calculations. Later. predetermined operation and output.[5][6] The Jacquard Loom. These three inventions were the foundation of the modern information processing industry. Every model of computer would likely use different instructions (machine language) to do the same task. led to the modern development of computer programming. there were a variety of control panel programmable machines. assembly languages were developed that let the programmer specify each . and the keypunch machines.[7] The synthesis of numerical calculation. using the instructions (elementary operations) of the particular machine. Herman Hollerith invented the recording of data on a medium that could then be read by a machine. The hole Ada Lovelace created the first algorithm designed pattern represented the pattern that the loom had to follow in weaving for processing by a computer and is usually recognized as history's first computer cloth. invented some time around 100 AD in ancient Greece. The only mechanical device that existed for numerical computation at the beginning of human history was the abacus. sets of cards.[3] which tracked the metonic cycle still used in lunar-to-solar calendars. often in binary notation. uses a series of pasteboard cards with holes punched in them. to perform data-processing tasks. invented in Sumeria circa 2500 BC. Early programs had to be painstakingly crafted arranged in program decks. By the late 1940s.. The addition of a control panel (plugboard) to his 1906 Type I Tabulator allowed it to do different jobs without having to be physically rebuilt.

it was the first high level programming language to have a functional implementation.. This has brought about newer programming languages that are more abstracted from the underlying hardware. the increase in speed of modern computers has made the use of these languages much more practical than in the past. computers have made giant leaps in the area of processing power. Popular programming languages of the modern era include C++. and less prone to human error than using machine language. as opposed to just a design on paper. Java/Javascript. Entering a program in assembly language is usually more convenient. The following properties are among the most relevant: • Reliability: how often the results of a program are correct.g. and Japan. However. such as those where low-level hardware control is necessary or where maximum processing speed is vital. such as mistakes in resource management (e. Computer programming has become a popular career in the developed world. is converted into machine instructions Wired control panel for an IBM 402 Accounting using a special program called a compiler. Scandinavia. making programming career decisions in developed countries more complicated. including some for commercial programming. particularly China and India. such as COBOL. .g. while increasing economic opportunities for programmers in less developed areas. buffer overflows and race conditions) and logic errors (such as division by zero or off-by-one errors). Programs were mostly still entered using punched cards or paper tape. The program text. Y = X*2 + 5*X + 9). faster. and minimization of programming mistakes. Text editors were developed that allowed changes and corrections to be made much more easily than with punched cards. (Usually. This depends on conceptual correctness of algorithms. Pascal. i. Although these high-level languages usually incur greater overhead. usually at a lower wage). Due to the high labor cost of programmers in these countries.e. the name FORTRAN stands for "Formula Translation". but because an assembly language is little more than a different notation for a machine language. or source. Europe. in very general terms.g. some forms of programming have been increasingly subject to offshore outsourcing (importing software and services from other countries. SQL and dozens more.[9][10] (A high-level language is.Computer programming instruction in a text format. Many other languages were developed. HTML. FORTRAN was invented.) It allowed programmers to specify calculations by entering a formula directly (e. data storage devices and computer terminals became inexpensive enough that programs could be created by typing directly into the computers. TOTAL). Perl. which translates the Machine. high-level languages are still impractical for a few programs. any programming language that allows the programmer to write programs in terms that are more abstract than assembly language instructions. an error in punching a card meant that the card had to be discarded and a new one punched to replace it. Visual Basic. ADD X. In 1954. 3 Modern programming Quality requirements Whatever the approach to software development may be.. C#. PHP. By the late 1960s. FORTRAN program into machine language. entering abbreviations for each operation code instead of a number and specifying addresses in symbolic form (e. These increasingly abstracted languages typically are easier to learn and allow the programmer to develop applications much more efficiently and with less source code. In fact. any two machines with different instruction sets also have different assembly languages. (See computer programming in the punch card era).) As time has progressed. at a level of abstraction "higher" than that of an assembly language. particularly in the United States. the final program must satisfy some fundamental properties.

graphical and sometimes hardware elements that improve the clarity. cohesiveness and completeness of a program's user interface. procedures. 4 Readability of source code In computer programming. This quality may not be directly apparent to the end user but it can significantly affect the fate of a program over the long term. For this purpose. and operation of source code.) Algorithmic complexity The academic field and the engineering practice of computer programming are both largely concerned with discovering and implementing the most efficient algorithms for a given class of problem. classes. trying to understand and modifying existing source code. A study[11] found that a few simple readability transformations made code shorter and drastically reduced the time to understand it. operating system services and network connections. inappropriate or corrupt data. Readability is important because programmers spend the majority of their time reading. usability and most importantly maintainability. intuitiveness. inefficiencies. Many factors. unavailability of needed resources such as memory. rather than writing new source code. or adapt it to new environments. including portability. including hardware and operating system resources. • Portability: the range of computer hardware and operating system platforms on which the source code of a program can be compiled/interpreted and run. which expresses resource use. This involves a wide range of textual. and duplicated code. This includes situations such as incorrect. It affects the aspects of quality above. expected behaviour of the hardware and operating system. network bandwidth and to some extent even user interaction): the less. • Maintainability: the ease with which a program can be modified by its present or future developers in order to make improvements or customizations. control flow. Such issues can make or break its success even regardless of other issues. This depends on differences in the programming facilities provided by the different platforms. etc. readability is more than just programming style.[12] Some of these factors include: • • • • Different indentation styles (whitespace) Comments Decomposition Naming conventions for objects (such as variables. memory space. Expert programmers are familiar with a variety of well-established algorithms and their respective complexities and use this knowledge to choose algorithms that are best suited to the circumstances. having little or nothing to do with the ability of the computer to efficiently compile and execute the code. and availability of platform specific compilers (and sometimes libraries) for the language of the source code. fix bugs and security holes. the better. and user error. or in some cases even unanticipated purposes. • Usability: the ergonomics of a program: the ease with which a person can use the program for its intended purpose. such as execution time or memory consumption. . readability refers to the ease with which a human reader can comprehend the purpose. contribute to readability.Computer programming • Robustness: how well a program anticipates problems not due to programmer error. • Efficiency/performance: the amount of system resources a program consumes (processor time. such as cleaning up temporary files and lack of memory leaks. Following a consistent programming style often helps readability. in terms of the size of an input. slow devices such as disks. This also includes correct disposal of some resources. Unreadable code often leads to bugs. Good practices during initial development make the difference in this regard. However. algorithms are classified into orders using so-called Big O notation.

New languages are generally designed around the syntax of a previous language with new functionality added (for example C++ adds object-orientedness to C. and estimates of the number of existing lines of code written in the language (this underestimates the number of users of business languages such as COBOL).. Debugging Debugging is a very important task in the software development process. often on large mainframes.[13] the number of books sold and courses teaching the language (this overestimates the importance of newer languages). Kdevelop. and Visual Studio. Some languages are very popular for particular kinds of applications (e. and C in embedded applications). Also many applications use a mix of several languages in their construction and use. Implementation techniques include imperative languages (object-oriented or procedural). because an incorrect program can have significant consequences for its users. and these often provide less of a visual environment. Some languages are more prone to some kinds of faults because their specification does not require compilers to perform as much checking as other languages. followed by testing to determine value modeling. functional languages. A similar technique used for database design is Entity-Relationship Modeling (ER Modeling). Measuring language usage It is very difficult to determine what are the most popular of modern programming languages. Debugging is often done with IDEs like Eclipse. One approach popular for requirements analysis is Use Case analysis. and failure elimination (debugging). Methods of measuring programming language popularity include: counting the number of job advertisements that mention the language. There exist a lot of differing approaches for each of those tasks. while some languages are regularly used to write many different kinds of applications. and logic languages. usually using a command line. Code::Blocks. Popular modeling techniques include Object-Oriented Analysis and Design (OOAD) and Model-Driven Architecture (MDA).Computer programming 5 Methodologies The first step in most formal software development processes is requirements analysis. Use of a static code analysis tool can help detect some possible problems.g. The Unified Modeling Language (UML) is a notation used for both the OOAD and MDA. . NetBeans. COBOL is still strong in the corporate data center. and Java adds memory management and bytecode to C++). implementation. scripting languages in Web development. Nowadays many programmers use forms of Agile software development where the various stages of formal software development are more integrated together into short cycles that take a few weeks rather than years. The bug from 1947 which is at the origin of a popular (but incorrect) etymology for the common term for a software defect. Standalone debuggers like gdb are also used. FORTRAN in engineering applications. There are many approaches to the Software development process.

writes: The details look different in different languages. conditional execution: Check for certain conditions and execute the appropriate sequence of statements. "Notation as a tool of thought". usually with some variation. The choice of language used is subject to many availability of third-party packages. a file. Their jobs usually involve: • • • • • • • • • • Coding Compilation Debugging Documentation Integration Maintenance Requirements analysis Software architecture Software testing Specification References [1] Paul Graham (2003). uk/ marcoms/ eview/ articles58/ robot. November 29. output: Display data on the screen or send data to a file or other device. arithmetic: Perform basic arithmetical operations like addition and multiplication.1038/nature07130. Tony." Notation as a tool of thought (http:/ / elliscave. Communications of the ACM. [2] Kenneth E. Iverson K. whereas "high-level" languages are more abstract and easier to use but execute less quickly. Many computer languages provide a mechanism to call functions provided by libraries such as in a . Steele. was devoted to this theme. or individual preference. com/ APL_J/ tool.g. com/ hp. Trade-offs from this ideal involve finding enough programmers who know the language to build a team. doi:10. nature. PMID 18668103.. such as company policy. "low-level" languages are typically more machine-oriented and faster to execute. Yanis (July 31. Hackers and Painters (http:/ / www. University of Sheffield .Computer programming 6 Programming languages Different programming languages support different styles of programming (called programming paradigms). [5] A 13th Century Programmable Robot (http:/ / www. pdf)". Alexander. His Turing award lecture. and the efficiency with which programs written in a given language execute. believed that the Sapir–Whorf hypothesis applied to computer languages (without actually mentioning the hypothesis by name). com/ news/ 2006/ 11/ 061129-ancient-greece. the availability of compilers for that language. . the originator of the APL programming language. html). html). com/ nature/ journal/ v454/ n7204/ full/ nature07130. method of passing arguments). "Calendars with Olympiad display and eclipse prediction on the Antikythera Mechanism" (http:/ / www. suitability to task. the programming language best suited for the task at hand will be selected. Allen Downey.. but a few basic instructions appear in just about every language: • • • • input: Gather data from the keyboard. John M. Retrieved 2006-08-22. Languages form an approximate spectrum from "low-level" to "high-level". Provided the functions in a library follow the appropriate run time conventions (e. ac. 2008). [3] " Ancient Greek Computer's Inner Workings Deciphered (http:/ / news. National Geographic News. Ideally. then these functions may be written in any other language. paulgraham. nationalgeographic. Nature 454 (7204): 614–617. 23: 444-465 (August 1980). 2006. in his book How To Think Like A Computer Scientist. shef. html). html)". It is usually easier to code in "high-level" languages than in "low-level" ones.. • repetition: Perform some action repeatedly. Jones. arguing that more powerful notations aided thinking about computer algorithms. Bitsakis. Programmers Computer programmers are those who write computer software. . or some other device. [4] Freeth. Iverson.

[8] "Columbia University Computing History . [10] "CSC-302 99S : Class 02: A Brief History of Programming Languages" (http:/ / www. 54. Aug 1982. .com/wiki/Main_Page) • How to Think Like a Computer Scientist (http://openbookproject. msn. . Retrieved 2010-04-25. IEEE Annals of the History of Computing 25 (4): 16. columbia. JSTOR 3391092 [7] Fuegi. Pearson (1999) • Weinberg. math. Charles B. MSNBC. J. com/ Articles/ 2007/ 09/ 11/ 226631/ sslcomputer-weekly-it-salary-survey-finance-boom-drives-it-job.grin.. Singapore: World Scientific (2009) • A. edu/ acis/ history/ hollerith. doi:10. com/ wiki/ Readability). The Pragmatic Programmer. Music Educators Journal (Music Educators Journal. "Fortran creator John Backus dies .. Francis.2003. Downey and Chris Meyers . Docforge. 1145/ 358589. Michael org/ 10. 358596). acm. Math. (October 1967). Practical Guide to Computer Simulations (http://www.wikia. htm)> 7 Further reading • A. grin. ET (2007-03-20). From Journeyman to Master. . Gerald M. The Psychology of Computer Programming. html). Retrieved 2010-01-30. "Readability" (http:/ / docforge. Improving computer program readability to aid modification (http:/ / doi.Herman Hollerith" (http:/ / www.512-521. 2) 54 (2): 45– at the Open Directory Project • Programming Wikia (http://programming. com/ id/ 17704662/ ). The Practice of Jeffrey Elkner. p. Hunt. v. (2003).com" (http:/ / www. Cunningham. computerweekly. doi:10. Columbia. Retrieved 2010-04-25.25 n. D.msnbc. No.worldscibooks. Vol. Elshoff .1109/MAHC. and W. New York: Van Nostrand Reinhold (1971) External links • Software engineering (http://www. 02.1253887. [13] Survey of Job advertisements mentioning a given language (http:/ / www.8. J. Thomas. edu/ ~rebelsky/ Courses/ CS302/ 99S/ Outlines/ outline. [11] James L. Communications of the ACM.Computer programming [6] Fowler.dmoz. html). [9] 12:10 p. Hartmann. Allen B. .edu. Amsterdam: Addison-Wesley Longman (1999) • Brian W. [12] Multiple (wiki).Tech and gadgets.2307/ . "Lovelace & babbage and the creation of the 1843 'notes'".K. Kernighan. "The Museum of Music: A History of Mechanical Instruments". html).m. msnbc. Retrieved 2010-04-25.

albeit not designed for human consumption. Punch cards allowed 80 columns. the restrictions of the hardware defined the language. For example. Alonzo Church was able to express the lambda calculus in a formulaic way. she appended a set of notes which specified in complete detail a method for calculating Bernoulli numbers with the Engine. The use of a magnetic drum for memory meant that computer programs also had to be interleaved with the rotations of the drum. see the timeline of programming languages. FORTRAN included some keywords which were the same as English words. numerical calculations were based on decimal numbers. unlike the lambda calculus. the first modern programming language is hard to identify. One can even regard the punch holes on a player piano scroll as a limited domain-specific language. The first computer codes were specialized for their applications. Like many "firsts" in history. For a detailed timeline of events. used holes in punched cards to represent sewing loom arm movements in order to generate decorative patterns automatically. Turing machines set the basis for storage of programs as data in the von Neumann architecture of computers by representing a machine through a finite number. To some people. In the first decades of the 20th century. From the start.History of programming languages 8 History of programming languages This article discusses the major developments in the history of programming languages. Hollerith then encoded the 1890 census data on punch cards. recognized by some historians as the world's first computer program. Eventually it was realized that logic could be represented with numbers. Ada Lovelace translated the memoir of Italian mathematician Luigi Menabrea about Charles Babbage's newest proposed machine. During a nine-month period in 1842-1843. Thus the programs were more hardware-dependent. the languages were codes. . not only with words. Turing's code does not serve well as a basis for higher-level languages—its principal use is in rigorous analyses of algorithmic complexity. invented in 1801. With the article. Jacquard looms and Charles Babbage's Difference Engine both had simple. However. The Jacquard loom. what was the first modern programming language depends on how much power and human-readability is required before the status of "programming language" is granted. The Turing machine was an abstraction of the operation of a tape-marking machine. such as "IF".[1] Herman Hollerith realized that he could encode information on punch cards when he observed that train conductors encode the appearance of the ticket holders on the train tickets using the position of punched holes on the tickets. the Analytical Engine. Before 1940 The first programmings languages predate the modern computer. "GOTO" (go to) and "CONTINUE". in use at the telephone companies. At first. but some of the columns had to be used for a sorting number on each card. for example. extremely limited languages for describing the actions that these machines should perform.

It was eventually realized that programming in assembly language required a great deal of intellectual effort and was error-prone.[3] Each codeset. Algol 68's many little-used language features (e.. invented by John McCarthy et al. but unimplemented for a half-century • 1943 .1954 — a series of machine-specific mnemonic instruction sets. • lexical scoping: a block could have its own private variables. the first recognizably modern. designed. Some important languages that were developed in this period include: • 1943 . in terms of Van Wijngaarden grammar. a formalism designed specifically for this purpose. but the full language syntax and semantics were defined formally. the ALGOL 60 Report (the "ALGOrithmic Language"). concurrent and parallel blocks) and its complex system of syntactic shortcuts and automatic type coercions made it unpopular with implementers and gained it a reputation of being difficult. The 1950s and 1960s In the 1950s.g. Niklaus Wirth actually walked out of the design committee to create the simpler Pascal language. was tailored to a specific manufacturer... i. was used to describe the language's syntax. was in how the language was described: • a mathematically exact notation. invented by John Backus et al. Another milestone in the late 1950s was the publication. • COBOL. some of which soon became more popular. Algol 60 was particularly influential in the design of later languages. etc. Some important languages that were developed in this period include: • 1951 . like ENIAC's. In 1948.[2] • 1949 . invisible to code outside that block. However. by a committee of American and European computer scientists. Another innovation. procedures and functions.History of programming languages 9 The 1940s In the 1940s. information hiding. a recursive typing system with higher-order functions. machine-specific codeset appearing in 1948. Algol's key ideas were continued. heavily influenced by Grace Hopper. the "LISt Processor". producing ALGOL 68: • syntax and semantics became even more orthogonal.ENIAC coding system. The Burroughs large systems were designed to be programmed in an extended subset of Algol. electrically powered computers were created. or instruction set. Backus-Naur Form (BNF).e.Regional Assembly Language . the "FORmula TRANslator". • not only the context-free part. The limited speed and memory capacity forced programmers to write hand tuned assembly language programs. beginning in 1949 with C-10 for BINAC (which later evolved into UNIVAC).(1959) the COmmon Business Oriented Language. of "a new language for algorithms". it was not implemented in his lifetime and his original contributions were isolated from other developments.Plankalkül (Konrad Zuse). Konrad Zuse published a paper about his programming language Plankalkül. created by the Short Range Committee. the first three modern programming languages whose descendants are still in widespread use today were designed: • FORTRAN (1955). Nearly all subsequent programming languages have used a variant of BNF to describe the context-free portion of their syntax. This report consolidated many ideas circulating at the time and featured two key language innovations: • nested block structure: code sequences and associated declarations could be grouped into blocks without having to be turned into separate. with anonymous routines. • LISP (1958). explicitly named procedures. related to this.

As a result.FACT (forerunner to COBOL) 1959 . • ML built a polymorphic type system (invented by Robin Milner in 1973) on top of Lisp. Roussel.Logo 1969 .Autocode 1954 . The 1960s and 1970s also saw considerable debate over the merits of "structured programming".History of programming languages • • • • • • • • • • • • • • • • • 1952 . even in languages that provide GOTO.FORTRAN (First compiler) 1957 .CPL (forerunner to C) 1964 . designed in 1972 by Colmerauer.RPG 1962 .ML . invented in the late 1960s by Nygaard and Dahl as a superset of Algol 60.PL/I 1967 .BASIC 1964 . This debate was closely related to language design: some languages did not include GOTO.IPL (forerunner to LISP) 1955 . Most of the major language paradigms now in use were invented in this period: • Simula. an early systems programming language.ALGOL 58 1959 . Each of these languages spawned an entire family of descendants.COBOL 1959 .LISP 1958 . which essentially meant programming without the use of Goto. Some important languages that were developed in this period include: • • • • • 1968 .C • 1972 .Simula 1962 . and Kowalski. nearly all programmers now agree that.FLOW-MATIC (forerunner to COBOL) 1957 .SNOBOL 1963 . it is bad programming style to use it except in rare circumstances. • Smalltalk (mid 1970s) provided a complete ground-up design of an object-oriented language. was the first language designed to support object-oriented programming. and most modern languages count at least one of them in their ancestry. was the first logic programming language. Although the debate raged hotly at the time.Smalltalk • 1972 .Pascal 1970 .BCPL (forerunner to C) 10 1968-1979: establishing fundamental paradigms The period from the late 1960s to the late 1970s brought a major flowering of programming languages.APL 1962 .COMTRAN (forerunner to COBOL) 1958 .Prolog • 1973 . which forced structured programming on the programmer. was developed by Dennis Ritchie and Ken Thompson at Bell Labs between 1969 and 1973. pioneering statically typed functional programming languages. • Prolog.B (forerunner to C) 1970 . • C. later generations of language designers have found the structured programming debate tedious and even bewildering.Forth 1972 .

Ada. Aided by processor speed improvements that enabled increasingly aggressive compilation techniques. but much recombination and maturation of old ideas. and were descendants of older languages. later extended with programming constructs) 11 The 1980s: consolidation.Mathematica 1989 . garbage collection.Tcl 1988 .Common Lisp 1984 . Research in Miranda. vast sums were spent investigating so-called fifth-generation programming languages that incorporated logic programming constructs. the RISC movement sparked greater interest in compilation technology for high-level languages. and ML all developed notable module systems in the 1980s.FL (Backus).Objective-C 1986 .History of programming languages • 1975 . Some important languages that were developed in this period include: • • • • • • • • • • • 1980 . Although major new paradigms for imperative programming languages did not appear. For example. began to take hold in this decade. the languages of the Argus and Emerald systems adapted object-oriented programming to distributed systems. Module systems were often wedded to generic programming constructs---generics being. Many "rapid application development" (RAD) languages emerged.Erlang 1987 . Modula.Ada 1984 . the Internet created an opportunity for new languages to be adopted. The United States government standardized Ada.C++ (as C with classes. All such languages were . name changed in July 1983) 1983 . in essence. or large-scale organizational units of code. modules.Scheme • 1978 . The 1990s saw no fundamental novelty in imperative languages. the Java programming language rose to popularity because of its early integration with the Netscape Navigator web browser. which usually came with an IDE. Rather than inventing new paradigms. The 1990s: the Internet age The rapid growth of the Internet in the mid-1990s was the next major historic event in programming languages. The RISC movement in computer architecture postulated that hardware should be designed for compilers rather than for human assembly programmers.SQL (initially only a query language. In particular. a functional language with lazy evaluation.Eiffel 1986 .MATLAB 1985 . C++ combined object-oriented and systems programming. all of these movements elaborated upon the ideas invented in the previous decade. By opening up a radically new platform for computer systems. performance The 1980s were years of relative consolidation in imperative languages. The 1980s also brought advances in programming language implementation. This era began the spread of functional languages. many researchers expanded on the ideas of prior languages and adapted them to new contexts. The functional languages community moved to standardize ML and Lisp. A big driving philosophy was programmer productivity. and various scripting languages achieved widespread use in developing customized application for web servers. parametrized modules (see also polymorphism in object-oriented programming). Language technology continued along these lines well into the 1990s. One important new trend in language design was an increased focus on programming for large-scale systems through the use of modules. a systems programming language intended for use by defense contractors. In Japan and elsewhere.Perl 1988 .

• AOP or Aspect Oriented Programming allowing developers to code by places in code extended behaviors.levels) • Constructs to support concurrent and distributed programming. Visual Basic.Java 1995 .PHP 1996 .Rebol 1999 . for example.WebDNA 1997 .CLOS (part of ANSI Common Lisp) 1995 . • Component-oriented software development. reflection or access to the abstract syntax tree • Increased emphasis on distribution and mobility. • Mechanisms for adding security and reliability verification to the language: extended static checking. static thread safety.History of programming languages object-oriented.and macro. Some of the current trends include: • Increasing support for functional programming in mainstream languages used commercially. delegates. in both industry and research.C# .Delphi (Object Pascal) 1995 . information flow control. • Support for Unicode so that source code (program text) is not restricted to those characters contained in the ASCII character set. • Metaprogramming.Haskell 1991 . but often because of choices that make small programs simpler but large programs more difficult to write and maintain. allowing. • Massively parallel languages for coding 2000 processor GPU graphics processing units and supercomputer arrays including OpenCL Some important languages developed during this period include: • 2000 .Visual Basic 1991 .Lua 1994 . • Alternative mechanisms for modularity: mixins. Ruby. aspects. Java in particular received much attention.HTML (Mark-up Language) 1993 .ActionScript • 2001 . and Java. including the GNU compiler collection and recent languages such as Python. including pure functional programming for making code easier to reason about and easier to parallelise (at both micro. scripting languages came to be the most prominent ones used in connection with the Web.D 12 Current trends Programming language evolution continues. • XML for graphical interface (XUL.Ruby 1993 . These included Object Pascal. Some important languages that were developed in this period include: • • • • • • • • • • • • • • 1990 . • Integration with databases. These did not directly descend from other languages and featured new syntaxes and more liberal incorporation of features. Many consider these scripting languages to be more productive than even the RAD languages. More radical and innovative than the RAD languages were the new scripting languages. Nevertheless.JavaScript 1995 . and Squeak. XAML). use of non-Latin-based scripts or extended punctuation. • Open source as a developmental philosophy for languages.Python 1991 . including XML and relational databases.

developer of APL. inventor of first assembler (IBM 701) Guido van Rossum. originator of the operating system concept.Go 2011 .Clojure 2009 . Nathaniel Rochester. inventor of vi. and originator of SunOS. Yukihiro Matsumoto. inventor of /B/. developer of Visual Basic.Factor 2007 . creator of Mathematica . Modula and Oberon. inventor of ML.History of programming languages • • • • • • • • 2001 . Iverson. John von Neumann.Scala 2003 .Visual Basic . the precursor of Java. developer of Turbo Pascal. Anders Hejlsberg. Unix Operating System. and Unix Operating System co-author. Stephen Wolfram. Brian Kernighan. inventor of Fortran.NET 2002 . inventor of Eiffel. Grace Hopper. creator of Python Bjarne Stroustrup. early author of BSD Unix. Dijkstra. co-author of the first book on the C programming language with Dennis Ritchie. and sharing credit for Hindley–Milner polymorphic type inference. developer of Oak. creator of Erlang John Backus. pioneering work on object-oriented programming. Delphi and C#. which became Solaris. influencing COBOL. Robin Milner. creator of Perl and Perl 6 Niklaus Wirth. inventor of Pascal. Bertrand Meyer. Kenneth E. Alan Kay. developed the framework for structured programming. and co-developer of J along with Roger Hui. James Gosling. Martin Odersky. Ken Thompson. Go Programming Language. inventor of LISP. coauthor of the AWK and AMPL programming languages. Alan Cooper. and previously a contributor to the design of Java Dennis Ritchie. inventor of C. Larry Wall.Groovy 2003 . and originator of Smalltalk. developer of C++.Dart 13 Prominent people in the history of programming languages • • • • • • • • • • • • • • • • • • • • • • • • • Joe Armstrong. Bill Joy. creator of Ruby John McCarthy. Inferno Programming Language. Plan 9 Operating System. developer of Flow-Matic. Edsger W. creator of Scala.F# 2003 .

1109/MAHC.levenez. Fuegi and J. prx?exp=5442) Further reading • Rosen. External links • History and evolution of programming languages (http://www. edu.html) Comparison of programming languages Comparison of programming languages is a common topic of discussion among software engineers.1253887 [2] R. mil/ mike/ comphist/ 48eniac-coding/ ) [3] C-10 (http:/ / hopl. Statements in guillemets (« … ») are optional. Prentice-Hall. au/ Bergin and Richard G. 1996. "Lovelace & Babbage and the creation of the 1843 'notes'.): History of Programming Languages. doi:10. McGraw-Hill. Addison Wesley.): History of Programming Languages. Number 7.. Basic instructions of several programming languages are compared here. Gibson (eds. Jean E. murdoch. Jean E. Type identifiers Integers 8 bit (byte) Signed ALGOL 68 (variable-width) Unsigned 16 bit (short integer) Signed Unsigned Signed 32 bit Unsigned 64 bit (long integer) Signed Unsigned Word size Signed Unsigned N/A bytes & bits Arbitrarily precise (bignum) short short int [c] short int N/A [c] int N/A [c] long int N/A [c] int N/A [c] long long int [a][g] .History of programming languages 14 References [1] J. 1969 • • Thomas J. Wexelblat (ed.2003. Programming Systems and Languages. The non-bold is interpreted by the reader. "Programming Languages: History and Future". F.scriptol.". Programming Languages: History and Fundamentals. of Volume 15. Francis (October–December 2003). Clippinger (1948) A Logical Coding System Applied to the ENIAC (http:/ / ftp. Conventions of this article The bold is the literal code. Academic Press 1981. • Graph of programming language history (http://www. July 1972 • Richard L. Saul. 1967 • Sammet. Tab ↹ indicates a necessary indent. Communications of the ACM.php). Annals of the History of Computing 25 (4). (editor). arl.

math.Int BigInt bignum Common Lisp [1] Scheme ISLISP [2] shortint N/A SByte byte Byte smallint Integer Short word N/A UShort longint Long Integer longword N/A UInteger Long int64 qword N/A ULong N/A integer cardinal bignum Pascal (FPC) Visual Basic Visual Basic .BigInteger (.word nativeint int unativeint word bigint LargeInt.0) uint32 Word32.Comparison of programming languages 15 int32_t uint32_t int64_t uint64_t int unsigned int N/A C (C99 fixed-width) C++ (C++11 fixed-width) C (C99 variable-width) C++ (C++11 variable-width) Objective-C int8_t uint8_t int16_t uint16_t signed char unsigned char short[c] unsigned short[c] long[c] unsigned long[c] long long[c] unsigned long long[c] signed char unsigned char short[c] unsigned short[c] long[c] unsigned long[c] long long[c] unsigned long long [c] int or NSInteger unsigned int or NSUInteger C# sbyte byte short ushort int uint long ulong N/A System.x S-Lang Fortran N/A N/A or open uint64 Word64.0) N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A N/A int N/A N/A N/A long int N/A INTEGER(KIND = n) [f] N/A INTEGER(KIND = n) [f] N/A INTEGER(KIND = n) [f] N/A INTEGER(KIND = n) [f] N/A PHP N/A N/A int N/A N/A N/A [e] Perl 5 N/A int8 [d] N/A int16 [d] N/A int32 [d] N/A int64 [d] N/A Int Fixnum [d] Math::BigInt Perl 6 Ruby Smalltalk uint8 N/A N/A uint16 N/A N/A uint32 N/A N/A uint64 N/A N/A N/A N/A N/A Bignum SmallInteger [i] LargeInteger [i] Windows N/A PowerShell OCaml N/A N/A int32 N/A int64 N/A int or nativeint F# Standard ML N/A sbyte byte Word8.word N/A IntInf. big_int N/A N/A N/A N/A N/A .Numerics.NET Python 2.BigInteger Java byte N/A uint8 or byte ubyte int16 short char[b] uint16 ushort int32 int N/A uint32 uint int64 long uint64 ulong N/A int N/A uint N/A Go D int8 byte int16 uint16 int32 or int Int32.word Int64.BigInteger (.x Python 3..NET 4.NET 4.

e. would required a signed variable of four decimal digits precision. "PIC S9999". but can be more. See C syntax#Integral types for more information. C++11) "long long". g  ALGOL 68G's run time option --precision "number" can set precision for long long int's to the required "number" significant digits. etc. "long". The GMP library uses an internal "resource" type. & long long real etc. e  PHP has two arbitrary-precision libraries.h header. The BCMath library just uses strings as datatype. f  The value of "n" is provided by the SELECTED_INT_KIND[3] intrinsic function. C99 and C++11 also define the "[u]intN_t" exact-width types in the stdint. on a 32-bit machine it is often 32 bits wide. Floating point Single precision ALGOL 68 C Objective-C C++ (STL) C# Java Go D Common Lisp float32 float float64 double real float N/A real[a] float[b] Double precision long real[a] double N/A[b] Processor dependent short real etc. strings. for example.Comparison of programming languages 16 «import Int» Int32 «import Word» Word32 «import Int» Int64 «import Word» Word64 Int «import Word» Word Integer Haskell (GHC) «import Int» Int8 «import Word» Word8 «import Int» Int16 «import Word» Word16 Eiffel INTEGER_8 NATURAL_8 INTEGER_16 NATURAL_16 INTEGER_32 NATURAL_32 INTEGER_64 NATURAL_64 INTEGER NATURAL N/A COBOL[h] BINARY-CHAR BINARY-CHAR BINARY-SHORT BINARY-SHORT BINARY-LONG BINARY-LONG BINARY-DOUBLE BINARY-DOUBLE N/A SIGNED UNSIGNED SIGNED UNSIGNED SIGNED UNSIGNED SIGNED UNSIGNED a  The standard constants int shorts and int lengths can be used to determine how many shorts and longs can be usefully prefixed to short int and long int. Arithmetic operations support polymorphic arguments and return the result in the most appropriate compact representation. d  Perl 5 does not have distinct types. The standard constants long long int width and long long max int can be used to determine actual precision. Typically. two representations are present. max int and long max int etc. h  COBOL allows the specification of a required precision and will automatically select an available type capable of representing the specified precision. In C and C++ "short". C and C++ languages do not specify the exact width of the integer types "short". "int". Integers. The "int" type is required to be at least as wide as "short" and at most as wide as "long". The actually size of the short int. floating point numbers. are all considered "scalars". and (C99. 32. c  The ALGOL 68. and 64 bits wide.[d] . this would select a 16 bit signed type on most platforms. b  Commonly used for characters. on 64-bit machines it is often 64 bits wide). one for integers fitting the native word size minus any tag bit (SmallInteger) and one supporting arbitrary sized integers (LargeInteger). and is typically the width of the word size on the processor of the machine (i. If specified as a binary field. int and long int is available as constants short max int. and "long long" types are required to be at least 16. i  Smalltalk automatically chooses an appropriate representation for integral numbers. so they are implementation-dependent. respectively. "long".

Comparison of programming languages 17 Scheme ISLISP Pascal (Free Pascal) Visual Basic Visual Basic . d  ALGOL 68G's run time option --precision "number" can set precision for long long reals to the required "number" significant digits. e  COBOL also supports FLOAT-EXTENDED. With the constants short small real. and FLOAT-DECIMAL-16 and FLOAT-DECIMAL-34 specify IEEE decimal floating point variables. The actually size of the short real. The types FLOAT-BINARY-7. FLOAT-BINARY-16 and FLOAT-BINARY-34.NET Python JavaScript S-Lang Fortran PHP Perl Perl 6 Ruby Smalltalk Windows PowerShell OCaml F# Standard ML Haskell (GHC) Eiffel COBOL[e] Float REAL_32 N/A float32 N/A real Double REAL_64 float N/A Float num32 N/A num64 Float Double N/A Num REAL(KIND = n)[c] float N/A Number float [4] N/A single Single double Double N/A real FLOAT-SHORT FLOAT-LONG a  The standard constants real shorts and real lengths can be used to determine how many shorts and longs can be usefully prefixed to short real and long real. Complex numbers . real and long real is available as constants short max real. b  declarations of single precision often are not honored c  The value of "n" is provided by the SELECTED_REAL_KIND[5] intrinsic function. specify IEEE-754 binary floating point variables. max real and long max real etc. The standard constants long long real width and 'long long max real can be used to determine actual precision. small real and long small real available for each type's machine epsilon.

NET N/A N/A N/A N/A N/A N/A System. C++ (STL) C# N/A Java Go D Objective-C Common Lisp Scheme Pascal Visual Basic Visual Basic .Numerics.Numerics.Net 4. & long long compl etc.0) Math::Complex complex64 complex128 complex Complex Perl Perl 6 Python JavaScript S-Lang Fortran Ruby Smalltalk Windows PowerShell OCaml F# Complex Complex Complex N/A N/A N/A N/A N/A N/A N/A N/A N/A COMPLEX(KIND = n)[a] N/A Complex Complex Complex.Comparison of programming languages 18 Integer ALGOL 68 C (C99) [6] N/A N/A N/A N/A N/A N/A N/A N/A Single precision compl float complex std::complex<float> N/A N/A complex64 cfloat N/A Double precision long compl etc.Complex Float Complex.Complex Double N/A N/A a  The value of "n" is provided by the SELECTED_REAL_KIND[5] intrinsic function.Net 4.Complex (. double complex std::complex<double> System. Other variable types .0) Standard ML Haskell (GHC) Eiffel N/A N/A N/A N/A N/A Complex.0) N/A complex128 cdouble N/A Half and Quadruple precision etc.Complex (. short compl etc.Complex (.t System.Net 4.Numerics.

...User defined [7] N/A enum «name» {item1.Comparison of programming languages 19 Text Character ALGOL 68 C (C99) C++ (STL) Objective-C C# Java Go rune char char wchar_t unichar char String[a] string & bytes N/A «std::»string NSString * string String string Boolean Enumeration Object/Universal bool & bits bool[b] N/A . id enum name {item1. . End Enum Python JavaScript S-Lang Fortran CHARACTER(LEN = *) N/A[d] N/A[d] Char Str Bool enum name <item1 item2 . }. item2.. allocatable string LOGICAL(KIND = n)[f] bool CLASS(*) N/A[d] N/A[d] str String bool Boolean object Object PHP Perl Perl 6 object Ruby N/A[d] String Object[c] Object . } const ( • • • ) item1 = iota item2 .>> Mu CHARACTER(LEN = :).Variant Common Lisp Scheme ISLISP Pascal (ISO) Object Pascal (Delphi) Visual Basic N/A char string N/A boolean (item1.. item2......NET Char item 2 Object .. void * .variant.. } std...> or enum name <<:item1(value) :item2(value) ... item2. item2. .) variant N/A String Boolean Enum name • • • • • item 1 Variant Visual Basic . object Object interface{} BOOL bool boolean bool D char string bool enum name {item1..

. e  Enumerations in this language are algebraic types with only nullary constructors f  The value of "n" is provided by the SELECTED_INT_KIND[3] intrinsic function. strings of arbitrary length and automatically managed.Vector NSMutableArray Java D Go type[][b] type[size] [size]type type[][]..[b] type[size1][size2] [size1][size2]..type Objective-C NSArray JavaScript Common Lisp Scheme N/A N/A Array[d] . C (C99) C++ (STL) [a] [a] flex[first1:last1. Everything in TrueClass evaluates to true and everything in FalseClass evaluates to false.first2:last2]«modename» flex[first:last]«modename» or simply: or simply: or flex[size]«modename» [size]«modename» [first1:last1][first2:last2]«modename» etc.ArrayList or System. Derived types Array Further information: Comparison of programming languages (array) fixed size array one-dimensional array multi-dimensional array one-dimensional array dynamic size array multi-dimensional array ALGOL 68 [first:last]«modename» [first1:last1.Collections.. d This language does not have a separate character type.. b  This language represents a boolean as an integer where false is represented as a value of zero and true by a non-zero value.first2:last2]«modename» or flex[first1:last1]flex[first2:last2]«modename» etc.List<type> ArrayList or ArrayList<type> type[] vector. c  All values evaluate to either true or false.. N/A[e] Char CHARACTER String STRING Bool BOOLEAN N/A[e] N/A ANY N/A N/A N/A Standard ML Haskell (GHC) Eiffel a  specifically...Generic.] «std::»vector<type> C# System. size>(C++11) type[] type[.Collections.Comparison of programming languages 20 Windows PowerShell OCaml F# char string bool N/A[e] type name = item1 = value | obj item2 = value | . Characters are represented as strings of length 1.. «std::»array<type..

last1] of array[first2. ALLOCATABLE :: name(:) array type.Collections... Other types . See C syntax#Arrays.Collections. array type [.:.. size2.last2..ArrayList or System.List(Of type) list array[first.. however "type[] x" is the preferred form of array declaration... ..... b  The C-like "type x[]" works in Java.] type :: name(size) type :: name(size1. values of array types in C are automatically converted to a pointer of its first argument.. first2...Comparison of programming languages 21 ISLISP Pascal Object Pascal (Delphi) Visual Basic Visual Basic .. c  Subranges are used to define the bounds of the array.Collections.Collections.ArrayList or System.... ALLOCATABLE :: name(:.. of type [c] or array[first1.last] of type[c] array[first1.last2] ..) type...) Array[type] or Array of type Array OrderedCollection Windows type[] PowerShell OCaml F# type array type [] or type array type array .List<type> Standard ML Haskell (GHC) type vector or type array a In most expressions (except the sizeof and & operators)..] System..last1..NET System.Generic... Also C's arrays can not be described in this format. d  JavaScript's array are a special kind of object.] of type [c] N/A array of type N/A array of array . of type Python S-Lang Fortran PHP Perl Perl 6 Ruby Smalltalk Array type[.Generic.

...NET Structure name • • • • • Dim name As type .)...} struct «name» {type name....) union {type name.. ..[b] struct name {type name...... C (C99) N/A N/A std.. «(»val1.. «)» N/A END TYPE ..). val2... N/A N/A end end Visual Basic Visual Basic .. . N/A Objective-C C++ C# Java JavaScript D struct name {type name.}..} N/A[a] N/A «std::»tuple<type1..Algebraic!(type.. struct «name» {type name..}. .... ....Comparison of programming languages 22 Simple composite types Records ALGOL 68 struct (modename «fieldname».... . val3.}....typen> Tuple expression Algebraic data types Unions Required types and operators can be user defined union (modename. .} TYPE name • • • • type :: name .} Go struct { • • } «name» type . N/A (cons val1 val2)[c] record • • • • • • • • case type of value :( types )... union {type name. End Structure Python S-Lang Fortran N/A[a] struct {name [=value].variant.. Common Lisp Scheme ISLISP Pascal record • • • • • name : type .

. b  structs in C++ are actually classes.. data Name = Foo «types» | Bar «types» | ..} type name = {name : type. val3.. val3..Comparison of programming languages 23 PHP Perl Perl 6 Ruby N/A[a] N/A[d] N/A[a] OpenStruct.. . N/A (val1.} a  Only classes are supported. or auto name = value. or immutable type name = value.} «(»val1. to make classes act identically to POD objects in many more cases. "hashes" (associative arrays) that don't have a variable index would effectively be the same as records. constant modename name = value.. const type name = value. C (C99) Objective-C C++ C# type name «= initial_value». ) Haskell data Name = Constr {name :: type... type synonym mode synonym = modename. Java JavaScript Go Common Lisp (deftype synonym () 'type) Scheme ISLISP . or var name = value.. or readonly type name = value. D alias type synonym.. var name type «= initial_value» or name := initial_value (defparameter name initial_value) or (defvar name initial_value) or (setf (symbol-value 'symbol) initial_value) (define name initial_value) (defglobal name initial_value) or (defdynamic name initial_value) (defconstant name value) N/A const type name = value. val2. because Perl's type system allows different data types to be in an array.. const name «type» = initial_value (defconstant name value) type synonym type using synonym = type.. «)» type name = Foo «of type» | Bar «of type» | . datatype name = Foo «of type» | Bar «of type» | . type name «= initial_value». final type name = value. type name «= initial_value». const type name = value. enum{ name = value }. c  pair only d  Although Perl doesn't have records. C++11 extended this further. typedef type synonym... but have default public visibility and are also POD objects. type name «= initial_value».. e  Enumerations in this language are algebraic types with only nullary constructors Variable and constant declarations variable ALGOL 68 modename name «:= initial_value». var name «= initial_value»..... val2. N/A const name ={:name => value}) N/A Windows PowerShell OCaml F# Standard ML type name = {«mutable» name : type.

Control flow Conditional statements . all names can only be bound once. this does not declare name to be a mutable variable—in ML.[c] name = initial_value «[type]» $name = initial_value Ruby Windows PowerShell OCaml F# Standard ML Haskell Forth synonym = type[b] let name «: type ref» = ref value[d] let mutable name «: type» = value val name «: type ref» = ref value[d] let name «: type» = value type synonym = type val name «: type» = value «name::type. b Types are just regular objects. respectively. «my «type»» constant name = value. The data structure can then be read and written to using the ! and := operators. it declares name to point to a "reference" data structure.3+) [c] Pascal[a] Visual Basic Visual Basic . which is a simple mutable cell. rather. value). the "my" keyword scopes the variable into the block. d  Technically. use constant name => value.» name = value type Synonym = type VARIABLE name (in some systems use value VARIABLE name instead) value CONSTANT name a  Pascal has declaration blocks. PARAMETER :: name = value define("name".. N/A Perl Perl 6 «my» $name «= initial_value». so you can just assign them. Name = value ::synonym ::= type «my «type»» $name «= initial_value». const name = value (5.NET Python S-Lang name: type «= initial_value» Dim name As type Dim name As type«= initial_value» name = initial_value name = initial_value. c  In Perl.Comparison of programming languages 24 name = value Const name As type = value Imports synonym = type N/A synonym = type[b] typedef struct {. synonym = type Fortran type name PHP $name = initial_value..} typename type. See Comparison of programming languages (basic instructions)#Functions.

. «default { instructions }»} ... «else {instructions}» condition ? valueIfTrue : valueIfFalse • • } switch (variable) { • • • • • • • • case case1 : instructions ..» } . «jump statement . » . «| statements» ) switch (variable) { • • • • • • case case1 : instructions « break.. statements«.. «else { instructions }» switch (variable) { case1 { instructions «break. »» • • • • • • } Windows PowerShell if (condition) { instructions } elseif (condition) { instructions } . « default: instructions . «jump statement .. out statements» esac ( variable | statements. » .. « default: instructions» conditional expression ( condition | valueIfTrue | valueIfFalse ) ( condition | statements «| statements» ) C (C99) Objective-C C++ (STL) D Java JavaScript PHP C# if (condition) {instructions} «else {instructions}» ( condition | statements |: condition | statements ) if (condition) {instructions} else if (condition) {instructions} .........Comparison of programming languages 25 if ALGOL 68 & "brief form" if condition then statements «else statements» fi else if if condition then statements elif condition then statements fi select case case switch in statements.

. « default { instructions } » condition ? valueIfTrue : valueIfFalse Perl 6 if condition {instructions} «else {instructions}» or unless notcondition {instructions} if condition {instructions} elsif condition {instructions} . «else {instructions}» use feature "switch". «else {instructions} given variable { • • • • • • • • • • } when case1 { instructions } . «else • instructions» end end .... «else {instructions}» or unless (notcondition) {instructions} elsif (condition) {instructions} . «else {instructions}» or switch { • • • • case condition : instructions ....... given (variable) { • • • • • • • • • • } when ( case1 ){ instructions } . .. «else • instructions» . « default: instructions» switch variable { • • • • case case1 : instructions .Comparison of programming languages 26 if condition {instructions} else if condition {instructions} ..... « default { instructions } » condition ?? valueIfTrue !! valueIfFalse Ruby if condition • instructions if condition • instructions case variable when case1 • instructions condition ? valueIfTrue : valueIfFalse «else • instructions» elsif condition • instructions ...... « default: instructions» Go if condition {instructions} «else {instructions}» • • } • • } Perl if (condition) {instructions} «else {instructions}» or unless (notcondition) {instructions} «else {instructions}» if (condition) {instructions} elsif (condition) {instructions} ...

Comparison of programming languages

condition ifTrue: trueBlockifFalse: falseBlock


condition ifTrue: • trueBlock

«ifFalse: • falseBlock»

end Common Lisp (when condition • • instructions ) (cond (condition1 instructions) • • • • • • • • • • ( condition2 instructions ) ... « (t instructions ) » ) (case expression • • • • • • • • • • • • • ( case1 instructions ) ( case2 instructions ) ... « (otherwise instructions ) » ) (if condition valueIfTrue valueIfFalse)

or (unless condition • • instructions )

or (if condition • • • • • • • • • Scheme (progn instructions ) « (progn instructions ) » )

(when conditioninstructions) or (if condition (begin instructions) «(begin instructions)»)

(cond (condition1 instructions) (condition2 instructions) ... «(else instructions)»)

(case (variable) ((case1) instructions) ((case2) instructions) ... «(else instructions)»)

Comparison of programming languages

(cond (condition1 instructions) • • • • • • • • • • ( condition2 instructions ) ... « (t instructions ) » ) (case expression • • • • • • • • • • • • • ( case1 instructions ) ( case2 instructions ) ... « (t instructions ) » ) (if condition valueIfTrue valueIfFalse)


(if condition • • • • • • • • • (progn instructions ) « (progn instructions ) » )


if condition then begin • instructions

if condition then begin • instructions

case variable of • • • • • • • case1 : instructions ... « else: instructions»

end «else begin • instructions

end else if condition then begin • instructions


end ... «else begin • instructions end»[c]


Visual Basic

If condition Then • instructions

If condition Then • instructions

Select Case variable Case case1 • instructions

«Else • Visual Basic .NET instructions»

ElseIf condition Then • instructions

IIf(condition, valueIfTrue, valueIfFalse)

End If

... «Else • instructions»

... «Case Else • instructions»

End Select

If(condition, valueIfTrue, valueIfFalse)

End If Python [a] if condition : Tab ↹ instructions «else: Tab ↹ instructions» if condition : Tab ↹ instructions elif condition : Tab ↹ instructions ... «else: Tab ↹ instructions» if (condition) { instructions } else if (condition) { instructions } ... «else { instructions }» IF (condition) THEN • instructions valueIfTrue if condition else valueIfFalse (Python 2.5+) N/A


if (condition) { instructions } «else { instructions }»

switch (variable) { case case1: instructions } { case case2: instructions } ... SELECT CASE(variable) • • • • • CASE ( case1 ) • instructions ... CASE DEFAULT • instructions


IF (condition) THEN • instructions

ELSE • instructions

ELSEIF (condition) THEN • instructions


... ELSE • instructions



Comparison of programming languages

condition IF instructions ELSE condition IF instructions THEN THEN value CASE case OF instructions ENDOF case OF instructions ENDOF      default instructions ENDCASE match value with • • • • • • • pattern1 -> expression | pattern2 -> expression ... « | _ -> expression»[b] condition IF valueIfTrue ELSE valueIfFalse THEN


condition IF instructions « ELSE instructions» THEN


if condition then begin instructions end «else begin instructions end»

if condition then begin instructions end else if condition then begin instructions end ... «else begin instructions end» if condition then Tab ↹ instructions elif condition then Tab ↹ instructions ... «else Tab ↹ instructions» if condition then «(»instructions «)» else if condition then «(» instructions «)» ... else «(» instructions «)»

if condition then valueIfTrue else valueIfFalse


if condition then Tab ↹ instructions «else Tab ↹ instructions»

• •

Standard ML

if condition then «(»instructions «)» else «(» instructions «)»

case value of • • • • • • • pattern1 => expression | pattern2 => expression ... « | _ => expression»[b]

• • Haskell (GHC) if condition then expression else expression or when condition (do instructions) or unless notcondition (do instructions) result | condition = expression • • • • • • | condition = expression | otherwise = expression

case value of { • • • • • • • • • • • }[b] pattern1 -> expression ; pattern2 -> expression ; ... « _ -> expression»


else if

select case

conditional expression

a  A single instruction can be written on the same line following the colon. Multiple instructions are grouped together in a block which starts on a newline (The indentation in required). The conditional expression syntax does not follow this rule. b  This is pattern matching and is similar to select case but not the same. It is usually used to deconstruct algebraic data types. c  In languages of the Pascal family, the semicolon is not part of the statement. It is a separator between statements, not a terminator.

end..last -> $i { instructions } for set« -> $item» { instructions } or loop ($i = first. i <= last.» statements od «for index» «from first» «by increment» «to last» «while condition» do statements od «while condition»     do statements od «while statements.last • instructions for item in set • instructions Ruby end or until notcondition • instructions end while condition or begin • instructions end or first. $i++) { instructions } for i in first. N-1) { instructions } or for ($i = first. i++) { instructions } for (var index in set) { instructions } or for each (var item in set) { instructions } (JS 1.. $i -le last. condition»     do statements od do { instructions } while (condition) «for index» «from first» «by increment» «to last» do statements od for («type» i = first. $i <= last. $i++) { instructions } Windows PowerShell D for ($i = first. i++ { instructions } for«each» «$i» (0 .each { |item| instructions } end Smalltalk conditionBlock whileTrue: • loopBlock end until notcondition loopBlock doWhile: • conditionBlock first to: last do: • loopBlock collection do: • loopBlock .upto(last-1) { |i| instructions } end or set. i <= last. function) (C++11) for (type item : set) { instructions } foreach (type item in set) { instructions } for (type item : set) { instructions } C# Java JavaScript for (var i = first. $i <= last. item := range set { instructions } for«each» «$item» (set) { instructions } Go Perl Perl 6 for first. set) { instructions } for key. last-1) as $i) { instructions } or for ($i = first. ++i) { instructions } C (C99) Objective-C C++ (STL) while (condition) { instructions } N/A for (type item in set) { instructions } «std::»for_each(start.. last) { instructions } for condition { instructions } while (condition) { instructions } or until (notcondition) { instructions } while condition { instructions } or until notcondition { instructions } while condition • instructions do { instructions } while (condition) or do { instructions } until (notcondition) repeat { instructions } while condition or repeat { instructions } until notcondition begin • instructions for i := first. $i++) { foreach (item in set) { instructions instructions } using item } foreach (i... i <= last. $i++) { instructions } foreach («type» item.6+) foreach (set as item) { instructions } or foreach (set as key => item) { instructions } PHP foreach (range(first..Comparison of programming languages 30 Loop statements while ALGOL 68 do while for i = first to last foreach for key «to upb list» do «typename val=list[key]. $i <= last. first .

Comparison of programming languages

(loop • • • • • do instructions while condition ) (loop • • • • • • • • for i from first to last «by 1» do instructions ) (loop • • • • • • • for item in set do instructions )

Common Lisp

(loop • • • • • while condition do instructions )

or (do () (notcondition) • • instructions )

or (dotimes (i N) • • instructions )

or (dolist (item set) • • instructions )

or (do ((i first (1+ i))) ((>= i last)) • • Scheme (do () (notcondition) instructions) or (let loop () (if condition (begin instructions (loop)))) (while condition instructions) while condition do begin • instructions (let loop () (instructions (if condition (loop)))) instructions )

or (mapc function list) or (map 'type function sequence)

(do ((i first (+ i 1))) ((>= i last)) instructions) or (let loop ((i first)) (if (< i last) (begin instructions (loop (+ i 1)))))

(for-each (lambda (item) instructions) list)


(tagbody loop instructions (if condition (go loop)) repeat • instructions

(for ((i first (+ i 1))) ((>= i last)) (mapc (lambda (item) instructions) instructions) list) for i := first «step 1» to last do begin • instructions end;[a]



until notcondition;


Visual Basic

Do While condition • instructions

Do • instructions

For i = first To last «Step 1» • instructions

For Each item In set • instructions

Visual Basic .NET

Loop or Do Until notcondition • instructions

Loop While condition or Do • instructions

Next i For i «As type» = first To last «Step 1» • instructions

Next item For Each item As type In set • instructions

Loop Python while condition : Tab ↹ instructions «else: Tab ↹ instructions» while (condition) { instructions } «then optional-block» DO WHILE (condition) • instructions

Loop Until notcondition

Next item

Next i


for i in range(first, last): Tab ↹ instructions «else: Tab ↹ instructions» for (i = first; i < last; i++) { instructions } «then optional-block» DO I = first,last • instructions

for item in set: Tab ↹ instructions «else: Tab ↹ instructions» foreach item(set) «using (what)» { instructions } «then optional-block»


do { instructions } while (condition) «then optional-block» DO • • • • instructions IF ( condition ) EXIT






Comparison of programming languages

BEGIN instructions condition UNTIL limit start DO instructions LOOP


BEGIN « instructions » condition WHILE instructions REPEAT while condition do instructions done




for i = first to last-1 do instructions done

Array.iter (fun item -> instructions) array List.iter (fun item -> instructions) list for item in set do Tab ↹ instructions or Seq.iter (fun item -> instructions) set (fn item => instructions) array app (fn item => instructions) list Control.Monad.forM_ list (\item -> do instructions)


while condition do Tab ↹ instructions N/A

for i = first to last-1 do Tab ↹ instructions

Standard ML

while condition do ( instructions )


Haskell (GHC) Eiffel from • setup


Control.Monad.forM_ [0..N-1] (\i -> do instructions)

until • condition

loop • instructions


a  "step n" is used to change the loop interval. If "step" is omitted, then the loop interval is 1.

Further information: Exception handling syntax
throw C (C99) longjmp(state, exception); throw exception; handler switch (setjmp(state)) { case 0: instructions break; case exception: instructions ... } try { instructions } catch «(exception)» { instructions } ... try { instructions } catch «(exception)» { instructions } ... «finally { instructions }» try { instructions } catch (exception) { instructions } ... «finally { instructions }» try { instructions } catch (exception) { instructions } «finally { instructions }» try { instructions } catch (exception) { instructions } ... «finally { instructions }» try { instructions } catch (exception) { instructions } ... try { instructions } catch «exception» { instructions } ... «finally { instructions }» trap «[exception]» { instructions } ... instructions or try { instructions } catch «[exception]» { instructions } ... «finally { instructions }» Debug.Assert(condition); assertion assert(condition);

C++ (STL) C#


assert condition;





PHP S-Lang

assert(condition); ?

Windows PowerShell


Comparison of programming languages

NSAssert(condition, description); ? ?


@throw exception;

@try { instructions } @catch (exception) { instructions } ... «@finally { instructions }» eval { instructions }; if ($@) { instructions } try { instructions CATCH { when exception { instructions } ...}}

Perl Perl 6 Ruby

die exception;

raise exception

begin • instructions

rescue exception • instructions

... «else • instructions»

«ensure • instructions»

end Smalltalk exception raise instructionBlock on: exception do: handlerBlock assert: conditionBlock (assert condition) or (assert condition • • • • • • « ( place ) «error»» )

Common Lisp (error "exception") or (handler-case (error (make-condition • (progn • type • instructions • arguments • ) • )) • ( • • • • exception instructions ) ... )

or (handler-bind • • • • Scheme (R6RS) ISLISP (raise exception) ( condition (lambdainstructions«invoke-restartrestart args»))... )

or (check-type var type)

(guard (con (condition instructions) ...) instructions)


(error "error-string" objects) or (signal-condition condition continuable)

(with-handler • • handler form* )



raise Exception.Create() try Except on E: exception do begin instructions end; end;


..Assert(condition) Catch «exception» «When condition» • instructions ... «Finally • instructions» End Try Python raise exception try: assert condition Tab ↹ instructions except «exception»: Tab ↹ instructions .Catch: On Error GoTo 0: Select Case .Number • • Case ERRORNUMBER • instructions End Select: End With '*** Try class *** Private mstrDescription As String Private mlngNumber As Long Public Sub Catch() • • mstrDescription = Err.Raise ERRORNUMBER With New Try: On Error Resume Next • OneInstruction . try expression with pattern -> expression .Comparison of programming languages 34 Debug....NET Throw exception Try • instructions Debug.Number End Sub Public Property Get Number() As Long • Number = mlngNumber End Property Public Property Get Description() As String • Description = mstrDescription End Property [8] Visual Basic .Description mlngNumber = Err..Assert condition Visual Basic Err. «else: Tab ↹ instructions» «finally: Tab ↹ instructions» Fortran Forth OCaml F# code THROW raise exception xt CATCH ( code or 0 ) try expression with pattern -> expression . or try expression finally expression raise exception «arg» throw exception or throwError expression expression handle pattern => expression . catch tryExpression catchExpression or catchError tryExpression catchExpression assert condition expression N/A N/A assert condition Standard ML Haskell (GHC) ...

.Comparison of programming languages a  Common Lisp allows with-simple-restart. . ) Scheme ISLISP (return-from block) (tagbody tag • • • Pascal(ISO) Pascal(FPC) Visual Basic Visual Basic . continue «levels». label: yield return value. break «label» (return) or (return-from block) or (loop-finish) continue «label» (tagbody tag • • • . Exit block Continue block continue ITER.. 35 Other control flow statements exit block(break) continue label branch (goto) return value from generator ALGOL 68 value exit.. skip exit. break «label»... go to label. EXIT break. label. break. next «label». label: statements od label: . Unhandled conditions may cause the implementation to show a restarts menu to the user before unwinding the stack.. (go tag) • tag . . N/A yield value«..» break «levels».. continue «label».. continue.. yield(value) (Callback [9] .NET Python RPG IV S-Lang Fortran break LEAVE. N/A C (C99) Objective-C C++ (STL) D C# Java JavaScript PHP Perl Perl 6 Go Common Lisp break.. label:[a] . last «label». do statements. ) goto label. N/A N/A label: GoTo label ..... continue.. goto label. .. goto label. example ) goto label.. goto label (go tag) • tag . CYCLE label[b] GOTO label N/A N/A yield value N/A continue. restart-case and restart-bind to define restarts for use with invoke-restart.

.... . value-returning function proc foo = «(parameters)» rettype: ( instructions ..... See Comparison of programming languages (basic instructions)#Functions.. ."last parameter"» "instructions"). basic/void function proc foo = «(parameters)» void: ( instructions ).. Functions See reflection for calling and declaring functions by strings. required main function N/A «global declarations» int main(«int argc.. return value. char *argv[]») { • C++ (STL) C# } static void Main(«string[] args») { instructions } or static int Main(«string[] args») { instructions } public static void main(String[] args) { instructions } or public static void main(String. return value } instructions C (C99) Objective-C foo(«parameters») void foo(«parameters») { instructions type foo(«parameters») { } instructions . b  label must be a number between 1 and 99999. args) { instructions } int main(«char[][] args») { instructions} or int main(«string[] args») { instructions} or void main(«char[][] args») { instructions} or void main(«string[] args») { instructions} function foo(«parameters») { function foo(«parameters») { instructions } or instructions . return value. } Java D JavaScript N/A Go func main() { instructions } . calling a function ALGOL 68 foo«(parameters)»...Comparison of programming languages 36 next continue Ruby Windows PowerShell OCaml F# break break« label» N/A Standard ML Haskell (GHC) a  Pascal has declaration blocks. retvalue ). } var foo = function («parameters») {instructions } or var foo = new Function («"parameter". func foo(«parameters») { instructions func foo(«parameters») type { } instructions .

»[a] «label • label declarations» program name. «label • label declarations» «const • constant declarations» «const • constant declarations» «const • constant declarations» «type • type declarations» «type • type declarations» «type • type declarations» «var • variable declarations» «var • variable declarations» «var • variable declarations» «local function declarations» begin • instructions «local function declarations» begin • • • instructions ...NET Function Foo(«parameters») As type • • • instructions Return value Sub Main(«ByVal CmdArgs() As String») • instructions End Function End Sub or Function Main(«ByVal CmdArgs() As String») As Integer • instructions End Function . end. value ) Common Lisp (foo «parameters») (defun foo («parameters») • • instructions ) or (setf (symbol-function 'symbol) • • Scheme lambda ) (define (foo parameters) instructions) or (define foo (lambda (parameters) instructions)) (defun foo («parameters») • • instructions ) (define (foo parameters) instructions. Visual Basic Foo(«parameters») Sub Foo(«parameters») • instructions Function Foo(«parameters») As type • • • instructions Foo = value Sub Main() • instructions End Sub End Sub End Function Visual Basic . foo := value «function declarations» begin • instructions end... «forward... return_value) or (define foo (lambda (parameters) instructions.. «forward.Comparison of programming languages 37 (defun foo («parameters») • • • .»[a] «label • label declarations» function foo«(parameters)»: type. end. return_value)) (defun foo («parameters») • • • . value ) N/A ISLISP Pascal foo«(parameters)» procedure foo«(parameters)»..

} sub foo { «my (parameters) = @_... function foo(«parameters») { instructions . } type FUNCTION foo («arguments») • • • • instructions . return_value ) foo parameters = return_value or foo parameters = do Tab ↹ instructions Tab ↹ return value «main :: IO ()» main = do instructions Haskell foo parameters = do Tab ↹ instructions . PHP foo(«parameters») function foo(«parameters») { instructions } sub foo { «my (parameters) = @_. } def foo«(parameters)» • • • • instructions « return » value N/A instructions N/A Perl foo(«parameters») or &foo«(parameters)» foo(«parameters») or &foo«(parameters)» Perl 6 Ruby foo«(parameters)» def foo«(parameters)» • instructions end end Windows PowerShell foo« parameters» function foo «(parameters)» { instructions }.....qualifiers») foo («arguments») CALL sub_foo («arguments»)[c] define foo («parameters») { instructions } SUBROUTINE sub_foo («arguments») • instructions [c] public define slsh_main () { instructions } PROGRAM main • instructions Fortran END PROGRAM END SUBROUTINE END FUNCTION[c] Forth «parameters» FOO : FOO « stack effect comment: ( before -.. return value. return value..) » • . or function foo { «param(parameters)» instructions … return value } let «rec» foo parameters = instructions.» instructions } «multi »sub foo(parameters) { instructions } instructions : FOO « stack effect comment: ( before -....Comparison of programming languages 38 def foo(«parameters»): Tab ↹ instructions Tab ↹ return value define foo («parameters») { instructions . } «our «type» »«multi »sub foo(parameters) { instructions. return_value OCaml F# foo parameters let «rec» foo parameters = instructions [<EntryPoint>] let main args = instructions Standard ML fun foo parameters = ( instructions ) fun foo parameters = ( instructions..after ) » • . foo = value Python foo(«parameters») def foo(«parameters»): Tab ↹ instructions N/A S-Lang foo(«parameters» «. or function foo { «param(parameters)» instructions } function foo «(parameters)» { instructions … return value }.. «return» value..» instructions. «return» value.

($g$. [c] Type conversions Where string is a signed decimal number: string to integer ALGOL 68 with general. get(proxy. string = o. rvar).Parse(string).toString(integer). livar)). or string = Double.Parse(string).toString(double). long = atol(string). ivar)).4dE2d$. getf(proxy. string = Float. ($g(width. «std::»ostringstream o. get(proxy. string = «std::»to_string(number). ival).to!long(string) string = std. float].str(). getf(proxy. rval)).Parse(string).toString(float). float = atof(string). or putf(proxy. Float. long = «std::»stol(string). ival)). get(proxy.9012e34 ". double = Double. put(proxy. double = «std::»stod(string). C# D integer = std. integer). exp)$. putf(!int(string) long = std.parseFloat(string). integer]. ($g$. long = [string longLongValue]. or getf(proxy. or putf(proxy." for forward declarations. etc. ($4d$. C++ (STL) C++11 «std::»istringstream(string) >> number.conv. integer = «std::»stoi(string).parseInt(string). ($g$. ival)). rvar)). b  Eiffel allows the specification of an application's root class and feature. function/subroutine parameters are called arguments (since PARAMETER is a language keyword). .Parse(string). putf(proxy. float =!string(number) Java integer = long = float = string = Integer. sprintf(string. the CALL keyword is required for subroutines. livar)). float = std. C (C99) integer = atoi(string).to!float(string) or double = std. ($8d$. float = «std::»stof(string).conv. sprintf(string. or Integer. "%i". ($g$.conv. or getf(proxy.parseLong(string). o << number. put(proxy. getf(proxy.ToString(). buf).parseDouble(string). and then specific formats string to long integer string to floating point integer to string floating point to string With prior declarations and association of: string buf := "12345678. string = [NSString string = [NSString stringWithFormat:@"%i". Long. associate(proxy. long = long. or getf(proxy. ($8d. rvar)). rval)). ivar). Objective-C integer = [string intValue]. float = [string doubleValue]. ($dddd$. float).conv. ivar)). "%f".Comparison of programming languages 39 foo («parameters»): type • • require • preconditions do • instructions Eiffel foo («parameters») foo («parameters») • • • • require • preconditions do • instructions ensure • postconditions end [b] • • • Result • := value ensure • postconditions end a  Pascal requires "!double(string) string = number. places. or double = double.4dE2d$. ($8d.conv. file proxy. rval). stringWithFormat:@"%f". c  In Fortran. livar). integer = int.

to_s Windows PowerShell string = [string]number.Atoi(string) or strconv. . integer = string. error = strconv. integer. 10. float.toString float let string = string_of_float float OCaml let integer = int_of_string string let integer = int string val integer = Int. 64) string = number. error = strconv. or string = strval(number). 10) or string = fmt. Perl[b] Perl 6 Ruby number = 0 + string. long = long(string) long = atol(string). or string = (string)number. 64) strconv. Go integer.ParseFloat(string. (setf string (convert number <string>)) (define number (string->number string)) (setf integer (convert string <integer>)) Pascal integer := StrToInt(string).toString integer string = show number val string = Real.Itoa(integer) or string = strconv.to_f or float = Float(string) float = [float]string string = number.Sprint(integer) string = strconv.NET Python S-Lang Fortran PHP float = CSng(string) or double = CDbl(string) string = CStr(number) integer = int(string) integer = atoi(string). JavaScript[a] integer = parseInt(string). string = ~number. or string = new String (number). string := FloatToStr(float). integer = CInt(string) long = CLng(string) string := IntToStr(integer). string = "number".to_i or integer = Integer(string) integer = [int]string long = [long]string float = string. or string = (number).Comparison of programming languages 40 float = parseFloat(string).ToString() let string = string_of_int integer let string = string number val string = Int.[4] b  Perl doesn't have separate types.FormatInt(integer. float = floatval(string). WRITE(string. Visual Basic Visual Basic . or float = new Number (string) or float = Number (string) or float = string*1.format) number integer = intval(string).Sprint(float) Common Lisp Scheme ISLISP (setf integer (parse-integer string)) (setf float (read-from-string (setf string (princ-to-string number)) string)) (define string (number->string number)) (setf float (convert string <float>)) float := StrToFloat(string). or string = number+"". number = +string. error = long.format) number READ(string. string = "number".ParseInt(string. string = str(number) string = string(number).fromString string F# Standard ML Haskell (GHC) a  JavaScript only uses floating point numbers so there are some technicalities.ParseInt(string. or integer = (int)string. 0) string = strconv. or string = "number".toString (). Strings and numbers are interchangeable.fromString string number = read string let integer = int64 string let float = float_of_string string let float = float string val float = Real. float = float(string) float = atof(string). error = 10. or float = (float)string. or string = String (number).FormatFloat(float) or string = fmt.

Fprintln(os. or «std::»getline(«std::»cin. printf( format. x ).[d] C (C99) Objective-C [[NSFileHandle fileHandleWithStandardError] writeData:data].Stderr. x) System. x) System. &x). [c] [[NSFileHandle fileHandleWithStandardOutput] writeData:data].stdio.readln() std.write(x) or stderr.err.WriteLine(«format. x)).in). or x = new Scanner(System. «std::»cout << x.out.stdio.Scanf(format.Write(x) or WScript. format.StdErr.stdio.[a] fprintf(stderr. ($format$.Write(x) WScript.out. format. format.Read().» x (format (standard-output) format x) (format (error-output) format x) write(x).printf(format. x = Console. or System. format.writefln(stderr. fmt. or readln(x). or getf(stand in. x) or fmt. »x).writef(format. N/A Print x or ?x Visual Basic x)). stderr. [b] data = [[NSFileHandle fileHandleWithStandardInput] readDataToEndOfFile].Stderr.WriteLine(«format.Write(«format.NewReader(os.print(x).print(x). x) or std. x). or Console. Input« prompt.writefln(format. format. Console. x) C++ C# Console. x)).Write(«format. x) Java x = System.println(x). scanf(format.Stdin).write(x) or std. ($format$. fmt.printf(format. ($format$. x) or std. or x = new Scanner(System. or System.StdErr.StdIn.ReadLine(). format. &x) or x= bufio. or fprintf(stdout.Scan(&x) or fmt. str).writeln(x) or std.Printf(format.Echo(x) or WScript.nextLine(). fmt.Write(x) or WScript. or writeln(x).ReadString('\n') Go JavaScript Web Browser implementation JavaScript Active Server Pages JavaScript x = WScript. x)). «std::»cerr << x. write to stderr putf(stand error.stdio. or putf(stand out.stdio. x). &x). »x). «std::»cin >> x.writef(stderr. »x). or fscanf(stdin. D x = std.Comparison of programming languages 41 Standard stream I/O read from stdin ALGOL 68 readf(($format$.StdOut.err.write(x) Response.StdOut. or x = Console. or System. or Console. x). stdout printf(($format$. x).Println(x) or fmt.writeln(x) or std. or System. x)).StdIn. or «std::»clog << x.Read(chars) or Windows Script x = WScript.println(x).stdio.ReadLine() Host Common Lisp (setf x (read-line)) document.WriteLine(x) (princ x) or (format t format x) (display x) or (format #t format x) »x).nextInt().WriteLine(x) (princ x *error-output*) or (format *error-output* format x) (display x (current-error-port)) or (format (current-error-port) format x) Scheme (R6RS) (define x (read-line)) ISLISP Pascal (setf x (read-line)) read(x).in.out.err.

-> . write.stdErr. d  fputs(x. length.write(x) print(x«.. stdout) write unformatted text to stdout.stdout.. or printf STDERR format. x). x. »x) or Console.[10] Reading command-line arguments .stderr. or Write-Output x.NET x = Console.eprintf format x ..printf format x .write(x) print(x«. x).WriteLine(«format.format) expressions or READ(INPUT_UNIT..printf(format.inputLIne TextIO.. eprintf format x . print str print x or putStrLn str Windows PowerShell $x = Read-Host«« -Prompt» text». printf format x . c  puts(x) and fputs(x. print STDERR x. OUTPUT_UNIT.note or $*ERR. end=""».format) expressions[e] buffer length ACCEPT ( # chars read ) KEY ( char ) $x = fgets(STDIN).. format.print or x.Read() or x = Console.WriteLine(«format. or printf(format. $x = $*IN. format). str) hPrint stderr x or hPutStrLn stderr str F# Standard ML Haskell (GHC) val str = TextIO. x. file=sys.format) expressions[e] Visual Basic .print(x) or $*ERR.getLine a  Algol 68 additionally as the "unformatted" transput routines: read.say Forth N/A fprintf(STDERR. or $x = fscanf(STDIN..x x = raw_input(«prompt») print x or sys. b  gets(x) and fgets(x.Error. or $x = [Console]::Read().ReadLine() Python 2. »x) Console.scanf format (fun x .format) variable names or WRITE(*. TextIO..say(x) $stderr. or eprintfn format x .Write(«format. stdin) read unformatted text from stdin.. stdout) Python 3...ReadLine() OCaml prerr_int x or prerr_endline str or Printf.Comparison of programming languages 42 Console.stdIn x <. PHP Perl $x = <>. or $x = [Console]::ReadLine() let x = read_int () or let str = read_line () or Scanf.) let x = System. x. x or sys.. x) x. Use of gets is not recommended. x) Write-Error x Perl 6 Ruby x = gets puts x or printf(format. »x) or Console. stdin) READ(*. or $x = <STDIN>.Console. or printfn format x .Write(«format..format) variable names[e] WRITE(OUTPUT_UNIT. end=""») fputs (x.puts(x) or $stderr. get and put. stderr) writes unformatted text to stderr e  INPUT_UNIT.x S-Lang Fortran x = input(«prompt») fgets (&x. x. ERROR_UNIT are defined in the ISO_FORTRAN_ENV module.. or echo x.stderr) fputs (x.. or echo x print_int x or print_endline str or Printf. print x. stderr) WRITE(ERROR_UNIT.readLn or str <.stderr. buffer length TYPE char EMIT print x.get.. »x) print >> sys.Error. or printf format.output (TextIO.

argv) __argc argc = COMMAND_ARGUMENT_COUNT () first argument first argument CALL GET_COMMAND_ARGUMENT (0. first argument WScript.System.length Assembly.getArgs.Location CommandLine. return length args } System.GetEntryAssembly().GetEntryAssembly().progname) • • • • ENDDO PHP Perl Perl 6 Ruby Windows PowerShell OCaml F# Standard ML $argv[n] $ARGV[n] @*ARGS[n] ARGV[n] $args[n] $argc scalar(@ARGV) @*ARGS.Name Sys.Length length (CommandLine.Args[n] ? (list-ref (command-line) n) N/A len(os.Length first argument ? first argument N/A first argument App.Arguments.length WScript.Args) ? (length (command-line)) N/A ParamCount N/A CmdArgs.[n] List.Location sys. argv(i) ) len( () Haskell (GHC) do { args <.argv args.argc • CALL GET_COMMAND_ARGUMENT ( i .Arguments(n) args[n] argv[n] argc Argument counts Program name / Script name first argument args.argv.arguments ()) first argument Assembly.Length args.size $args.argv[n] __argv[n] DO i = 1.Length first argument $0 $PROGRAM_NAME $0 $MyInvocation.ScriptName or WScript. return args !! n } Array. n) do { args <.MyCommand.Location.getArgs.GetEntryAssembly().System.elems ARGV.nth (CommandLine.Comparison of programming languages 43 Argument values C (C99) Objective-C C++ C# Java D JavaScript Windows Script Host implementation Go Common Lisp Scheme (R6RS) ISLISP Pascal Visual Basic Visual Basic .Path [Assembly].(n) args.ScriptFullName os.arguments ().length Sys.getProgName .NET Python S-Lang Fortran ParamStr(n) Command[a] CmdArgs(n) WScript.

Start(path.start(). exec.Process. OS. Perl system(command) or $output = `command` system(command) or output = `command` system(command) or $output = `command` or exec(command) or passthru(command) Ruby exec(path..system command System. WindowStyle» «. isWaitOnReturn»).Process.exec(command).. arglist). or execv(path. argstring) std. Unix. args).Process. isWaitOnReturn») Microsoft.Exec(path.execute (path. exec. exec(path.execv(path.CreateObject WshShell. argv. args) PHP .Diagnostics.Run(path.Process. isWaitOnReturn») std. stdin.execve prog args env Posix.DevNull.Process. implementation Common Lisp Scheme ISLISP Pascal OCaml system(command).. System. stderr). [NSTask launchedTaskWithLaunchPath:(NSString *)path arguments:(NSArray *)arguments].VisualBasic.execv prog args or Unix.. args) (shell command) (system command) N/A N/A N/A Standard ML Haskell (GHC) System.exec (path.Run(command «. arglist).. dir..command command.Start(path. os.Process. argv. Unix.runProcess path args .Exec(command) Windows ("WScript. WindowStyle» «.system command Unix.executeFile path True args . C# F# Go Visual Basic Visual Basic .Interaction.system("command"). Sys.DevNull) Interaction.open_process_full command env (stdout. or new ProcessBuilder(command).. exec.. System.Shell(command «.DevNull.Comparison of programming languages • a The command-line arguments in Visual Basic are not separated. . argstring). envv) C C++ Objective-C system("command").Shell(command «.NET D Java JavaScript WScript. Runtime.Shell"). WindowStyle» Script Host «. 44 Execution of commands Shell command Execute program Replace current program with new executed program execl(path. args) Posix.process.create_process prog args new_stdin new_stdout new_stderr.Diagnostics. args) Unix.process. A split function Split(string) is required for separating them. envv.. exec.

enables a programmer to study and develop its algorithms. org/ fortran/ show/ selected_real_kind [6] http:/ / www. info/ specification. html#SYSTEM Computer program A computer program (also software. gnu. org/ onlinedocs/ gfortran/ SYSTEM. html [3] http:/ / fortranwiki. typically executing the program's instructions in a central processor. Source code may be converted into an executable file (sometimes called an executable program or a binary) by a compiler and later executed by a central processing unit.g. a process known as multitasking.5 The Number Type (http:/ / www. The same program in its human-readable source code form.system(command) or subprocess. html#Complex-Numbers [7] http:/ / rosettacode. return 0. } Source code of a program written in the C programming language . from which executable programs are derived (e. compiled).[1] A computer requires programs to function. status) or status = SYSTEM (command)[a] [Diagnostics. org/ wiki/ Enumerations#ALGOL_68 [8] https:/ / sites. google. or just a program) is a sequence of instructions written to perform a specified task with a computer. org/ wiki/ Prime_decomposition#ALGOL_68 [10] http:/ / fortranwiki.Process]::Start(command) «Invoke-Item »program arg1 arg2 … S-Lang Fortran Windows PowerShell a  Compiler-dependent extension. computer programs may be executed with the aid of an interpreter.. gnu.Comparison of programming languages 45 os. Programming #include <stdio. org/ fortran/ show/ iso_fortran_env [11] http:/ / gcc. mozilla. Computer programs may be categorized along functional lines: system software and application software.execv(path. pdf) [5] http:/ / fortranwiki. org/ js/ language/ E262-3.[2] The program has an executable form that the computer can use directly to execute the instructions.[11] References [1] http:/ / www. Two or more computer programs may run simultaneously on one computer. Computer source code is often written by computer programmers. islisp.Popen(command) system(command) CALL SYSTEM (command.h> int main() { printf("Hello world!\n"). Source code is written in a programming language that usually follows one of two main paradigms: imperative or declarative programming. org/ software/ libc/ manual/ html_node/ Complex-Numbers. com/ site/ truetryforvisualbasic/ [9] http:/ / rosettacode. htm [2] http:/ / www. Alternatively. lispworks. args) Python os. org/ fortran/ show/ selected_int_kind [4] 8. or may be embedded directly into hardware. com/ documentation/ HyperSpec/ Front/ index.

a statement might assign an expression to a variable or use the value of a variable to alter the program's control flow. Editing source code involves testing. The term software engineering is becoming popular as the process is seen as an engineering discipline. BASIC. Two of the main paradigms are imperative and declarative. 46 Paradigms Computer programs can be categorized by the programming language paradigm used to produce a batch or interactive session . In this case the programs are the separate commands.are either decoded and then immediately executed or are decoded into some efficient intermediate representation for future execution. One criticism of imperative languages is the side effect of an assignment statement on a class of variables called non-local variables. and refining. Object code needs further processing to become machine code.[5] The goal is defined by providing a list of subgoals. The form in which a program is created may be textual or visual. For example: 2 + 2 yields 4. Java computer programs are compiled ahead of time and stored as a machine independent code called bytecode. Programs written using an imperative language specify an algorithm using declarations. The principle behind functional languages (like Haskell) is to not allow side effects. binary images. and thus together. which makes it easier to reason about programs like mathematical functions. or simply as binaries — a reference to the binary file format used to store the executable code.Computer program Computer programming is the iterative process of writing or editing source code.[4] The principle behind logical languages (like Prolog) is to define the problem to be solved — the goal — and leave the detailed solution to the Prolog system itself. The sometimes lengthy process of computer programming is usually referred to as software development. computer programming language is called source code.[3] A declaration couples a variable name to a datatype. In a visual language program. Source code may be converted into an executable image by a compiler or executed immediately with the aid of an interpreter. When a language is used to give commands to a software application (such as a shell) it is called a scripting language. An expression yields a value. Bytecode is then executed on request by an interpreter called a virtual machine. Compilers are used to translate source code from a programming language into either object code or machine code. if x = 4 then do_something(). Compiled computer programs are commonly referred to as executables.[4] Programs written using a declarative language specify the properties that have to be met by the output. elements are graphically manipulated rather than textually specified. whose execution occurs sequentially. Two broad categories of declarative languages are functional languages and logical languages. and sometimes coordinating with other programmers on a jointly developed program. Either compiled or interpreted programs might be executed in a batch process without human interaction. Alternatively. and machine code is the central processing unit's native code. For example: x := 2 + 2. Then each subgoal is defined by further providing a list of its subgoals. etc. Perl. expressions. software developer or coder. If a path of subgoals fails to find a solution. Interpreted computer programs . Compiling or interpreting A computer program in the form of a human-readable. . For example: var x: integer. and statements. They do not specify details expressed in terms of the control flow of the executing machine but of the mathematical relations between the declared objects and their properties. and Python are examples of immediately executed computer programs. then that subgoal is backtracked and another path is systematically attempted. A person who practices this skill is referred to as a computer programmer. but interpreted programs allow a user to type commands in an interactive session. Finally. ready for execution. analyzing. .

Computer program The main disadvantage of interpreters is that computer programs run slower than when compiled. 47 Self-modifying programs A computer program in execution is normally treated as being different from the data the program operates on. the program is loaded into random access memory.[6] Termination is either by normal self-termination or by error — software or hardware error. until termination. . Execution and storage Typically. Lisp. compiled computer programs need no compiler present during execution. The central processor then executes ("runs") the program. The boot process is to identify and initialize all aspects of the system. C. For example. by a computer program called an operating system.[8] The microcontroller on the right of this USB flash drive is controlled with embedded firmware. in some cases this distinction is blurred when a computer program modifies itself. computer programs are stored in non-volatile memory until requested either directly or indirectly to be executed by the computer user. or when the program must not be lost when the power is off. PL/1. a hardware device might have embedded firmware to control its operation. Another disadvantage of interpreters is that at least one must be present on the computer during computer program execution. Embedded programs Some computer programs are embedded into hardware.[7] Following the initialization process. A program in execution is called a process. Independent of the host computer. Firmware is used when the computer program is rarely or never expected to change. Interpreting code is slower than running the compiled version because the interpreter must decode each statement each time it is loaded and then perform the desired action. Prolog and JavaScript (the eval feature) among others. instruction by instruction. from processor registers to device controllers to memory contents. However. The modified computer program is subsequently executed as part of the same program. Some systems use just-in-time compilation (JIT) whereby sections of the source are compiled 'on the fly' and stored for subsequent executions. The categorization usually reflects the most popular method of language execution. Self-modifying code is possible for programs written in machine code. this initial computer program loads the operating system and sets the program counter to begin normal operations. However. assembly language. despite the existence of BASIC compilers and C interpreters. BASIC is thought of as an interpreted language and C a compiled language. No properties of a programming language require it to be exclusively compiled or exclusively interpreted. Upon such a request. A stored-program computer requires an initial computer program stored in its read-only memory to boot. where it can be accessed directly by the central processor. software development may be faster using an interpreter because testing is immediate when the compiling step is omitted. By contrast. COBOL.

like the need for sorting. a Wiki is an application server that lets users build dynamic content assembled from articles. Multithreading processors are optimized to execute multiple threads efficiently. The simplest form of source code generator is a macro processor. Java. aspects. modern day multiprocessor computers or computers with multicore processors may run multiple programs. prototypes.[12] The purpose of the operating system is to provide an environment in which application software executes in a convenient and efficient manner. such as the C preprocessor.[9] Automatic program generation Switches for manual input on a Data General Nova 3 Generative programming is a style of computer programming that creates source code through generic classes. Software engines output source code or markup code that simultaneously become the input to another computer process. An instruction was represented by a configuration of on/off settings. Sometimes development environments for software development are seen as a functional category on its own.[12] In addition to the operating system. After the medium was loaded. Simultaneous execution Many operating systems support multitasking which enables many computer programs to appear to run simultaneously on one computer. This process was then repeated. which couples the system software with the user interface.[10] Within hardware. Computer programs also historically were manually input via paper tape or punched cards. system software includes utility programs that help manage and tune the computer. Functional categories Computer programs may be categorized along functional lines. and code generators to improve programmer productivity. Wikis generate HTML.Computer program 48 Manual programming Computer programs historically were manually input to the central processor via switches. If a computer program is not system software then it is application software. Application software also includes utility programs that help users solve application problems. especially in the context of human-computer interaction and programming language design. templates. After setting the configuration. Operating systems may run multiple programs through process scheduling — a software mechanism to switch the CPU among processes often so users can interact with each program while it runs. and JavaScript which are then interpreted by a web browser. CSS. Source code is generated with programming tools such as a template processor or an integrated development environment. For example. Application software includes middleware. The main functional categories are system software and application software. an execute button was pressed. Application servers are software engines that deliver applications to client computers. Development environments gather system software (such as compilers and system's batch processing scripting languages) and application software (such as IDEs) for the specific purpose of helping programmers create new programs. . which replaces patterns in source code according to relatively simple rules.[11] One computer program can calculate simultaneously more than one operation using threads or separate processes. System software includes the operating system which couples computer hardware with application software. the starting address was set via switches and the execute button pressed.

Principles of Information Systems. Leslie B. Addison-Wesley. 6. Donald E. Volume 2. Comparative Programming Languages. Leslie B. Ralph M. Volume 1. 132. Fourth . [7] Silberschatz. pp. The Art of Computer Programming. Structured Computer Organization.. ISBN 0-201-56885-3. Abraham (1994). [6] Silberschatz. Fourth Edition. pp. Donald E. ISBN 0-201-50480-4. pp. 3rd Edition. et al. ISBN 0-13-854662-2. [2] Silberschatz.html) at Webopedia • Definition of "Software" (http://wombat. Thomson Learning. Inc.webopedia. pp. Comparative Programming The Art of Computer Programming. Addison-Wesley. (1997). [11] Akhter. ISBN 0-201-50480-4. Abraham (1994). [3] Wilson. ISBN 0-619-06489-7. 97. Addison-Wesley. Boston: Addison-Wesley. (1990). Second Edition. (1993). Operating System Concepts. 244. [5] Wilson. program) at dictionary. 3rd Edition. Multi-Core Programming. • Knuth.cgi?query=software) at FOLDOC • Definition of "Computer Program" (http://dictionary. Comparative Programming Languages. Boston: Addison-Wesley. External links • Definition of "Program" (http://www. 1. • Knuth.. Third Edition. ISBN 0-201-56885-3. [12] Silberschatz. [8] Tanenbaum. Abraham (1994). Fourth Edition. pp. 58. pp. Operating System Concepts. Sixth Edition. Fourth Edition. Operating System Concepts. Fourth Edition. Abraham (1994). pp. 213. The Art of Computer Programming. (1993). 100. pp.doc.Computer program 49 References [1] Stair. (1993). pp. Boston: Addison-Wesley. (1997). ISBN 0-201-50480-4. Richard Bowles (Intel Press). Operating System Concepts. 11–13. 11. Abraham (1994).uk/foldoc/foldoc. Volume 3. Abraham (1994). Prentice Hall. Leslie B.reference. pp. ISBN 0-201-50480-4. [4] Wilson. ISBN 0-201-50480-4. Second Edition. pp. [10] Silberschatz. ISBN 0-201-89683-4. Addison-Wesley. Addison-Wesley. Operating System Concepts. (1997). Shameem (2006). 30. ISBN 0-201-56885-3. Andrew S. Addison-Wesley. ISBN 0-9764832-4-6. 3rd Edition. (2003). Addison-Wesley.ic. ISBN 0-201-50480-4. [9] Silberschatz. Further reading • Knuth. Addison-Wesley. Addison-Wesley. Operating System Concepts. Fourth Edition. ISBN ISBN 0-201-89685-0. Donald E. Second Edition. pp.

One usage describes programming languages as a subset of computer languages. for example. have a dominant implementation that is used as a reference.[6] In most practical contexts. Most programming languages describe computation in an imperative style. a programming language may describe computation on some. i. The earliest programming languages predate the invention of the computer. All Turing complete languages can implement the same set of algorithms.[15][16][17] Moreover. although some languages. while other languages. with many more being created every year. The description of a programming language is usually split into the two components of syntax (form) and semantics (meaning). Some languages are defined by a specification document (for example.. also contains a Turing complete subset.[1][2] Traits often considered important for what constitutes a programming language include: • Function and target: A computer programming language is a language[3] used to write computer programs.[20] However. but not all. particularly a computer. consequently. • Abstractions: Programming languages usually contain abstractions for defining and manipulating data structures or controlling the flow of execution.[8] this principle is sometimes formulated as recommendation to the programmer to make proper use of such abstractions. as a sequence of commands. possibly abstract. which involve a computer performing some kind of computation[4] or algorithm and possibly control external devices such as printers.[1] Some. It is generally accepted that a complete specification for a programming language includes a description. such as Perl 5 and earlier. of a machine or processor for that language. is a Turing complete XML dialect. For instance. LaTeX. the usage of both terms varies among authors. XSLT.e. which is mostly used for structuring documents. a programming language involves a computer. Programming languages can be used to create programs that control the behavior of a machine and/or to express algorithms precisely.Programming language 50 Programming language A programming language is an artificial language designed to communicate instructions to a machine. For example PostScript programs are frequently created by another program to control a computer printer or display. such as those that support functional programming or logic programming. robots. which are specifications of a computation or algorithm. markup languages are sometimes referred to as computer languages to emphasize that they are not meant to be used for . ANSI/ISO SQL and Charity are examples of languages that are not Turing complete. yet often called programming languages.[21] In this vein.[10][11] Markup languages like XML. Definitions A programming language is a notation for writing programs. including the exact scope of each.[12][13][14] Programming languages may. The practical necessity that a programming language support adequate abstractions is expressed by the abstraction principle.[18][19] The term computer language is sometimes used interchangeably with programming language. HTML or troff. the C programming language is specified by an ISO Standard). authors restrict the term "programming language" to those languages that can express all possible algorithms. which define structured data. possibly idealized.[7] Programming languages differ from natural languages in that natural languages are only used for interaction between people. languages used in computing that have a different goal than expressing computer programs are generically designated computer languages. Thousands of different programming languages have been created. and were used to direct the behavior of machines such as Jacquard looms and player pianos. use alternative forms of description. however. machine.[9] • Expressive power: The theory of computation classifies languages by the computations they are capable of expressing. programming languages are usually defined and studied this way. while programming languages also allow humans to communicate instructions to machines. share the syntax with markup languages if a computational semantics is defined. More generally.[5] and so on. are not generally considered programming languages. mainly in the computer field. disk drives.

Programming language syntax is usually defined using a combination of regular expressions (for lexical structure) and Backus–Naur Form (for grammatical structure). much like written natural languages. Reynolds emphasizes that formal specification languages are just as much programming languages as are the languages intended for execution. The syntax of a language describes the possible combinations of symbols that form a syntactically correct program. there are some programming languages which are more graphical in nature. Since most languages are textual. On the other hand. The meaning given to a combination of Parse tree of Python code with inset tokenization symbols is handled by semantics (either formal or hard-coded in a reference implementation). they use sequences of text including words. These primitives are defined by syntactic and semantic rules which describe their structure and meaning respectively. and computer languages as the subset thereof that runs on physical computers.[24] 51 Elements All programming languages have some primitive building blocks for the description of data and the processes or transformations applied to them (like the addition of two numbers or the selection of an item from a collection). Syntax A programming language's surface form is known as its syntax.[22] Another usage regards programming languages as theoretical constructs for programming abstract machines. numbers. this article discusses textual syntax. Most programming languages are purely textual. Below is a simple grammar. which have finite hardware resources.[23] John C.Programming language programming. despite the fact they are commonly not Turing-complete. He also argues that textual and even graphical input formats that affect the behavior of a computer are programming languages. and punctuation. and remarks that ignorance of programming language concepts is the reason for many flaws in input formats. using visual relationships between symbols to specify a program. based on Lisp: .

Many syntactically correct programs are nonetheless ill-formed. The following are examples of well-formed token sequences in this grammar: '12345'. '(a b c232 (1))' Not all syntactically correct programs are semantically correct. expression ::= atom | list atom ::= number | symbol number ::= [+-]?['0'-'9']+ symbol ::= ['A'-'Z''a'-'z']. a number is an unbroken sequence of one or more decimal digits. it may not be possible to assign a meaning to a grammatically correct sentence or the sentence may be false: • "Colorless green ideas sleep furiously. an atom is either a number or a symbol. per the language's rules. • "John is a married bachelor." is grammatically well-formed but expresses a meaning that cannot be true. but performs operations that are not semantically defined (the operation *p >> 4 has no meaning for a value having a complex type and p->im is not defined because the value of p is the null pointer): complex *p = NULL. In some cases. and a list is a matched pair of parentheses. it may still have a meaning that is not intended by the person who wrote it. The following C language fragment is syntactically correct. Using natural language as an example. a symbol is a letter followed by zero or more of any characters (excluding whitespace)." is grammatically well-formed but has no generally accepted meaning. complex abs_p = sqrt(*p >> 4 + p->im). . such programs may exhibit undefined behavior. The language above is Python.Programming language 52 Syntax highlighting is often used to aid programmers in recognizing elements of source code. Even when a program is well-defined within a language. '()'. optionally preceded by a plus or minus sign. and may (depending on the language specification and the soundness of the implementation) result in an error on translation or execution.* list ::= '(' expression* ')' This grammar specifies the following: • • • • • an expression is either an atom or a list. with zero or more expressions inside it.

The syntax of most programming languages can be specified using a Type-2 grammar. but a number of languages. albeit unusual programs. relieving the programmer from the need to write type annotations. which allow execution semantics to be specified in a formal manner. In order to bypass this downside. like checking that identifiers are used in the appropriate context (e. For example. Any decidable type system involves a trade-off: while it rejects many incorrect programs. and generally blur the distinction between parsing and execution. A significant amount of academic research went into formal semantics of programming languages. the program would trigger an error on compilation. or that subroutine calls have the appropriate number and type of arguments. Natural language is often used to specify the execution semantics of languages commonly used in practice. including Perl and Lisp.Programming language If the type declaration on the first line were omitted. and do not require code execution. as opposed to their form (syntax). a number of languages have type loopholes. the machine must be instructed to perform operations on the data. Other forms of static analyses like data flow analysis may also be part of static semantics. as part of their static semantics. There are many ways of defining execution semantics. Dynamic semantics Once data has been specified. Results from this field of research have seen limited application to programming language design and implementation outside academia. i. usually unchecked casts that may be used by the programmer to explicitly allow a normally disallowed operation between different types.e. a form of data flow analysis. how it can manipulate those types and how they interact. which may contain general computations. Newer programming languages like Java and C# have definite assignment analysis. as the variable "p" would not be defined. since type declarations provide only semantic information. Type system A type system defines how a programming language classifies values and expressions into types. it can also prohibit some correct.g. the semantics may define the strategy by which expressions are evaluated to values. The dynamic semantics (also known as execution semantics) of a language defines how and when the various constructs of a language should produce a program behavior. the type system is used only to type check programs. they are context-free grammars. The goal of a type system is to verify and usually enforce a certain level of correctness in programs written in that language by detecting certain incorrect operations. contain constructs that allow execution during the parsing phase. In most typed languages. Static semantics The static semantics defines restrictions on the structure of valid texts that are hard or impossible to express in standard syntactic formalisms. Examples include checking that every identifier is declared before it is used (in languages that require such declarations) or that the labels on the arms of a case statement are distinct.[28] Many important restrictions of this type. or the manner in which control structures conditionally execute statements. But the program would still be syntactically correct. not adding an integer to a function name). .[27] 53 Semantics The term Semantics refers to the meaning of languages..[25] Some languages.[26] In contrast to Lisp's macro system and Perl's BEGIN blocks. can be enforced by defining them as rules in a logic called a type system. The formal design and study of type systems is known as type theory. C macros are merely string replacements. The grammar needed to specify a programming language can be classified by its position in the Chomsky hierarchy. infer types.[1] For compiled languages. Languages that have constructs that allow the programmer to alter the behavior of the parser make syntax analysis an undecidable problem. static semantics essentially include those semantic rules that can be checked at compile time. usually functional ones.

[29] This can occasionally be useful. all expressions have their types determined prior to when the program is executed. at variable declarations). potentially making debugging more difficult. the expression 2 * x implicitly converts x to a number. However. such as Haskell and ML.[29] As with type-inferred languages. In the second case. resulting in a runtime exception. such as Perl and JavaScript. in other words. and rejected by the compiler. the data represented by "this text between the quotes" is a string. but they can mask programming errors. the compiler infers the types of expressions and declarations based on context. or a string of letters. types are associated with runtime values rather than textual expressions. In JavaScript. which permit a large number of implicit type conversions.[29] Statically typed languages can be either manifestly typed or type-inferred. An attempt to perform an operation on the wrong type of value raises an error. for example. are manifestly typed. Lisp. For example. most modern languages offer a degree of typing.[30] Dynamic typing. while few languages are considered typed from the point of view of type theory (verifying or rejecting all operations). Most modern programming languages will therefore reject any program attempting to perform such an operation. such as REXX or SGML. Such implicit conversions are often useful. many manifestly typed languages support partial type inference. which are generally considered to be sequences of bits of various lengths. an untyped language. In practice. These are often scripting or markup languages. Most mainstream statically typed languages. dividing a number by a string has no meaning. Perl.[29] Strongly typed languages are often termed type-safe or safe. this may permit a single variable to refer to values of different types at different points in the program execution. Strong typing prevents the above. An alternative definition for "weakly typed" refers to languages. the meaningless operation will be detected when the program is compiled ("static" type checking). it will be detected when the program is run ("dynamic" type checking).[29] Many production languages provide means to bypass or subvert the type system (see casting). However. and have only one data type—most commonly character strings which are used for both symbolic and numeric data. undefined. In contrast. Some use the term strongly typed to mean 54 . In most programming languages. typically at compile-time. such as most assembly languages. JavaScript. and this conversion succeeds even if x is null. while in others. dynamically typed languages do not require the programmer to write explicit type annotations on expressions. or stored in a variable that is defined to hold dates. the programmer must explicitly write types at certain textual positions (for example. C# and Java. they cannot be passed to a function that expects a string. an Array. Among other things. for example treating a string as a number. 1 and (2+2) are integer expressions. but usage in the literature differs. In some languages. but it can also allow some kinds of program faults to go undetected at compile time and even at run-time. determines the type-safety of operations at runtime. A special case of typed languages are the single-type languages. type errors cannot be automatically detected until a piece of code is actually executed. In the first case. Complete type inference has traditionally been associated with less mainstream languages. and Ruby are dynamically typed. such as C++.Programming language Typed versus untyped languages A language is typed if the specification of every operation defines types of data to which the operation is applicable. allows any operation to be performed on any data. Java and C# both infer types in certain limited cases. also called latent typing.[29] For example.[29] High-level languages which are untyped include BCPL and some varieties of Forth. with the implication that it is not applicable to other types. Weak and strong typing Weak typing allows a value of one type to be treated as another. Strong and static are now generally considered orthogonal concepts. Static versus dynamic typing In static typing. Python. for example.

Indeed. • Finally. Core libraries typically include definitions for commonly used algorithms.[35] The need for diverse programming languages arises from the diversity of contexts in which languages are used: • Programs range from tiny scripts written by individual hobbyists to huge systems written by hundreds of programmers. or. and so the language designers do not even bother to say which portions of the language must be implemented as language constructs. One common trend in the development of programming languages has been to add more ability to solve problems using a higher level of abstraction. in Smalltalk. Design and implementation Programming languages share properties with natural languages related to their purpose as vehicles for communication. to mean simply statically typed.[3][33] But as artificial constructs. to experts who may be comfortable with considerable complexity. and which must be implemented as parts of a library. While constructed languages are also artificial languages designed from the ground up with a specific purpose. some languages are designed so that the meanings of certain syntactic constructs cannot even be described without referring to the core library. Because programmers are less tied to the complexity of the computer. altered to meet new needs. The line between a language and its core library therefore differs from language to language. although the designers may have treated it as a separate entity. size. statically typed.Programming language strongly. and in the case of standardized languages this core library may be required. The earliest programming languages were tied very closely to the underlying hardware of the computer. statically typed. programmers may simply differ in their tastes: they may be accustomed to discussing problems and expressing them in a particular language.lang. since it has a precise and finite definition. their programs can do more computing with . and combined with other languages. similarly. especially if it is included as part of the published language standard).[34] By contrast. a string literal is defined as an instance of the java. A significant difference is that a programming language can be fully described and studied in its entirety. and showing language families of related languages branching one from another. As new programming languages have developed. Many have eventually fallen into disuse. Conversely. which is conventionally made available by all implementations of the language. Although there have been attempts to design one "universal" programming language that serves all purposes. • Programmers range in expertise from novices who need simplicity above all else. • Programs must balance speed. they also differ in fundamental ways from languages that have evolved through usage. Many language specifications define a core that must be made available in all implementations. or they may undergo continual modification.String class.[31][32] 55 Standard library and run-time system Most programming languages have an associated core library (sometimes known as the 'standard library'. A language's core library is often treated as part of the language by its users. data structures. and simplicity on systems ranging from microcontrollers to supercomputers. and mechanisms for input and output. features have been added that let programmers express ideas that are more remote from simple translation into underlying hardware instructions. in Java. Scheme contains multiple coherent subsets that suffice to construct the rest of the language as library macros. having a syntactic form separate from its semantics. an anonymous function expression (a "block") constructs an instance of the library's BlockContext class. all of them have failed to be generally accepted as filling this role. Many programming languages have been designed from scratch. • Programs may be written once and not change for generations. even more confusingly. natural languages have changing meanings given by their users in different communities. Thus C has been called both strongly typed and weakly. For example. they lack the precise and complete semantic definition that a programming language has.

Prolog or ANSI REXX[41]). translates the blocks of bytecode which are going to be used to machine code.[37] Alan Perlis was similarly dismissive of the idea. While syntax is commonly specified using a formal grammar. One technique for improving the performance of interpreted programs is just-in-time compilation. A language's designers and users must construct a number of artifacts that govern and enable the practice of programming. This lets them write more functionality per time unit. However.Programming language less effort from the programmer. Edsger W. Implementation An implementation of a programming language provides a way to execute that program on one or more configurations of hardware and software. Here the virtual machine. static semantics. A programming language specification can take several forms.. Programs that are executed directly on the hardware usually run several orders of magnitude faster than those that are interpreted in software. The syntax and semantics of the language have to be inferred from this description.. some implementations of BASIC compile and then execute the source a line at a time. two approaches to programming language implementation: compilation and interpretation. as in the C language). The output of a compiler may be executed by hardware or a program called an interpreter. In some implementations that make use of the interpreter approach there is no distinct boundary between compiling and interpreting.g.g. There are. sometimes written in the language being specified (e.[38] Hybrid approaches have been taken in Structured English and SQL. broadly. as in Standard ML[39] and Scheme[40] specifications).. • A reference or model implementation. the C++ and Fortran specifications). Dijkstra took the position that the use of a formal language is essential to prevent the introduction of meaningless constructs. and dismissed natural language programming as "foolish". 56 Specification The specification of a programming language is intended to provide a definition that the language users and the implementors can use to determine whether the behavior of a program is correct.g. given its source code. The most important of these artifacts are the language specification and implementation.[36] Natural language processors have been proposed as a way to eliminate the need for a specialized language for programming. . just before execution. for direct execution on the hardware. this goal remains distant and its benefits are open to debate. which may be written in natural or a formal language. or a formal semantics (e. For instance. and execution semantics of the language. It is generally possible to implement a language using either technique. semantic definitions may be written in natural language (e. • A description of the behavior of a translator for the language (e.. including the following: • An explicit definition of the syntax. The syntax and semantics of the language are explicit in the behavior of the reference implementation.g.

JavaScript. The combination of the language definition. and still expect their intent to be understood. have been proposed: • counting the number of job advertisements that mention the language[44] • the number of books sold that teach or describe the language[45] • estimates of the number of existing lines of code written in the language—which may underestimate languages not often found in public searches[46] • counts of language references (i. Combining and averaging information from various internet sites. mainly in the computing field. However. A programming language provides a structured mechanism for defining pieces of data. or adapt existing ones to new uses or a changing environment. Various methods of measuring language popularity. figuratively speaking. Programs for a computer might be executed in a batch process without human interaction. a different one have more lines of code. These concepts are represented as a collection of the simplest elements available (called primitives). When using a natural language to communicate with other people. and SQL. For example. On the other hand. PHP. often on large mainframes. C#. to the name of the language) found using a web search engine. . ideas about an algorithm can be communicated to humans without the precision required for execution by using pseudocode. When a language is used to give commands to a software application (such as a shell) it is called a scripting language.Programming language 57 Usage Thousands of different programming languages have been claims that[47] in 2008 the 10 most cited programming languages are (in alphabetical order): C.[42] Programming languages differ from most other forms of human expression in that they require a greater degree of precision and completeness. Fortran in scientific and engineering applications. Measuring language usage It is difficult to determine which programming languages are most widely used. whose execution is chained together. and the operations or transformations that may be carried out automatically on that data. A programmer uses the abstractions present in the language to represent the concepts involved in a computation. COBOL is still strong in the corporate data center. Ruby. and what usage means varies by context. computers "do exactly what they are told to do". Other languages are regularly used to write many different kinds of applications. Java. which interleaves natural language with code written in a programming language.[43] Programming is the process by which programmers combine these primitives to compose new programs. In this case the "commands" are simply programs. and the program's inputs must fully specify the external behavior that occurs when the program is executed. One language may occupy the greater number of programmer hours. and C in embedded applications and operating systems. and a third utilize the most CPU time. C++. and cannot "understand" what code the programmer intended to write. a program. human authors and speakers can be ambiguous and make small errors. Some languages are very popular for particular kinds of applications. within the domain of control of that program. Python..e. each subject to a different bias over what is measured. Perl. langpop. or a user might type commands in an interactive session of an interpreter.

i.[48] More refined paradigms include procedural programming. Traditionally. object-oriented programming. For example.[49] Some general purpose languages were designed largely with educational goals. domain-specific languages. By purpose. Java is both an object-oriented language (because it encourages object-oriented organization) and a concurrent language (because it contains built-in constructs for running multiple threads in parallel). Other languages may be classified as being deliberately esoteric or not. The task is further complicated by the fact that languages can be classified along multiple axes. or concurrent/distributed languages (or a combination of these). scripting languages. . An assembly language is not so much a paradigm as a direct model of an underlying machine architecture.[50] A programming language may also be classified by factors unrelated to programming paradigm. functional programming. programming languages divide into programming paradigms and a classification by intended domain of use. while a minority do not. Ideas that originate in one language will diffuse throughout a family of related languages. most programming languages use English language keywords.e. A great deal of research in programming languages has been aimed at blurring the distinction between a program as a set of instructions and a program as an assertion about the desired answer. system programming languages. programming languages might be considered general purpose. and logic programming. These are generally called imperative programming languages. Languages commonly arise by combining the elements of several predecessor languages with new ideas in circulation at the time. For instance.Programming language 58 Taxonomies There is no overarching classification scheme for programming languages. programming languages have been regarded as describing computation in terms of imperative sentences. A given programming language does not usually have a single ancestor language. and then leap suddenly across familial gaps to appear in an entirely different family. which is the main feature of declarative programming. In broad strokes. some languages are hybrids of paradigms or multi-paradigmatic. issuing commands. Python is an object-oriented scripting language.

designed in 1972. for a computer programming language. Programmers of early 1950s computers. though many aspects were refinements of ideas in the very first Third-generation programming languages: • APL introduced array programming and influenced functional programming. was the first logic programming language. was followed by the development of "third generation" programming languages (3GL). or at least implemented similarly on computers that do not support the same native machine code. which had evolved to include the use of macro instructions.[54] The format and use of the early programming languages was heavily influenced by the constraints of the interface.[51] In the 1940s. the lambda calculus remains influential in language design. and most later programming languages are. Notwithstanding.[55] Refinement The period from the 1960s to the late 1970s brought the development of the major language paradigms now in use.[57] • Prolog. The 19th century saw the invention of "programmable" looms and player piano scrolls.[56] • PL/I (NPL) was designed in the early 1960s to incorporate the best ideas from FORTRAN and COBOL. such as FORTRAN. descendants of Algol. LISP. the first electrically powered digital computers were created. in the mid-1970s. These are only a few of the thousands of programming languages and dialects that have been designed in history. Updated versions of all of these 3GLs are still in general use. • In the 1960s. developed for the German Z3 by Konrad Zuse between 1943 and 1945. both of which implemented examples of domain-specific languages. assembly language programming. Smalltalk followed with the first "purely" object-oriented language.[52] A selection of textbooks that teach programming. However. but mnemonic. Later in the 1950s. a pioneer in the field. in many respects. the idea of programming language existed earlier. used machine language programs. Simula was the first language designed to support object-oriented programming. 1GL programming was quickly superseded by similarly machine-specific. in languages both popular and obscure. it was not implemented until 1998 and 2000.Programming language 59 History Early developments The first programming languages predate the modern computer.[53] 3GLs are more abstract and are "portable". the language formalized as ALGOL 60 was introduced. developed the first compiler. that is. • C was developed between 1969 and 1973 as a system programming language. punch cards encoded data and directed mechanical processing. By the beginning of the twentieth century. Grace Hopper. second generation languages (2GL) known as assembly languages or "assembler". was one of the first programmers of the Harvard Mark I computer. and remains popular. notably UNIVAC I and IBM 701. In the 1930s and 1940s. . the first generation language (1GL). around 1952. the first high-level programming language to be designed for a computer was Plankalkül. and each has strongly influenced the development of later languages. and COBOL. the formalisms of Alonzo Church's lambda calculus and Alan Turing's Turing machines provided mathematical abstractions for expressing algorithms.[54] At the end of the 1950s.

in a famous 1968 letter published in the Communications of the ACM. The United States government standardized Ada. and largely based on the C family of programming languages. These developments were not fundamentally novel. Each of these languages spawned an entire family of descendants. Modula-2. Rather than inventing new paradigms. pioneering statically typed functional programming languages. and database integration such as Microsoft's LINQ. Java came to be used for server-side programming. Ada. in part of its own perl code and use variable interpolation in the 'here document' to support multi-language programming. for example. 60 Consolidation and growth The 1980s were years of relative consolidation. or large-scale organizational units of code. all of these movements elaborated upon the ideas invented in the previous decade. rather they were refinements to existing languages and paradigms. in both industry and research. such as SQL. and bytecode virtual machines became popular again in commercial settings with their promise of "Write once. and whether programming languages should be designed to support it. although other languages. run anywhere" (UCSD Pascal had been popular for a time in the early 1980s). Current directions include security and reliability verification. originally a Unix scripting tool first released in 1987. In Japan and elsewhere. Programming language evolution continues. ML built a polymorphic type system on top of Lisp. and ML all developed notable module systems in the 1980s. became common in dynamic websites. aspects). as well as multiple JavaScript programs. delegates.Programming language • In 1978. The 4GLs are examples of languages which are domain-specific.[61] The rapid growth of the Internet in the mid-1990s created opportunities for new languages.[59] The 1960s and 1970s also saw expansion of techniques that reduced the footprint of a program as well as improved productivity of the programmer and user. new kinds of modularity (mixins. such as PL/I. Perl. vast sums were spent investigating so-called "fifth generation" languages that incorporated logic programming constructs. Perl. and most modern languages count at least one of them in their ancestry.[60] The functional languages community moved to standardize ML and Lisp. The card deck for an early 4GL was a lot smaller for the same functionality expressed in a 3GL deck. with its 'here document' can hold multiple 4GL programs.[58] Edsger Dijkstra. a systems programming language derived from Pascal and intended for use by defense contractors. which manipulates and returns sets of data rather than the scalar values which are canonical to most programming languages. already had extensive support for modular programming. argued that GOTO statements should be eliminated from all "higher level" programming languages. C++ combined object-oriented and systems programming. One important trend in language design for programming large-scale systems during the 1980s was an increased focus on the use of modules. The 1960s and 1970s also saw considerable debate over the merits of structured programming.[62] . Module systems were often wedded to generic programming constructs.

microsoft. 339. " Perl and Undecidability (http:/ / www.] for computer languages differs from that [. should be reducible in a natural way to a model for computer languages. 346 [23] R. "The CHARITY Home Page" (http:/ / pll." [the source cites many references to support this statement] [7] Ben Ari. p. p. 1999. edu/ people/ tld/ courses/ cs148/ 02/ though highly specialized to the transformation of XML. Academic Press. it/ ICSOFT2007_final. not a programming language. . ". Tittel. ISBN 012012108." [24] John C. Retrieved 29 June 2006. Some thoughts on teaching programming and programming languages. pdf).. Principles of Programming Languages.. Narasimahan. 1. (1987). 189--247 in Franz Alt. Morris Rubinoff (eds. there are only finitely many names--or registers--which can assume only finitely many values--or states--and these states are not further distinguished in terms of any other attributes. Volume 8. XML is not a programming language. org/ XML/ 1999/ XML-in-10-points. . Antonis Tsolomitis. Understanding Programming Languages. Introduction To Computers And C Programming. ISBN 0-7645-8845-1. Fischer.languages that permit the specification of a variety of different computations.." [15] "What kind of language is XSLT?" (http:/ / www. [author's footnote:] This may sound like a truism but its implications are far reaching.. is a Turing-complete programming language. Narasimahan.." [18] http:/ / tobi. p. 91 [21] Pascal Lando. While we highly recommend the study of the theory of programming. All Charity computations terminate. 20. Volume 43. precisely because it is possible to use the program—the sequence of symbols—to control the execution of a computer. jeffreykegler. Morris Rubinoff (eds. ch/ lshort/ lshort. "HTML is not a programming language.Database Language SQL (Proposed revised text of DIS 9075)" (http:/ / www. Thomas (2003). Volume 8. 802. PWS Publishing. ISBN 012012108. cpsc. com/ en-us/ library/ ms767587(VS. cmu. 1985. The Perl Review. [5] Dean. Schmidt.. aspx). "XSLT. ISBN 0-19-511306-3. Springer-Verlag. loa-cnr. contrib. 25." [8] David A. implementation. thereby providing the user with significant control (immediate or delayed) over the computer's operation. it would imply that any model for programming languages. Apostolos. "Information Technology . [17] Scott. Towards a General Ontology of Computer Programs (http:/ / www. de/ db/ conf/ icsoft/ icsoft2007-1. w3. The structure of typed programming languages. and application of computer programming languages . Retrieved 3 December 2010. Section 2.] the model [. com/ developerworks/ library/ x-xslt/ ). com/ Home/ perl-and-undecidability)".. 1994. that the parsing of Perl programs is in general undecidable. p. [10] Digital Equipment Corporation. html). Introduction to the Theory of Computation. [13] Powell. p.. Introduction to Programming Languages (http:/ / www. ISBN 0-262-16209-1. "Programs and languages can be defined as purely formal mathematical objects. In a computer language. ICSOFT 2007 (http:/ / dblp." [20] Robert A. pp. McGraw-Hill. ISBN 81-224-1379-X. Digital typography using LaTeX. Programming Language Pragmatics. ISBN 0-534-94728-X.'s a markup language. [11] The Charity Development Group (December 1996). tr/ aelci/ Courses/ D-318/ D-318-Files/ plbook/ intro. Programming Languages and Computers: A Unified Metatheory. Mordechai (1996). brown.) Advances in computers. ca/ charity1/ www/ home. Papers 2 and 3 prove. MIT Press. Types and Programming Languages. description. acm. ISBN 1-86189-080-X. [26] Jeffrey Kegler. this means the programming language is Turing-complete MacLennan.. Database Language ISO/IEC 9075:1992." [14] Dykes. pp. p. Retrieved 3 December 2010. pp. 1994. ibm.101–114. 2003. [16] "XSLT is a Programming Language" (http:/ / msdn. Tom (2002). Msdn. . . 2007. htm).) Advances in computers. Wiley. more people are interested in programs than in other mathematical objects such as groups. XML For Dummies. 32 [9] Pierce. ISBN 0-387-95217-9. Prentice-Hall. Brown University Department of Computer Science. 4th Edition.. HTML & XHTML: the complete reference. Edmunds. uni-trier. However. and Frédéric Fürst.] for programming languages in only two respects. Building Intelligent Robots. edu. The Prentice-Hall standard glossary of computer terminology. Ibm. New Age International. this text will generally limit itself to the study of programs as they are executed on a computer. Nick Sofroniou (2003). . November 2008. Gilles Kassel. For example. p. "Bylaws of the Special Interest Group on Programming Languages of the Association for Computing Machinery" (http:/ / www. p. 1994. p. . emu. Oxford University Press. The scope of SIGPLAN is the theory. p. Ed (2005). Academic Press. using respectively Rice's theorem and direct reduction to the halting problem. oetiker. pdf [19] Syropoulos. "Programming Robots" (http:/ / www.K. p. p. Charity is a categorical programming language. Anthony (2004). Morgan Kaufmann.. Issue 11. design. A history of language. . p. 213.193 : "a complete specification of a programming language must. 85).2: Pushdown Automata. 163-170 [22] S. Reaktion Books. by fixing certain of its parameters or features. org/ sigs/ sigplan/ sigplan_bylaws. 205 [4] ACM SIGPLAN (2003).com. ISBN 0-262-19349-3. ucalgary. Bruce J. Retrieved 29 June 2006. Programming Languages and Computers: A Unified Metatheory.215: "[. Bajpai. andrew. htm). if you will--for that language. txt). [2] In mathematical terms. 189--247 in Franz Alt. html). Benjamin (2002). Michael (2006). "TeX is not only an excellent typesetting engine but also a real programming language.. pp. ISBN 0-07-222942-X. SIGPLAN Notices. by definition.. Lucinda. . html) W3C.Programming language 61 References [1] Aaby. Retrieved 19 June 2006. edu/ ~shadow/ sql/ sql1992. html). Retrieved 23 September 2006. Anne Lapujade. ISBN 0-12-633951-1. include a specification of a processor--idealized. cs. [12] XML in 10 points (http:/ / www. John Wiley and Sons. MIT Press. [6] R.109 [25] Michael Sipser (1996). [3] Steven R.

2001 [47] "Programming Language Popularity" (http:/ / www. "Plankalkül: The First High-Level Programming Language and its Implementation". com/ lang/ ). ( "PL/I" (http:/ / www. . Pierce writes: 62 ". in language design and implementation. . Retrieved 29 June 2006. (2000).. computerweekly. M. [36] Frederick P. The essentials of computer organization and architecture. html).. 9. edu/ info/ Projects/ Nuprl/ cs611/ fall94notes/ cn2/ subsection3_1_3. Richard. "Epigrams on Programming" (http:/ / www-pu. html) (Martin Odersky. de/ users/ klaeren/ epigrams. acm. Retrieved 9 June 2006. Manuscript (1985). "Computer Languages History" (http:/ / www. 2). schemers. SIGPLAN Notices Vol. The Definition of Standard ML (Revised). Natural Language" (http:/ / www. apl. Retrieved 9 June 2006. htm) [53] Linda Null. No. Radar. . MacQueen. p. [46] Bieman. edu/ ~sweirich/ types/ archive/ 1999-2003/ msg00849. edu/ sicp/ full-text/ book/ book-Z-H-10. 17. . [48] Carl A. ist. edu/ cardelli85understanding. Edition 2. p. "This site lists 8512 languages. html) (Alan Jeffrey. 2 August 2006. . On the foolishness of "natural language programming. Freie Universität Berlin. 2006. 52. Institut für Informatik. mit. apl." [43] Abelson. 1992. ISBN 0-89791-570-4. p.Programming language [27] Marty Hall. cs. ps) [28] Michael Lee Scott. upenn. utexas. pp. Ada and UNCOL had similar early goals. Langpop. zib. org/ Documents/ Standards/ R5RS/ HTML/ r5rs-Z-H-10. jhu. "Section 7. Sussman. cfm?id=155378).com. Morgan Kaufmann. . R. Retrieved 9 June 2006. Retrieved 5 October 2006. Harper and D. Retrieved 3 December 2010. encyclopediaofmath. Gunter. [32] Luca Cardelli and Peter Wegner. Retrieved 3 March 2009. [51] Benjamin C. html). . The title reflected IBM's goals for unlimited subsetting capability: PL/I is designed in such a way that one can isolate subsets from it satisfying the requirements of particular applications. 20 February 1998. . Lecture Notes: Macros (http:/ / www. Data Abstraction. edu/ ~hall/ Lisp-Notes/ Macros. Technical Report B-3/2000. seas. Types and Programming Languages. Finding code on the World Wide Web: a preliminary investigation. "Structure and Interpretation of Computer Programs" (http:/ / mitpress. [34] Jing Huang. htm [45] "Counting programming languages by book sales" (http:/ / radar.1145/154766." Pierce.. html).5's bounded parametric polymorphism extensions—is discussed in two informal manuscripts from the Types mailing list: Generic Java type inference is unsound (http:/ / www. Benjamin C. html). [41] ANSI — Programming Language Rexx. edu/ ~sweirich/ types/ archive/ 1999-2003/ msg00921. ISBN 0-12-633951-1. html). html) EWD667. Programming language pragmatics. php?title=PL/ I& oldid=19175). [35] IBM in first publishing PL/I. . ISBN 0-262-16209-1. edu. (2002). 7-13. html). .2 Formal semantics" (http:/ / www. Niklaus (1993). "Recollections about the development of Pascal" (http:/ / portal. Encyclopedia of Mathematics. html#%_sec_7. and in the study of type systems. langpop.). Retrieved 30 June 2006. and Sussman. . html). 93-94 [37] Dijkstra. 435 [54] O'Reilly Media. X3-274. com/ ).oreilly. Proc. com/ news/ graphics/ prog_lang_poster. 1966). "Introduction To Computer Languages" (http:/ / www. and Polymorphism" (http:/ / citeseer. PostScript version (http:/ / www.1996 [42] "HOPL: an interactive Roster of Programming Languages" (http:/ / hopl. J. oreilly. ISBN 0-262-57095-5. [30] Specifically. et al. edu/ users/ EWD/ transcriptions/ EWD06xx/ EWD667. org/ wiki/ programming_20languages. Raúl. p. psu. acooke. C#'s type system is similar to Java's. Jr. edu/ ~hall/ Lisp-Notes/ Macros. Julia Lobur. [50] Wirth. 1 [49] "TUNES: Programming Languages" (http:/ / tunes. Alan (September 1982). (full text) (http:/ / www. MIT Press. Retrieved 13 July 2012. 2nd ACM SIGPLAN conference on history of programming languages: 333–342. and uses a similar partial type inference scheme. R. . 1982. Retrieved 3 December 2010. org/ citation. Brooks. Murdock. [33] Éric Lévénez (2011). org/ index.155378.M. William Clinger and Jonathan Rees (February 1998). V. uni-tuebingen. seas. ISBN 0-7637-3769-0. MIT Press. 2006. Edsger W. . instantiations of generic types are inferred for certain expression forms. Tofte. Semantics of Programming Languages: Structures and Techniques. de/ zuse/ Inhalt/ Programme/ Plankalkuel/ Plankalkuel-Report/ Plankalkuel-Report. . au/ ).. Addison-Wesley. Proceedings First IEEE International Workshop on Source Code Analysis and Manipulation. rather ambitiously titled its manual The universal programming language PL/I (IBM Library. murdoch. cs. [39] Milner. jhu. MIT Press. "History of programming languages" (http:/ / www. [44] http:/ / com/ archives/ 2006/ 08/ programming_language_trends_1. "Artificial Language vs." (http:/ / www. "On Understanding Types. [31] "Revised Report on the Algorithmic Language Scheme" (http:/ / www. ISBN 0-262-63181-4. Type inference in Generic Java—the research language that provided the basis for Java 1. . Edition 2. levenez. . for example. oreilly. the lambda calculus has seen widespread use in the specification of programming language features. org/ comp-lang. (1997). cornell. com/ Articles/ 2007/ 09/ 11/ 226631/ sslcomputer-weekly-it-salary-survey-finance-boom-drives-it-job. informatik. 1995. schemers. pdf) (PDF). org/ Documents/ Standards/ R5RS/ HTML/ r5rs-Z-H-4.. [38] Perlis. 18-19 [29] Andrew Cooke.: The Mythical Man-Month. html). upenn. html). 17 December 2001) and Sound Generic Java type inference (http:/ / www. Jones & Bartlett Publishers. pp. Retrieved 1 June 2009. Revised5 Report on the Algorithmic Language Scheme. [52] Rojas. Australia: Murdoch University. doi:10. [40] Kelsey. 15 January 2002).

edu/sicp/full-text/book/book-Z-H-4. The MIT Press 2009. Addison Wesley 2009. Watt and Muffy Thomas. and Models of Computer Programming. Addison Wesley 1995. [[Structure and Interpretation of Computer Programs (http:// mitpress. "The Semicolon Wars". Pierce: Types and Programming Languages.66 63 Further reading • Abelson. doi:10. "KLIC: A Portable Implementation of KL1" Proc. berkeley. MacLennan: Principles of Programming Languages: Design. icot. [60] Tetsuro Fujise. During most years of the comparison. John Wiley & Sons 2004. Academic Press. Programming Perl ISBN 0-596-00027-8 p. MIT Press. . Watt. columbia. Prentice Hall 1990. and Implementation.nondot. Salus. 1987. . • David A.). December 1994. of FGCS '94. jp/ ARCHIVE/ HomePage-E. • David A. edu/ ~flab/ languages. org/ modules/ ).. • Ravi Sethi: Programming Languages: Concepts and Constructs.362947.1145/362929. html)].mit. Retrieved 21 June 2006. Akihiko Nakase (December 1994). ICOT Tokyo. "Go To Statement Considered Harmful" (http:/ / www. [58] Hayes. Prentice Hall 1991. Prentice Hall 2000. Sussman. Brian (2006). 9th ed. ReadScheme. [62] Wall. The MIT Press 2004. 2nd ed. Retrieved 29 June . • Peter H. The MIT Press 2001. Programming Language Processors. [57] François Labelle. • Robert W. The MIT Press 2002.). • David Gelernter. Techniques. C leads by a considerable margin. • John C. Cambridge University Press 2002. "Programming Language Usage Graph" (http:/ / www. • Ellis Horowitz (ed. Sebesta: Concepts of Programming Languages. html). html). in 2006. Evaluation. Springer. Mitchell: Concepts in Programming Languages. KLIC is a portable implementation of a concurrent logic programming language [[KL1 (http:/ / www. but the combination of C/C++ still leads considerably. • David A. Prentice Hall 1993. Haynes: Essentials of Programming Languages. • Ellis Horowitz: Fundamentals of Programming Languages. Handbook of Programming Languages (4 vols. Gerald Jay (1996). [59] Dijkstra. columbia. cs. • Peter Van Roy and Seif Haridi. • Michael L. Retrieved 27 September 2006.. Takashi Chikayama Kazuaki Rokusawa. Java overtakes C. • Bruce J. edu/ acis/ history/ cards. • David A.Programming language [55] Frank da Cruz. Harold. Zelkowitz: Programming Languages: Design and Implementation (4th ed. chapter XIV. IBM Punch Cards (http:/ / www.. or. Concepts. html) Columbia University Computing History (http:/ / www.): Programming Languages. Morgan Kaufmann Publishers 2005. • Raphael Finkel: Advanced Programming Language Design (http://www. a Grand Tour (3rd ed. Programming Language Concepts and Paradigms. Suresh Jagannathan: Programming Linguistics. Oxford University Press 1999. • Benjamin C. The MIT Press 1990. Programming Language Design Concepts. (March 1968). • Shriram Krishnamurthi: Programming Languages: Application and AdvProgLangDesign/). Macmillan 1998. "Mini-Bibliography on Modules for Functional Programming Languages" (http:/ / readscheme. Edsger W. Addison-Wesley 1996. 2010. edu/ acis/ history/ index. [56] Richard L. Communications of the ACM 11 (3): 147–148.). • Franklyn Turbak and David Gifford with Mark Sheldon: Design Concepts in Programming Languages. acm. Wexelblat: History of Programming Languages. Scott: Programming Language Pragmatics.cs. This comparison analyzes trends in number of projects hosted by a popular community programming repository. SourceForge. Friedman. Programming Language Syntax and Semantics. Watt. .] [61] Jim Bender (15 March 2004). Mitchell Wand. 1989. • Daniel P. 1981. online publication (http:// www. Pratt and Marvin V.brown.).html)]] (2nd ed. • Maurizio Gabbrielli and Simone Martini: "Programming Languages: Principles and Paradigms". American Scientist 94 (4): 299–303. • Terrence W. org/ classics/ oct95/ ). Christopher T.

while high-level layers deal with the business logic of the program. abstraction can apply to control or to data: Control abstraction is the abstraction of actions while data abstraction is that of data structures. The concept originated by analogy with abstraction in mathematics. The inheritance mechanism in object-oriented programming can be used to define an abstract class as the common interface. The requirement that a programming language provide suitable abstractions is also called the abstraction principle. in both computing and in mathematics.a concept or idea not associated with any specific instance[1] Abstraction captures only those details about an object that are relevant to the current perspective. but this is not a restriction because the computing concept of number is still based on the mathematical concept. For example. • Control abstraction involves the use of subprograms and related concepts control flows • Data abstraction allows handling data bits in meaningful ways. One can regard the notion of an object (from object-oriented programming) as an attempt to combine abstractions of data and code. In computer programming. abstraction is the process by which data and programs are defined with a representation similar in form to its meaning (semantics).99-bottles-of-beer. numbers are concepts in the programming languages. it is the basic motivation behind at the Open Directory Project Abstraction In computer science. The same abstract definition can be used as a common interface for a family of objects with different implementations and behaviors but which share the same meaning. Abstraction tries to reduce and factor out details so that the programmer can focus on a few concepts at a time. • Computer Programming Languages (http://www.dmoz. The recommendation that programmers use abstractions whenever suitable in order to avoid duplication (usually of code) is known as the abstraction principle. . low-level abstraction layers expose details of the computer hardware where the program is run. The mathematical technique of abstraction begins with mathematical definitions. The following English definition of abstraction helps to understand how this term applies to computer science. Implementation details depend on the hardware and software. For example. as founded in mathematics. For example.Programming language 64 External links • 99 Bottles of Beer (http://www. IT and objects: abstraction . A system can have several abstraction layers whereby different meanings and amounts of detail are exposed to the A collection of implementations in many languages. while hiding away the implementation details. making it a more technical approach than the general concept of abstraction in philosophy.

which allow domain-specific concepts to be expressed in some optimised way. Computer languages can be processed with a computer. An example of this abstraction process is the generational development of programming languages from the machine language to the assembly language and the high-level language. the concept of abstraction has itself become a declarative statement . C or Java.Abstraction 65 Rationale Computing mostly operates independently of the concrete world: The hardware implements a model of computation that is interchangeable with others. and the software component. be implemented in any modern Lisp with significantly reduced (but still non-trivial in some cases) effort when compared to "more traditional" programming languages such as Python. in principle. abstract away tedious function call sequences. The software engineer and writer Joel Spolsky has criticised these efforts by claiming that all abstractions are leaky — that they can never completely hide the details below. A consequence of syntactic abstraction is also that any Lisp dialect and in fact almost any programming language can. higher-order functions (parameters are functions). Some other abstractions such as software design patterns and architectural styles remain invisible to a programming language and operate only in the design of a system. for example a programming language may contain a foreign function interface for making calls to the lower-level language.using the keywords virtual (in C++) or abstract (in Java). The language abstraction continues for example in scripting languages and domain-specific programming languages. implement or even build Domain Specific Languages (DLSs). such as lambda abstractions (making a term into a function of some variable). implement new control flow structures. These architectures are made of specific choices of abstractions. or Java. Scheme and Common Lisp support macro systems to allow syntactic abstraction. A central form of abstraction in computing is language abstraction: new artificial languages are developed to express specific aspects of a system. Some abstractions try to limit the breadth of concepts a programmer needs by completely hiding the abstractions they in turn are built on. improve both the programmer's efficiency and the clarity of the code by making the intended purpose more explicit. some features let the programmer create new abstractions. Greenspun's Tenth Rule is an aphorism on how such an architecture is both inevitable and complex. however this does not negate the usefulness of abstraction. Within a programming language. the module. depending on the intended applications for the language. it is the responsibility of the programmer to implement a class to instantiate the object of the declaration. when used correctly. These include the subroutine. All of these. bracket abstraction (making a term into a function of a variable). This allows a Lisp programmer to eliminate boilerplate code. The software is structured in architectures to enable humans to create the enormous systems by concentration on a few issues at a time. Object Pascal. Each stage can be used as a stepping stone for the next stage. . After such a declaration. • Modern Lisps such as Clojure. • Functional programming languages commonly exhibit abstractions related to functions. For example: • In object-oriented programming languages such as C++. Language features Programming languages Different programming languages provide different types of abstraction. Modeling languages help in planning. Some abstractions are designed to interoperate with others.

Some known methods include: • • • • • Abstract-model based method (VDM. storing the binary representation of "15" to that memory location. and then assign that value to the variable "a". involves additional 'behind-the-scenes' steps of looking up a variable's label and the resultant location in physical or virtual memory. are actually quite subtle and complex. Gist). the low-level steps necessary to carry out this evaluation. CLEAR. The values need to be converted to binary representation (often a much more complicated task than one would think) and the calculations decomposed (by the compiler or interpreter) into assembly instructions (again. consider this statement written in a Pascal-like fashion: a := (1 + 2) * 5 To a human. times five is fifteen"). The UML specification language. allows the definition of abstract classes. Programming languages allow this to be done in the higher level. Finally. Knowledge-based techniques (Refine. Without control abstraction. since specifications are typically defined earlier in a project (and at a more abstract level) than an eventual implementation. Trace-based techniques (SPECIAL. TAM). However. a programmer would need to specify all the register/binary-level steps each time he simply wanted to add or multiply a couple of numbers and assign the result to a variable. Process-based techniques (LOTOS. or adding the binary complement of the contents of one register to another. for example. are simply not how humans think about the abstract arithmetical operations of addition or multiplication). Control abstraction Programming languages offer control abstraction as one of the main purposes of their use. it forces the programmer to constantly repeat fairly common tasks every time a similar operation is needed 2.Abstraction 66 Specification methods Analysts have developed various methods to formally specify software systems. Estelle). Algebraic techniques (Larch. assigning the resulting value of "15" to the variable labeled "a". For example. Such duplication of effort has two serious negative consequences: 1. SDL. which remain abstract during the architecture and specification phase of the project. Computer machines understand operations at the very low level such as moving some bits from one location of the memory to another location and producing the sum of two sequences of bits. etc. it forces the programmer to program for the particular hardware and instruction set . Z). CASL). this seems a fairly simple and obvious calculation ("one plus two is three. so that "a" can be used later. which are much less intuitive to the programmer: operations such as shifting a binary register left. Specification languages Specification languages generally rely on abstractions of one kind or another. ACT ONE. and return the value "15". OBJ.

is the beginning of abstraction. and in which values may be retrieved by specifying their corresponding keys. their inheritance concept tends to put information in the interface that more properly belongs in the implementation.Abstraction 67 Structured programming Structured programming involves the splitting of complex program tasks into smaller pieces with clear flow-control and interfaces between components. Languages that implement data abstraction include Ada and Modula-2. As far as client code is concerned. The idea is that such changes are not supposed to have any impact on client code. and indeed can change. For example. it may involve breaking down complex tasks into many different modules. Consider a system which handles payroll on ships and at shore offices: • The uppermost level may feature a menu of typical end-user operations. however. These layers produce the effect of isolating the implementation details of one component and its assorted internal methods from the others. • Within that could be standalone executables or libraries for tasks such as signing on and off employees or printing checks. changes to such information ends up impacting client code. Object-oriented languages are commonly claimed to offer data abstraction. enabling objects of different types to be substituted. report on and change their state. since any changes there can have major impacts on client code. abstraction involves the facility to define objects that represent abstract "actors" that can perform work. Data abstraction Data abstraction enforces a clear separation between the abstract properties of a data type and the concrete details of its implementation. leading directly to the Fragile binary interface problem. When abstraction proceeds into the operations defined. As one way to look at this: the interface forms a contract on agreed behaviour between the data type and client code. with reduction of the complexity potential for side-effects. Abstraction in object oriented programming In object-oriented programming theory. • Within each of those standalone components there could be many different source files. The term encapsulation refers to the hiding of state details. each containing the program code to handle a part of the problem. anything not spelled out in the contract is subject to change without notice. with only selected interfaces available to other parts of the program. one could define an abstract data type called lookup table which uniquely associates keys with values. Of course. The abstract properties are those that are visible to client code that makes use of the data type—the interface to the data type—while the concrete implementation is kept entirely private. for example to incorporate efficiency improvements over time. and "communicate" with other objects in the system. thus. Such a lookup table may be implemented in various ways: as a hash table. and that data transfer task will often contain many other components. it is called polymorphism. since they involve no difference in the abstract behaviour. In a larger system. a binary search tree. and standardizing the way that different data types interact. In a simple program. • Either the database or the payroll application also has to initiate the process of exchanging data with between ship and shore. this all relies on getting the details of the interface right in the first place. the abstract properties of the type are the same in each case. this may aim to ensure that loops have single or obvious exit points and (where possible) to have single exit points from functions and procedures. but extending the concept of data type from earlier programming languages to associate behavior most strongly with the data. When it proceeds in the opposite . or even a simple linear list of (key:value) pairs. Object-oriented programming embraced and extended this concept. A sign on program could have source files for each data entry screen and the database interface (which may itself be a standalone third party library or a statically linked set of library routines).

one could create objects of type Animal and call their methods like this: thePig = new Animal(). C++ exemplifies another extreme: it relies heavily on templates and overloading and other static bindings at compile-time. Consider for example a sample Java fragment to represent some common farm "animals" to a level of abstraction suitable to model simple aspects of their hunger and feeding.getCalories(). Although not as generally supported. feature less of a class-instance distinction and more use of delegation for polymorphism. public boolean isHungry() { return energyReserves < 2.moveTo(theBarn). } public void moveTo(Location l) { // Move to new location loc = l. } theCow. private double energyReserves.5. it is called delegation or inheritance.Abstraction direction. they do not fundamentally alter the need to support abstract nouns in code . link-time. and either as processes. 68 .eat(grass). It defines an Animal class to represent both the state of the animal and its functions: public class Animal extends LivingThing { private Location loc. This would leave only a minimum of such bindings to change at run-time. } if (theCow. inside the types or classes. theCow = new Animal(). Various object-oriented programming languages offer similar facilities for abstraction. which in turn has certain flexibility problems. all to support a general strategy of polymorphism in object-oriented programming. nouns as data if (thePig. } public void eat(Food f) { // Consume food energyReserves += f. Although these examples offer alternate strategies for achieving the same abstraction. for example.isHungry()) { theCow. } } With the above definition. a configuration or image or package may predetermine a great many of these bindings at compile-time.isHungry()) { thePig. structuring them to simplify a complex set of relationships.all programming relies on an ability to abstract verbs as functions. which includes the substitution of one type for another in the same or similar role. Individual objects and functions are abstracted more flexibly to better fit with a shared functional heritage from Lisp. or loadtime. Common Lisp Object System or Self.

the domain is the barnyard. steers) who would eat foods to give the best meat-quality. abstraction refers to the act of considering a less detailed. That is. say. Abstraction is defined to a concrete (more precise) model of execution. goats) who would eat foods suitable to giving good milk. one must make many small decisions about scope (domain analysis). formal methods or abstract interpretation. The level of abstraction included in a programming language can influence its overall usability. data type by data type. but in general each can achieve anything that is possible with any of the others. If one requires a more differentiated hierarchy of animals — to differentiate. those who provide milk from those who provide nothing except meat at the end of their lives — that is an intermediary level of abstraction. The two classes could be related using inheritance or stand alone. if we wish to know what the result of the evaluation of a mathematical expression involving only integers +. though not necessarily exact. the detailed analysis is that coders must have the flexibility to feed the animals what is available and thus there is no reason to code the type of food into the class itself. is worth modulo n. A decision to differentiate DairyAnimal would change the detailed analysis but the domain and legacy analysis would be unchanged—thus it is entirely under the control of the programmer. and the design is a single simple Animal class of which pigs and cows are instances with the same functions. Abstractions. the live pigs and cows and their eating habits are the legacy constraints. one may simply compare that person's age with the minimal and maximal ages. if his age lies outside the range. we may abstract the students in a class by their minimal and maximal ages. should be sound. Such an abstraction could remove the need for the application coder to specify the type of food. -. The class notation is simply a coder's convenience. can have the same effect at compile-time as any degree of inheritance or other means to achieve polymorphism. definition of the observed program behaviors. For instance. determine what other systems one must cooperate with (legacy analysis). In general. one may only answer "I don't know".Abstraction In the above example. the class Animal is an abstraction used in place of an actual animal. if one asks whether a certain person belongs to that class. and we refer to abstraction in object-oriented programming as distinct from abstraction in domain or legacy analysis. For instance. Abstraction may be exact or faithful with respect to a property if one can answer a question about the property equally well on the concrete or abstract model. A great many operation overloads. and the programmer could define varying degrees of polymorphism between the two types. The Cognitive dimensions framework includes the concept of abstraction gradient in a formalism. if it does not. then perform a detailed object-oriented analysis which is expressed within project time and budget constraints as an object-oriented design. to determine appropriate abstraction. This framework allows the . probably DairyAnimal (cows. These facilities tend to vary drastically between languages. so s/he could concentrate instead on the feeding schedule. LivingThing is a further abstraction (in this case a generalisation) of Animal. it should be possible to get sound answers from them—even though the abstraction may simply yield a result of undecidability. Considerations When discussing formal semantics of programming languages. ×. we need only perform all operations modulo n (a familiar form of this abstraction is casting out nines). and MeatAnimal (pigs. but safe. In our simple example. For instance. one may observe only the final result of program executions instead of considering all the intermediate steps of executions. one may safely answer that the person does not belong to the class. however. 69 Object-oriented design Decisions regarding what to abstract and what to keep under the control of the coder become the major concern of object-oriented design and domain analysis—actually determining the relevant relationships in the real world is the concern of object-oriented analysis or legacy analysis.

Although implementation of the simple structures at the logical level may involve complex physical Data abstraction levels of a database system level structures.Abstraction designer of a programming language to study the trade-offs between abstraction and other characteristics of the design. Each level is embodied. Many users of a database system do not need all this information. or precision (they may answer "I don't know" to some questions). Database systems Since many users of database systems lack in-depth familiarity with computer data-structures. and how changes in abstraction influence the language usability. 70 Levels of abstraction Computer science commonly presents levels (or. . As a consequence. wherein each level represents a different model of the same information and processes. automatic methods for deriving information on the behavior of computer programs either have to drop termination (on some occasions. Logical level: The next higher level of abstraction describes what data the database stores. View level: The highest level of abstraction describes only part of the entire database. The view level of abstraction exists to simplify their interaction with the system. database developers often hide complexity through the following levels: Physical level: The lowest level of abstraction describes how a system actually stores data. "lower" level. [2] Each relatively abstract. instead. For example. This referred to as Physical Data Independence. machine language on binary. use the logical level of abstraction. but not determined. Model checking generally takes place on abstract versions of the studied systems. crash or never yield out a result). Database administrators. but uses a system of expression involving a unique set of objects and compositions that apply only to a particular domain. gates build on electronic circuits. applications and operating systems on programming languages. Abstractions can prove useful when dealing with computer programs. making it a language of description that is somewhat self-contained. layers) of abstraction. binary on gates. Even though the logical level uses simpler structures. because non-trivial properties of computer programs are essentially undecidable (see Rice's theorem). they need to access only a part of the database. soundness (they may provide false information). less commonly. Abstraction is the core concept of abstract interpretation. The system may provide many views for the same database. they may fail. who must decide what information to keep in a database. The logical level thus describes an entire database in terms of a small number of relatively simple structures. the user of the logical level does not need to be aware of this complexity. by the level beneath it. which tends to provide an increasingly "granular" representation. and what relationships exist among those data. programming language on machine language. complexity remains because of the variety of information stored in a large database. "higher" level builds on a relatively concrete. The physical level describes complex low-level data structures in detail.

Levellism and the Method of Abstraction (http:/ / www. • Spolsky. com/ abstraction) [2] Luciano Floridi. 2002).mit. net/ pdf/ latmoa. thefreedictionary. MIT Press.11.html). hardware. "The Law of Leaky Abstractions" (http://www. [1] Thefreedictionary. Notes This article is based on material taken from the Free On-line Dictionary of Computing prior to 1 November 2008 and incorporated under the "relicensing" terms of the 08_abstraction.). Julie Sussman (25 July 1996).html) . • Gorodinski.cs.CS211 course.04 Further reading • Harold Abelson. Structure and Interpretation of Computer Programs (http://mitpress.html) (2 ed. "Abstractions" (http://gorodinski. pdf) IEG – Research Report 22.3 or later. philosophyofinformation. Retrieved 22 June 2012. .com/blog/2012/05/31/abstractions/). version articles/LeakyAbstractions. and communications in which system or network components are isolated in layers so that changes can be made in one layer without affecting the others. Layered architecture partitions the concerns of the application into stacked groups (layers). • Abstraction/information hiding (http://www.Abstraction 71 Layered architecture The ability to provide a design of different levels of abstraction can • simplify the design considerably • enable different role players to effectively work at various levels of abstraction Systems design and business process design can both use this. Lev (31 May. Cornell Some design processes specifically generate designs that contain various levels of abstraction. 2012).com (http:/ / www. Joel (11 November.joelonsoftware. Joel on Software. It is a technique used in designing computer software. Gerald Jay Sussman. ISBN 978-0-262-01153-2.

Fran Bilas and Ruth Lichterman were the first regularly working programmers. It had also been an unofficial international holiday before that.) is often prefixed to the above titles. members of these professions typically Student programmers at the Technische Hochschule in Aachen. and outsiders who continue to be puzzled at the subtle differences in the definitions of these occupations. and those who work in a Web environment often prefix their titles with Web. beyond programming. Embedded Firmware Developer. the term programmer is sometimes considered an insulting or derogatory oversimplification of these other professions. Many professional programmers also work for consulting companies at client sites as contractors. although professional certifications are commonly held by programmers. computer programmer. This has sparked much debate amongst developers. The term computer programmer can refer to a specialist in one area of computer programming or to a generalist who writes code for many kinds of software. software engineer. in October 1842. Germany in 1970 possess other software engineering skills. or software analyst. Programming is widely considered a profession (although some authorities disagree on the grounds that only careers with legal licensing requirements count as a profession). Web Developer. analysts. A programmer's primary computer language (C. intended for the calculation of Bernoulli numbers. Mobile Applications Developer. One who practices or professes a formal approach to programming may also be known as a programmer analyst. Java.[9] In 2009. as she was the first to express an algorithm intended for implementation on a computer.Programmer 72 Programmer A programmer. big software companies. Job titles and descriptions may vary. Many technical innovations in programming — advanced computing technologies and sophisticated new languages and programming tools — have redefined the role of a programmer and elevated much of the programming work done today. Programmers work in many settings. The term programmer can be used to refer to a software developer. C++. which is in the public domain as a work of the United States Government.[1][2][3][4][5] British countess and mathematician Ada Lovelace is popularly credited as history's first programmer. consisting of Kay McNulty. Python etc. for this reason. or coder is a person who writes computer software. computer scientists. Programmers also conceive. Nature of the work Some of this section is from the Occupational Outlook Handbook [10]. programmers. the instructions involved in updating financial records are very different from those required to duplicate . Lisp. 2006–07 Edition. that computers must follow to perform their functions. and small service firms. The ENIAC programming team. Betty Jennings. developer. Computer programmers write. Licensing is not typically required to work as a programmer. and test logical structures for solving problems by computer. For example. However. the government of Russia decreed a professional annual holiday known as Programmers' Day to be celebrated on September 13 (September 12 in leap years). called computer programs. who achieved this feat in 1941. debug. Marlyn Wescoff. Betty Snyder.[7][8] International Programmers' Day is celebrated annually on January 7. the first programmer to successfully run a program on a functioning modern electronically based computer was pioneer computer scientist Konrad Zuse. Programmers' work varies widely depending on the type of business for which they are writing programs. Charles Babbage's analytical engine. computer scientist. and maintain the detailed instructions. design.[6] Her work never ran because Babbage's machine was never completed to a functioning standard in her time. including corporate information technology ("IT") departments. test. depending on the organization.

. whereas Fortran is used in science and engineering. in which case the programmer may elect to test by inspection which involves a human inspecting the code on the relevant execution path. write programs to maintain and control computer systems software. In most cases. they often can learn new languages relatively easily.g. As they are identified. Programmers may contribute to user guides and online help. Programmers may continue to fix these problems throughout the life of a program. or Web developers. COBOL. repairing. Programmers write programs according to the specifications determined primarily by more senior programmers and by systems analysts. in contrast. They also may revise existing packaged software or customize generic applications which are frequently purchased from independent software vendors. such as operating systems and database management systems. They do this by inserting comments in the source code so that others can understand the program more easily. 73 Testing and debugging Programmers test a program by running it and looking for bugs (errors). It may be difficult to properly assess whether the term is being used euphemistically. This approach yields more reliable and consistent programs and increases programmers' productivity by eliminating some routine steps. as Java programmers. perhaps hand-executing the code. is commonly used for business applications that typically run on mainframe and midrange computers. Certain scenarios or execution paths may be difficult to test. Java. Programmers generally know more than one programming language and. Different programming languages are used depending on the purpose of the program. or by the type of function they perform or environment in which they work: for example. These workers make changes in the instructions that determine how the network. then rechecks the program until an acceptably low level and severity of bugs remain. To save work. In practice. Test by inspection is also sometimes used as a euphemism for inadequate testing. such as a program to track inventory within an organization. After the design process is complete. e. This process is called testing and debugging. because many languages are similar. for example. Systems programmers. it is the job of the programmer to convert that design into a logical series of instructions that the computer can follow. Updating. programs that use complex mathematical formulas whose solutions can only be approximated or that draw data from many existing systems may require more than a year of work. programmers need to make other programmers aware of the task that the routine is to perform. These are important parts of every programmer's job. programmers often are referred to by the language they know. When making changes to the source code that programs are made up of.Programmer conditions on an aircraft for pilots training in a flight simulator. C# and PHP are popular programming languages for Web and business applications. programmers often use libraries of basic code that can be modified or customized for a specific application. and expanding existing programs is sometimes called maintenance programming. several programmers work together as a team under a senior programmer’s supervision. database programmers. the programmer usually makes the appropriate corrections. Application versus system programming Computer programmers often are grouped into two broad types: application programmers and systems programmers. Application programmers write programs to handle a specific job. Although simple programs can be written in a few hours. or they may work with technical writers to do such work. mainframe programmers. workstations. and CPU of the system handle the various jobs they have been given and how they communicate with peripheral equipment such as printers and disk drives. C++ is widely used for both scientific and business applications. modifying. The programmer codes these instructions in one of many programming languages.

[11] The UK category system does. Programming of packaged software constitutes one of the most rapidly growing segments of the computer services industry. programmers and unions counter that large companies are exaggerating their case in order to obtain cheaper programmers from developing countries and to avoid paying for training in very specific technologies. and the Flickr photo-sharing service. In addition.Programmer 74 Types of software Programmers in software development companies may work directly with experts from various fields to create software — either programs designed for specific clients or packaged software for general use — ranging from computer and video games to educational software to programs for desktop publishing and financial planning. This situation has resulted in confusion about whether the U. For example. . the rise of the Internet has made Web development a huge part of the programming field. however. The transition from a mainframe environment to one that is based primarily on personal computers (PCs) has blurred the once rigid distinction between the programmer and the user.S. However. In some organizations. comparative advantages. the growing use of packaged software. economy is entering a "post-information age" and the nature of U.S. class such degrees as Information technology and Game design as 'computer science'. Programming was even mentioned in the 2004 U. Large companies claim there is a skills shortage with regard to programming talent. adept end users are taking over many of the tasks previously performed by programmers.S. somewhat inflating the actual figure. but if those are subject to free trade losses. Enrollment in computer-related degrees in U.S.S. Examples of such applications include the Google search service. Technology and software jobs were supposed to be the replacement for factory and agriculture jobs lost to cheaper foreign labor. U. allows users to write simple programs to access data and perform calculations. has dropped recently due to lack of general interests in science and mathematics and also out of an apparent fear that programming will be subject to the same pressures as manufacturing and agriculture careers. particularly small ones.[12] Market changes in the USA Computer programming. offshore outsourcing. and Foreign Worker Visas became a controversial topic after the crash of the dot com bubble left many programmers without work or with lower wages. such as spreadsheet and database management software packages. then the nature of the next generation of replacement careers is not clear at this point. workers commonly known as programmer analysts are responsible for both the systems analysis and the actual programming work. Presidential debate on the topic of offshore outsourcing. the Hotmail e-mail service. More and more software applications nowadays are Web applications that can be used by anyone with a Web browser. Globalization Market changes in the UK According to BBC. Increasingly. 17% of computer science students could not find work in their field 7 months after graduation in 2009 which was the highest rate of the university majors surveyed while 0% of medical students were unemployed in the same survey.

htm) and "Computer Software Engineer" (http://www.. newleftreview. Software Engineer" (http:/ / www.htm) and statistics for employed "Computer Programmers" (http://www. Developer vs. bbc. [6] J. ac. March-April 2010. [9] "International Programmers' Day" (http:/ / bls. "Lovelace & Babbage and the creation of the 1843 'notes'.org. gov/ oco/ ocos110.mines. . html). 125-132. plymouth.go. doi. Eniacprogrammers. External links • "The Future of IT Jobs in America" article (http://www. [5] "Programmer vs. Digital Object Identifier (http:/ / dx. aspx). uk/ pages/ view. ericsink. com/ archive/ index. Retrieved 2010-10-03. org/ ).html) . 3. lewallen/ archive/ 2005/ 02/ 22/ 55812. xtremevbtalk. co. com/ No_Programmers. com/ blogs/ raymond. . . [2] "Developer versus programmer" (http:/ / internationalprogrammersday. asp?page=23727) ATAS classifications (University of Plymouth) Further reading • Weinberg. 2003.An overview of the challenges of being a programmer • The US Department of Labor's description of "Computer Programmer" (http://www. php/ joelonsoftware. Fuegi and J. 1253887) [7] "ENIAC Programmers Project" (http:/ / eniacprogrammers. com/ Technology/ story?id=3951187& page=1). [8] "ABC News: First Computer Programmers Inspire Documentary" (http:/ / abcnews. Software Engineer" (http:/ / discuss. Retrieved 2010-10-03. Rob. uk/ news/ 10477551) from the BBC [12] (http:/ / www. The Psychology of Computer Programming. html). Gerald M. 2007-12-04. 25. New York: Van Nostrand • How to be a programmer (http://samizdat.bls. [3] "Developers AND Programmers" (http:/ / weblogs." Annals of the History of Computing 25 #4 (October–December 2003): 19. 112837. htm [11] "'One in 10' UK graduates unemployed" (http:/ / www. .Programmer 75 References [1] "No Programmers" (http:/ / www. New Left Review 62. net/ miked/ archive/ 2006/ 10/ 13/ _2200_Developers_2200_-and-_2200_Programmers_2200_. aspx). . . 1109/ MAHC. org/ 10. [10] http:/ / www.ideosphere. org). Developer vs.htm) . com/ asp?joel. [4] "Programmer go. "Dreaming in Code" (http://www. 37). . . 1971 • An experiential study of the nature of programming work: Lucas. Abcnews. asp.bls. pp.

e. a process that may involve many primitives in the target machine language. • convert from one data type to another before finally • performing the final store operation to the target destination. however. can generate thousands or even millions of primitives in a low level language . Some HLL statements. usually generated by an assembler program.Language primitive 76 Language primitive In computing. a semantic value in the language. first. based on their positions within a data structure. Machine level primitives A machine instruction. or can be an atomic element of an expression in a language. There are some elements of interpreted language primitives embodied in 4gl and 5gl specifications but the approach to the original problem is less a procedural language construct and are more oriented toward problem solving and systems engineering. Micro code primitives Many of today's computers. language primitives are the simplest elements available in a programming language. A primitive can be defined as the smallest 'unit of processing' available to a programmer of a particular machine. High level language primitives A high-level programming language (HLL) program is composed of discrete statements and primitive data types that may also be perceived to perform a single operation or represent a single data item. i. Fourth and Fifth-generation programming language primitives 4gls and 5gls do not have a simple one-to-many correspondence from high-to-low level primitives. . It typically performs what is perceived to be one single operation such as copying a byte or string of bytes from one memory location to another or adding one processor register to another. actually embody an even lower unit of processing known as microcode which interprets the "machine code" and it is then that the microcode instructions would be the genuine primitives. Primitives are units with a meaning. for instance. particularly those involving loops. Before the statement can be executed in a manner very similar to a HLL statement. Copying a data item from one location to another may actually involve many machine instructions that. These instructions would typically be available for modification only by the hardware vendors programmers. Thus they're different from tokens in a parser. • calculate the address of both operands in memory. is often considered the smallest unit of processing although this is not always the case. which are the minimal elements of syntax. it has to be processed by an interpreter.which comprise the genuine instruction path length the processor has to execute at the lowest level. This perception has been referred to as the "Abstraction penalty" [1][2][3] Interpreted language primitives An interpreted language statement has similarities to the HLL primitives but with a further added 'layer'. but at a more abstract level than those provided by the machine.

microcontroller. and to aid debugging. in which each statement corresponds to a single machine code instruction. (ftp:/ / lispnyc. Assembly language is converted into executable machine code by a utility program referred to as an assembler. especially for RISC architectures. Many assemblers offer additional mechanisms to facilitate program development. and that name can be used to insert the text into other code. google. or other programmable device. Procedural Programming Languages" (http:/ / books. saving tedious calculations and manual address updates after program modifications. optimize Instruction scheduling to exploit the CPU pipeline efficiently. Retrieved 2008-03-17. Macro assemblers include a macroinstruction facility so that assembly language text can be pre-assigned to a name. Strohmeier. com/ joop/ article. in contrast to most high-level programming languages.Language primitive 77 References [1] Surana P (2006) (PDF). "Evaluating Performance and Power Of Object-Oriented Vs. [2] Kuketayev. Stephanides (2002). . com/ ?id=QMalP1P2kAMC& dq="abstraction+ penalty"). An assembly language is a low-level programming language for a computer. In Blieberger. Meta-Compilation of Language Abstractions. Motorola MC6800 Assembly Language Key concepts Assembler An assembler creates object code by translating assembly instruction mnemonics into opcodes. and most assemblers can take labels and symbols as operands to represent addresses and constants. Springer.. the conversion process is referred to as assembly. . pdf).Ada-Europe'2002. such as SPARC or POWER. Assembly language uses a mnemonic to represent each low-level machine operation or opcode. 367. Each assembly language is specific to a particular computer architecture. Most assemblers also include macro facilities for performing textual substitution—e. Proceedings . Assemblers have been available since the 1950s and are far simpler to write than compilers for high-level languages as each mnemonic instruction / address mode combination translates directly into a single machine language opcode. ISBN 978-3-540-43784-0. Modern assemblers.[1] The use of symbolic references is a key feature of assemblers. [3] Chatzigeorgiou. Retrieved 2008-03-17. which are generally portable across multiple systems. Some opcodes require one or more operands as part of the instruction. instead of hard coding them into the program. pp. to generate common short sequences of instructions as inline. org/ meeting-assets/ 2007-02-13_pinku/ SuranaThesis. Assembly language See the terminology section below for information regarding inconsistent use of the terms assembly and assembler. to control the assembly process.g. and by resolving symbolic names for memory locations and other entities.7th International Conference on Reliable Software Technologies . as well as x86 and x86-64. aspx?id=4597)." (http:/ / www. instead of called subroutines. "The Data Abstraction Penalty (DAP) Benchmark for Small Objects in Java. . . or assembling the code. adtmag.

[2] High-level assemblers More sophisticated high-level assemblers provide language abstractions such as: • • • • Advanced control structures High-level procedure/function declarations and invocations High-level abstract data types. This means that if the size of an operation referring to an operand defined later depends on the type or distance of the operand. polymorphism. at least. classes. 78 Assembly language A program written in assembly language consists of a series of (mnemonic) processor instructions and meta-statements (known variously as directives. Any symbol used before it is defined will require "errata" at the end of the object code (or. abstraction. arguments or parameters. and sets Sophisticated macro processing (although available on ordinary assemblers since the late 1950s for IBM 700 series and since the 1960s for IBM/360. objects. B0 means 'Move a copy of the following value into AL'. Assembly language instructions usually consist of an opcode mnemonic followed by a list of data. amongst other machines) • Object-oriented programming features such as classes. • One-pass assemblers go through the source code once. so the following machine code loads the AL register with the data 01100001.[5] 10110000 01100001 This binary computer code can be made more human-readable by expressing it in hexadecimal as follows B0 61 Here. including structures/records. In both cases. The advantage of the multi-pass assembler is that the absence of errata makes the linking process (or the program load if the assembler directly produces executable code) faster. The original reason for the use of one-pass assemblers was speed of assembly— often a second pass would require rewinding and rereading a tape or rereading a deck of cards. In an assembler with peephole optimization addresses may be recalculated between passes to allow replacing pessimistic code with code tailored to the exact distance from the target. the assembler will make a pessimistic estimate when first encountering the operation. The binary code for this instruction is 10110 followed by a 3-bit identifier for which register to use. the assembler must be able to determine the size of each instruction on the initial passes in order to calculate the addresses of subsequent symbols. unions. Modern computers perform multi-pass assembly without unacceptable delay. pseudo-instructions and pseudo-ops). • Multi-pass assemblers create a table with all symbols and their values in the first passes. no earlier than the point where the symbol is defined) telling the linker or the loader to "go back" and overwrite a placeholder which had been left where the as yet undefined symbol was used. For example. and 61 is a hexadecimal representation of the value 01100001.[4] These are translated by an assembler into machine language instructions that can be loaded into memory and executed. which is 97 in decimal. then use the table in later passes to generate code. comments and data. and inheritance[3] See Language design below for more details. and if necessary pad it with one or more "no-operation" instructions in a later pass or the errata. the instruction that tells an x86/IA-32 processor to move an immediate 8-bit value into a register. Intel assembly language provides the mnemonic MOV (an abbreviation of move) . The identifier for the AL register is 000.Assembly language Number of passes There are two types of assemblers based on how many passes through the source are needed to produce the executable program.

1h MOV CL. there is usually a one-to-one correspondence between simple assembly statements and machine language instructions.Assembly language for instructions such as this. Load DL with immediate value 3 The syntax of MOV can also be more complex as the following examples show. Computers differ in the number and type of operations they support. LR for "move register to register". MOV AL. an assembler may provide pseudoinstructions (essentially macros) which expand into several machine language instructions to provide commonly needed functionality. after the semicolon.[5] Transforming assembly language into machine code is the job of an assembler. and the reverse can at least partially be achieved by a disassembler. ST for "move register to memory". Move the 4 bytes in memory at the address contained in EBX into EAX MOV [ESI+EAX]. For example. Unlike high-level languages. B0-B8. Most full-featured assemblers also provide a rich macro language (discussed below) which is used by vendors and programmers to generate more complex code and data sequences.[6] MOV EAX. typically instantiated in different assembler programs. or memory locations pointed to by values in registers. Assembly language examples for these follow. whether these are immediate values. While most general-purpose computers are able to carry out essentially the same functionality. Load AL with 97 decimal (61 hex) 79 In some assembly languages the same mnemonic such as MOV may be used for a family of related instructions for loading. This is much easier to read and to remember. Multiple sets of mnemonics or assembly-language syntax may exist for a single instruction set. values in registers. . and in the representations of data in storage. the corresponding assembly languages reflect these differences. Load AL with immediate value 1 . However. Load CL with immediate value 2 . MVI for "move immediate operand to memory". C6 or C7 by an assembler. complete with an explanatory comment if required. the MOV mnemonic is translated directly into an opcode in the ranges 88-8E. the most popular one is usually that supplied by the manufacturer and used in its documentation.[5] MOV AL. Move the contents of CL into the byte at address ESI+EAX In each case. In these cases. in some cases. copying and moving data. Other assemblers may use separate opcodes such as L for "move memory to register". The Intel opcode 10110000 (B0) copies an 8-bit value into the AL register. in the different sizes and numbers of registers. etc. 3h . the ways they do so differ. so the machine code above can be written as follows in assembly language. CL . and the programmer does not have to know or remember which. 61h . [EBX] . A0-A3. while 10110001 (B1) moves it into CL and 10110010 (B2) does so into DL. for a machine that lacks a "branch if greater or equal" instruction. 2h MOV DL. Each computer architecture has its own machine language. an assembler may provide a pseudoinstruction that expands to the machine's "set if less than" and "branch if zero (on the result of the set instruction)".

Most instructions refer to a single value.b.g.[8] These are sometimes known as instruction as nop. For example..bc is recognized to generate ld l. are instructions that are executed by an assembler at assembly time. For instance. Operands can be immediate (value coded in the instruction itself). They also can be used to manipulate presentation of a program to make it easier to read and maintain.Assembly language 80 Language design Basic elements There is a large degree of diversity in the way the authors of assemblers categorize statements and in the nomenclature that they use. . A typical assembly language consists of 3 types of instruction statements that are used to define program operations: • Opcode mnemonics • Data sections • Assembly directives Opcode mnemonics and extended mnemonics Instructions (statements) in assembly language are generally very simple. the System/360 assemblers use B as an extended mnemonic for BC with a mask of 15 and NOP for BC with a mask of 0. registers specified in the instruction or and there is at least one opcode mnemonic defined for each machine language instruction. with nop being a pseudo-opcode to encode the instruction xchg ax. Extended mnemonics are often used to specify a combination of an opcode with a specific operand. perhaps for different applications. a mnemonic is a symbolic name for a single executable machine language instruction (an opcode). not by a CPU at run time. e. unlike those in high-level language. some describe anything other than a machine mnemonic or extended mnemonic as a pseudo-operation (pseudo-op). with some Z80 assemblers the instruction ld hl. Assembly directives Assembly directives. This is determined by the underlying processor architecture: the assembler merely reflects how this architecture works. Each instruction typically consists of an operation or opcode plus zero or more operands. IBM assemblers for System/360 and System/370 use the extended mnemonics NOP and NOPR for BC and BCR with zero masks. Generally. but do have instructions that can be used for the purpose. or a pair of values. the length and the alignment of data. These instructions can also define whether the data is available to outside programs (programs assembled separately) or only to the program in which the data section is defined. In particular. They can make the assembly of the program dependent on parameters input by a programmer. For the SPARC architecture. these are known as synthetic instructions[7] Some assemblers also support simple built-in macro-instructions that generate two or more machine instructions. Some assemblers classify these as pseudo-ops. pseudo-operations or pseudo-ops. or the addresses of data located elsewhere in storage. Extended mnemonics are often used to support specialized uses of is used for nop.) The names of directives often start with a dot to distinguish them from machine instructions. In 8086 CPUs the instruction xchg ax. directives would be used to reserve storage areas and optionally their initial contents. They define the type of data. also called pseudo opcodes.c followed by ld h. many CPU's do not have an explicit NOP instruction. so that one program can be assembled different ways. (For example. often for purposes not obvious from the instruction name. Some disassemblers recognize this and will decode the xchg ax. Data sections There are instructions used to define data elements to hold data and variables. Similarly.

Assembly languages. GOTO destinations are given labels. executed by interpretation by the assembler during assembly. An organization using assembly language that has been heavily extended using such a macro suite can be considered to be working in a higher-level language. the name of each subroutine is associated with its entry point. optionally introduce embedded debugging code via parameters and other similar features. C macro's created through the #define directive typically are just one line.g. they can be used to make assembly language programs appear to be far shorter. as the meaning and purpose of a sequence of instructions is harder to decipher from the code itself. for example. conditionals. like the C programming language. all usable during the execution of a given macro. Macro assemblers often allow macros to take parameters. Once a macro has been defined its name may be used in place of a mnemonic. incorporating such high-level language elements as optional parameters. Some assemblers include quite sophisticated macro languages. This sequence of text lines may include opcodes or directives. expansion of any macros existing in the replacement text). it replaces the statement with the text lines associated with that macro. This was done. and others support programmer-defined (and repeatedly re-definable) macros involving sequences of text lines in which variables and constants are embedded. the use of "10$" as a GOTO destination). string manipulation. or data definitions—is quite difficult to read when changes must be made. 81 Macros Many assemblers support predefined macros. requiring fewer lines of source code. since such programmers are not working with a computer's lowest-level conceptual elements. every constant and variable is given a name so instructions can reference those locations by name. symbolic variables. Customer . and allowing macros to save context or exchange information. They can also be used to add higher levels of structure to assembly programs. and arithmetic operations. allow comments to be added to assembly source code that are ignored by the assembler. or a few lines at most. or could generate entire algorithms based on complex parameters. In executable code. Labels can also be used to initialize constants and variables with relocatable addresses. When the assembler processes such a statement. then processes them as if they existed in the source code file (including. automatically calculate offsets within data structures. as with higher level languages. like most other computer languages. based on the macro arguments. Macros were used to customize large scale software systems for specific customers in the mainframe era and were also used by customer personnel to satisfy their employers' needs by making specific versions of manufacturer operating systems. Some assemblers provide flexible symbol management. Since macros can have 'short' names but expand to several or indeed many lines of code. Raw assembly source code as generated by compilers or disassemblers—code without any comments. by systems programmers working with IBM's Conversational Monitor System / Virtual Machine (VM/CMS) and with IBM's "real time transaction processing" add-ons. Usually. meaningful symbols. so any calls to a subroutine can use its name.Assembly language Symbolic assemblers let programmers associate arbitrary names (labels or symbols) with memory locations. letting programmers manage different namespaces. thus promoting self-documenting code. Assembler macro instructions can be lengthy "programs" by themselves. Note that this definition of "macro" is slightly different from the use of the term in other contexts. and assign labels that refer to literal values or the result of simple computations performed by the assembler. This could be used to generate record-style data structures or "unrolled" loops. Good use of comments is even more important with assembly code than with higher-level languages. Wise use of these facilities can greatly simplify the problems of coding and maintaining low-level code. Thus a macro might generate a large number of assembly language instructions or data definitions.. Some assemblers support local symbols which are lexically distinct from normal symbols (e. in some assemblers. Inside subroutines. for example.

originally proposed by Dr.D. than generating object code. the macro expansion of load a-c*b occurs. The concept of macro processing appeared. the former being in modern terms more word processing. This approach was widely accepted in the early '80s (the latter days of large-scale assembly language use). There has been little apparent demand for more sophisticated assemblers since the decline of large-scale assembly language development. The language was classified as an assembler. to generate a version of a program in COBOL using a pure macro assembler program containing lines of COBOL code inside assembly time operators instructing the assembler to generate arbitrary code. To avoid any possible ambiguity.Assembly language Information Control System CICS. and make conditional tests on their values. the airline/financial system that began in the 1970s and still runs many large computer reservations systems (CRS) and credit card systems today. the C preprocessor was not Turing-complete because it lacked the ability to either loop or "go to". because it worked with raw machine elements such as opcodes. one of the main factors causing spaghetti code in assembly language. Parentheses and other special symbols. or callers can parenthesize the input parameters. text processing. The most famous class of bugs resulting was the use of a parameter that itself was an expression and not a simple name when the macro writer expected a name. the concept of "macro processing" is independent of the concept of "assembly".[10] This was a way to reduce or eliminate the use of GOTO operations in assembly code. and implemented by Marvin Kessler at IBM's Federal Systems Division.[9] 82 Support for structured programming Some assemblers have incorporated structured programming elements to encode execution flow. and what was reported to be the first commercial C compiler). registers. The earliest example of this approach was in the Concept-14 macro set.[11] In spite of that. but it incorporated an expression syntax to indicate execution order. and appears. Mills (March. in the C programming language. (developers of the Unix-like Idris operating system. controlled the sequence of the generated instructions. the value of a parameter is textually substituted for its name. along with block-oriented structured programming constructs. A-natural was built as the object language of a C compiler. which supports "preprocessor instructions" to set variables. for example. as was realized in the 1960s.[12] . In the macro: foo: macro a load a*b the intention was that the caller would provide the name of a variable. and the "global" variable or constant b would be used to multiply "a". This was because. rather than for hand-coding. which extended the S/360 macro assembler with IF/ELSE/ENDIF and similar control flow blocks. users of macro processors can parenthesize formal parameters inside macro definitions. the latter allowing programs to loop. but its logical syntax won some fans. 1970). Note that unlike certain previous macro processors inside assemblers. it fell into disuse in many high level languages (major exceptions being C/C++ and PL/I) while remaining a perennial for assemblers. a "stream-oriented" assembler for 8080/Z80 processors from Whitesmiths Ltd. and ACP/TPF. A curious design was A-natural. Macro parameter substitution is strictly by name: at macro processing time. they are still being developed and applied in cases where resource constraints or peculiarities in the target system's architecture prevent the effective use of higher-level languages. If foo is called with the parameter a-c. It was also possible to use solely the macro processing abilities of an assembler to generate code written in completely different languages. and memory references. H. Despite the power of macro processing.

their use had largely been supplanted by high-level languages. Assembly language has long been the primary development language for many popular home computers of the 1980s and 1990s (such as the Sinclair ZX Spectrum. According to some industry insiders.639 bytes in length. a console that was notoriously challenging to develop and program games for. and real-time systems.Assembly language 83 Use of assembly language Historical perspective Assembly languages date to the introduction of the stored-program computer. Typical examples of large assembly language programs from this time are IBM PC DOS operating systems and early applications such as the spreadsheet program Lotus 1-2-3. which was written in ESPOL. and Atari ST). SOAP (Symbolic Optimal Assembly Program) (1955) was an assembly language for the IBM 650 computer written by Stan Poley. imposed idiosyncratic memory and display architectures. They were once widely used for all sorts of programming. It also allowed address expressions which could be combined with addition. in the search for improved programming productivity. division. a large number of programs have been written entirely in assembly language. The assembler supported the usual symbolic addressing and the definition of character strings or hex strings. Commodore 64. Today assembly language is still used for direct hardware manipulation. Many commercial applications were written in assembly language as well. subtraction. including a large amount of the IBM mainframe software written by large corporations. Some systems.[17] . access to specialized processor instructions. comparable to that of Microsoft Visual Studio facilities (ASM-One predates Microsoft Visual Studio). as well as insufficient facilities to take full advantage of the available hardware on these systems. multiplication. Historically. freeing programmers from tedium such as remembering numeric codes and calculating addresses. logical AND.[13] Nathaniel Rochester wrote an assembler for an IBM 701 (1954). and reliability. FORTRAN and some PL/I eventually displaced much of this work. This was in large part because BASIC dialects on these systems offered insufficient execution speed. minimal overhead. most notably the Amiga. In a more commercial context. Perhaps more important was the lack of first-class high-level language compilers suitable for microcomputer use. Even into the 1990s. low-level embedded systems.[15] The popular arcade game NBA Jam (1993) is another example. although a number of large organizations retained assembly-language application infrastructures well into the '90s. Operating systems were entirely written in assembly language until the introduction of the Burroughs MCP (1961). Commodore Amiga. greater speed. most console video games were written in assembly. The EDSAC computer (1949) had an assembler called initial orders featuring one-letter mnemonics. However. At 1. "wires and pliers" attitude.[14] Assembly languages eliminated much of the error-prone and time-consuming first-generation programming needed with the earliest computers. the biggest reasons for using assembly language were minimal bloat (size). The Assembler for the VIC-20 was written by Don French and published by French Silk. including most operating systems and large applications. and exponentiation operators. A psychological factor may have also played a role: the first generation of microcomputer programmers retained a hobbyist. or to address critical performance issues. logical OR. the assembly language was the best computer language to use to get the best performance out of the Sega Saturn. and provided limited. COBOL. buggy system services. by the 1980s (1990s on microcomputers). an Algol dialect. Typical uses are device drivers. including most games for the Mega Drive/Genesis and the Super Nintendo Entertainment System . Most early microcomputers relied on hand-coded assembly language. This was because these systems had severe resource constraints. even have IDEs with highly advanced debugging and macro facilities. such as the freeware ASM-One assembler [16]. its author believes it is the smallest symbolic assembler ever written.

• cryptographic algorithms that must always take strictly the same time to execute. for example in device drivers and interrupt handlers. Such systems must eliminate sources of unpredictable delays. SIMD assembly version from x264[25]) • Situations where no high-level language exists. with delays caused by predictable bottlenecks such as I/O operations and paging. but nevertheless result in a one-to-one assembly conversion specific for the given vector processor. • Programs that create vectorized functions for programs in higher-level languages such as C. telemetry must be interpreted and acted upon within strict time constraints. air-conditioning control systems.[19][20][21] The complexity of modern processors and memory sub-systems makes effective optimization increasingly difficult for compilers. despite the counter-examples that can be found. There are some situations in which developers might choose to use assembly language: • A stand-alone executable of compact size is required that must execute without recourse to the run-time components or libraries associated with a high-level language. The most widely employed is altering program code at the assembly language level. tracing and debugging where additional overhead is kept to a minimum Reverse-engineering and modifying program files such as • existing binaries that may or may not have originally been written in a high-level language. certain device drivers. For example. Also large scientific simulations require highly optimized algorithms. and to the dismay of efficiency lovers. • Self modifying code. linear algebra with BLAS[19][24] or discrete cosine transformation (e. or cracking copy protection of proprietary software. this is perhaps the most common situation. and medical equipment. • Programs that need to use processor-specific instructions not implemented in a compiler. bootloaders. and sensors. Situations where complete control over the environment is required. or other items very close to the hardware or low-level operating system. However. A common example is the bitwise rotation instruction at the core of many encryption algorithms. in extremely high security situations where nothing can be taken for granted. for example an inner loop in a processor-intensive algorithm. Choosing assembly or lower-level languages for such systems gives programmers greater visibility and control over processing details. • Programs requiring extreme optimization. or preemptive multitasking. Instruction set simulators for monitoring. • Programs need precise timing such as • real-time programs such as simulations. flight navigation systems.g. e.[22][23] Moreover. But in general. for example. • • • • . For example. as well as assembly programmers.Assembly language 84 Current usage There have always been debates over the usefulness and performance of assembly language relative to high-level languages. for example when trying to recreate programs for which source code is not available or has been lost. This has made raw code execution speed a non-issue for many programmers. • Code that must interact directly with the hardware.g. automatic garbage collection. • Video games (also termed ROM hacking). firmware for telephones. In the higher-level language this is sometimes aided by compiler intrinsic functions which map directly to SIMD mnemonics. Game programmers take advantage of the abilities of hardware features in systems. increasing processor performance has meant that most CPUs sit idle most of the time. preventing timing attacks. which may be created by (some) interpreted languages. Assembly language has specific niche uses where it is important. paging operations. some higher-level languages incorporate run-time components and operating system interfaces that can introduce such delays. on a new or specialized processor. enabling games to run faster. security systems. to which assembly language lends itself well. see below. in a fly-by-wire system. which is possible via several methods. automobile fuel and ignition systems. modern optimizing compilers are claimed[18] to render high-level languages into code that can run as fast as hand-written assembly. Computer viruses.

and is often stored in ROM. Common methods involve transmitting an exact byte-by-byte copy of the machine code or an ASCII representation of the machine code in a portable format (such as Motorola or Intel hexadecimal) through a compatible interface to the target system for execution. • Assemblers can be used to generate blocks of data. Programs using such facilities. Since a computer's behavior is fundamentally defined by its instruction set. Tools such as the Interactive Disassembler make extensive use of disassembly for such a purpose. • A cross assembler (see also cross compiler) is an assembler that is run on a computer or operating system of a different type from the system on which the resulting code is to run. allow the programmer to embed assembly language directly in the source code. the low-level code that initializes and tests the system hardware prior to booting the OS.g. Cross-assembling may be necessary if the target system cannot run an assembler itself. is termed assembly time.Assembly language • Games and other software for graphing calculators. and compiler design would be hard to study in detail without a grasp of how a computer operates at the hardware level. and III) to see how efficient executable code can be created from high-level languages. • Relatively low-level languages. [27] This is analogous to children needing to learn the basic arithmetic operations (e.[29] Similarly. Calling the language assembler might be considered potentially confusing and ambiguous. such as the Linux kernel. Therefore. assembler. or symbolic machine code. allowing the assembly code to be viewed for debugging and optimization purposes. including all macro processing. Such fundamental topics as binary arithmetic. II) to recognize situations where the use of assembly language might be appropriate. to be used by other code. this usage has been common among professionals and in the literature for decades. The computer on which the cross assembler is run must have some means of transporting the resulting machine code to the target system. . some early computers called their assembler their assembly program. Most modern computers have similar instruction sets. studying a single assembly language is sufficient to learn: I) the basic concepts. Related terminology • Assembly language or assembler language is commonly called assembly. the logical way to learn such concepts is to study an assembly language. character set encoding. long division). but more difficult to translate into a higher-level language. The assembler is said to be "assembling" the source code. A generation of IBM mainframe programmers called it ALC for Assembly Language Code or BAL[28] for Basic Assembly Language. The system's portable code can then use these processor-specific components through a uniform interface. Many programs are distributed only in machine code form which is straightforward to translate into assembly language. stack processing. such as C. speedcode).. from formatted and commented source code. memory allocation.[26] Assembly language is still taught in most computer science and electronic engineering programs. although calculators are widely used for all except the most trivial calculations. with no high-level language overhead. • Assembly language is valuable in reverse engineering. However. 85 Typical applications • Assembly language is typically used in a system's boot code. short code. interrupt processing. Although few programmers today regularly work with assembly language as a tool. (BIOS on IBM-compatible PC systems and CP/M). since this is also the name of the utility program that translates assembly language statements into machine code.[30]) • The computational step where an assembler is run. • Some compilers translate high-level languages into assembly first before fully compiling. the underlying concepts remain very important. • The use of the word assembly dates from the early years of computers (cf. can then construct abstractions using different assembly language on each hardware platform. ASM. as is typically the case for small embedded systems.

On Unix systems. the symbol table. For some examples. A number of Unix variants use GAS. and the values of internal assembler parameters." [32] 86 List of assemblers for different computer architectures The following page has a list of different assemblers for the different computer architectures. the listing file."[1] Directives affect how the assembler operates and "may affect the object code. but the advanced features will differ. can be embedded into the high level language code. but each support different macros that could make them difficult to translate to each other. such as C and Borland Pascal. support inline assembly where sections of assembly code. at least one – possibly dozens – of assemblers have been written.Assembly language • An assembler directive or pseudo-opcode is a command given to an assembler "directing it to perform operations other than assembling instructions. being typically written anew for each port. and game console. An instruction set simulator can process the object code/ binary of any assembler to achieve portability even across platforms with an overhead no greater than a typical bytecode interpreter.[33] Also. although it is not a single body of code.[31] • A meta-assembler is "a program that accepts the syntactic and semantic description of an assembly language. The basics are all the same. Calling conventions between operating systems often differ slightly or not at all. along with any associated information for that specific assembler: • List of assemblers Further details For any given personal computer. and generates an assembler for that language. usually by linking with a C library that does not change between operating systems. Sometimes. Some higher level computer languages. some assemblers can read another assembler's dialect. see the list of assemblers. assembly can sometimes be portable across different operating systems on the same type of CPU. the assembler is traditionally called as. TASM can read old MASM code. Within processor groups. An emulator can be used to debug assembly-language programs. FASM and NASM have similar syntax. This is similar to use of microcode to achieve compatibility across a processor family. embedded system." Sometimes the term pseudo-opcode is reserved for directives that generate object code. such as those that generate data. mainframe. and with care it is possible to gain some portability in assembly language. both past and present. each assembler has its own dialect. Example listing of assembly language source code . for example. The Forth language commonly contains an assembler used in CODE words. but not the reverse. in practice usually brief.

© 2010. Intel Architecture Software Developer’s Manual. advertis/ asl. net/ ) [13] Salomon. org/ LDP/ tlk/ basics/ sw. htm). INTEL CORPORATION. 6502 Assembler for the Nintendo Entertainment System (http:/ / neshla. info/ homepage. aspx). . Hyde. [6] Evans. [15] Eidolon's Inn : SegaBase Saturn (http:/ / www. References [1] [2] [3] [4] David Salomon (1993). cs. z80. David A. Microsoft Corp. "x86 Assembly Guide" (http:/ / www. Retrieved Mar 11. 2012. . advertis/ asl. Assemblers and Loaders (http:/ / www.%r4 ld %r4. Randall. pdf). MSDN Library for Visual Studio 2008" (http:/ / msdn. com/ en-us/ library/ 503x3e3s(v=VS.%r2. . answers. radiks. html [17] Jim Lawless (2004-05-21).%r3 jmpl %r15+4. intel. "Chapter 12 – Classes and Objects". .%r1 addcc %r1. microsoft. Leland L. [5] Intel Architecture Software Developer’s Manual. edu/ ~evans/ cs216/ guides/ x86. [14] "The IBM 650 Magnetic Drum Calculator" (http:/ / www. Retrieved 2008-06-19. David (2006). davidsalomon.begin . Retrieved 18 November 2010. 7.-4. com/ standards/ . Open Source. Archived (http:/ / web. The Art of Assembly Language. "Speaking with Don French : The Man Behind the French Silk Assembler Tools" (http:/ / www. . . Version 8" (http:/ / www. 1999. Assemblers and Loaders (http:/ / a_start 3000 a: Example of a selection of instructions (for a virtual computer[35]) with the corresponding address in memory where each instruction will be placed. Retrieved 2008-07-25. htm [9] "Macros (C/C++). name/ assem. net/ tiki-index. de/ z80/ z80code. Retrieved 18 November 2010. No Starch Press. html). 1999. Volume 2: Instruction Set Reference (http:/ / download. [8] http:/ / www. [7] "The SPARC Architecture Manual. 1992. see memory management. theflamearrows. net/ ~jimbo/ art/ int7. intel. . Retrieved May 25. eidolons-inn. "assembly language: Definition and Much More from Answers. archive. htm) from the original on 21 August 2008. International. com/ topic/ assembly-language?cat=technology). "2". University of Virginia.%r0 20 00000010 10000000 00000000 00000110 10000010 10000000 01111111 11111100 10001000 10000000 01000000 00000010 11001010 00000001 00000000 00000000 00010000 10111111 11111111 11111011 10000110 10000000 11000000 00000101 10000001 11000011 11100000 00000100 00000000 00000000 00000000 00010100 00000000 00000000 00001011 10111000 address: a_start . [11] Answers. "The Linux Kernel" (http:/ /" (http:/ / www. SPARC. Retrieved 2012-01-17. . com/ design/ PentiumII/ manuals/ 24319102. pdf). sparc. (1996). These addresses are not static. Accompanying each instruction is the generated (by the assembler) object code that coincides with the virtual computer's architecture (or ISA). 442 and 35. MVS Software. 2nd Edition. html).. PDF). com/ design/ PentiumII/ manuals/ 24319102. Retrieved 2010-06-22. davidsalomon. sourceforge.Assembly language 87 Address Label Instruction (AT&T syntax) . html). pp. org/ web/ 20080821105848/ http:/ / www. p. net/ ~jimbo/ art/ int7. columbia.equ 3000 ld length. us/ pscott/ software/ mvs/ concept14. Addison Wesley. radiks. Retrieved 2012-01-17. virginia. html). name/ assem. PDF). . 2048 Object code [34] a_start 2048 2064 2068 2072 2076 2080 2084 2088 2092 2096 done: length: . php?page=SegaBase+ Saturn) [16] http:/ / www. Volume 2: Instruction Set Reference (http:/ / download. 90). Retrieved 18 November 2010.%r5. INTEL CORPORATION.. [12] NESHLA: The High Level. [18] Rusling. edu/ cu/ computinghistory/ 650. [10] "Concept 14 Macros" (http:/ / skycoast. . . System Software: An Introduction to Systems Programming. pdf) Beck.%r5 ba loop addcc %r3.% be done addcc %r1.

Archived (http:/ / web. cit. William. html) from the original on 18 October 2007.asm" (http:/ / ISBN 0-13-142044-5 • Paul Carter: PC Assembly Language. . org/ index. git. videolan. Vincent P. edu/ ~lockwood/ class/ cs306/ books/ artofasm/ fwd. 2010-01-30. or various modern high-level languages. . Brady Books. com/ ~murdocca/ POCA) (POCA) – ARCTools virtual computer available for download to execute referenced code. archive.hb=HEAD).blogspot. ucr. . . NY: 1980. cs. hardwarebug. . 2000.pdf) • Robert Britton: MIPS Assembly Language Programming. New York Times. 1986. ucr. Archived (http:/ / web. org/ 2008/ 11/ 28/ codesourcery-fails-again/ ). com/ doc/ 1O11-metaassembler.git/common/x86/dct-32. archive. git. encyclopedia. Principles of Computer Architecture. com/ 2005/ 11/ 28/ technology/ 28super.tuxfamily. wustl. 2005-11-28. [27] Hyde. org/ web/ 20100316212040/ http:/ / hardwarebug. PDF). Retrieved March 19. the others were macro assemblers. C. [25] "x264.. hardwarebug. Peter Norton's Assembly Language Book for the IBM ProgrammingGroundUp-1-0-booksize. for Fun: A Human Computer Keeps Speeding Up Chips" (http:/ / www. Retrieved 2008-07-03. Bjarne. Archived (http:/ / web. Wiley. Miles J. tutorials and code examples" by the ASM Community • Jonathan Bartlett: Programming from the Ground Up (http://programminggroundup. yale. edu/ ~lockwood/ class/ cs306/ books/ artofasm/ fwd. . nytimes. html). cs. org/ web/ 20100205120952/ http:/ / hardwarebug. Bartlett Publishing. html?_r=1). The C++ Programming Language. Retrieved 2007-10-19. 2003. cs. org/ 2009/ 05/ 13/ gcc-makes-a-mess/ ).com/pcasm/) • Jeff Duntemann: Assembly Language Step-by-Step.ucr. 2010-09-29. 2011. Retrieved 2010-03-04. net/ tutorials/ 89/ a/ calc/ fargoii. arl. php?title=Benchmark-August2008). archive. edu/ AsmTools/ WhichAsm. Retrieved 2010-03-04. ISBN 0-201-43664-7. 2009-05-13.asmcommunity. edu/ Page_TechDocs/ GreatDebate/ debate1. No Starch Press.f=common/ x86. and Plette. . html) [33] Randall Hyde. Randall (1996-09-30). 2005 88 Further reading • ASM Community Book (http://www. net/ tutorials/ 89/ a/ calc/ fargoii. org/ 2009/ 05/ 13/ gcc-makes-a-mess/ ) from the original on 16 March 2010. htm). ISBN 0-9752838-4-7 Also available online as PDF (http://download. Programming the IBM 1401. html). archive. Archived (http:/ / web. 1962." (http:/ / www. edu/ cs422/ doc/ art-of-asm/ pdf/ CH08. tuxfamily. Prentice Hall. Retrieved 2010-03-05. org/ ?p=x264.videolan. ucr. "Which Assembler is the Best?" (http:/ / webster. org/ 2008/ 11/ 28/ codesourcery-fails-again/ ) from the original on 2 April org/ 2010/ 01/ 30/ bit-field-badness/ ). accessed August 24. edu/ AsmTools/ WhichAsm. "MASM: Directives & Pseudo-Opcodes" (http:/ / flint. ISBN 0-471-37523-3 • Randall Hyde: The Art of Assembly Language. ed.savannah. [26] "68K Programming in Fargo II" (http:/ / tifreakware. [34] Murdocca. by Hand. Retrieved "An online book full of helpful ASM info. [32] (John Daintith. LoC 62-20615. [20] "Bit-field-badness" (http:/ / hardwarebug. "The Great Debate" (http:/ / webster. org/ web/ 20100325155048/ http:/ / www. Prentice-Hall. . eigen. org/ web/ 20071018014019/ http:/ / webster. NY: 1986.) A Dictionary of Computing: "meta-assembler" (http:/ / www. archive. 2004. ISBN 1-886411-97-2 Draft versions available online (http://webster. . html) from the original on 25 March 2010. Retrieved 2008-07-03. "Foreword ("Why would anyone learn this stuff?"). cs. org/ web/ 20080702181616/ http:/ / tifreakware. ucr. Addison-Wesley. html) from the original on 16 June 2008. [29] Stroustrup. . John Socha. [22] Randall Hyde.cs. Retrieved 2010-09-29. Website (http://drpaulcarter. [24] "BLAS Benchmark-August2008" (http:/ / eigen.html) as PDF and HTML • Peter Norton. org/ 2010/ 01/ 30/ bit-field-badness/ ) from the original on 5 February 2010. John Markoff. Prentice-Hall. Heuring (2000). Archived (http:/ / web. wustl. . 2003. hardwarebug. [23] "Code sourcery fails again" (http:/ / hardwarebug. org/ web/ 20100402221204/ http:/ / Archived (http:/ / web. Retrieved 2010-03-04. org/ web/ 20080616110102/ http:/ / webster. archive. [28] Techically BAL was only the assembler for BPS. [35] Principles of Computer Architecture (http:/ / iiusatech. ISBN 0-201-12078-X: "C++ was primarily designed so that the author and his friends would not have to program in assembler. Retrieved 2010-03-04. cs. . [use of the term assembly program] [31] Microsoft Corporation. James. htm) from the original on 2 July 2008.a=tree. 2010-01-30. archive. Free ebook. Assembler Language Programming and Machine Organization. [21] "GCC makes a mess" (http:/ / hardwarebug.gnu. • Michael Singer. 2008-08-01. edu/ Page_TechDocs/ GreatDebate/ debate1.Assembly language [19] "Writing the Fastest Code. op. Archived (http:/ / web. html). [use of the term assembler to mean assembly language]" [30] Saxon. John Wiley & Sons.

however.grc. Almost all executable programs are written in higher-level languages. Machine code may be regarded as an extremely hardware-dependent programming language or as the lowest-level representation of a compiled and/or assembled computer program. IBM High Level Assembler (http://www-03. their interpreter (which may be seen as a processor executing the higher-level program) often is. and translated to executable machine code by a compiler and Authoring Windows Applications In Assembly Language ( by Mark Larson • NASM Manual (http://nasm.azillionmonkeys. Machine code is sometimes called native code when referring to platform-dependent parts of language features or libraries. PPR: Learning Assembly Language (http://c2. add or move). Systems may also differ in other details. Unix Assembly Language Programming (http://www. which is executed by an interpreter.softools.int80h. but this is seldom a problem. ISBN 1-55860-410-3 • John Waldron: Introduction to RISC Assembly Language Programming. except for situations that require the most extreme optimization. Every executable program is made up of a series of these atomic instructions. Occasionally a successor design will discontinue or alter the meaning of some instruction code (typically because it is needed for new purposes). Morgan Kaufmann Publishers.Assembly language • Dominic Sweetman: See MIPS Run. Each instruction performs a very specific documents/view/x86-tutorial/) Assembly Language Programming Examples (http://www. Addison Wesley. even nearly completely compatible processors may show slightly different behavior for some instructions. While it is possible to write programs in machine The ASM Community (http://www.[1] Programs in interpreted languages[2] are not translated to machine code. such as memory Machine code Machine code or machine language is a system of impartible instructions executed directly by a computer's central processing unit (CPU). often conditional on the results of a previous instruction).com/qed/asmexample. The instruction set is thus specific to a class of processors using (much) the same architecture. typically either an operation on a unit of data (in a register or in memory. affecting code compatibility to some extent.g. Instructions are patterns of bits that by physical design correspond to different commands to the machine. ISBN 0-201-39828-1 89 External links • • • • • • • • • • Machine language for beginners (http://www.masmcode. Machine code instructions Every processor or processor family has its own machine code instruction An Introduction to Writing 32-bit Applications Using the x86 Assembly Language (http://siyobik.html#hlasm) IBM manuals on mainframe assembler language. Machine code should not be confused with so-called "bytecode".org/mlb/introduction. because of the tedious difficulty in managing CPU resources.html) • Z80/Z180/8085 Assembler (http://www. or a jump operation (deciding which instruction executes Iczelion's Win32 Assembly Tutorial (http://win32assembly. Successor or derivative processor designs often include all the instructions of a predecessor and may add additional a programming resource about Assembly Optimization Tips (http://mark. it is rarely done today.atariarchives.

Example The MIPS architecture provides a specific example for a machine code whose instructions are always 32 bits long. the addressing offset(s) or index. superscalar processors are capable of executing several instructions at once. The general type of instruction is given by the op (operation) field. For example adding the registers 1 and 2 and placing the result in register 6 is encoded: [ op | rs | rt | rd |shamt| funct] 0 1 2 6 0 32 000000 00001 00010 00110 00000 100000 decimal binary Load a value into register 8. and rd indicate register operands.) and the actual operation (such as add or compare) and other fields that may give the type of the operand(s). jump. Because a program normally relies on such factors. uses mnemonic codes to refer to machine code instructions. and the address or immediate fields contain an operand directly. A machine code instruction set may have all instructions of the same length. the highest 6 bits. 90 Programs A computer program is a sequence of instructions that are executed by a CPU.Machine code arrangement. Program flow may be influenced by special 'jump' instructions that transfer execution to an instruction other than the numerically following one. or peripheral devices. R-type (register) instructions include an additional field funct to determine the exact operation. even when the same type of processor is used. etc. called assembly language. logical. or it may have variable-length instructions. or the actual value itself (such constant operands contained in an instruction are called immediates)[3]. For example. Conditional jumps are taken (execution continues at another address) or not (execution continues at the next instruction) depending on some condition. operating systems. the addressing mode(s). While simple processors execute instructions one after the other. shamt gives a shift amount. Most instructions have one or more opcode fields which specifies the basic instruction type (such as arithmetic. The fields used in these types are: 6 op op op 5 rs | rs | 5 5 5 6 bits rt | rd |shamt| funct] R-type rt | address/immediate] I-type target address ] J-type [ [ [ | | | rs. different systems will typically not run the same machine code. would be represented in assembly language as DEC B. J-type (jump) and I-type (immediate) instructions are fully specified by op. rt. How the patterns are organized varies strongly with the particular architecture and often also with the type of instruction. on the Zilog Z80 processor. which causes the CPU to decrement the B processor register. Assembly languages A much more readable rendition of machine language. taken from the memory cell 68 cells after the location listed in register 3: [ op | rs | rt | address/immediate] 35 3 8 68 100011 00011 01000 00000 00001 000100 decimal binary Jumping to the address 1024: . rather than using the instructions' numeric values directly. the machine code 00000101.

Structured Computer Organization. Harvard architecture is contrasted to the Von Neumann architecture. John L. Andrew S. ISBN 0-13-020435-8.. Today. most processors implement such separate signal pathways for performance reasons but actually implement a Modified Harvard architecture. J. In multitasking systems this comprises the program's code segment and usually shared libraries. Using a microcode layer to implement an emulator enables the computer to present the architecture of an entirely different computer.. they nevertheless present a common architecture at the machine language level across the entire line.Machine code [ op | target address ] 2 1024 000010 00000 00000 00000 10000 000000 91 decimal binary Relationship to microcode In some computer architectures. so they can support tasks like loading an executable program from disk storage as data and then executing it. Readability by humans It has been said that machine code is so unreadable that the United States Copyright Office cannot even identify whether a particular encoded program is an original work of authorship. providing a common machine language interface across a line or family of different models of computer with widely different underlying dataflows."[5] Further reading • Hennessy. the code space is the part of its address space where code in execution is stored. From the point of view of a process. e. Storing in memory The Harvard architecture is a computer architecture with physically separate storage and signal pathways for the code (instructions) and data.. The System/360 line used this to allow porting programs from earlier IBM machines to the new family of computers. Computer Science: An Overview. ISBN 1-55860-281-X. which reduces the overhead of context switching considerably as compared to process switching. The Hardware/Software Interface. An example of this use is the IBM System/360 family of computers and their successors. In multi-threading environment. . With dataflow path widths of 8 bits to 64 bits and beyond. David A. Glenn. ISBN 0-321-38701-5. different threads of one process share code space along with data space. an IBM 1401/1440/1460 emulator on the IBM S/360 model 40. where data and code are stored in the same memory. Prentice Hall. Patterson. This is done to facilitate porting of machine language programs between different models. • Tanenbaum.[4] Hofstadter compares machine code with the genetic code: "Looking at a program written in machine language is vaguely comparable to looking at a DNA molecule atom by atom.. Morgan Kaufmann Publishers. the machine code is implemented by a more fundamental underlying layer of programs called microprograms. Addison Wesley.g. • Brookshear. Computer Organization and Design.

The source code is automatically translated at some point to machine code that the computer can directly read and execute. It is therefore so construed as to include machine code. CONTU Revisited: The Case against Copyright Protection for Computer Programs in Machine-Readable Form. etc. org/ AssemblyTutorial/ Chapter-11/ ass11_2. inline comments indicated in green. Retrieved 2008-09-02. Source code also appears in books and other media. The notion of source code may also be taken more broadly. 663–769. who may wish to modify the program or understand how it works. An interpreter translates to machine code and executes it on the fly when the program is An example from an article presented on the annual IEEE conference on Source Code Analysis and Manipulation:[1] For the purpose of clarity ‘source code’ is taken to mean any fully executable description of a software system. 1984.Machine code 92 Notes and references [1] "Managed. 290 Source code In computer science. JSTOR 1372418 [5] D. to include machine code and notations in graphical languages. usually as text. [2] Often BASIC. programmer. MATLAB. but occasionally complete code bases. these can then be executed as a separate step. and program code indicated in blue Most computer applications are distributed in a form that includes executable files. a well-known case is the source code of PGP. source code is any collection of computer instructions (possibly with comments) written using some human-readable computer language. The source code which constitutes a program is usually held in one or more text files stored on a computer's hard disk. pp.[2] . neither of which are textual in nature. Gödel. The source code of a program is specially designed to facilitate the work of computer programmers. com/ net/ cplus/ print. developer. Unmanaged. Ruby. 1984). Smalltalk. Hofstadter. php/ 2197621).. Bach (1980). If the source code were included. developer. pp. Python. Duke Law Journal. An illustration of Java source code with prologue comments indicated in red. often in the form of small code snippets. html) [4] Pamela Samuelson (Sep. An Eternal Golden Braid. [3] Immediate operands (http:/ / programmedlessons. . usually these files are carefully arranged into a directory tree. Source code can also be stored in a database (as is common for stored procedures) or elsewhere. Native: What Kind of Code Is This?" (http:/ / www. but not their source code. Escher. while a compiler translates the program in advance to machine code that it stores as executable files. who specify the actions to be performed by a computer mostly by writing source code. known as a source tree. it would be useful to a user. or system administrator. very high level languages and executable graphical representations of systems.

g. Generally speaking. These describe the relationships among the source code files.[3] For example. Programmers frequently adapt source code from one piece of software to use in other projects. and later integrated into the software using a technique called library linking. or is privately owned and restricted.[4] The sharing of source code between developers is frequently cited as a contributing factor to the maturation of their programming skills. Without the source code for a particular piece of software. The first free software license to be published and to explicitly grant these freedoms was the GNU General Public License in 1989. This is the case in some languages. Decompilation of an executable program can be used to generate source code. a program's source code can be written in different programming languages. a program written primarily in the C programming language. typically falls within one of two licensing paradigms: free software and proprietary software. in an arbitrary programming language. The revision control system is another tool frequently used by developers for source code maintenance.Source code The code base of a programming project is the larger collection of all the source code of all the computer programs which make up the project. either in assembly code or in a high level language. and contain information about how they are to be compiled. it is compiled or interpreted). an approach taken for example by the GNU Emacs text editor. In these cases. Note that "free" refers to freedom. Licensing Software. It is also possible for some components of a piece of software to be written and compiled separately. and then write the bulk of the actual user functionality as macros or other forms of add-ins in this language. It has become common practice to maintain code bases in version control systems. Though the practice is uncommon. such as a Makefile. software is free if the source code is free to use.. Possible porting options include binary translation and emulation of the original platform. instructions for compilations. and its accompanying source code. The GNU GPL was originally intended to be used with the GNU operating system. sometimes dozens or even hundreds. 93 Organization The source code for a particular piece of software may be contained in a single file or many files.e.[4] Some people consider source code an expressive artistic medium. Moderately complex software customarily requires the compilation or assembly of several. either designed specifically for the application in question or general-purpose. are included with the source code.. Purposes Source code is primarily used as input to the process that produces an executable program (i. and proprietary if the source code is kept secret.[5] Porting software to other computer platforms is usually prohibitively difficult without source code. distribute.[4] Programmers often find it helpful to review existing source code to learn about programming techniques. Under many licenses it is acceptable to charge for "free software". Yet another method is to make the main program an interpreter for a programming language. It is also used as a method of communicating algorithms between people (e. of different source code files. modify and study. might have portions written in assembly language for optimization purposes. such as Java: each class is compiled separately into a file and linked by the interpreter at runtime. code snippets in books). not price. The GNU GPL was later adopted by other non-GNU software . a concept known as software reusability. portability is generally computationally expensive.

ucl. reverse engineering. One of the first court cases regarding the nature of source code as free speech involved University of California mathematics professor Dan Bernstein. 12–13 September 2010. it was ruled that source code should be considered a constitutionally protected form of free speech. M. 9–12 November 2004. [2] Why Source Code Analysis and Manipulation Will Always Be Important (http:/ / www. 94 Legal issues in the United States In a 2003 court case in the United States. Romania. Proponents of free speech argued that because source code conveys information to programmers. At the time. python. are aimed at the maintenance of the software source code. Coding conventions. The Electronic Frontier Foundation sued the U. Van Emmerik and T.Source code projects such as the Linux kernel. Quality The way a program is written can have important consequences for its maintainers. protected by the First Amendment. (2005) • (VEW04) "Using a Decompiler for Real-World Source Recovery". uk/ staff/ M. onlamp. the provisions of the various copyright laws. cs. ac. Delft. D: Code Reading: The Open Source Perspective. and can be used to share humour and other artistic pursuits. ISBN 0-201-79940-5 [5] "Art and Computer Programming" ONLamp. such as the speed of the program's execution.6 Documentation (http:/ / docs. Netherlands. 10th IEEE International Working Conference on Source Code Analysis and Manipulation (SCAM 2010). or the ability to compile the program for multiple architectures. exporting encryption to other countries was considered an issue of national security. org/ ). it is a protected form of communication. and had to be approved by the State Department. is written in a language. or circumventing of copy protection.S. analysis. government on Bernstein's behalf. Addison-Wesley Professional. org/ extending/ ) [4] Spinellis. encryption algorithms were classified as munitions by the United States For proprietary software. pdf) by Mark Harman. Waddington. code obfuscation or code morphing. which involves debugging and updating. Additionally. the Working Conference on Reverse Engineering. Other priorities. com/ pub/ a/ onlamp/ 2005/ 06/ 30/ artofprog.itee. many pieces of retail software come with an end-user license agreement (EULA) which typically prohibits decompilation.pdf). since code quality depends entirely on its purpose. who had published on the Internet the source code for an encryption program that he (http:/ / www. Timişoara. . the court ruled that source code was free 2003. 2001-2010. Types of source code protection – beyond traditional compilation to object code – include code encryption.uq. ieee-scam. [3] Extending and Embedding the Python Interpreter — Python v2. References [1] SCAM Working Conference (http:/ / www. Extended version of the paper (http://www. often make code readability a less important consideration. trade secrecy and patents are used to keep the source code closed. modification. which stress readability and some language-specific conventions. Harman/ scam10. html).

in order to perform a specific task.txt ch2. They list files in the directory / Command In computing. MetaFilter. cd is the command and /home/pete is the argument: cd /home/pete This command prints the text hello out to the standard output stream.Source code 95 External links • Source Code Definition (http://www. ls is the command. which modify the default behaviour of the command. such as a shell. cat ch1.linfo. may start from May 2009.txt and ch2. then a command is generally like a verb in such a language. a command is a directive to a computer program acting as an interpreter of some kind." (http://www. in this case. -t and -r: ls -l -t -r /bin ls -ltr /bin This displays the contents of the files ch1. echo is the command and "Hello World" is the argument. /bin is the argument and there are three flags: -l.metafilter. Most commonly a command is a directive to some kind of command line interface. Many programs allow specially formatted arguments. whilst the other arguments are objects.txt and ch2.html) .txt . which. This command changes the user's place in the directory tree from their current position to the directory /home/ Examples Here are some commands given to a command line interpreter (Unix shell). known as flags. Comparing to a natural language: the flags are adverbs. the term command is used in imperative computer languages.txt are both arguments. • Same program written in multiple languages (http://rosettacode. while further arguments describe what the command acts Obligatory-accreditation-system-for-IT-security-products). reported by Yomiuri on The Linux Information Project (LINFO) • Google public source code search (http://www. Specifically. These languages are called this. If one views a statement in an imperative language as being like a sentence in a natural language.txt. cat is the command and ch1. Retrieved 2009-04-24. The quotes are used to prevent Hello and World being treated as separate arguments: echo "Hello World" These commands are equivalent. because statements in these languages are usually written in a manner similar to the imperative mood used in many natural • "Obligatory accreditation system for IT security products (2008-09-22).org/source_code. will just print the text out on the screen.

The term run is used almost synonymously. The instructions in the program trigger sequences of simple actions on the executing machine. dir is the command and "A" is a flag.. "P" is a parameter. Most programs execute with the support of an operating system and run-time libraries specific to the source language that provide crucial services not supplied directly by the computer itself. Loosely speaking. cgi?query=command Execution Execution in computer and software engineering is the process by which a computer or a virtual machine carries out the instructions of a computer program. Those actions produce effects according to the semantics of the instructions in the program. type /P readme. A related meaning of both "to run" and "to execute" refers to the specific action of a user starting (or launching or invoking) a program. In some cases..txt" is the argument. There is no argument.txt External links • command [1] from FOLDOC References [1] http:/ / foldoc. Notice that the flags are identified differently but that the concepts are the same: dir /A 96 This displays the contents of the file readme. only the changed files must be . whose execution is chained together. a program need only be compiled once and can be run any number of times. application. Interpreter A system that executes a program is called an interpreter of the program." Context of execution The context in which execution takes place is crucial. The ideal is that the ratio of executions to translations of a program will be large.. human readable language into a lower-level language (sometimes as low as native machine code) that is simpler and faster for the processor to directly execute. an interpreter actually does what the program says to do. OS/2 and Microsoft Windows command prompt). for instance. org/ index.. or a user may type commands in an interactive session of an interpreter. Very few programs execute on a bare machine. abstract services instead. Programs for a computer may execute in a batch process without human interaction. This supportive environment. The most common language translators are compilers. Programs usually contain implicit and explicit assumptions about resources available at the time of execution. because of the compilation. This contrasts with to a language translator that converts a program from one language to another. that is. as in "Please run the . Translators typically convert their source from a high-level. providing more general. Here are some commands given to a different command line interpreter (the DOS. "readme. In this case the "commands" are simply programs. One trade-off is that development time is increased.Command This lists all the contents of the current directory.txt. type is the command. usually decouples a program from direct manipulation of the computer peripherals. This can provide a large benefit for translation versus direct interpretation of the source language.

Also. Translators usually produce an abstract result that is not completely ready to execute. the operating system will convert the translator's object code into the final executable form just before execution of the program begins. As computers and compilers become faster. usually at least during the current execution run. For some changes. the speed of the end product is typically more important to the user than the development time. Then the executable needs to be relinked. for instance by just-in-time compilers. into a more efficient form that persists for some period. the executable must be rebuilt from scratch.Execution recompiled. In some cases this code is further transformed the first time it is executed. this fact becomes less of an obstacle. This usually involves modifying the code to bind it to real hardware addresses and establishing address links between the program and support code in libraries. Frequently. 97 References .

With the success of these initial efforts. the first language with origins in academia to be successful. Some other key events in the history of programming language theory since then: 1950s • Noam Chomsky developed the Chomsky hierarchy in the field of linguistics. the result of their effort was ALGOL 58. characterization. This usage derives from the by Alonzo Church and Stephen Cole Kleene in the lambda calculus. analysis. with results published in numerous journals dedicated to PLT. and classification of programming languages and their individual features. The lambda calculus. developed from 1954 to 1957 by a team of IBM researchers led by John Backus. a computational model introduced by Alonzo Church in the 1930s and widely used by programming language 1930s. John McCarthy of MIT developed the Lisp programming language (based on the lambda calculus). a discovery which has directly impacted programming language theory and other branches of computer science. and the title of the so-called model computation rather than being a means for Lambda Papers. but not publicly known until 1972 (and not implemented until 1998). the programmers to describe algorithms to a computer developers of the Scheme programming language. and an active research area. which was designed by Konrad Zuse in the 1940s. . developed field of programming language theory. both depending on and affecting mathematics. system. The first programming language to be proposed was Plankalkül. even though it was intended to Interpretation of Computer Programs. The success of FORTRAN led to the formation of a committee of scientists to develop a "universal" computer language. Separately.[1] and many are easily described in terms of it. the history of programming language theory predates even the development of programming The lowercase Greek letter λ (lambda) is an unofficial symbol of the languages themselves.98 Theory Programming language theory Programming language theory (PLT) is a branch of computer science that deals with the design. It is a well-recognized branch of computer science. implementation. The first widely known and successful programming language was Fortran. History In some ways. Many modern functional programming languages have been described as providing a "thin veneer" over the lambda calculus. programming languages became an active topic of research in the 1960s and beyond. as well as in general computer science and engineering publications. is considered by some to be the world's first researchers. written by Gerald Jay Sussman and Guy Steele. It graces the cover of the classic text Structure and programming language. It falls within the discipline of computer science. software engineering and linguistics.

• In 1988. 1970s • In 1970. A. it is widely considered to be the first example of an object-oriented programming language. Landin introduces the J operator.Programming language theory 99 1960s • The Simula language was developed by Ole-Johan Dahl and Kristen Nygaard. Sussman and Steele develop the Scheme programming language. • In 1974. Simula also introduced the concept of coroutines. • In 1978. an abstract typed functional language. Tony Hoare introduces the Hoare logic. assailed the current state of industrial languages and proposed a new class of programming languages now known as function-level programming languages. R. Dana Scott first publishes his work on denotational semantics. A committee was formed to define an open standard resulting in the release of the Haskell 1.0 standard in 1990. this application has led to tremendous advances in type theory over the years. Gordon Plotkin introduces Programming Computable Functions. It is influential in the design of languages leading to the Haskell programming language. • In 1977. Hoare. It had already been discovered in 1971 by the mathematical logician Jean-Yves Girard. a unified namespace. • In 1964. • Backus. • In 1965. • There emerged process calculi. • In 1985. • In 1969. • In 1969. Type theory became applied as a discipline to programming languages. essentially a form of continuation. as well as similar models of concurrency such as the Actor model of Carl Hewitt. at the 1977 ACM Turing Award lecture. John C. such as the Calculus of Communicating Systems of Robin Milner. J. • In 1966. • From 1975. Peter Landin is the first to realize Church's lambda calculus can be used to model programming languages. • In 1967. He introduces the SECD machine which "interprets" lambda expressions. Roger Hindley publishes The Principal Type-Scheme of an Object in Combinatory Logic. introducing the terminology R-values. and the Communicating sequential processes model of C. • A team of scientists at Xerox PARC led by Alan Kay develop Smalltalk. can be directly interpreted in its intuitionistic version as a typed variant of the model of computation known as lambda calculus. Gilles Kahn published his papar on natural semantics. parametric polymorphism. L-values. an object-oriented language widely known for its innovative development environment. Reynolds discovers System F. • In 1969. • In 1972. later generalized into the Hindley–Milner type inference algorithm. Logic programming and Prolog were developed thus allowing computer programs to be expressed as mathematical logic. William Alvin Howard observed that a "high-level" proof system. Landin introduces ISWIM. . Christopher Strachey publishes his influential set of lecture notes Fundamental Concepts in Programming Languages. Gordon Plotkin publishes his paper on structured operational semantics. a form of axiomatic semantics. an abstract computer programming language in his article The Next 700 Programming Languages. The release of Miranda sparks an academic interest in lazy-evaluated pure functional programming languages. a Lisp dialect incorporating lexical scoping. and elements from the Actor model including first-class continuations. This became known as the Curry–Howard correspondence. and ad hoc polymorphism. referred to as natural deduction. 1980s • In 1981. Robin Milner introduces the Hindley–Milner type inference algorithm for the ML programming language.

programs which translate a program written in one language into another form. which are "tractable syntactic method(s) for proving the absence of certain program behaviors by classifying phrases according to the kinds of values they compute. The actions of a compiler are traditionally broken up into syntax analysis (scanning and parsing). and set theory. operational semantics and axiomatic semantics. Three common approaches to describe the semantics or "meaning" of a computer program are denotational semantics. Type theory Type theory is the study of type systems. 2002). Program transformation is the process of transforming a program in one form (language) to another form. including computability theory. MIT Press.Programming language theory • Bertrand Meyer created the methodology Design by contract and incorporated it into the Eiffel programming language. semantic analysis (determining what a program should do). 100 Sub-disciplines and related fields There are several fields of study which either lie within programming language theory. • Eugenio Moggi and Philip Wadler introduced the use of monads for structuring programs written in functional programming languages. In addition. PLT makes use of many other branches of mathematics. optimization (improving the performance of a program as indicated by some metric. Program analysis and transformation Program analysis is the general problem of examining a program and determining key characteristics (such as the absence of classes of program errors). Formal semantics Formal semantics is the formal specification of the behaviour of computer programs and programming languages. or which have a profound influence on it. Comparative programming language analysis Comparative programming language analysis seeks to classify programming languages into different types based on their characteristics. often the instruction set of a CPU). Domain-specific languages Domain-specific languages are languages constructed to efficiently solve problems in a particular problem domain. many of these have considerable overlap. typically execution speed) and code generation (generation and output of an equivalent program in some target language. or in a subset of the original language) as a result. Bobrow published the book The Art of the Metaobject Protocol. when executed. Generic and metaprogramming Metaprogramming is the generation of higher-order programs which. category theory. • In the 1990s: • Gregor Kiczales. . Jim Des Rivieres and Daniel G. Compiler construction Compiler theory is the theory of writing compilers (or more generally. translators). broad categories of programming languages are often known as programming paradigms. produce programs (possibly in a different language." (Types and Programming Languages. Many programming languages are distinguished by the characteristics of their type systems.

The most well known conferences include the Symposium on Principles of Programming Languages (POPL).eecs. and Tennent. • language-research. main. garbage collection. • O'Hearn.cis. Languages and Applications (OOPSLA).shtml). • Programming Language Theory Texts Online ( book.acm. At Utrecht University. Types and Programming Languages (http://www. A Theory of John C.). Practical Foundations for Programming Languages (http://www.stanford.cmu. Robert. Scott for the ACM Turing Centenary Celebration . Advanced Topics in Types and Programming Languages. Gordon.cis. (eds. and foreign function interfaces.html). the International Conference on Functional Programming (ICFP). • Pierce. Martín and Cardelli.html). and conferences Conferences are the primary venue for presenting research in programming languages.cs. Draft version.upenn. Semantics. Springer-Verlag. • λ-Calculus: Then & Now (http://turing100.Programming language theory 101 Run-time systems Runtime systems refers to the development of programming language runtime environments and their components.cmu. and the International Conference on Object Oriented Programming. Directory by Mark a community weblog for professional discussion and repository of documents on programming language theory. • Michael J. Benjamin C. MIT Press. Introduction to Programming Language Theory. Stanford. • Knuth.html). Benjamin cl.cs.html). Prentice Hall. including virtual machines. Progress in Theoretical Computer Science. Luca. Software Foundations (http://www. Journal of Functional Programming.cs. D. c2. Robert. C. California: Center for the Study of Language and Information. (2003). Foundations for Programming Languages. • Programming Language Research (http://www. Systems.. et ProgrammingLanguageTheoryTextsOnline). • ~ohearn/Algol/algol. Journals. John C. W. (2010). • Pierce. Selected Papers on Computer Languages (http://www-cs-faculty. Theoretical Aspects of Object Oriented Programming Languages: Types. and Higher-Order and Symbolic Computation. Programming Language Theory and Its Implementation.. • Mitchell. • Pierce. (1997). Conference on Programming Language Design and Implementation (PLDI). and Language Design.pdf). Carl and Mitchell. • Harper. com/ cgi/ wiki?ModelsOfComputation Further reading • Abadi. Notable journals that publish PLT research include the ACM Transactions on Programming Languages and Systems (TOPLAS). Algol-like Languages (http://www.pdf) by Dana S.upenn. John C. External links • Lambda the Ultimate (http://lambda-the-ultimate. References [1] http:/ / GreatWorksInPL. Journal of Functional and Logic MIT Press. Boston. Collected by Benjamin C. (2002).upenn.qmul. Donald E. Peter. • Great Works in Programming Languages (http://www. Benjamin C.

and built into the interpreters and compilers for them. Even a type can become associated with a type. in accord with the IEEE specification for single-precision floating point numbers. The hardware of a general purpose computer is unable to discriminate between for example a memory address and an instruction code. or metatype These are the kinds of abstractions typing can go through on a hierarchy of levels contained in a system. an integer. In many C compilers the float data type. such as objects. because it makes no intrinsic distinction between any of the possible values of a sequence of bits might mean. The quest for richer type systems results from this tension. multiplication. 102 Type system <noinclude Mm q q q Vd XT9 </noinclude> A type system associates a type with each computed value. type theory studies type systems. although the concrete type systems of programming languages originate from practical issues of computer architecture. As Mark Manasse concisely put it:[2] The fundamental problem addressed by a type theory is to ensure that programs have meaning. or between a character. is represented in 32 bits. for example. memory errors will also be prevented. The depth of type constraints and the manner of their evaluation affect the typing of the language. An implementation of some type system could in theory associate some identifications named this way: • data type – a type of a value • class – a type of an object • kind (type theory) – a type of a type. By examining the flow of these values. modules. A programming language must have occurrence to type check using the type system whether at compiler time or runtime. but in general the aim is to prevent operations expecting a certain kind of value being used with values for which that operation does not make sense (logic errors). or a floating-point number. gives meaning to a sequences of bits such as a value in memory or some object such as a variable. a type system may be defined as "a tractable syntactic framework for classifying phrases according to the kinds of values they compute".blogspot. compiler implementation. Type theory is the study of type systems. etc. although they can also be implemented as optional tools. manually annotated or automatically inferred. Panel session at POPL 2009. and language design. A program associates each value with at least one particular type. The particular type system in question determines exactly what constitutes a type error. a type system attempts to ensure or prove that no type errors can occur. Assigning a data type.[1] A compiler may also use the static type of a value to optimize the storage it needs and the choice of algorithms for operations on the but it also occurs also that a one value is associated with many subtypes. dependencies can become associated with a type. A programming language may further associate an operation with varying concrete algorithms on each type in the case of type polymorphism. . Fundamentals Formally. Associating a sequence of bits with a type conveys that meaning to the programmable hardware to form a symbolic system composed of that hardware and some programmer. In computer science. communication channels. The fundamental problem caused by a type theory is that meaningful programs may not have meanings ascribed to them. what is called typing. Type systems are often specified as part of programming languages.Programming language theory • Grand Challenges in Programming Languages (http://plgrand. Other entities. They will thus use floating-point-specific microprocessor operations on those values (floating-point addition.

Type safety contributes to program correctness. • Safety – A type system enables the compiler to detect meaningless or probably invalid code. when the rules do not specify how to divide an integer by a string. • Documentation – In more expressive type systems. other kinds of formal methods. A programming language compiler can also implement a dependent type or an effect system. Advantages provided by programmer-specified type systems include: • Abstraction (or modularity) – Types enable programmers to think at a higher level than the bit or byte. the more strongly typed a programming language is. types enable programmers to think about and express interfaces between two of any-sized subsystems. and then it is left as a runtime error. and when more attention must be paid by the programmer to annotate code or to consider computer-related operations and functioning. The more type restrictions that are imposed by the compiler. but cannot guarantee complete type safety. but can only guarantee correctness at the expense of making the type checking itself an undecidable problem. Pascal's type system has been described as "too strong" because. This enables more levels of localization so that the definitions required for interoperability of the subsystems remain consistent when those two subsystems communicate. Higher still. a type system makes program behavior illegal that is outside the type-system rules. which enables even more program specifications to be verified by a type checker. for example. Whether automated by the compiler or specified by a programmer.Type system When a programming language evolves a more elaborate type system.[3][4] Haskell is also strongly typed but its types are automatically inferred so that explicit conversions are unnecessary. the compiler may be able to use more efficient machine instructions. a virtual "region" of code is associated with an "effect" component describing what is being done with what. but a type checker running only at compile time doesn't scan for division by zero in most programming languages. Strong typing offers more safety. it gains a more finely-grained rule set than basic type checking. For example. which endows it with more safety checking than type checking alone. if a type requires that a value must align in memory at a multiple of four bytes. 103 . To prove the absence of these more-general-than-types defects. types can serve as a form of documentation clarifying the intent of the programmer. It is challenging to find a sufficiently expressive type system that satisfies all programming practices in type safe manner. For example. collectively known as program analyses. For instance. making some programming tasks difficult. the size of an array or string is part of its type. In a type system with automated type checking a program may prove to run incorrectly yet be safely typed. this documents the function when the timestamp type can be explicitly declared deeper in the code to be integer type. are in common use. For example. Beyond simple value-type pairs. In addition software testing is an empirical method for finding errors that the type checker cannot detect. if a programmer declares a function as returning a timestamp type. and enabling for example to "throw" an error report. Advantages provided by compiler-specified type systems include: • Optimization – Static type-checking may provide useful compile-time information. and produce no compiler errors. but this comes at a price when the type inferences (and other properties) become undecidable. we can identify an expression 3 / "Hello. Thus the symbolic system may be a type and effect system. programmers can begin to think of a string as a collection of character values instead of as a mere array of bytes. World" as invalid. not bothering with low-level implementation. Division by zero is an unsafe and incorrect operation. Strongly typed languages often require the programmer to make explicit conversions in contexts where an implicit conversion would cause no harm.

even if an expression <complex test> always evaluates to true at run-time. but not built-in types). Eiffel. Perl (for user-defined types. because the combination of all places where values are created and all places where a certain value is used must be taken into account. faster or taking reduced memory) by omitting runtime type checks and enabling other optimizations. PHP. Lua. if not. Ruby. If a language specification requires its typing rules strongly (i. The tests may fail to detect such type errors. For example. it allows many type errors to be caught early in the development cycle. JADE. Dynamically typed languages include APL. They have "loopholes" in the programming language specification enabling programmers to write code that circumvents the verification performed by a static type checker and so address a wider range of problems. Groovy. For example. Perl is statically typed with respect to distinguishing arrays. more or less allowing only those automatic type conversions that do not lose information). Static type checkers evaluate only the type information that can be determined at compile time. Seed7 and Scala. scalars.e. Erlang. a variable can refer to a value of any type. Smalltalk and Tcl. This run-time classification is then used to implement type checks and dispatch overloaded functions. They will reject some programs that may be well-behaved at run-time. The terms are not usually used in a strict sense. GNU Octave. Fortran. Without static type checking. Static typing A programming language is said to use static typing when type checking is performed during compile-time as opposed to run-time. JavaScript. Pascal. Java.Type system 104 Type checking The process of verifying and enforcing the constraints of types – type checking – may occur either at compile-time (a static check) or run-time (a dynamic check). but variables do not. The most widely used statically typed languages are not formally type safe. Program execution may also be made more efficient (e. a program containing the code if <complex test> then <do something> else <type error> will be rejected as ill-typed. Static typing is a limited form of program verification (see type safety): accordingly. Ada. C. but also includes full runtime type checking. In dynamic typing values have types. that is. Statically typed languages include ActionScript 3. Objective-C. Haskell. static type checkers are conservative. and Haskell has such features as unsafePerformIO: such operations may be unsafe at runtime. in that they can cause unwanted behaviour due to incorrect typing of values when the program runs. C++ is statically typed. as weakly typed. F#. The C# type system performs static-like compile-time type checking. Prolog. which eliminates the need to repeat type checks every time the program is executed. haXe. MATLAB. Dynamic typing A programming language is said to be dynamically typed when the majority of its type checking is performed at run-time as opposed to at compile-time. but that cannot be statically determined to be well-typed. Go. Pick BASIC.. ML.g. most C-style languages have type punning. Python. one can refer to the process as strongly typed. and subroutines. D. Implementations of dynamically typed languages generally associate run-time objects with "tags" containing their type information. hashes. because a static analysis cannot determine that the else branch won't be taken. but can also enable pervasive uses of dynamic dispatch. even code coverage tests with 100% coverage may be unable to find such type errors. OCaml. Lisp. but are able to verify that the checked conditions hold for all possible executions of the program. aside from its run-time type information system.[1] The conservative behaviour of static type checkers is advantageous when <complex test> evaluates to false infrequently: A static type checker can detect type errors in rarely used code paths. Because they evaluate type information during compilation and therefore lack type information that is only available at run-time. late binding and similar idioms that would be .

Java and some other ostensibly statically typed languages. Testing is a key practice in professional software development. such as generating types and functionality based on run-time data. Advocates of dependently . a value may have an unexpected type. Dynamic typing may result in runtime type errors—that is. runtime checks only assert that conditions hold in a particular execution of the program. Development in dynamically typed languages is often supported by programming practices such as unit testing.NET runtime to interrogate its dynamic facilities to resolve the object reference.). while dynamic typing advocates point to distributed code that has proven reliable and to small bug databases. are dynamically typed by default. More generally.Type system cumbersome at best in a statically typed language. or Cython. and an operation nonsensical for that type is applied. However. Dynamically typed language systems' run-time checks can potentially be more sophisticated than those of statically typed languages.0 Release. the . the testing done to ensure correct program operation can detect a much wider range of errors than static type-checking. As of the 4. and some dynamic programming languages are statically typed. and thus disagree over the proportion of those bugs that are coded that would be caught by appropriately representing the designed types in code.NET Framework supports a variant of dynamic typing via the System. (Nevertheless. One reason to use such hints would be to achieve the performance benefits of static typing in performance-sensitive parts of code. most programming languages include mechanisms for dispatching over different 'kinds' of data. Common Lisp. In practice. for example Clojure. dynamically typed languages need not support any or all such features. but full test coverage over all possible executions of a program (including timing. a form of dynamic typing. if even possible. such as disjoint unions. More broadly. This should increase the reliability of the delivered program. and is particularly important in dynamically typed languages.) On the other hand. support downcasting and other type operations that depend on runtime type checks. then. dynamic typing provides fewer a priori guarantees: a dynamically typed language accepts and attempts to execute some programs that would be ruled as invalid by a static type checker. and the checks are repeated for every execution of the program. either due to errors in the program or due to static type checking being too conservative. On the other hand. The value of static typing. requiring the use of variant types or similar features. as explained below. See programming language for more discussion of the interactions between static and dynamic typing. but allow this behaviour to be overridden through the use of explicit type hints that result in static typing. polymorphic objects. This may make the bug difficult to locate. the place where the wrong type of data passed into a place it should not have. etc. would be extremely costly and impractical. and variant types: Even when not interacting with type annotations or type checking. dynamic typing can improve support for dynamic programming language features. Such errors may occur long after the place where the programming mistake was made—that is. presumably increases as the strength of the type system is increased. Static typing advocates believe programs are more reliable when they have been well type-checked. Static and dynamic type checking in practice The choice between static and dynamic typing requires trade-offs. For example. 105 Combinations of dynamic and static typing The presence of static typing in a programming language does not necessarily imply the absence of all dynamic typing mechanisms. Certain languages. Static typing can find type errors reliably at compile time. at runtime. Static typing helps by providing strong guarantees of a particular subset of commonly made errors never occurring. such mechanisms are materially similar to dynamic typing implementations. programmers disagree over how commonly type errors occur.Dynamic namespace [5] whereby a static object of type 'dynamic' is a placeholder for the . user inputs. as they can use dynamic information as well as any information from the source code.

For example."[7] Jackson wrote. Consider the following example: var x := 5. compilers for statically typed languages can find assembler shortcuts more easily.g. Furthermore. Further. dynamic typing may allow compilers to run more quickly and allow interpreters to dynamically load new code. C++ templates are typically more cumbersome to write than the equivalent Ruby or Python code. dynamic typing better accommodates transitional code and prototyping. More advanced run-time constructs such as metaclasses and introspection are often more difficult to use in statically typed languages. which the compiler will not permit the programmer to ignore or permit to drift out of synchronization. Weak typing means that a language implicitly converts (or casts) types when used. such features may also be used e. When the compiler knows the exact data types that are in use. 106 Strong and weak typing: Liskov Definition In 1974 Liskov and Zilles described a strong-typed language as one in which "whenever an object is passed from a calling function to a called function.Type system typed languages such as Dependent ML and Epigram have suggested that almost all bugs can be considered type errors. Dynamic typing typically makes metaprogramming easier to use. its type must be compatible with the type declared in the called function. See optimization. Statically typed languages that lack type inference (such as C and Java) require that programmers declare the types they intend a method or function to use. such as allowing a placeholder data structure (mock object) to be transparently used in place of a full-fledged data structure (usually for the purposes of experimentation and testing). This too may reduce the edit-compile-test-debug cycle. This can serve as additional documentation for the program. // (1) var y := "37". // (3) (x is an integer) (y is a string) (?) . Dynamic typing typically allows duck typing (which enables easier code reuse). In some languages. By contrast. become possible. Some dynamically typed languages such as Common Lisp allow optional type declarations for optimization for this very reason.[6] Static typing usually results in compiled code that executes more quickly. An eval function is possible with static typing. eval functions. Such advanced constructs are often provided by dynamic programming languages. Static typing makes this pervasive. // (2) x + y. it can produce optimized machine code. A computer language that implements strong typing will prevent the successful execution of an operation on arguments that have the wrong type. although dynamic typing need not be related to dynamic programming languages. if the types used in a program are properly declared by the programmer or correctly inferred by the compiler. but requires advanced uses of algebraic data types. so explicit type declaration is not a necessary requirement for static typing in all languages."[8] Strong and weak typing A type system is said to feature strong typing when it specifies one or more restrictions on how operations involving values of different data types can be intermixed. Many languages with static typing also feature duck typing or other mechanisms like generic programming which also enables easier code reuse. However. OCaml and to a lesser extent C#). Scala. Dynamic typing allows constructs that some static type checking would reject as illegal. since changes to source code in dynamically typed languages may result in less checking to perform and less code to revisit. based on run-time data. "In a strongly typed language each data area will have a distinct type and each process will state its communication requirements in terms of these types. which execute arbitrary data as code. a language can be statically typed without requiring type declarations (examples include Haskell. many of these are dynamically typed. For example. to generate new types and behaviors on the fly.

In the same manner. not only must the compiler allow the code at compile time. if it does not allow operations or conversions that lead to erroneous conditions. the result of this operation depends on language-specific rules. This may permit more compact and faster C code.POSITIVE_INFINITY Infinity == Number. variable z in the example acquires the value 42. In this case. "Hello World"). Computer scientists consider a language "type-safe". Such languages are type-safe (in that they will not crash). the left-most operand determines the type of the result. the conversion to string is applied regardless of the order of the operands (for example. perform addition. y + x would be "375") while in AppleScript. // (2) var z := x + y.POSITIVE_INFINITY "Infinity" == Infinity y == "Infinity" // y now equals a constant for // // // // returns returns returns returns true true true true 107 A C cast gone wrong exemplifies the problems that can occur if strong typing is absent: if a programmer casts a value from one type to another in C. // (1) var y := "37". but it can make debugging more difficult. so that x + y is the number 42 but y + x is the string "375". but can easily produce undesirable results. at compile time before execution) that array accesses out of the array boundaries will cause compile-time and perhaps runtime errors. or else statically guarantee (i. var x := 5.g. While the programmer may or may not have intended this.e. a memory-safe language will check array bounds. if the value of y was a string that could not be converted to a number (e. the language defines the result specifically. in some languages. but the runtime must allow it as well." In JavaScript. the numeric operand would be converted to a string. such languages are type-safe. Now let us look at the same example in C: . Visual Basic would convert the string "37" into the number 37. and produce the number 42.Type system In a weakly typed language. Safely and unsafely typed systems A third way of categorizing the type system of a programming language uses the safety of typed operations and conversions. due to JavaScript's dynamic type conversions: var y = 2 / 0. and produce the string "537. perform string concatenation. For example. infinity y == Number. however. the results would be undefined.. In other languages like JavaScript. and the program does not crash or assign an ill-defined value to z . and then concatenation performed. In this respect. Some observers use the term memory-safe language (or just safe language) to describe languages that do not allow undefined operations to occur. JavaScript would convert the number 5 to the string "5". // (3) In languages like Visual Basic. the results are not undefined and are predictable.

meaning Not A Number isNaN(x). when dividing a Number by a String . typeof(y). y == Number.POSITIVE_INFINITY. typeof(x). and in typical systems dereferencing z at this point could cause the program to crash. In this example z 108 will point to a memory address five characters beyond y . or a Number by zero. For example. like JavaScript. the use of special numeric values and constants allows type-safety for mathematical operations without resulting in runtime errors. var aString = new String("A"). // // // // // returns true returns "number" y now equals a constant for infinity returns true returns "number" . In some languages. var x = 32. var y = 2 / 0. x = x/aString. char y[] = "37". The content of that location is undefined. // x now equals the constant NaN. but not memory-safe program—a condition that cannot occur in a type-safe language. The mere computation of such a pointer may result in undefined behavior (including the program crashing) according to C standards. We have a well-typed. and might lie outside addressable memory. char* z = x + y. equivalent to three characters after the terminating zero character of the string pointed to by y .Type system int x = 5.

Type system 109 Variable levels of type checking Some languages allow different levels of checking to apply to different regions of code. • The Option Strict On in VB. • The @ operator in PHP suppresses some error messages. that the choice of type system be made independent of choice of language. The most prominent ones are that for duck typing. Duck typing In "duck typing". Duck typing uses the premise that (referring to a value) "if it walks like a duck. must supply an implementation of the method called. or to the ability of different instances of the same data structure to contain elements of different types. The type-theoretic foundations of polymorphism are closely related to those of abstraction.[9] The requirement that types do not affect the semantics of the language is difficult to fulfil: for instance. chiefly by Gilad Bracha. of whatever type. On the other hand. only that the object. Duck typing differs from structural typing in that.[10] a statement calling a method m on an object does not rely on the declared type of the object. class based inheritance becomes impossible. because what he calls mandatory type systems make languages less expressive and code more fragile.NET allows the compiler to require a conversion between objects. . methods or classes) to act on values of multiple types. modularity and (in some cases) subtyping. if the part (of the whole module structure) needed for a given local computation is present at runtime. type information is determined at runtime (as contrasted to compile time). Optional type systems It has been proposed. that a type system should be a module that can be "plugged" into a language as required. the duck type system is satisfied in its type identity analysis. programmers need only implement a data structure such as a list or an associative array once. then it is a duck" (this is a reference to the duck test that is attributed to James Whitcomb Riley). a structural type system would require the analysis of the whole module structure at compile time to determine type identity or type dependence. Polymorphism and types The term "polymorphism" refers to the ability of code (in particular. Type systems that allow polymorphism generally do so in order to improve the potential for code re-use: in a language with polymorphism. For this reason computer scientists sometimes call the use of certain forms of polymorphism generic programming. when called. The term may have been coined by Alex Martelli in a 2000 message[11] to the comp. Examples include:• The use strict directive in Perl applies stronger checking. only partial structure information is required for that for a given point in the program execution. and the name of the type is irrelevant to determine type identity or type dependence.lang. Additional tools such as lint and IBM Rational Purify can also be used to achieve a higher level of strictness.python newsgroup (see Python). at run-time. Duck typing differs from a nominative type system in a number of aspects. He believes this is advantageous. and quacks like a duck. rather than once for each type of element with which they plan to use it.

and so on. and closely related to uniqueness types. but because type checking for conventional dependent types is undecidable. because it is compatible with both types. if " int → int " is the type of functions taking an integer argument and returning an integer. not all programs using them can be type-checked without some kind of limits. are types assigned to values having the property that they have one and only one reference to them at all times. For example. as in Cayenne. These are valuable for describing large immutable values such as files.Type system 110 Specialized type systems Many type systems have been created that are specialized for use in certain environments with certain types of data. A variant of ML called Dependent ML has been created based on this type system. strings. might be the type of a 3×3 matrix. in most implementations of C the signed char has range -128 to 127 and the unsigned char has range 0 to 255. It is also possible to make the language Turing-complete at the price of undecidable type checking. so the intersection type of these two types would have range 0 to 127. The Clean language (a Haskell-like language) uses this type system in order to gain a lot of speed while remaining safe. Normally this is not possible. or for out-of-band static program analysis. Such an intersection type could be safely passed into functions expecting either signed or unsigned chars. Linear types Linear types. are arbitrary positive integer values. For example. these are based on ideas from formal type theory and are only available as part of prototype research systems. based on the theory of linear logic. Intersection types Intersection types are types describing values that belong to both of two other given types with overlapping value sets. because any operation that simultaneously destroys a linear object and creates a similar object (such as 'str = str + "a"') can be optimized "under the hood" into an in-place mutation. Dependent ML limits the sort of equality it can decide to Presburger arithmetic. violating referential transparency. Frequently. They are also used in the prototype operating system Singularity for interprocess communication. We can then define typing rules such as the following rule for matrix multiplication: where . statically ensuring that processes cannot share objects in shared memory in order to prevent race conditions. Dependent types Dependent types are based on the idea of using scalars or values to more precisely describe the type of some other value. . Other languages such as Epigram make the value of all expressions in the language decidable so that type checking can be decidable. as such mutations could cause side effects on parts of the program holding other references to the object. and " float → float . Intersection types are useful for describing overloaded function types: For example.

} could also have the type ∃X { a: X. In a subclassing hierarchy.. 111 Union types Union types are types describing values that belong to either of two types. C's "union" concept is similar to union types. so any value of one of these types is a value of type T. A restricted form is refinement types. for example: • intT = { a: int. but is not typesafe. it simply would not use the " float → float " functionality. and the unsigned char has range 0 to 255.f(t.Type system " is the type of functions taking a float argument and returning a float. so the union of these two types would have range -128 to 255. In a subclassing hierarchy.a)" is well-typed. the only valid operations on a union type are operations that are valid on both types being unioned. In general it's impossible for the typechecker to infer which existential type a given module belongs to. The union of sibling types is a subtype of their common ancestor (that is. the union of a type and an ancestor type (such as its parent) is the ancestor type. f: (int → int). More generally. For example. regardless of what the abstract type X is. rather than both. Existential types Existential types are frequently used in connection with record types to represent modules and abstract data types. where they are used to represent symbolic values whose exact nature (e. The simplest solution is to . the signed char has range -128 to 127. f: (X → int). f: (float → int). we know that "t. f: (int → int). In the above example intT { a: int. the intersection of a type and an ancestor type (such as its parent) is the most derived type. Union types are important in program analysis.g. The intersection of sibling types is empty. This gives flexibility for choosing types suited to a particular implementation while clients that use only values of the interface type—the existential type—are isolated from these choices. For example. }. This could be implemented in different ways. due to their ability to separate implementation from interface. Any function handling this union type would have to deal with integers in this complete range. f: (int → int). Such a function could be passed into another function expecting an " int → int " function safely. as it permits operations that are valid on either type. but they may also have other valid operations in common). The Forsythe language includes a general implementation of intersection types. Given a value "t" of type "T". } • floatT = { a: float. then the intersection of these two types can be used to describe functions that do one or the other. all operations permitted on their common ancestor are permitted on the union type. in C. based on what type of input they are given. the type "T = ∃X { a: X. }" describes a module interface that has a data member of type X and a function that takes a parameter of the same type X and returns an integer. } These types are both subtypes of the more general existential type T and correspond to concrete implementation types. value or type) is not known.

f: (X → int). Numerical and string constants and expressions in code can and often do imply type in a particular context. e. perform type inference: The compiler draws conclusions about the types of variables based on how programmers use those variables. it wasn't until 1988 that John C. inference is often possible for a large subset of real-world programs. if it is decidable in the type theory in question. y) that adds x and y together. 112 Explicit or implicit declaration and inference Many static type systems. Mitchell and Gordon Plotkin established the formal theory under the slogan: "Abstract [data] types have existential type". while [1.: • intT = { a: int.[12] The theory is a second-order typed lambda calculus similar to System F.Type system annotate every module with its intended type. such as Haskell's. .14 might imply a type of floating-point. require type declarations: The programmer must explicitly associate each variable with a particular type. but with existential instead of universal quantification. such as those of C and Java. 2. an expression 3. Type inference is in general possible. For example. 3] might imply a list of integers – typically an array. Others. the compiler can infer that x and y must be numbers – since addition is only defined for numbers. } as ∃X { a: X. given a function f(x. any call to f elsewhere in the program that specifies a non-numeric type (such as a string or list) as an argument would signal an error.g. For example. even if inference is undecidable in general for a given type theory. } Although abstract data types and modules had been implemented in programming languages for quite some time. f: (int → int). Therefore. Moreover.

the inferred type of the expression e must be consistent with the declared or inferred type of the variable x. a version of Hindley-Milner.g. Kinds appear explicitly in typeful programming. such as parameterized types existentially quantified types. e. and rank-1 programs still have type inference. This notion of consistency. Unified Type System Some languages like C# have a unified type system. Most Haskell compilers allow arbitrary-rank polymorphism as an extension. ... binary functions universally quantified types. Every type in C# inherits from the Object class. • • • • • • • • • • • • • Abstract data types Algebraic types Subtype Derived type Object types.g.. in an assignment statement of the form x := e. Java has several primitive types that are not objects. called compatibility. such as modules Refinement types – types that identify subsets of other types Dependent types – types that depend on terms (values) Ownership types – types that describe or constrain the structure of object-oriented systems Pre-defined types provided for convenience in real-world applications. such as date. higher rank polymorphic programs are rejected unless given explicit type annotations. arrays or records. integers and natural numbers • Floating point types – types of numbers in floating-point representation • Reference types • Option types • Nullable types • Composite types – types composed of basic types. is specific to each programming language. This means that all C# types including primitive types inherit from a single root object.Type system Haskell's type system. time and money.g.. Compatibility: equivalence and subtyping A type-checker for a statically typed language must verify that the type of any expression is consistent with the type expected by the context in which that expression appears.g. e. (Type checking is decidable.. in which type inference is decidable. integer and floating-point number • Boolean • Integral types – types of whole numbers. such as a type constructor in the Haskell language. Types fall into several broad categories: • Primitive types – the simplest kind of type. e. however.) 113 Types of types A type of types is a kind. For instance. type variable Partial type Recursive type Function types. e. but this makes type inference undecidable. is a restriction of System Fω to so-called rank-1 polymorphic types. e. Java provides wrapper object types that exist together with the primitive types so developers can use either the wrapper object types or the simpler non-object primitive types.g.

Dynamic Typing When Needed: The End of the Cold War Between Programming Languages" (http:/ / research. . google. Benjamin C. ist. google.. and some dynamic languages have run-time optimisers[15][16] that can generate fast code approaching the speed of static language compilers.e. virginia. ist. sourceforge. (2002). pdf) [10] Rozsnyai. microsoft. then a value of type A can be used in a context where one of type B is expected. [15] "Adobe and Mozilla Foundation to Open Source Flash Player Scripting Engine" (http:/ / www. B. [9] Bracha. Abstract Types Have Existential Type (http:/ / theory. ISBN 0-262-16209-1. doi:10. pdf). 41. CiteSeerX: 10. Google Docs.1. psu. 136. if A is a subtype of B. Scott. and they may perform better at runtime. Dana (1998). html). the subtype relation is defined differently for each programming language. and nominative type systems. types must have the same "name" in order to be equal). Strong Testing" (http:/ / docs.: Pluggable Types (http:/ / bracha. ACM Sigplan Notices. edu/ viewdoc/ summary?doi=10. "Programming with abstract data types". p. stanford. K. Plotkin. Zilles. in which any two types are equivalent that describe values with the same structure. pdf). microsoft. Microsoft Corporation. Benjamin C. however. Schatten. thus. Erik. com/ View?id=dcsvntt2_25wpjvbbhk). Peter. "Parallel processing and modular software construction" (http:/ / www. pp. html)]: Why Pascal is not my favorite language] [5] http:/ / msdn. [11] Martelli.. J. Gordon D. com/ content/ wq02703237400667/ ). The presence of parametric or ad hoc polymorphism in a language may also have implications for type compatibility. 3043). lang.1. (Web link) (http:/ / groups. edu/ ~cs655/ readings/ bwk-on-pascal. com/ en-us/ library/ dd233052(VS. In languages with subtyping. 1. In the simplest type systems. Schiefer.548 (http:/ / citeseerx. a Python specializing compiler" (http:/ / psyco. even if the reverse is not true. two extreme cases being structural type systems. with many variations possible. [14] Eckel. edu/ ~jcm/ papers/ mitch-plotkin-88.. the need for the programmer to explicitly specify types of variables is automatically lowered for such languages. Proceedings of the 2007 inaugural international conference on Distributed event-based systems . doi:10. CiteSeerX: 10.1007/BFb0021435. G. com/ en-US/ press/ mozilla-2006-11-07. have different criteria for when two type expressions are understood to denote the same type. 1. No. Like equivalence. Types and Programming Languages.[13][14] Likewise. there is often no need to manually declare all types in statically typed languages with type inference.3043 (http:/ / citeseerx. [7] Liskov. aspx [6] Xi. .. These different equational theories of types vary widely. 470–502 [13] Meijer. John C. Statically typed languages alert programmers to type errors during compilation. . Vol. "Dependent Types in Practical Programming". Hongwei. (2002). MIT Press. 114 Programming style Some programmers prefer statically typed languages.136. the question of whether two types are compatible reduces to that of whether they are equal (or equivalent). July 1988. com/ group/ comp. (1977). Advocates of dynamically typed languages claim they better support rapid prototyping and that type errors are only a small subset of errors in a program. ACM Transactions on Programming Languages and Systems. net/ introduction. co. In particular. Bruce. often by using partial type inference. the compatibility relation is more complex. "Strong Typing vs. 1. html).1.. "Static Typing Where Possible. .1266904. com/ en-us/ um/ people/ emeijer/ Papers/ RDL04Meijer. uk/ books?id=7i8EAAAAMBAJ& pg=PA66& lpg=PA66& dq=pascal+ type+ system+ "too+ strong"& source=bl& ots=PGyKS1fWUb& sig=ebFI6fk_yxwyY4b7sHSklp048Q4& hl=en& ei=lSmjTunuBo6F8gPOu43CCA& sa=X& oi=book_result& ct=result& resnum=1& ved=0CBsQ6AEwAA#v=onepage& q=pascal type system "too strong"& f=false) [4] [[Brian Kernighan (http:/ / www. pp. cs. 548).1145/1266894. Alex (26 July 2000). others prefer dynamically typed languages.1. 3. ISBN 9781595936653. S.newsguy. mozilla. psu. org/ pluggableTypesPosition. . S (1974). A. springerlink. "Concepts and models for typing events for event-based systems". [16] "Psyco. "lmvn6017l@news1. python/ msg/ e230ca916be58835?hl=en& ).41. [2] Pierce. Lecture Notes in Computer Science 54: 436–443.Type system If the type of e and the type of x are the same and assignment is allowed for that type. . 208 [3] Infoworld 25 April 1983 (http:/ / books. 62. (2007). [12] Mitchell. 1. in which no two syntactically distinct type expressions denote the same type (i. Different languages. [8] Jackson. Re: polymorphism (was Re: Type checking in python?) (news:8)". therefore. Proceedings of ACM SIGPLAN Symposium on Principles of Programming Languages (ACM Press): 214–227. edu/ viewdoc/ summary?doi=10. google. then this is a valid expression. References [1] Pierce. Drayton.DEBS '07. 100).

a type system is said to feature strong typing when it specifies one or more restrictions on how operations involving values of different data types can be intermixed. Advances in Computers. pp. b) # Type Error add(a. since the latter would never happen . the execution semantics of the language or another mechanism. int(b)) # Returns 4 ActionScript 3. 77.Type system 115 Further reading • Smith. b) # Returns "22" add(a. [1] In other writing. Tony Hoare's early papers call this property tratt__dynamically_typed_languages/). • Type safety. b) # Type Error concatenate(str(a). Example Weak Typing Pseudocode Strong Typing a = 2 b = "2" concatenate(a. C#. or. However. Java. • The guarantee that a well-defined error or exceptional behavior (as opposed to an undefined behavior) occurs as soon as a type-matching failure happens at runtime. Dynamically Typed Languages (http://tratt. the nature and strength of these restrictions is highly variable. "strong typing" implies that the programming language places severe restrictions on the intermixing that is permitted to an-old-article-i-wrote/) • Tratt. OCaml Languages BASIC. PHP. type safety is proved about a formal language by proving progress and preservation. preventing the compiling or running of source code which uses data in what is considered to be an invalid way. Rexx Meanings in computer literature Some of the factors which writers have qualified as "strong typing" include: • Absence of unchecked run-time type errors. • Strong guarantees about the run-time behavior of a program before program execution.wordpress. the guarantee that type-matching failures would never happen at runtime (which would also satisfy the constraint of "no undefined behavior" after type-matching failures. Python. a procedure which operates upon linked lists may not be used upon numbers. C++. This definition comes from Luca Cardelli's article Typeful Programming. an addition operation may not allow to add an integer to a string value. as a special case of that with even stronger constraints. whether provided by static analysis. For instance. b) # Returns "22" add(a. Vol. Perl. In a more rigorous setting. 149–184. at compile or run time. July 2009 Strongly typed programming language <noinclude Mm q q q Vd XT9 </noinclude> In computer science and computer programming. The opposite of strong typing is weak typing. Interpretation Most generally. What To Know Before Debating Type Systems (http://cdsmith. Laurence. that is. the rejection of operations or function calls which attempt to disregard data types. b) # Returns 4 a = 2 b = "2" concatenate(a. Chris. JavaScript. the absence of unchecked run-time errors is referred to as safety or type safety.

Some Lisp dialects like Common Lisp or Clojure do support various forms of type declarations[6] and some compilers (CMUCL[7] and related) use these declarations together with type inference to enable various optimizations and also limited forms of compile time type checks. it is possible to defend claims about most programming languages that they are either strongly or weakly typed. Its implicit casts are fairly liberal where. Python.] each object in a program has a well-defined type which implicitly defines the legal values of and operations on the object. The mandatory requirement. but these languages make no use of static type checking: the compiler does not check or enforce type constraint rules. For example. The language guarantees that it will prohibit illegal values and operations. C#. though it allows disabling dynamic type checking by explicitly putting code segments in an "unsafe context". F#. OCaml and Haskell have purely static type systems. as they permit no implicit type conversions.and run-time checking. is used to indicate the desire of converting one type to another. a programming language is strongly typed if type conversions are allowed only when an explicit notation. However. [2] Fixed and invariable typing of data objects. Because of the wide divergence among these definitions. that is also the definition of static typing. The absence of ways to evade the type system. Ada and Pascal are often said to be more strongly typed than C. While OCaml's libraries allow one form of evasion (Object magic). one can sum string . explicitly or implicitly. their bit-pattern. the compiler ensures that operations only occur on operand types that are valid for the operation. others are merely orthogonal.e. Ada and C require all variables to have a defined type and support the use of explicit casts of arithmetic values to other arithmetic types. by some mixture of compile. • The Lisp family of languages are all "strongly typed" in the sense that typing errors are prevented at runtime. class instances may not have their class altered."[3] Variation across programming languages Note that some of these definitions are contradictory. For these authors. more "liberal" (less strong) definitions. C#. conversions that are inserted by the compiler on the programmer's behalf. for example. Such evasions are possible in languages that allow programmer access to the underlying representation of values. Values of one type cannot be converted to another type. C# is similar to Java in that respect.Strongly typed programming language anyway). this feature remains unused in most applications... Pascal's type system has been described as "too strong". Omission of implicit type conversion. A complex. That is. and still others are special cases (with additional constraints) of other. Disallowing any kind of type conversion. of compile-time checks for type constraint violations. Pascal.. The type of a given data object does not vary over that object's lifetime. Java. Java itself may be considered more strongly typed than Pascal as manners of evading the static type system in Java are controlled by the Java Virtual Machine's dynamic type system. The term duck typing is now used to describe the dynamic typing paradigm used by the languages in this group. a claim that is probably based on the fact that C supports more kinds of implicit conversions. Ruby. These languages (along with most functional languages) are considered to have stronger type systems than Java. by a language definition. because the size of an array or string is part of its type. leading some experts to state: "Static typing is often confused with StrongTyping". • Visual Basic is a hybrid language. For instance: • Java. often called a cast.[4][5] • The object-oriented programming languages Smalltalk. and C also allows pointer values to be explicitly cast while Java and Pascal do not. making some programming tasks very difficult. fine-grained type system with compound types. i. that is. it includes a "Variant" data type that can store data of any type. In addition to including statically typed variables. in which the compiler automatically infers a precise type for all values. • Standard ML. and Self are all "strongly typed" in the sense that typing errors are prevented at runtime and they do little implicit type conversion. 116 • • • • • • • Brian Kernighan: "[.

html#toc123) Weak typing <noinclude Mm q q q Vd XT9 </noinclude> In computer science. However. Sometimes implicit conversion occurs which will surprise unwary programmers and lead to unexpected bugs. com/ documentation/ HyperSpec/ Body/ 04_. . 117 References [1] [2] [3] [4] ftp:/ / gatekeeper. in PHP. such languages usually have restrictions on what programmers can do with values of a given type. html)] in Why Pascal is not my favourite language] Infoworld April 25th 1983 (http:/ / books. There is no type checking. even though they have distinct values as strings. it is up to the programmer to ensure that data given to functions is of the appropriate type. ad-hoc polymorphism (also known as overloading) or both. just as "strong typing" does. cs. thus it is possible for a weakly typed language to be type safe. pdf page 3 Cunningham & Cunningham Wiki (http:/ / c2. virginia. uk/ books?id=7i8EAAAAMBAJ& pg=PA66& lpg=PA66& dq=pascal+ type+ system+ "too+ strong"& source=bl& ots=PGyKS1fWUb& sig=ebFI6fk_yxwyY4b7sHSklp048Q4& hl=en& ei=lSmjTunuBo6F8gPOu43CCA& sa=X& oi=book_result& ct=result& resnum=1& ved=0CBsQ6AEwAA#v=onepage& q=pascal type system "too strong"& f=false) [5] [[Brian Kernighan (http:/ / www. in which case everything is resolved at run time. For example. Types in Python (http:/ / common-lisp.Strongly typed programming language variants and pass the result into an integer literal. html)]: Why Pascal is not my favourite language] [6] Common Lisp HyperSpec. Moreover. These less restrictive usage rules can give the impression that strict adherence to typing rules is less important than in strongly typed languages and hence that the type system is "weaker". htm) [7] CMUCL User's Manual: The Compiler. cs. virginia. weak typing (a. google. • Assembly language and Forth have been said to be untyped. one claimed disadvantage is that weakly typed programming systems catch fewer errors at compile time and some of these might still remain after testing has been completed. For this reason. One claimed advantage of weak typing over strong typing is that it requires less effort on the part of the programmer because the compiler or interpreter implicitly performs certain kinds of conversions. com/ pub/ DEC/ SRC/ research-reports/ SRC-045. net/ project/ cmucl/ doc/ cmu-user/ compiler. and consequently the term weak typing has a number of different meanings. Types and Classes (http:/ / www. weakly typed languages may be statically typed. writers who wish to write unambiguously about type systems often eschew the term "strong typing" in favor of specific expressions such as "type safety". However. co. One of the more common definitions states that weakly typed programming languages are those that support either implicit type conversion (nearly all languages support at least one implicit type conversion). research. edu/ ~cs655/ readings/ bwk-on-pascal. compaq.k. edu/ ~cs655/ readings/ bwk-on-pascal. lispworks. Any type conversion required is explicit. in which case overloading is resolved statically and type conversion operations are inserted by the compiler. It is the opposite of strong typing. the strings "1000" and "1e3" compare equal because they are implicitly cast to floating point numbers. or dynamically typed.a. com/ cgi/ wiki?StaticTyping) [[Brian Kernighan (http:/ / www. loose typing) is a property attributed to the type systems of some programming languages.

Color coded highlighting is used in this piece of code written in Python.g. The syntax of a language defines its surface form. Yacc (yet another compiler compiler). The lexical grammar of a textual language specifies how characters must be chunked into tokens. Parse tree of Python code with inset tokenization Below is a simple grammar. as it is in syntactic analysis in linguistics. or void) from which syntactically valid programs are constructed. the syntax of a programming language is the set of rules that define the combinations of symbols that are considered to be correctly structured programs in that language. atom. The syntactic analysis of source code usually entails the transformation of the linear sequence of tokens into a hierarchical syntax tree (abstract syntax trees are one convenient form of syntax tree). Other syntax rules specify the permissible sequences of these tokens and the process of assigning meaning to these token sequences is part of semantics.Syntax 118 Syntax In computer science. number. e.[1] Terminal symbols are the concrete characters or strings of characters (for example keywords such as define. Syntactic categories are defined by rules called productions. Syntax highlighting and indent style are often used to aid programmers in recognizing elements of source code. which defines productions for the syntactic categories expression. while visual programming languages are based on the spatial layout and connections between symbols (which may be textual or graphical). This process is called parsing. which specify the values that belong to a particular syntactic category. symbol. and list: . if. based on Lisp.[1] Text-based programming languages are based on sequences of characters.. Tools have been written that automatically generate parsers from a specification of a language grammar written in Backus-Naur form. Syntax definition The syntax of textual programming languages is usually defined using a combination of regular expressions (for lexical structure) and Backus-Naur Form (for grammatical structure) to inductively specify syntactic categories (nonterminals) and terminal symbols. let.

Syntax expression ::= atom | list atom ::= number | symbol number ::= [+-]?['0'-'9']+ symbol ::= ['A'-'Z''a'-'z'].* list ::= '(' expression* ')' This grammar specifies the following: • • • • • an expression is either an atom or a list; an atom is either a number or a symbol; a number is an unbroken sequence of one or more decimal digits, optionally preceded by a plus or minus sign; a symbol is a letter followed by zero or more of any characters (excluding whitespace); and a list is a matched pair of parentheses, with zero or more expressions inside it.


Here the decimal digits, upper- and lower-case characters, and parentheses are terminal symbols. The following are examples of well-formed token sequences in this grammar: '12345', '()', '(a b c232 (1))' The grammar needed to specify a programming language can be classified by its position in the Chomsky hierarchy. The syntax of most programming languages can be specified using a Type-2 grammar, i.e., they are context-free grammars.[2] However, there are exceptions. In some languages like Perl and Lisp the specification (or implementation) of the language allows constructs that execute during the parsing phase. Furthermore, these languages have constructs that allow the programmer to alter the behavior of the parser. This combination effectively blurs the distinction between parsing and execution, and makes syntax analysis an undecidable problem in these languages, meaning that the parsing phase may not finish. For example, in Perl it is possible to execute code during parsing using a BEGIN statement, and Perl function prototypes may alter the syntactic interpretation, and possibly even the syntactic validity of the remaining code.[3] Similarly, Lisp macros introduced by the defmacro syntax also execute during parsing, meaning that a Lisp compiler must have an entire Lisp run-time system present. In contrast C macros are merely string replacements, and do not require code execution.[4][5]

Syntax versus semantics
The syntax of a language describes the form of a valid program, but does not provide any information about the meaning of the program or the results of executing that program. The meaning given to a combination of symbols is handled by semantics (either formal or hard-coded in a reference implementation). Not all syntactically correct programs are semantically correct. Many syntactically correct programs are nonetheless ill-formed, per the language's rules; and may (depending on the language specification and the soundness of the implementation) result in an error on translation or execution. In some cases, such programs may exhibit undefined behavior. Even when a program is well-defined within a language, it may still have a meaning that is not intended by the person who wrote it. Using natural language as an example, it may not be possible to assign a meaning to a grammatically correct sentence or the sentence may be false: • "Colorless green ideas sleep furiously." is grammatically well-formed but has no generally accepted meaning. • "John is a married bachelor." is grammatically well-formed but expresses a meaning that cannot be true. The following C language fragment is syntactically correct, but performs an operation that is not semantically defined (because p is a null pointer, the operations p->real and p->im have no meaning): complex *p = NULL; complex abs_p = sqrt (p->real * p->real + p->im * p->im);



[1] Friedman, Daniel P.; Mitchell Wand, Christopher T. Haynes (1992). Essentials of Programming Languages (1st ed.). The MIT Press. ISBN 0-262-06145-7. [2] Michael Sipser (1997). Introduction to the Theory of Computation. PWS Publishing. ISBN 0-534-94728-X. Section 2.2: Pushdown Automata, pp.101–114. [3] The following discussions give examples: Perl and Undecidability (http:/ / www. jeffreykegler. com/ Home/ perl-and-undecidability) LtU comment clarifying that the undecidable problem is membership in the class of Perl programs (http:/ / lambda-the-ultimate. org/ node/ 3564#comment-50578) • chromatic's example of Perl code that gives a syntax error depending on the value of random variable (http:/ / www. modernperlbooks. com/ mt/ 2009/ 08/ on-parsing-perl-5. html) [4] http:/ / www. apl. jhu. edu/ ~hall/ Lisp-Notes/ Macros. html [5] http:/ / cl-cookbook. sourceforge. net/ macros. html • •

External links
• Various syntactic constructs used in computer programming languages ( language-study/syntax-across-languages/)

Scripting language
A scripting language or script language is a programming language that supports the writing of scripts, programs written for a software environment that automate the execution of tasks which could alternatively be executed one-by-one by a human operator. Environments that can be automated through scripting include software applications, web pages within a web browser, the shells of operating systems, and several general purpose and domain-specific languages such as those for embedded systems. Scripts can be written and executed "on-the-fly", without explicit compile and link steps; they are typically created or modified by the person executing them.[1] A scripting language is usually interpreted from source code or bytecode.[2] By contrast, the software environment the scripts are written for is typically written in a compiled language and distributed in machine code form; the user may not have access to its source code, let alone be able to modify it. The spectrum of scripting languages ranges from very small and highly domain-specific languages to general-purpose programming languages. The term script is typically reserved for small programs (up to a few thousand lines of code).

Early mainframe computers (in the 1950s) were non-interactive, instead using batch processing. IBM's Job Control Language (JCL) is the archetype of languages used to control batch processing.[3] The first interactive shells were developed in the 1960s to enable remote operation of the first time-sharing systems, and these used shell scripts, which controlled running computer programs within a computer program, the shell. Calvin Mooers in his TRAC language is generally credited with inventing command substitution, the ability to imbed commands in scripts that when interpreted insert a character string into the script.[4] Multics calls these active functions.[5] Louis Pouzin wrote an early processor for command scripts called RUNCOM for CTSS around 1964. Stuart Madnick at MIT wrote a scripting language for IBM's CP/CMS in 1966. He originally called this processor COMMAND, later named EXEC.[6] Multics included an offshoot of CTSS RUNCOM, also called RUNCOM.[7] Languages such as Tcl and Lua were specifically designed as general purpose scripting languages that could be embedded in any application. Other languages such as Visual Basic for Applications (VBA) provided strong

Scripting language integration with the automation facilities of an underlying system. Embedding of such general purpose scripting languages instead of developing a new language for each application also had obvious benefits, relieving the application developer of the need to code a language translator from scratch and allowing the user to apply skills learned elsewhere. Some software incorporates several different scripting languages. Modern web browsers typically provide a language for writing extensions to the browser itself, and several standard embedded languages for controlling the browser, including JavaScript (a dialect of ECMAScript) or XUL.


Types of scripting languages
Job control languages and shells
A major class of scripting languages has grown out of the automation of job control, which relates to starting and controlling the behavior of system programs. (In this sense, one might think of shells as being descendants of IBM's JCL, or Job Control Language, which was used for exactly this purpose.) Many of these languages' interpreters double as command-line interpreters such as the Unix shell or the MS-DOS COMMAND.COM. Others, such as AppleScript offer the use of English-like commands to build scripts.

GUI scripting
With the advent of graphical user interfaces, a specialized kind of scripting language emerged for controlling a computer. These languages interact with the same graphic windows, menus, buttons, and so on that a human user would. They do this by simulating the actions of a user. These languages are typically used to automate user actions. Such languages are also called "macros" when control is through simulated key presses or mouse clicks. These languages could in principle be used to control any GUI application; but, in practice their use is limited because their use needs support from the application and from the operating system. There are a few exceptions to this limitation. Some GUI scripting languages are based on recognizing graphical objects from their display screen pixels. These GUI scripting languages do not depend on support from the operating system or application.

Application-specific languages
Many large application programs include an idiomatic scripting language tailored to the needs of the application user. Likewise, many computer game systems use a custom scripting language to express the programmed actions of non-player characters and the game environment. Languages of this sort are designed for a single application; and, while they may superficially resemble a specific general-purpose language (e.g. QuakeC, modeled after C), they have custom features that distinguish them. Emacs Lisp, while a fully formed and capable dialect of Lisp, contains many special features that make it most useful for extending the editing functions of Emacs. An application-specific scripting language can be viewed as a domain-specific programming language specialized to a single application.

JavaScript began as and primarily still is a language for scripting inside web browsers. but is widely used as an extension language as well as a general purpose language. Rexx was originally created as a job control language. Tcl was created as an extension language but has come to be used more frequently as a general purpose language in roles similar to Python. Extension/embeddable languages A number of languages have been designed for the purpose of replacing application-specific scripting languages by being embeddable in application programs. no matter how sophisticated. For example. and Ruby. They are usually not called "scripting languages" by their own users. even if they are more commonly used for applications programming.g. this allows them to prototype features faster and tweak more freely. game engines) also use an embedded language. . without the need for the user to have intimate knowledge of the inner workings of the application or to rebuild it after each tweak (which can take a significant amount of time.Scripting language 122 Text processing languages The processing of text-based records is one of the oldest uses of scripting languages.) The scripting languages used for this purpose range from the more common and more famous Lua and Python to lesser-known ones such as AngelScript and Squirrel. or Blender which has Python to fill this role. and grep automate tasks that involve text files. or dynamic – have been described as "scripting languages" for these similarities. General-purpose dynamic languages Some languages. During the development. Autodesk Maya 3D authoring tools embed the MEL scripting language. memory-managed. Scripts written for the Unix tools AWK. the user gets the advantage of being able to transfer skills from application to application. sed. Other complex and task-oriented applications may incorporate and expose an embedded programming language to allow their users more control and give them more functionality than can be available through a user interface. the standardization of the language as ECMAScript has made it popular as a general purpose embeddable language. configuration and log files. for example. These languages may be technically equivalent to an application-specific extension language but when an application embeds a "common" language. Other similar languages – frequently interpreted. Perl. Other applications embedding ECMAScript implementations include the Adobe products Adobe Flash (ActionScript) and Adobe Acrobat (for scripting PDF files). began as scripting languages[8] but were developed into programming languages suitable for broader purposes. Ch is another C compatible scripting option for the industry to embed into C/C++ application programs. Some other types of applications that need faster feature addition or tweak-and-run cycles (e. In particular. however. The application programmer (working in C or another systems language) includes "hooks" where the scripting language can control the application. such as Perl. On the other hand. the Mozilla implementation SpiderMonkey is embedded in several environments such as the Yahoo! Widget Engine. Perl was originally designed to overcome limitations of these tools and has grown to be one of the most widespread general purpose languages.

[9] the most widespread scripting language is JavaScript. Python. "Beginner's Introduction to Perl" (http:/ / Melinda.(RUNCOM)" (http:/ / www. 2012. net/pixel/language-study/scripting-language/) — from The Scriptometer • A Slightly Skeptical View on Scripting Languages (http://www.perl. .uk/~np2/ patterns/scripting/) • A study of the Script-Oriented Programming (SOP) suitability of selected languages (http://merd. com/ pub/ 2000/ 10/ begperl1. perl.softpanorama. "VM AND THE VM COMMUNITY: a_slightly_skeptical_view_on_scripting_languages. and Future" (http:/ / web.html) .html) — JavaWorld • "Programming is Hard . Doug (2000-10-16). A Procedure-Describing Language for the Reactive Typewriter" (http:/ / web. IBM System/360 Operating System Job Control Language (C28-6529-4) (http:/ / www. but in North America it enjoys significantly more popularity. .). 09/ ScriptingLanguages/ index. Retrieved Mar archive. "Multics Glossary -R. bitsavers. org/ mga.). [5] Van Vleck(ed. cio.[10] References [1] IEEE Computer. me. pdf). quick-test-professional-software-test/14dmp09oqdm08/2#Basics_of_vbscript) • Scripting on the Java platform (http://www.pdf) — 2003 study • Use of VBScript in QTP automation (http://knol. [3] IBM Corporation (1967).sourceforge. and Tcl Today: The State of the Scripting Universe .doc. html). multicians.CIO. org/ mgr.mi. 2012. 1012.javaworld. Retrieved Mar 9. The second most widespread is PHP. Retrieved Mar 9. Rexx. html).com/pub/a/2007/12/06/ soto-11. org/ trac64/ procedure. com/ article/ 446829/ PHP_JavaScript_Ruby_Perl_Python_and_Tcl_Today_The_State_of_the_Scripting_Universe?contentId=446829& slug=& ) External links • Patterns for Scripted Applications (http://web. [4] Mooers. . htm).org/web/20041010125419/www. com/ melinda. Present. . com/ article/ 446829/ PHP_JavaScript_Ruby_Perl_Python_and_Tcl_Today_The_State_of_the_Scripting_Universe?contentId=446829 [10] PHP. JavaScript.(active function)" (http:/ / www. varian/ Site/ Melinda_Varians_Home_Page_files/ neuvm. — Administrative scripting related information (includes examples) • Are Scripting Languages Any Good? A Validation of Perl. "Multics Glossary -A. "TRAC. org/ pdf/ ibm/ 360/ os/ R01-08/ C28-6539-4_OS_JCL_Mar67.Scripting language 123 Market analysis According to a global survey performed by Evans Data in 2008.perl. ""Scripting Languages"" (http:/ / www. cio. (http:/ / www. Retrieved 2011-01-08. Ruby. [7] Van Vleck. [8] Sheppard. [9] http:/ / www. and Tcl against C. 15/ transcript of his State of the Onion speech.ic. com) . Nikolai Bezroukov • Rob van der Woude's Scripting Pages ( 2012. Retrieved Mar 9. Perl.shtml) by Dr. Vicki. com/ articles/ mactech/ Vol. multicians. In praise of scripting. Perl is the third most widespread scripting language. . as System Admin site to share Tools. html#runcom). [6] Varian.archive. pdf). org/ web/ 20010425014914/ http:/ / tracfoundation. Thomas(ed.Let's Go Scripting" by Larry Wall (http://www. Ronald Loui author [2] Brown. C++. • iSystemAdmin.robvanderwoude. html). and Java (PDF) (http://page. dev.fu-berlin. . Plugins and Books (http://www. Retrieved 2009-07-22. Script.

HotQuantum3000. Josh1billion. Schneidr. Hustlestar4. Pgr94. clown will eat me. Sebbb-m. RedWolf.wikipedia. Compsim. Reeve. Jwmwalrus. KHaskell. ABF. Promooex. Keilana. Michael93555. Orangutan. CommonsDelinker. Shirik. Nothingofwater. B3tamike. Dougofborg. Rodolfo miranda. Blaisorblade. Ahoerstemeier. Josh Parris. Andres. Downtownee. MizardX. Extremist. Brianjd. Airada. EagleOne. John Vandenberg. Unknown Interval. Keilana. Autocratique. Pinethicket. Alberto Orlandini. Nixdorf.81. Ehheh. Diannaa. Wiki alf. Colonies Chris. Dureo.rouson. Rrelf. R. PhilipO. ISTB351. WBP Boy. Pi. Fazilati. Majilis. Mark Renier. Quota. Happyisenough. Djsasso.delanoy. Lulu of the Lotus-Eaters. Goodgerster. Nuno Tavares. The Thing That Should Not Be. 1exec1. Dcoetzee. Elassint. Umofomia. VIKIPEDIA IS AN ANUS!. K. Eiwot. Porterjoh. Noosentaal. Ben Ben. Ragib. Nertzy. Schmettow. DerHexer. Excirial. Robert L. Hossein bardareh. Danakil. Duncharris.php?oldid=515798504  Contributors: *drew. Laurens-af. Mxn. Gary2863. Glass Tomato. Vadmium. Gökhan. Diego Moya. Wangi. KellyCoinGuy. Short Circuit. Alhoori. Davey-boy-10042969. Brichard12. Epbr123. Ale jrb. Ruud Koot. Fg. Headbomb. 96. Esap. Suruena.Nevelsteen. DEddy. AJim. 203. Charlie Huggard. Jonnyapple.php?oldid=514737402  Contributors: 1exec1. Mayur. Damieng. Brick Thrower. Discospinster. Essexmutant. Gildos. Gf uip. Joel B. Aeram16.26. Whazzups. Capricorn42. Dante Alighieri. ZonkBB6.bird. Aldie. Yummifruitbat. Scwlong. Ruud Koot. Prashanthellina. El C. I dream of horses. Callanecc. Oxymoron83. Ukexpat. TuukkaH. KoshVorlon. Paul D. Dylan Lake. Marquez. Trusilver. Hoo KMurphyP. Tommy2010. Jakarr. ColdFeet. Giftlite. ElAmericano. Thecheesykid. Cleme263. Derek Ross. Coren. Wiki alf. Alik Kirillovich. WJetChao.carolan. Atlant. EAderhold. Jost Riedel. Lee J Haywood. Jpbowen. Poweroid. Zipircik.wikipedia. Bryan Derksen. Guaka. Ranak01. BiT. Dan128. 16@r. Digitize. Ezrakilty. Paulkramer. Shaw. Duke Ganote. Angusmclellan. Damieng. GoodDamon. Firemaker117. Giftlite. LeinadSpoon. Acaciz. Ancheta Wis. Xn4. Edward301. EncMstr.Nevelsteen. Valodzka. Ckatz.of. Gazpacho. Cybercobra. Giorgios. CurranH. SunCountryGuy01. Cybercobra. Jacob. Steven Zhang. Andylmurphy. Robin klein. Zzuuzz. Konstable. Power User. Woohookitty. SqlPac. Nagy. R. Uniquely Fabricated. Doc9871. Carmichael. Shahidsidd. Proofreader77. Ancheta Wis. AllCalledByGod. Crashie. Rusty Cashman. Beland. PrimeHunter. Shanak. Jotomicron. Daekharel. C550456.thomas.billiottet. Macrakis. Tweak232.php?oldid=515147282  Contributors: -Barry-. Tharkowitz. The Thing That Should Not Be. Duncandewar. Antandrus. Abram. Lakinekaki. Sietse Snel. Grouf. J. IslandHopper973. Phoe6. Ronald mathw. David Kernow. Liamlearns. Jpgordon. Yintan. Sardanaphalus. Slashem. WhatamIdoing. Rama's Arrow. Arch dude. Akanemoto. AlistairMcMillan. Caltas. Butterflylunch. Iliketubesox.16. Mac. Logical Gentleman. Yuriz. Adrignola. Matty4123. Chirp Cricket. GeorgeBills. Radon210. Tommy2010. Gaius Cornelius. Fakhr245. Satansrubberduck. Dysprosia. S. Maroux. Lucky7654321. Svemir. MER-C. JoshCarter15. ElAmericano. Diego Moya. Welsh. Thedjatclubrock. Kubanczyk. Behnam. Kpengboy. Sfahey. Eeekster. Tyw7. RedWolf. LilHelpa. BirgitteSB. Youssefsan. Caninja. Sannse. Bonadea. Fubar Al Lemos. Ohnoitsjamie. Tony Sidaway. 2988. Logan. Jaanus. Goodvac. Lightmouse. Peberdah. Wesley. Borislav. Stephen Gilbert. Notheruser. Longhair. SlackerMom. Capricorn42. Gbruin. Bevo. Cybercobra. Jpbowen.php?oldid=515824678  Contributors: 16@r. Tide rolls. MAG1. Timhowardriley. Tobiasjwt. Palnu. Bluemoose. Chriswiki. Harvester. ERcheck. Rajnishbhatt. Edward. Antonio Lopez.php?oldid=513160636  Contributors: AdultSwim. Leibniz. Slady. Aitias. MmisNarifAlhoceimi. Deliv3ranc3.224. Mmernex. DanP. Ericbeg. Intgr. Fvw. Mohamedsayad. YellowMonkey. Dreftymac. Cometstyles. Khalid hassani. Brother Dysk. ArnoldReinhold. Spoon!. Wikipelli. Metrax. Conversion script. Zkac050.152. Ghewgill. Salv236. Jackol. Andonic. JackLumber. Nanshu. Jason4789. PhnomPencil. S. Gilliam. Wickorama. Fazdabest. AlefZet. Dravir5. The Transhumanist. MikeDogma. Tgeairn.144. Emorr280. Diego Moya. Arohanui. MrOllie. Anaxial. Symphony Girl. F41t3r. CharlotteWebb. Funandtrvl. Wilku997. Cflm001. Mipadi. Larry_Sanger. Edderso. Antic-Hay. Macaldo. Dekisugi. 422 anonymous edits Programming language  Source: http://en. Chris the speller. Jph. Four Dog Night. Classicalecon. TestPilot. Closedmouth. Bucephalus. Shaw. Cybercobra. Christopher Fairman. SteinbDJ. Zeboober. Bobblewik. Banus. Jagged 85. Wj32. Derek farn. Frencheigh. Fplay. Mahanga. Mike Rosoft. Zoicon5. Liberty Miller. Anbu121.37. Senator Palpatine. Epbr123. Mets501. Derek farn. Ash211. Tnxman307. DVD R W. Neuralwarp. Lambiam. TheRanger. Nanshu. Template namespace initialisation script. Unforgettableid. Miguelfms. RA0808. Bakabaka. Ahy1. InvertRect. AKGhetto. Acacix. Regenspaziergang. Laurusnobilis. Wre2wre. Gregsometimes. Allan McInnes. Darkwind. Foobah. clown will eat me. Tedlin01. Auroranorth. Maximaximax. Bh3u4m. Nubiatech. Acalamari. Capricorn42. Derek farn.97. Rp. Minimac. Heltzgersworld. JohnnyRush10. AtticusX. TiagoTiago. Andy Dingley. Mindmatrix.19. Ixfd64. Jatos. Starionwolf. Tifego. DavidCary. Studerby. Bobo192. S. Huffers. Falcon8765. Vcelloho. Andreas Kaufmann. Andres. Qasimb. Rwessel. Joshua. Jerome Kelly. M. Optim. Avoided. Gracenotes. Tobias Bergemann. Minghong. Zhaohan. Pm2214. CharlesGillingham. Bornhj. Noctibus. Torc2. SimonEast. Oli Filth. Schrödinger's Neurotoxin. Greenrd. John5678777. Kaare. Furrykef. Acaciz. Guanaco. TomasBat. Gioto. Ben Standeven. Xqsd. Ricky15233. Friedo. Graham87. RaveTheTadpole. GraemeL. I'll suck anything. AdamCox9. Andre Engels. Maximaximax. PLCF. Ancheta Wis. Pt9 9. Kifcaliph. Banaticus. Mr700. Chazcag. AbstractClass. Christopher Kraus. BiT. Gwernol. Dolfrog. TonyClarke. Artichoker. FF2010. Wikiklrsc. 151. Akadruid. 206. Faradayplank. Texture. Kaly J. Dawnseeker2000. Tom2we. Edward. Martijn Hoekstra. Jedediah Smith. Wikipelli. Alksub. Kubigula. Epolk. Pgan002. Buck.wikipedia. Jwestbrook. Manop. Thingg. Scoop Dogy. Eivind F Øyangen. Mwanner. Maxim. AstroNomer. Northamerica1000. Seyda. SchfiftyThree. The Transhumanist (AWB). Teo64x. Ghyll. Jncraton.55.186. Altenmann. Abdullais4u. RCX. 9258fahsflkh917fas. MiCovran. PetterBudt. Bookofjude.jansson. Poor Yorick. ESkog. Fantom. Damian. Rsrikanth05. Pimpedshortie99. J3ff. Xagyg creator programmer. Bootedcat. M4gnum0n. Donald Albury. RCX. 212. Bigk105. Alexanderaltman. Vb4ever. WikiDan61.kalde. Σ. Neurovelho. Paperfork. Curvers. Femto. Jason5ayers. Sligocki. DavidLevinson. Christopher Agnew. Entropy. Addicted2Sanity. AdultSwim. Thumperward. Tobias Bergemann. Turnstep. Ohnoitsjamie. Macy. Philip Trueman. Mjchonoles. Lewis. Gaga654. Ewlyahoocom. KANURI SRINIVAS. Greenrd. Born2cycle. Diberri. FleetCommand. Danakil. Giftlite. Deryck Chan. Barts1a. Poco a poco. Barkingdoc. CanadianLinuxUser. BioPupil.Örvarr. Rursus. Malcolmxl5. Quadell. Viriditas. Subdolous. Philipolson. Nickokillah. Jonathan de Boyne Pollard. EncMstr. Wikijens. NevilleDNZ. Ghettoblaster. Jerryobject. Maryreid. Brion VIBBER. TheTito. M. Marudubshinki. Acdx.nith. Bubba73. Silvrous. Damian Yerrick. Sir Nicholas de Mimsy-Porpington. CanisRufus. Zundark. Anja98. DVD R W. Twest2665. 209. Chillum. Oliver Pereira. Wtmitchell. BD2412. Gogo Dodo.Fred. Danakil. Sekelsenmat. Firsfron. Andrejj.7. Benjaminct. GSI Webpage. Damian Yerrick. Captain Disdain. Hermione1980. Jackmatty. Closedmouth. Elendal. Neilc. LittleOldMe old. Hanberke. Ghyll. Cjullien. Udayabdurrahman. Lev. Onopearls. JGNPILOT. Madhero88. Sceptre. Dusto4. Dcljr. FvdP. Jmundo. Jeff02. Ningauble. Qrex123. AquaFox. OrgasGirl. Suisui. Hannes Hirzel. Mauler90. TakuyaMurata. Deepakr. True Genius. SigmaEpsilon. Chun-hian. Chovain. The Thing That Should Not Be. Hairy Dude. Tangent747.Article Sources and Contributors 124 Article Sources and Contributors Computer programming  Source: http://en. Tide rolls. Gurchzilla. R. Chun-hian. Donhalcon. Zsinj. DoorsRecruiting. LittleOldMe. Dialectric. DMacks. Apwestern.wilton. Vasywriter. Charlesriver. Stephenb. Goooogler. Philip Trueman. Bougainville. Evercat. Gploc. 236 anonymous edits Comparison of programming languages  Source: http://en. 64. UdayanBanerjee. Jschnur. Capi crimm. Griffin700. Kongr43gpen. IanOsgood. Fraggle81. Tpbradbury. Luna Santin. Mdd. Zawersh. The Mighty Clod. Clarince63. DiarmuidPigott. Marek69. Ronz. AGK. Techman224. Slowking Man. Indeterminate. Centrx. Aeternus. Netsnipe. Animum. The Thing That Should Not Be. Alisha0512. Tobby72. Nibios. Alansohn. Kwekubo. MrFish. Sir Anon.kute. DMacks. Curps. Chriswiki. Ukexpat. Prgrmr@wrk. K. Blanchardb. NewEnglandYankee. Booyabazooka. Garik. Pearle. Cap'n Refsmmat. Mandarax. Brandon. Hipocrite. JLaTondre. NumberByColors. Kusunose. Bubba hotep. Alex. Nephtes. Joedaddy09. Minna Sora no Shita. Lumos3. Smalljim. Bh3u4m. Cassowary. 1exec1. AlexPlank. ERobson. BurntSky.hoyland. Dylan Lake. LuchoX. Dave Bell. Elektrik Shoos. Gploc. Dtaylor1984. Karlzt. WadeSimMiser. Thegreenflashlight. CSProfBill. Epbr123. Wizard191. AKGhetto. Breadbaker444. Hu12. JLaTondre.203. Narayanese. TomasBat. Burkedavis. Pkalkul. Garzo. Diego Moya. Elembis. Thingg. Shanes. Fabartus. Ciaccona. Maury Markowitz. Quuxplusone. Conversion script. Robert Merkel. AnnaFrance. Cp15. Robert Bond.. CanadianLinuxUser. Garyzx. Abeliavsky. DouglasGreen. MartinRe. Kdakin. Bonaovox. Gerweck. Id1337x. ABF. Robertinventor. S. Antonielly. clown will eat me. Caesura. SkyWalker.wikipedia. CharlesC. Capi. Raise exception. 84user. NHRHS2010. Ahoerstemeier. Edward Z. Rwwww. SchreyP.. Wikiklrsc. Iulianu. Logan. Acroterion. Rich Farmbrough. Erik Garrison. Troels Arvin. Imroy. LuoShengli. Sun Creator.K. Suisui. Nikai. Lerdsuwa. Grstain. Alyssa3467. Luk. Rawling. Murray Langton. Michal Jurosz. Finlay McWalter. OlavN. FreplySpang. Splang. Angela. Fuzheado. Rwwww. Lgrover. Thedp. WikiMichel. Kenny sh. Pointillist. Robert Einhorn. Mike92591. AndrewHowse. Galoubet. Children. XJamRastafire. Funandtrvl. Gamernotnerd. Cgmusselman. Kooku10. DBigXray. Fratrep. Giftlite. Amiodarone. Ashawley. Steve2011.wikipedia.jose. J. PhnomPencil. Matthew Stannard. Can't sleep. Lemlwik. Adrianwn. Arvindn. Captain-n00dle. EJF. Stevertigo. Amire80. 1171 anonymous edits History of programming languages  Source: http://en. Brentdax. DMacks. Storm Rider. Vladimer663. Sean7341. Amire80. Bhadani. Ghettoblaster. P. Dicklyon. UrbanBard. Boson. Everyking. Kenny sh. Murray Langton. IanOsgood.196. Chinabuffalo. Loren.the. Daverose 33. Sanbeg. Enchanter. Asijut. Cobaltbluetony. HappyDog. Roybristow. Ronaldo Aves. Altenmann. AgentCDE. Sammi84. Hadal. Wereon. Tanalam. Blainster. Falcon Kirtaran. Jackol. Nwbeeson. Antonielly. 199. Wwagner. Ikanreed. Andre Engels. Nk. MacMed. Ap. Xp54321. Wadamja. Handbuddy. ElKevbo. Mike Van Emmerik. Torc2. fiend. Piet Delport. Wernher. K. Ty8inf. Rdsmith4. Grison. RedWolf. MichaelBillington. Michaeldadmum. Mlpkr. Brianga. Aldaron. Pankaj. Witchwooder. Emperorbma. Elf. Tony Sidaway. Zzo38. Matthew. KJS77. CardinalDan. Lulu of the Lotus-Eaters. 612 anonymous edits Computer program  Source: http://en. Catgut. Zvn. S0ulfire84. DARTH SIDIOUS 2. JohnWittle. CopperMurdoch. Betterworld. Niout. Oxymoron83. Lysander89. Dysprosia. Bobo192. Qirex. Henry Flower. Cmtam922. Zoul1380. Gaius Cornelius. Pcu123456789. Plugwash. Bfinn. Stephenbooth uk. TonyClarke. Andrzejsliwa. Leedeth. Dfmclean. Arnabatcal. TakuyaMurata.delanoy. Msikma. Robert123R. Bender235. Conversion script. Davidwil. Avono. Ivan Štambuk. Stephenb. Abcarter. Daydreamer302000. ArmadilloFromHell. Orlady. Rheostatik. Metalhead816. AlistairMcMillan. Pharaoh of the Wizards. Jwh335. Nigholith. Maestro magico. Cstlarry. Ans-mo. Thisma. Radarjw. Donhalcon. Drphilharmonic. Yk Yk Yk. OSXfan. Funandtrvl. AccurateOne. Someone42. Worldeng. Yang. Tushar. Tedickey. Fredrik. Galoubet. Ahoerstemeier. Andonic. Calltech. . Alansohn. Luckdao. Uncle Dick. Timhowardriley. Cnkids. Alliswellthen. SpacemanSpiff. Gandalf61. Touch Of Light. Ephidel. Martarius. AVRS. Mentifisto. Mani1. Orange Suede Sofa. Guyjohnston. Levineps. FunPika. Jusjih. John Fader. Mild Bill Hiccup. T-bonham.Kron. Icey. Aljullu. Pedro. Can't sleep. Habbo sg. Magister Mathematicae. Danakil. Ancheta Quinntaylor. Inzy. Vipinhari. CRGreathouse. Elkman.. Rmayo. NERIUM. Geremy659. Rl. Lorenz JJ. TarkusAB. Davidfstr. Alansohn. Guppy. Slippyd.g. Userabc. Timshelton114. Jackal2323. Mortenoesterlundjoergensen. Vanished User 8a9b4725f8376. Lightmouse. B4hand. Martynas Patasius. SDC. A520. Grunt. Heron. Sasajid. Filemon. RedWordSmith. Mesimoney. Georg Peter. JMK. Btx40. Chocolateboy.157. Schwarzbichler. Mindmatrix.S. Mr Stephen. Cireshoe. Christophe. DerHexer. Ben Standeven. Alex. Ipsign. Alan Liefting. Isaac Oyelowo. Michael Drüing.188.137. Granpire Viking Man. Wing (usurped). J. Fl. David. Simeon. Premvvnc. Ed Poor. Igoldste. Jojhutton. Michael Fourman. Rsg. Obli. DonToto. RexNL. Marc Mongenet. Rror. EngineerScotty. Ligulem. Fieldday-sunday. Sean. Mermaid from the Baltic Sea. Totlmstr. Sae1962. Cander0000. Tablizer. Don't Copy That Floppy. Andrejj. Hairy Dude. Islescape. Conor123777. Optimist on the run. Hotcrocodile. Bcastell. Kbh3rd. Dominator09. Arthena. PhilKnight. Oicumayberight.lee. Aleksd. Adw2000. Bevo. Doradus. Allan McInnes. Netkinetic. Mean as custard. Don4of4. Cartiman. SciAndTech. Rjwilmsi. M4573R5H4K3. Bill122. Liempt. Bangsanegara. Loadmaster. Whiskey in the Jar. AlanH. Tysto. Skäpperöd. Centrx. Yonaa. Blackworld2005. Jpbowen. Crazytales. DeadEyeArrow. Angrytoast. Wtf242. DenisMoskowitz. Beland. Versus22. Wolfkeeper. DavidHOzAu. Poor Yorick. DennisDaniels. Thebestofall007. Frecklefoot. Tablizer. CzarB. Ruud Koot. Saros136. Sadi Carnot. Smiller933. SimonD. Mahanga. Raven in Orbit. CarlHewitt. The Divine Fluffalizer. Yoyosolodolocreolo. ChrisGualtieri.24. Discospinster. ChrisLoosley. NovaSTL. Brighterorange. Dominic7848. DanBishop. PrisonerOfIce. Klutzy. Jaysweet. Paxse. Sinbadbuddha. Nikai. Ykhwong. Davidpdx. Glacialfox. Andres. DARTH SIDIOUS 2. Rasmus Faber. The Anome. Can't sleep. Sabre23t. C. Fayt82. TBloemink. Cnilep. Szyslak. 10. Iamjakejakeisme. GraemeL. Frosted14. Luna Santin. BigSmoke.

Frecklefoot. Wbm1058. Billpg. Ferkelparade. Mendalus. Russell Joseph McCann. Soumyasch. Bfitzh2o.. Malleus Fatuorum. Ruud Koot. Lightmouse. LizardJr8. SimonP. Allan McInnes. DJ Clayworth. RRM. The Thing That Should Not Be. DMacks. Furrykef. Wesley. JC Chu.Edmonton.php?oldid=513626089  Contributors: 16@r. Tim Starling. Fgnievinski. Diego Moya. Marudubshinki. Bilbo1507. Raise exception.Monniaux. Stephen B Streater. Shaw. Miym. Jamelan. Reddi. Slightsmile. Superm401. Jacob. AznAcorn. KeithMatthew. Kbdank71. Torla42. Scientus. N5iln. Vriullop. Koyaanis Qatsi. Greenrd. Radarjw. Aitias.wikipedia. CalendarWatcher. Gtdp. Colejohnson66. Mellum. Sploonie. LC. Beland. Positron. Rushyo. CesarB. Manpreett. Wernher. Red Prince. PamD. S.:Ajvol:. Oleg Alexandrov. Shmuel. Areebmajeed. Zawersh. JDP90. Jpbowen. Aeons. Sin Harvest. Jj137. Isarra. A Man In Black. Dori. Necklace. Tysto. Slakr. clown will eat me. Imjustmatthew. Shadowjams. Ronhjones. Jeffrey Mall. Krawi. Rompe. Tablizer. MP64. Geniac. Epbr123. Ivan Štambuk. Midinastasurazz. RenamedUser2. Simon80. Hereticam. Metalwario. Rdsmith4. KP-Adhikari. NERIUM.Osborn. Zundark. Fredrik. Speuler. Michal Jurosz. Jguy. MrOllie. Leibniz. Timotab. Chasingsol. Maghnus. Praefectorian. Schultkl. O. Vivin. David Biddulph. Kooginup. GoingBatty. Dead Horsey. Aldaron. C. Bender235. Ixfd64. Sjakkalle. Pol098. Dysprosia. Wikipelli. Ksnow. SpeedyGonsales. Peter Flass. SkyWalker. Gioto. Lalamax. Starionwolf. Alphaios. Monz. Woohookitty.Fred. J. Johann Wolfgang. Noformation. Jeffrey Mall. Casascius. Manop. Nanshu. Kglavin. Windharp. Fluzwup. TakuyaMurata. Skittleys. Anwar saadat. Quarryman. Javierito92. JonHarder. Wimt. Fadikaouk. Peterdjones. K12308025. RCX. MikeSchinkel. Jiveshwar. Pxtreme75.S. K. KeyStroke. Kkm010. OrgasGirl. Slashem. Benc. Matt B. Simplyanil. RexNL. Wikidenizen. Jakezing. Wizardman. Pjvpjv. Michele. Achraf52. 217. Muad. Hayabusa future. Ulric1313. Andonic. Cazzchazz. K. Zondor. Meadowbert. John254. Rbakels. John lindgren. Rwpostiii. Hu12. Pcap. Murray Langton. Harris7. Grafen. Zero1328. Angusus. Doug. Tizio. Slashme. Bevo. Damian Yerrick. Roland2. Shervinafshar. Slowking Man. Ntalamai. HenryLi. TParis. Grin. Liridon. McSly.jose. Discospinster. Andreas Kaufmann. Steven Zhang. Mirror Vax. Dmbrunton. Andre Engels. SimonP. 16@r.wikipedia. Gondooley. RainerBlome. Kedearian. Altenmann. Dtgm. Karol Langner. Paresthesias. LazyEditor. ShelfSkewed. Evilcookies. Pcap. Nottsadol. Mindmatrix. Wjl2. Hoziron. Paul August. Ary29. Pingveno. Slady. MmisNarifAlhoceimi. Ospix. Chieffancypants. Everyking. Sjakkalle. Vobis132. Blakegripling ph. True Pagan Warrior. Sam Staton. Sonicology. Aatif. Hirzel. Hellknowz. GregAsche. HenkeB. CUTKD. Jatkins. Atlant. Rjstott. Ranafon. Sanpnr. Pedant17. Tzarius. Banej. WikiTome. Vkhaitan. CanisRufus. Quuxplusone. Knyf. Tarret. Kris Schnee. Usman&muzammal. Slady. Phyzome. Montalvo. Rwwww. Salsa Shark. Haiviet. Jack O exiled. Beefball. Phil Sandifer. Tobias Bergemann. Saccade. Little Mountain 5. Artemis. CharlesC. Mario Blunk. PhilKnight. Jusjih. Ptk. Greyhood. Syjsoc. Pgk. Shawn wiki. Beland. Lucian1900. Jeltz. ZedaPhi. TheStarman. Helix84. Slaryn. Maria Vargas. Kbh3rd.php?oldid=504124286  Contributors: A Stop at Willoughby. Pwv1. Paul August. VampWillow. AMRAN AL-AGHBARI. Mindmatrix. Shimei. Mangojuice. JanSuchy. QofASpiewak. Stewartadcock. Eagleal. Jpk. Dcoetzee. VictorAnyakin. Dexter Nextnumber. Lliberto. INkubusse. Yunshui. Hcobb. TuukkaH. David Gerard. Jusjih. JNW. Tewy. Snoyes. Tide rolls. LinguistAtLarge. 192. Woohookitty. HLachman. Gutza. Ohnoitsjamie. Kbdank71. Pcap. Kenny sh. Shahid nx. Cmdrjameson. Darkchoc4. Bradtem. KHaskell. Mean as custard. Michael Snow. Spiel496.delanoy. KD5TVI. ChazZeromus. Lowellian. Wikisedia. Kragen. Melchoir. Denisarona. Blashyrk. Hans Dunkelberg. Switchercat. Thv. Oldadamml. Conversion script. NotQuiteEXPComplete. Tedickey.jose. Wiki alf. Th1rt3en. Mozillaman. Yaron K. GermanX. CanOfWorms. CarlHewitt. Another-anomaly. Andres. Jth299. Aleph Infinity. Gogo Dodo. Versus22. Punctilius. Vroo. Billjoeme. Romanm. Tomasz Tybulewicz. RedWolf.35. Materialscientist. Jamesday. Ruud Koot. Prolog. Saforrest. Mild Bill Hiccup. Blainster. JeR. Jeff G. Science History. Xavier Combelle.R. Philg88. Tonymec. Uli. Sam Hocevar. NewbieDoo. Phantomsteve. Lefteh. Starionwolf. Lee. TomT0m. Modest Genius. Kubanczyk. Graham87. SpareHeadOne. L Kensington. Omphaloscope. Piet Delport. Toksyuryel. Psyno. Romanm. Zarel.spider.x4. Dsavi. Lagalag. SpeedyGonsales. Jim1138. Pumpie. Moonlit Knight. Bumm13. Xymmax. Krashlandon. Merphant. Barticus88. Matthew Woodcraft.. Quigabyte.Örvarr. R. Tcsetattr. SyntaxError55. IvanLanin. Speed Air Man. Wlievens. Alan d. MER-C. DouglasGreen. Binrapt. Locke Cole. Evilfishy1. Giobe2000. ButOnMethItIs. DeadEyeArrow. Kyorosuke. Katieh5584. CONFIQ. Giddie. Jwissick. Yoric. AdjustShift. Rgb1110. EIEIO. Shafaet. AndrewDressel. Slipstream. Derek Ross. Robert Skyhawk. Ningauble. Wmahan. Emuguru. Makled. Christian List. Feezo. Epbr123. Emperorbma. Miguelito Vieira. Noldoaran. Sanbec. Naderi 8189. Hede2000. Zayani. Ahoerstemeier. Kiminatheguardian. Piano non troppo. KymFarnik. Greensburger. Matusz. Brage. OrgasGirl. Accatagon. Hairy Dude. Cybercobra. AKismet. DerHexer. FDD. TheTechFan. Eric-Wester. Giraffedata. Andre Engels. Cheeselet. BrokenSegue. Cquarksnow. 141 anonymous edits Programmer  Source: http://en. WikiBully. Stevertigo. Chopin1810. Sooner Dave. Vonkje. Dancter. Terrek. Javert. EricR. Starnestommy. Goodone121. Megatronium. JLaTondre. Wengier. Stuart Morrow. Wrp103. Leafyplant. Noisy. Thv. Lkopeter. Mark Renier. Jaka14. Frap. Minesweeper. Robo Cop. Σ. Kjp993. Turkish soldier69. Daniel Santos. Headbomb. Akyprian. Johnny 0. Boofer908. Wiki alf. Lulu of the Lotus-Eaters. Hotdogger. Utvik. Ultimus. Vaibhavkanwal. Rlee0001. ArmadilloFromHell. The Anome. Vahid83.crabtree. Quota. Rfc1394. VKokielov. SciAndTech. 425 anonymous edits Language primitive  Source: http://en. Strmore. Scipius. Ligulem. LittleOldMe. SimonP. Reinis. Jschnur. Nikai. Royboycrashfan. JohnWittle. VictorAnyakin. Tobias Bergemann. Cybercobra. Tide rolls. Dawnseeker2000. Cjewell. Klaser. Oblivious. Georg Peter. MrPrada. Slaggart. Jdpipe. Rrburke. AdmN.Do!. Stmrlbs. Vald. Tedp. Hfc1875. Vid512. Tim Starling. JulesH. Sychen. Algebra. Kickstart70. Aguinaldo. MarsRover. Abednigo. HarisM. 212. RHaworth. Krauss. System86. Alex. JPINFV. Mike Field. Tony1. Lighthill. Mohamed Magdy. PlayStation 69. Hyad. R'n'B. Luna Santin. Instinct. FrederikHertzum. Msikma. LOL. Sleigh. Herzleid. Spinality. Kim Bruning. JMSwtlk. Gwernol. Xaosflux. CanisRufus. Versageek. H. Noosentaal. SpuriousQ. Jeh. WikiMichel. Mordomo. UR6LAD. Zvar. Giftlite. DagErlingSmørgrav. Jorend. Prunesqualer. Ww. SpooK. KTC. Shadowjams. CRGreathouse. Node42. Hammer1980. Tobby72. The Grant Guy. Monural plural. Rivanov. Pneuhaus. Nick125. Glane23. Longtt89. Specs112. Darktemplar. Yath. Swatiri. OrgasGirl. Ipsign. Owl3638. Sam Pointon. Gaius Cornelius. LiDaobing. Kimse. Dav4is. Jpsowin. Rich Farmbrough. Jitse Niesen. Mikellewellyn. The Magician. Ubiq. MasterProf. MrOllie. Angela. Ixfd64. Matt Crypto. Pcap. Dawkcodave. Wilky DiFendare. Kurniasan. Kindall. Jed S. Autodmc. Regancy42. AgadaUrbanit. Backslash Forwardslash. IronInforcer. Galoubet. Wikibofh. ‫ 729 . Gutsul. Mike. AnnaFrance. EncMstr. Pieguy48. Mpils. TeaDrinker. IanOsgood.19. DARTH SIDIOUS 2. Michael Hardy. Wtshymanski. Graham87. Zx-man. Oleg Alexandrov. Mekong Bluesman. Merbabu. TonyClarke. Muro de Aguas. Mccready.lee. Olly150. Quiddity. Wikiklrsc. GateKeeper. Jerome Charles Potts. Coolv. MearsMan. DVD R W. HumphreyW. Rjwilmsi. Fissionfox. Tgeairn. SchreiberBike. Imran. Lowellian. Kungfuadam. Fuzzbox. Mythdon. SteinbDJ.241. Joyous!. Bigdumbdinosaur. RussBlau. Indon. Iridescent. Bison bloke. Femto. RayAYang. Marcos. ZeWrestler. Monz. S. Elving. Reelrt. Papercutbiology. Meera123. 28bytes. Joaquindesalva.. Tgr. Radiant!. Fmiddleton. RedWolf. Spiritia. Just Another Dan. Stephenb. Wknight8111. Popsracer. AgentPeppermint. Shadow demon. Mark Renier. Swtpc6800. Sekelsenmat. Wavelength. Wiki13. Xihix. Adriaan. Mendaliv. Kaster. Dylan620. Crotalus horridus. Mellamokb. Hut 8. Chris Chittleborough. Robbe. Orphan Wiki. Mdanh2002. DDerby. Jaxad0127. Chester Markel. Mark. Akjar13. RobertG. ²¹². Alfio. Wj32. Murray Langton. Jossi. Kbrose. Carbonite. BillyPreset. Piet Delport. Icey. 3Nigma. TeunSpaans. Marasmusine. Shadanan. Steevo714. 7. Husond. Kwertii. Lotje. Tobias Bergemann. Ale jrb. Xod. Prolog. Scott Ritchie. HenkeB.188. Geau. Atoll. Mustafazamany. JForget. SilentC. 223 anonymous edits 125 . Wre2wre. Vadmium. Iridescent. Mjb. Murray Langton. Yworo. Easyas12c. Prettydove. Lyricmac. Conversion script. Vendettax. Davidruben. Ohms law. Lupo. Struway. Roux. Borgx. BiT. Ohnoitsjamie. Hajhouse. Toussaint. Useight. Khalid Mahmood. Malcolm Farmer. Eagle246. Arbsn. Hvn0413. Majilis. Omegamormegil. Klasbricks. Slaad. Skytreader. Everyking. Jaxl. Stormy Ordos. Jeshan. Fred Bradstadt. Curtis23. L33tminion. Masgatotkaca. Mellum. Waggers. Bnugia. Mxn. Kinema. ZyMOS. Gwicke. Jan1nad. Scott Gall. RexNL. Dnas. JoeBruno. WAS 4. Andreas Kaufmann. Tojge. RainbowOfLight. Garas. Noctibus. Ixfd64. Rich Farmbrough. An-chan. Derek Andrews. Systemetsys. Bigdumbdinosaur. Nmcclana. Photonique. Surturz. Michael Zimmermann. Netoholic. Fabrictramp. SpuriousQ. Michael Hardy. Mrjeff. Karada. Jarble. Bender. Wiki alf. Hans Adler. Rasmus Faber. Abdull. Velle. Gwern. IanOsgood. Romanm. JamesBWatson. TakuyaMurata. Muckmed. Timhowardriley. Shoessss. Template namespace initialisation script. MartyMcGowan. The Thing That Should Not Be. Salgueiro. Incnis Mrsi. Tedickey. Rich Farmbrough. VampWillow. Andre Engels. Mac c. NewEnglandYankee. JohnLai. Hadal. Darrien.Fowl. Lekrecteurmasque. Jpk. Tobias Bergemann. Treygdor. Hoo man. Tomatensaft. MCWNT. IvanLanin. Martynas Patasius. Simoneau. Rdnk. Kostisl. ArchiSchmedes. MisterCharlie. Beno1000. Mwaisberg. Chester Markel. Jukrat. Suruena. Park3r. XJamRastafire. SparsityProblem. Kwamikagami. Jerryobject. Wikiklrsc. Ilario.alessandrini. Minesweeper. Hadal. Pnm. El C. Edward. Ellmist. UnfriendlyFire. Conversion script. Jeff02. Reaper Eternal. Mìthrandir. Yk Yk Yk. Zarniwoot. Doug Bell. Ru. Reinderien. Jagdeepyadav.5.250. PBS. Hallows AG. PaulFord. Libcub. Sanoj1234. Nikai. StealthFox. JRR Trollkien. Blehfu. Ap. A. Mschel. Sgbirch. Robert A West. Chocorisu. Swirsky. JamminBen. Pantergraph. Oli Filth. Konstable.haider. Patrick. Iwantitalllllllll. Harvester. EgyptAlex. Asa. Mike Van Emmerik. Microprofessor. Causa sui. Derek farn. Orderud. KSmrq. Mwoolf. Trusilver. Rich Farmbrough. Hans Dunkelberg. Smalljim. Tisane. Wolfmankurd. Philip Trueman. Whitehatnetizen. Hans Dunkelberg. Nutsnbolts222. SchreiberBike.php?oldid=515762604  Contributors: A520. Woohookitty. Keilana. Flewis.Article Sources and Contributors Green caterpillar. BroodKiller. Σ.programmer. Wwmbes.wikipedia. Wikibob. Anna Lincoln. Jerryobject. Karthikndr. Guy Harris. Soumyasch. Inzy. Wayfarer. JaGa. Ysangkok. Pooryorick. Waiwai933. NawlinWiki. Hekerui. Rigadoun. James086. Sam Korn. Vsion. Nikai. DavidCary. L Gottschalk. Athaenara. Tedickey. J. Azeri. CanisRufus. Sorib.wikipedia. Discospinster. Nima1024. Natalie Erin. Maxis ftw. Feezo. Torc2. Mattisse. Zaheen. Quadell. Novasource. రవిచంద్ర. JohnCJWood. Galzigler. Longgg johnnn?. InYOUen0. Unforgettableid. Maurice Carbonaro. Waterfles. HeikoEvermann. LordCo Centre. Apokrif. NeonMerlin. Jonik. Tximist. Arbabarehman. Dgmjr05. KeithH. Techman224. Subversive. Quagmire. Zondor. Tarikes. BananaFiend.php?oldid=514313718  Contributors: 16@r. Hfastedge. Spalding. KnowledgeOfSelf. Leszek Jańczuk. Undeference. Katieh5584.php?oldid=514746300  Contributors: . Leafyplant. Nameneko. Ahy1. ThomasHarte. Toussaint. Chatul. GeorgeLouis. Gilderien. Brad7777. Archanamiya. Poolisfun. Cst17. K. Jpbowen. Edward. Midgrid. Peiman67. SmartBee. Wik. Yiliang. Poor Yorick. Tiddly Tom.wikipedia. Cpiral. Audriusa. ItsProgrammable. Nanshu. Diego Moya. MER-C. DeanHarding. Stmrlbs. Mykk. Taxman. Nandesuka.lifeguard. Rongrongcheng. Macrakis. Antandrus. Jebus989. GoldenMeadows. Paul Stansifer. Can't sleep. OldCodger2. Ozonew4m. Alfio. Time3000. Dragon DASH. Jorgon. SubSeven.Nevelsteen. Mahanga. Ramu50. Bluemoose. Kappa. Mcandre. Template namespace initialisation script. Mega Chrome. Gadfium. Myork. Mr. Walk&check. CultureDrone. Gannimo. Okane. TuukkaH. Mblumber. Konstable. Brick Thrower. Veinor. Tim32. Mav. Gurch. Kbdank71. Mark Renier. Krischik. Kaare. Natkeeran. Filemon. Torfason. Luciole2013. Hex539. Suruena. Ultra two. Sereine52. Trusilver. Skylar Harrison. Nuggetboy. Kbdank71.g. Rotundo. Akamad. Logarkh. Shanes. Yworo. Wereon. MegaHasher. Dipankan001. Prolog. Snuffkin. DMacks.. Ideogram. JavierMC. Xiaomao123. Koektrommel.. Macaldo. Richard R White. Reedy. Seaphoto. Bryan Derksen. Mountain. Daclyff. Jaek112j. DEddy. Yanco.delanoy. Peter. Robbe. Lightmouse.. Dasnov. Tagishsimon. Gtstricky. Oldhamlet. Andy Dingley. Capi crimm. Suffusion of Yellow. Ashmoo. Torc2. Robert Merkel. Kuciwalker. Napi. MK8. Karingo. Varundbest10. MonstaPro. Ohnoitsjamie. Ms2ger. Harmil. RandomAct. Wavelength. DekuDekuplex. 6 anonymous edits Assembly language  Source: http://en. Pinethicket. Dgw.151. Nanshu. Piotrus. Mdwh. Jesse V. Snickel11. Ronz. Moverton. Jason5ayers. Emperorbma. JonHarder. Shane A. Trijnstel. Sannse. Jeronimo. Quuxplusone. HopeChrist. Mkdw. Khunglongcon. Furrykef. Nigelj. Liao. Vwollan. David. Randomguy121. Belovedfreak. Ahoerstemeier. Alansohn. Zonination. JaK81600. Mike Rosoft. Jacob. Jeh. R0pe-196. Tpbradbury. FritzSolms. Teval. Qute. SeeAnd. Nixdorf. Zoicon5. Kdakin. 734 anonymous edits Machine code  Source: http://en. NawlinWiki. MER-C. Zoicon5. NightFalcon90909. Toussaint. Esap. Mgiganteus1. Lradrama. Phillabust. LeaveSleaves. Michael Hardy. Magnus Manske. Jay Gatsby. Loomisd. Van helsing. Diamondland. AnthonyQBachler. Ramu50. G0gogcsc300. Anger22. Mpradeep. Frap. Sionus. Jimpoz. Joncnunn. Rjwilmsi. Dysprosia. Nbrothers. Juliancolton. Fidlej. Acdx. Mkouklis. Jesdisciple. Bevo. LindsayH. Midzata.Nevelsteen. Perfectblue97. TomasBat. Dahn.98. MartinHarper. Dawidl. Infinoid. Teply. CalumH93. RA0808.ﺋﺎﺭﺍﺱ ﻧﻮﺭﯼ‬anonymous edits Abstraction  Source: http://en. HelgeStenstrom. Pnm. Ketiltrout. Thomasuniko.sound. Gwern. PJonDevelopment. Victorgrigas. Mindmatrix. NerdyNSK. Mmernex. Yana209. Sam Vimes. Rursus. CharlesC. Davewho2. Qwyrxian.

Fredrik. AJim. Ysoldak. Vancouver Outlaw. Jesse V. Simetrical. Peter Flass. Gokudo. Freshraisin. Ppp extr. Iridescent. Grinchfizzlekrump. Koveras. T Long. Excirial. Fubar Obfusco. OlavN. Wavelength. Wlievens. Tasc. ED1T3R. Harmil. Lorenzarius. 156. Pit. Tompsci. Jamelan. Tom Duff. Olopez. Sykopomp. ‫ 113 . Anuroop Sirothia. Diego Moya. Hans Bauer. Pomoxis. Bjankuloski06en. David-Sarah Hopwood. Leujohn. Lowellian. DBigXray. Miles. Wlievens. HenkvD. Papa November. Gailtb. DC. Cybercobra. Thapthim. VasilievVV. K. Romanm.php?oldid=514790002  Contributors: -Barry-. Sagaciousuk. 46 anonymous edits Type system  Source: http://en. Manop. Philip Trueman. RTC. SLi. Ossworks. Slaniel. TuukkaH. Poor Yorick. Antonielly. VladimirReshetnikov. Jsnover. Maelnuneb. VictorAnyakin. Mipadi. Karada. Smeatish. Yunshui. Alansohn. Mephistophelian. Ghettoblaster. Moonwolf14. Cleared as filed. The Anome. PMDrive1061. Euyyn. Jrtayloriv. Atreyu42. Drumheller. Gdr. Warren. VampWillow. TShilo12. CrazyChemGuy. Patrick. Ruud Koot. Kwi. Christopher Monsanto. Geary. SimonEast. Ma Baker. Lantay77. Rrelf. Todobo. Grunt. AnAbsolutelyOriginalUsername42. Fram. Marco Krohn. Thumperward. Chasingsol. Jwink3101. Frazzydee. Inonit. S. RavennaMoeba. Exert.ﻣﺎﻧﻲ‬anonymous edits 126 . AngryBear. Marius. Zzuuzz. Fieldmethods. Hajhouse. Rookkey. IvanLanin. Ennui93. Easwarno1. Jeremy Visser. Eric119. Langec. Mikera. Parwana47. ‫ 575 . Mwtoews. Ultimus. Esap. Alansohn. Headbomb. Policechiefronaldo.php?oldid=488147873  Contributors: 16@r. LeaveSleaves. LuoShengli. Sjbrown. Nickj. OriumX. Zomglolwtfzor. Sligocki. Altenmann. Abstudio. Jpancier. Betacommand. VictorAnyakin. Seliopou. Krischik. Yahya Abdal-Aziz. ESkog. Kbdank71. Blaisorblade. Gustavb. Krallja. Gerben1974. 217. Teji. Stevenj. Elliot. Krischik. Tegel. Ash211. Shaw. Σ.org/w/index. Marudubshinki. Ezrakilty. Karouri. Peterdjones. Pengo. Sae1962. Arvindn. SchnitzelMannGreek. Greensburger. Gilliam. Timwi. Night day. TomasBat.lee. Yzt. JNW. Stefan Urbanek. ProgJones. Andreas Kaufmann. Astatine-210. Simetrical. Mike Van Emmerik. Plrk. Gogo Dodo. BlaiseFEgan.wikipedia. Habj. JIP. Elfguy. Mdsam2. Snigbrook. Edaelon. Christiancatchpole. Wlievens. Tiddly Tom. Eumolpo. Hdante. Diego Moya. Corsairtux. Israel Walker. Jopincar. Derek farn. RandalSchwartz. Geniac. Siddhartha 90. Siodhe. Wbm1058. Thumperward. That Guy.254. Edgar181. RedWolf. Wiooiw. JLaTondre. From That Show!. Aldie. Drdick. Nova77. Jef-Infojef. Mark Renier. Masterdeath01. Kim Bruning. Heron. Hexacoder. Mxn. FatalError. Classicalecon. Dcoetzee. R. Radiant!. TerezaS. Tobias Bergemann.. Zuixro. Der Golem. DNewhall. FatalError. SDC. S. AdmN. Jackbrear. Roybristow. Pdcook. Bevo. Schzmo. Hurmata. clown will eat me. TomStuart. Fryed-peach. Denispir.queso. Anna Lincoln. Gracenotes. Betterworld. Bubba73. Waldir. Alansohn. Mxn. Minesweeper. RobertL. Ruud Koot. Raghith. RoyBoy. Feis-Kontrol. RossPatterson. Elaz85. Karch. Poulpy. Servel333. Rilak. Alterego. Kop. Ezrakilty. Bstepno. K. Jk2q3jrklse. Mmdoogie. Style. Evil Monkey. Deathbuilder. Cleardelta. CharlesC. Skarebo. Niqueco. Maslen. S0aasdf2sf. WookieInHeat. Dekimasu. JMJimmy. Ohnoitsjamie. Flockmeal. ChorizoLasagna. Dpv. Ramir. Roboshed. R. Sean 1996. Rp. Raybob95. Ericcnelson. Marudubshinki. Pnm. Ptrb. Bilalis. Mjb. Lotje. Quasipalm. C17GMaster. Foxxygirltamara. Everyking. Qwertyus. Scottmacpherson. Rettetast. Andy Dingley. Neilc. Seidenstud. Jonik. Fubar Obfusco. Blehfu. Derek farn. Gail. BurnDownBabylon. Buzgun. Zron. Yahia. Nitin jeewan. Thüringer.php?oldid=515554689  Contributors: 121a0012. AnnaP. Fanael. Ae-a. AvicAWB. Logan. Beetstra. TakuyaMurata. Karlzt. Marudubshinki. CYD. User86654. Softarch Jon. DagErlingSmørgrav. Immsubodh. Allan McInnes. Ehheh. DiscipleRaynes. Jon Awbrey. Kim Bruning. Chris Pickett. MmisNarifAlhoceimi. Uriyan. Peterdjones. MattGiuca. S. Mononomic. Dominus. MadSurgeon. Freeman45Fighter. Jeffreykegler. MontyB. Kenyon. Jeenuv. Droob. Keilana. Chuunen Baka. AnAj. Yuejia. Hans Dunkelberg. Bjankuloski06en. Lowellian. Palmcluster. Derbeth. JonHarder. Galoubet. Johan1298. Digichoron. Wholetonescale. Luk. R Lowry. Gareth Owen. Hammer. Kiski7c5. Billposer. EdC. Phorgan1. Olathe. WhiteCat. Lrenh. DARTH SIDIOUS 2. Wilfrednilsen. JWB. Pfeilspitze. Nanshu. Klondike. Alexia Death. Denny. Jarble. Spayrard. Instigate cjsc (Narine). Torc2. Sun Creator.. CanisRufus. 28 anonymous edits Programming language theory  Source: http://en. Nurg. Dycedarg. Barabum. Bharatkumar. EduardoCruz. Snoyes. clown will eat me. ZX81. Tic260. Suruena.wikipedia. CheesyPuffs144. Jeltz. RBallentine. Rogper. Andres. Pallas44. LoStrangolatore. Giftlite. Xioxox. SebastianHelm. Neutral current. Michael Slone. Giftlite. Derek farn. Dc987.wikipedia. Func. Jay-Sebastos. Asd4132. DmitTrix. Jauhienij. Elwikipedista. Aavviof. Friedo. Sethearls. Anshee. LOL. Breawycker. Twsx. Ricvelozo. L Kensington. EmeryD. Ghettoblaster. Midnightcomm. Canderra. Robin S. TotoBaggins. RolandH. Visage. Gabrupunjabi. Synergy. NHSavage. Beefman. Tarquin. Dysprosia. Octahedron80. Shaw. Philip Trueman. ClassixRetroX. RCX. Gwern. UtherSRG. Harvest day fool. Dreftymac. Ykhwong. Kenny sh. Aleksd. Amikeco. Longhair.wikipedia. Shaw. Fredrik. Wapcaplet. Warlordwolf. TomT0m. Bmdavll. Eugeneiiim. DavidCary. Brandalone. Fredrik. Shlomif. Teltek. Simoes. P00r. Fırat KÜÇÜK. Jeargle. Larry V.wikipedia.153.php?oldid=510798891  Contributors: 28bytes. Danakil. Matusz. Suruena. CRGreathouse. Ninly. Adam majewski. Demonkoryu. Rob Hooft. Administration. Dougher. Diego Moya. Satori. VKokielov. Hyperlink. Hu12. Leibniz. Minnaert. Jfire. Tontito. Ahy1. Rossami. Gabeedwards. Twilsonb. G0gogcsc300. Tagishsimon. Eman2129. SebastianHelm. SadaraX. NerdyNSK. Uhai. Erc. Waldir. Adrianwn. Allan McInnes. Jcdietz03. Phil Boswell. Kvdveer. Tekeek. AxelBoldt. Jleedev. Domenico De Felice. Edupedro. Furby100. Lord Anubis. Hdante. Danakil. Oxymoron83. Generic Player.wikipedia. 374 anonymous edits Strongly typed programming language  Source: http://en. Dysprosia. Barf73. Gene77. GrayFullbuster. Pufferfish101. Tompsci. Nepenthes. Rowfilter. Turnstep. Caesura. Rich Farmbrough. Cybercobra. AllenDowney. Ghettoblaster.Article Sources and Contributors Source code  Source: http://en. Doug Bell. Rettetast. Grendelkhan. WhisperToMe. Craigbeveridge. Pavel Vozenilek. Cybercobra. Wjhonson. Damian Yerrick. Qwfp. Tony Sidaway. Rp. Piet Delport. Graham87. David Nicoson. GB fan. Martin Hampl. Markskilbeck. Dcoetzee. AlimanRuna. Esap. Orderud. Mormegil. Aaron Rotenberg. Daniel. MrBlueSky. Peepeedia. Mnduong. Elcidia. Krauss. Turnstep. Nigosh. Bevo. AutumnSnow. RadioFan.com1. Ryzol. Mr. Caseyjlaw. Discospinster. Sonett72. Tigga en.Nevelsteen. AdrianLozano. Ykhwong. Materialscientist. Conversion script. Jason5ayers. Chaojoker. Darxus. Bob O'Bob. Wheely Guy. Javawizard. Tdavies24. Minna Sora no Shita. Mike92591. Neilc. Avinash7075.wikipedia. Oosh. Josh the Nerd. Mblumber. Xjas05. Frecklefoot. Mav. Maclary. Martinship. Pjb3. Mindmatrix. Bubba73. Norm mit. Yaron K. Schmonyon. Ed Poor. Epolk. Green Tentacle. Nabla. Writtenonsand. Noamatari. Can't sleep. DanteEspinoza1989. Yoric. JonHarder. Washi. 0x6D667061. MattOConnor. Mikon. Jacj. AshtonBenson. DerHexer. Prodego. Skizzik. Cjoev. MilerWhite. Hazard-SJ. Minimac's Clone. Ivarru. YahoKa. Marqueed. Cindamuse. Spalding. Rjaf29. MrH. Jleedev. Romanski. Taw. Gf uip.96. Urhixidur. Cjoev. Derek farn. Darksun. Jcuevas. Atropos235. Nuno Tavares. Favonian. Tuntable. JLaTondre. Harmil. Dr. Ahy1. Mokhov. Scarlet. Calbaer. Scostas. Helpersatan. IanManka. Dungodung. Ormers. TomasBat. Elcriz000.99. Robykiwi. Dori. Edward. BonzoESC. Agarwal1975. John lindgren. Quackor. 28 anonymous edits Syntax  Source: http://en. Wrp103. Gaius Cornelius. JonHarder. Donhalcon. Dreftymac. Phillsmith01. Galoubet. PhnomPencil. Allens. BioTube. Zoicon5. Ksn. Thincat. GTBacchus. Jbolden1517. Zfr. Jim Douglas. Mrzaius. Beland. Connelly. NellieBly. PMLawrence. Tyw7. Michael Hardy. Zophar1. Gregbard. Lurenai. Toussaint. Stewartadcock. Antonielly. Green caterpillar. Mikeblas. Altenmann. Ruud Koot. SimonP. Exigentsky. Emurphy42. PonThePony. AstroNomer. Diego Moya. JLaTondre. Aeolien. Ranjithsutari. 41 anonymous edits Execution  Source: http://en. Simetrical. Cmertayak. BlakeCS. Jni. Ivan Pozdeev. Headbomb. Marudubshinki. Maximaximax. Martarius. Wootery. Sbasith. Hobophobe. Furrykef. Jsled. Strake. Ketil. Lulu of the Lotus-Eaters. Diego Moya. Maxim. Matt Deres. Lowellian. Danakil. Mav. Imperator3733. Unyoyega. Jjalexand. Kbrose. RockMFR. Beland. Akavel. Joswig. Interiot. Yoric. B3rt0h. Sandman2007. Dckelly. Folajimi. Erkan Yilmaz. Namazu-tron. Fubar Obfusco. TheProgrammer. Doc glasgow. Derbeth. StuartBrady. Jrtayloriv. Maximilianklein. Gary King. Darth Panda. Redvers. Tysto. Tablizer.langdon. Knowledge Seeker. DouglasGreen. Ice Ardor.ﻣﺎﻧﻲ‬anonymous edits Command  Source: http://en. Epbr123. Unyoyega. Kku. Andres. Srushe.php?oldid=514454322  Contributors: -Barry-. EscapingLife. FrenchIsAwesome. SkyWalker. Prestonmag. Virtualphtn. Anaraug. SoCalSuperEagle. Sae1962. Tobias Bergemann. Wermlandsdata. Onearc. K. OracleGuy01. Riley Huntley. Ross Fraser. Al Lemos. Uncle G. Conversion script. Kaare. Htmlapps. Hazel77. Gayathri prl. Jimfbleak. R'n'B. TexasAndroid. Dillard421. Gmlk. Mark Renier. Dream Focus. Scmerlin. Hao2lian. Assasin Joe. Haakon.php?oldid=383066032  Contributors: AlbertCahalan.wikipedia. RobertL. Jerryobject. Harald Hansen. TheNightFly. Aaron Rotenberg. Darkwind. A3 nm. Cryoboy. Dsmdgold. Iggymwangi. RichardOSmith. Lawpjc. Yaris678. Ap0ught. Hossein bardareh. ZeroOne. AndreasPraefcke. SimonP. Turlo Lomon. EngineerScotty. Tobias Bergemann. Jjc259. Pcap. Khalid hassani. Cybercobra. Ledgerbob. Norman Ramsey. NurAzije. Simeon. Tim Starling. Slysplace. TakuyaMurata. Zron. Cntras. Jevon. TimoMax. Robert Merkel. Ablonus. Can't sleep. Karl Dickman. Thomas Veil. Mshonle. Cpiral. Grauenwolf. Kjetil r. Jeronimo. Ancheta Wis. CO. Zhaladshar. Jordancpeterson. M. Colonies Chris. Moondyne. Hammer. Exidor. Dysprosia. Minghong. Mac. Abdull. Mboverload. Duffman. Marudubshinki. Pooryorick. BiT. ReyBrujo. Vgranucci. Travis Evans. GjeDeeR!. Orange Suede Sofa. Simoneau. Kiamlaluno. Uriyan. Gerweck. GRAHAMUK. Wikisaver62. The High Magus. Rholton. Cartsiltolt. Kbdank71. Reinderien. Drano. Incnis Mrsi. Slipstream. Thiago Miotto Amaral. Orb4peace. Yug1rt. Hex. DonToto. Carlosayam. Ann O'nyme. Dreamfly1024. 70 anonymous edits Weak typing  Source: http://en. Comatose51. Pinar.delanoy. Zzuuzz. Anwar saadat. Georg Peter. Jen savage. Mmernex. Grandscribe. Ihope127. Wavelength. JRocketeer. Stevietheman. Burschik. Maximaximax. AbstractBeliefs. DanielRigal. Andre Engels. 17 anonymous edits Scripting language  Source: http://en. Nightstallion. Mjamja. Jerryobject. Tfgbd. HendrixEesti. Shreevatsa. JLaTondre. WikipedianMarlith. Hiiiiiiiiiiiiiiiiiiiii. Jschultheis. Pcap. Mark Foskey. Angosso. Rjwilmsi. Jim McKeeth. Rwwww. Martyulrich.jaffe. Rsrikanth05. Joeblakesley. Rbakels. Wikibofh. Taeshadow. Karl Dickman.wikipedia. 1exec1. Pgr94.lekberg. Raise exception. Norman Ramsey. Wiki alf. Pedant17. Tassedethe. Emperorbma. Scorwin. Paddy3118. IvanLanin. Tobias Bergemann. Betterusername. R. Paul Richter. Edward. Antonielly. Lokentaren. Faller. Tijfo098. HurricaneSpin. Shlomital. Inquisitus. CesarB. Bstnz. InverseHypercube. Wavelength. HQCentral. TOReilly. J04n. Random account 47. Hadal.php?oldid=512623668  Contributors: Akmalzhon. TowerDragon. Antandrus. Vadmium. Fooblizoo. Patrick. Hooperbloob. Peterdjones. Chinju. Audriusa. Georg Peter. Trevor lee brown. IRP. NetRolller 3D. Pyrospirit. Shyland. C. Raffaele Megabyte. Mfc. Ancheta Wis. AnOddName. Peter513414. Antonielly. Neutrality. Nanshu. Chris the speller. Ken Gallager.php?oldid=495907106  Contributors: Bike756. LittleWink.php?oldid=496415730  Contributors: 354d. Bluemoose. IanOsgood. Ferengi. Hairy Dude. Corvus. Hans Adler. CiudadanoGlobal. Dreftymac. Michal Jurosz. Gwernol. Joswig. Biscuittin. Swift. Winterst. Clements. Paul Stansifer. Wernher. Verloren. Tim Watson. Jeban. Christopherlin. Allan McInnes. Marclevel3. WalterGR. Patrick. Ww. Hippietrail. Updatebjarni. Mentifisto. Natkeeran. Gf uip. J. Zop1997. MER-C. Jerome Charles Potts. Maian. Musiphil. Daniel-Dane. Jcoffland. Vampireq. FrenchIsAwesome. SMC. Graham87. LittleDan. Etu. Ictlogist. Mgr. EngineerScotty. Raise exception.lee. Pcap. NawlinWiki. Conan. Twas Now. Iridescent. Danhash. Sibian. Hassanbird. RedWolf. Hu12. Wlievens. Devourer09. Ccacsmss. TakuyaMurata. Dysepsion. Zron. Cic. Grandscribe. Techtonik. 16@r. Bongwarrior. Doradus. Iskander s. Fusion7. Recognizance. DutchHoratius. Technische Hochschule.0  Contributors: User:Victorgrigas Image:Data abstraction levels.php?title=File:Lambda_lc._Technische_Hochschule.wikipedia.wikipedia.php?  Source:  Source: http://en.wikipedia Image:Python add5 parse.wikipedia.wikipedia. Dahlgren. Kaldari.php?title=File:CodeCmmt002.wikipedia File:Lambda lc. Coyau.jpg  License: Creative Commons Attribution-Sharealike 3. Licenses and Contributors File:Ada lovelace. Kilom691 File:PunchCardDecks.php?title=File:PunchCardDecks.wikipedia.JPG  License: GNU Free Documentation License  Contributors: User:Nrbelex Image:Dg-nova3.php?title=File:Data_abstraction_levels._Aachen.. Licenses and Contributors 127 Image 1 anonymous edits Image:Python add5  Source: http://en.jpg  Source: http://en. 1988.jpg  Source: http://en.jpg  Source: YMS File:Motorola 6800 Assembly Language.png  License: Public Domain  Contributors: Doug Bell File:Bundesarchiv B 145 Bild-F031434-0006. Image:USB flash  License: Public Domain  Contributors: Courtesy of the Naval Surface Warfare Center.wikipedia.png  Source: http://en.php?  Source: 6 anonymous edits File:Bangalore India Tech books for sale IMG  License: Copyrighted free use  Contributors: User Qu1j0t3 on en. Red Rooster. Nerzhal.wikipedia.jpg  License: Creative Commons Attribution-Sharealike 2.svg  Source:  License: Public Domain  Contributors: Swtpc6800 en:User:Swtpc6800 Michael Holley Image:CodeCmmt002.png  License: Public Domain  Contributors: User:Lulu of the Lotus-Eaters Image:Python add5 syntax.wikipedia.jpg  Source: http://en. Rechenzentrum.php?title=File:IBM402plugboard.jpg  License: Creative Commons Attribution 2.Shrigley. Vlsergey. Kelson.svg  Source: http://en.png  Source: http://en.agr.JPG  Source: http://en.5  Contributors: mehul panchal File:IBM402plugboard.Image Sources. Lulu of the Lotus-Eaters.php?title=File:Ada_lovelace.svg  Source: http://en.5  Contributors: User:ArnoldReinhold File:H96566k. Nixón.php?title=File:Motorola_6800_Assembly_Language. Aachen.svg  License: GNU Free Documentation License  Contributors: Original uploader was Dreftymac at en.wikipedia.svg  License: Public Domain  Contributors: Luks.php?title=File:Python_add5_parse.0 Germany  Contributors: ArnoldReinhold. VA.wikipedia.php?title=File:H96566k.jpg  License: Creative Commons Attribution-Sharealike 3.Shrigley. Savh.svg  License: Public Domain  Contributors: User:Lulu of the Lotus-Eaters .php?title=File:Python_add5_parse.png  Source: http://en.svg  License: Copyrighted free use  Contributors: Computer tower.php? Martin H.jpg  License: Public Domain  Contributors: Aavindraa. Xander89. Dcoetzee.

License 128 License Creative Commons Attribution-Share Alike Unported //creativecommons.0/ .

Sign up to vote on this title
UsefulNot useful