Wednesday 23 January 2013

The Program For A Machine

The computer program is a specification of the machine behaviour. To specify it, one can describe how the machine should behave to realize the specified task. If it is specified what the machine should do, then we can say that the computer program is written in imperative manner rather than declarative. Declarative manner specifies the goal in a formal way, leaving the realization to general and powerful automatic  process that will invent the optimal way to approach it.

In the 1930s, Church and Turing proposed different ideas for a formal system. Lambda Calculi and Touring Machine , which were ultimately proven to be logically equivalent, are nowadays recognized as precursors of the two main families of the programming languages: functional and imperative. The von Neumann architecture, that is a model of modern computer, implements a universal Turing machine. Imperative programming languages were the first that started the evolution and now they are the oldest well known ones. Imperative programming describes the computation in terms of sequence of statements that can change a machine state - in other words, program written in imperative language is a specification for a sequence of commands. What is more, the possibility of changing the state of the machine is the key feature here. The oldest imperative programming language that is still used nowadays is FORTRAN, created in 1954. The rest of the history of imperative languages is as follows: BASIC (1964), Pascal (1970), C (1972), Ada (1978), Smalltalk (1980), C++ (1985), PHP (1994), Java (1994), C# (2002).

Good programming language has to keep pace with the progress of technology and at the same time it must respond to market needs.
Object-oriented languages, the novel offspring of imperative languages, lead programmer to use objects as main conceptual constructs employed to build virtual world, which can be easily understood by a human brain. A well written program in object-oriented programming language, models algorithms and data, uses concepts and relationships between them and raises them step-by-step to the next levels of abstraction. At the same time it ensures that these concepts have the properties of physical objects. This approach is similar to the process of ontology engineering based on virtual objects. Simula (1967) is generally accepted as the first language to support the primary features of an object-oriented language. Another example is C++, a general purpose language developed as an offspring of C, that is equipped (with some limitations) with object-oriented abilities. Platform independ-ence was the motor for Java and C# language, the modern object-oriented languages with the highest impact in the field nowadays.


Spectrum of Computer Languages

Object technology, invented in 1965 in a lab of the University of Oslo (together with the Simula Language), is built around three basic concepts: instance, class and superclass, and two basic relations: instance-of and inherits-from.  In the 80's the exact meaning of these relations was widely discussed, including the con-troversies between single and multiple-inheritance. Modern object-oriented languages go beyond those basic concepts by providing more or less general meta-class organization schemes (a class being itself an instance of a metaclass). As a consequence, when we nowadays talk about an object (the instance of a class), the context is (the most) important. In a general context, we usually mean an entity cor-responding to the common scheme, but if we need to be more specific, we refer to a C# object, a Java object, a C++ object, an Eiffel object, a CLOS (Common Lisp Object System) object, etc., with respect to their additional properties.

Lisp was the first programming language that used the approach taken from Church’s lambda calculus. Functional languages are nowadays adapted to the common mainstream, as they were also processors of modern programming languages. Going back in the history of computer languages, the debates in the late 1960s and early 1970s (about declarative versus procedural representations of knowledge in artificial intelligence) resulted in an introduction of the novel family of programming languages: the logical ones. Logical programming is regarded as separate from functional languages as far as functional language is still focused around functions – recursive concepts that realize the task. One of logical languages widely used in computer science is SQL, which is based on well behaved Codd’s relational algebra, and has a counterpart in logic. PROLOG implements the Horn Logic. The mixture of PROLOG and SQL resulted in DATALOG language – subset of PROLOG oriented to databases.

Lets now take a look at esotheric ones :)  -> http://en.wikipedia.org/wiki/Esoteric_programming_language