Programming language |
: An has been proposed. Please refer to it for large rewrites.
A programming language or computer language is a standardized Communication technique for expressing instructions to a computer. It is a set of syntax and semantic rules used to define computer programs. A language enables a programmer to precisely specify (but see Genetic Programming) what data a computer will act upon, how these data will be stored/transmitted, and what actions will be taken under various circumstances.
=Features of programming language=
Each programming language can be thought of as a set of formal specifications concerning syntax, vocabulary, and meaning.
These specifications usually include:
Most languages that are widely used, or have been used for a considerable period of time, have standardization bodies that meet regularly to create and publish formal definitions of the language, and discuss extending or supplementing the already extant definitions.
==Data types==
Internally, all data in modern digital computers are stored simply as zeros or ones (Binary numeral system). The data typically represent information in the real world such as names, bank accounts and measurements and so the low-level binary data are organized by programming languages into these high-level concepts.
The particular system by which data are organized in a program is the type system of the programming language; the design and study of type systems is known as type theory. Languages can be classified as static typing systems, and dynamic typing languages. Statically typed languages can be further subdivided into languages with manifest types, where each variable and function declaration has its type explicitly declared, and type-inferred languages. It is possible to perform type inference on programs written in a dynamically typed language, but it is entirely possible to write programs in these languages that make type inference infeasible. Sometimes dynamically typed languages are called latent typing .
With statically typed languages, there usually are pre-defined types for individual pieces of data (such as numbers within a certain range, strings of letters, etc.), and programmatically named values (variables) can have only one fixed type, and allow only certain operations: numbers cannot change into names and vice versa. Most mainstream statically typed languages, such as C programming language, C plus plus, C Sharp programming language, Java programming language and Delphi programming language, require all types to be specified explicitly; advocates argue that this makes the program easier to understand, detractors object to the verbosity it produces. Type inference is a mechanism whereby the type specifications can often be omitted completely, if it is possible for the compiler to infer the types of values from the contexts in which they are used -- for example, if a variable is assigned the value 1, a type-inferring compiler does not need to be told explicitly that the variable is an integer. There are however many different uses for integers; it might e.g. make sense in a program to prevent inadvertent adding of a phone number to the number of apples in a box. Therefore some languages such as Ada programming language allow defining different kinds of incompatible integers; this is called strong typing . Type-inferred languages can be more flexible to use, particularly when they also implement Polymorphism (computer science). Examples of type-inferring languages are Haskell programming language, MUMPS and ML programming language.
Dynamically typed languages treat all data locations interchangeably, so inappropriate operations (like adding names, or sorting numbers alphabetically) will not cause errors until run-time -- although some implementations provide some form of static checking for obvious errors. Examples of these languages are APL programming language, Objective-C, Lisp programming language, Smalltalk, JavaScript, Tcl, Prolog, Python programming language, and Ruby programming language.
Strongly typed languages do not permit the usage of values as different types; they are rigorous about detecting incorrect type usage, either at runtime for dynamically typed languages, or at compile time for statically typed languages. Ada programming language, Java programming language, ML programming language, and Oberon programming language are examples of strongly typed languages.
Weakly typed languages do not strictly enforce type rules or have an explicit type-violation mechanism, often allowing for undefined behavior, segmentation violations, or other unsafe behavior if types are assigned incorrectly. C programming language, assembly language, C plus plus, and Tcl are examples of weakly typed languages.
Note that strong vs. weak is a continuum; Java programming language is a strongly typed language relative to C programming language, but is weakly typed relative to ML programming language. Use of these terms is often a matter of perspective, much in the way that an assembly language programmer would consider C programming language to be a High-level programming language while a Java programming language programmer would consider C programming language to be a Low-level programming language.
Note that strong and static are orthogonal concepts. Java programming language is a strongly, statically typed language. C programming language is a weakly, statically typed language. Python programming language is a strongly, dynamically typed language. Tcl is a weakly, dynamically typed language. But beware that some people incorrectly use the term strongly typed to mean strongly, statically typed , or, even more confusingly, to mean simply statically typed --in the latter usage, C programming language would be called strongly typed , despite the fact that C programming language doesn t catch that many type errors and that it s both trivial and common to defeat its type system (even accidentally).
Aside from when and how the correspondence between expressions and types is determined, there s also the crucial question of what types the language defines at all, and what types it allows as the values of expressions ( expressed values ) and as named values ( denoted values ). Low-level languages like C typically allow programs to name memory locations, regions of memory, and compile-time constants, while allowing expressions to return values that fit into machine registers; ANSI C extended this by allowing expressions to return struct values as well (see record (computer science)). Functional programming often restrict names to denoting run-time computed values directly, instead of naming memory locations where values may be stored, and in some cases refuse to allow the value denoted by a name to be modified at all. Languages that use garbage collection (computer science) are free to allow arbitrarily complex data structures as both expressed and denoted values.
Finally, in some languages, procedures are allowed only as denoted values (they cannot be returned by expressions or bound to new names); in others, they can be passed as parameters to routines, but cannot otherwise be bound to new names; in others, they are as freely usable as any expressed value, but new ones cannot be created at run-time; and in still others, they are first-class values that can be created at run-time.
==Data structures==
Most languages also provide ways to assemble complex data structures from built-in types and to associate names with these new combined types (using arrays, lists, stacks, files).
have developed as OO (Object oriented) languages. They are comparatively easy to learn and to use, and are gaining popularity in professional programming circles, as well as being accessible to non-professionals. It is commonly thought that object-orientation makes languages more intuitive, increasing the public availability and power of customized computer applications.
==Instruction and control flow==
Once data has been specified, the machine must be instructed how to perform operations on the data. Elementary statements may be specified using keywords or may be indicated using some well-defined grammatical structure.
Each language takes units of these well-behaved statements and combines them using some ordering system. Depending on the language, differing methods of grouping these elementary statements exist. This allows one to write programs that are able to cover a variety of input, instead of being limited to a small number of cases. Furthermore, beyond the data manipulation instructions, other typical instructions in a language are those used for Control flow (branches, definitions by cases, loops, backtracking, functional composition).
==Design philosophy==
For the above-mentioned purposes, each language has been developed using a special design or philosophy. Some aspect or another is particularly stressed by the way the language uses data structures, or by which its special notation encourages certain ways of solving problems or expressing their structure.
Since programming languages are artificial languages, they require a high degree of discipline to accurately specify which operations are desired. Programming languages are not error tolerant; however, the burden of recognizing and using the special vocabulary is reduced by help messages generated by the programming language implementation. There are a few languages which offer a high degree of freedom in allowing self-modification in which a program re-writes parts of itself to handle new cases. Typically, only machine language, Prolog, PostScript, and the members of the Lisp programming language (Common Lisp, Scheme programming language) provide this capability. In MUMPS language this technique is called dynamic recompilation; emulators and other virtual machines exploit this technique for greater performance.
== Compilation and interpretation ==
There are, broadly, two approaches to execute a program written in a given language. These approaches are known as compilation , done by a program known as a compiler ; and interpreter (computing) , done by an interpreter . Some programming language implementations support both interpretation and compilation.
An interpreter parsing a computer program and executes it directly. One can imagine this as following the instructions of the program line-by-line. In contrast, a compiler translates the program into machine code -- the native instructions understood by the computer s processor. The compiled program can then be run by itself.
Compiled programs usually run faster than interpreted ones, because the overhead of understanding and translating the programming language syntax has already been done. However, interpreters are frequently easier to write than compilers, and can more easily support interactive debugging of a program.
=History of programming languages=
The development of programming languages, unsurprisingly, follows closely the development of the physical and electronic processes used in today s computers.
Programming languages have been under development for years and will remain so for many years to come. They got their start with a list of steps to wire a computer to perform a task. These steps eventually found their way into software and began to acquire newer and better features. The first major languages were characterized by the simple fact that they were intended for one purpose and one purpose only, while the languages of today are differentiated by the way they are programmed in, as they can be used for almost any purpose. And perhaps the languages of tomorrow will be more natural with the invention of quantum and biological computers.
Charles Babbage is often credited with designing the first computer-like machines, which had several programs written for them (in the equivalent of assembly language) by Ada Lovelace.
In the ) like those of today for solving problems.
Subsequent breakthroughs in electronic technology (transistors, integrated circuits, and chips) drove the development of increasingly reliable and more usable computers. The first widely used high level programming language was Fortran, developed during 1954–57 by an IBM team led by John W. Backus. It is still widely used for numerical work, with the latest international standard released in 2004. A [http://www.levenez.com/lang/history.html Computer Languages History] graphic shows a timeline from Fortran in 1954.
Dennis Ritchie and Brian Kernighan developed the C programming language programming language, initially for DEC PDP-11 in 1970. Later with lead of Bjarne Stroustrup the programming language C plus plus appeared in 1985 as an Object oriented language vertically compatible with C programming language. Sun Microsystems released Java programming language in 1995 which became very popular as an introductory programming language taught in universities. Microsoft presented the C Sharp programming language programming language in 2001 which is very similar to C++ and Java. There are many, many other languages (cf. List of programming languages).
=Classifications of programming languages=
*Array programming language *Aspect-oriented_programming *Assembly *Concatenative programming language *Concurrent programming language *Syntax of programming languages *Data-structured language *Dataflow language *Declarative programming language *Domain-specific programming language *Dynamic programming language *Educational programming language *Esoteric programming language *Functional programming language *General-purpose programming language *Imperative programming *Interface description language *Logical programming *Multi-paradigm programming language *Object-oriented programming language **Prototype-based programming *Pattern directed invocation programming language *Procedural programming *Quantum programming *Reflection (computer science) *Scripting programming language *Synchronous programming language *Visual programming language *Lists of programming languages **Alphabetical list of programming languages **Categorical list of programming languages **Programming language timeline **Generational list of programming languages **List of esoteric programming languages
=Formal semantics=
The rigorous definition of the meaning of programming languages is the subject of Formal semantics of programming languages.
=See also=
*Computer language *Compiler *Interpreter (computing) *Binding (computer science) *Hello world program, examples of a simple program in many different programming languages *Software engineering and List of software engineering topics *Lists of computer syntax patterns *Reserved word *Keyword (Computer)
= External links =
|
|