I. What is Programming Language
A. Types of Programming Languages
- Machine languages — interpreted directly in hardware
- Assembly languages — thin wrappers over a corresponding machine language
- High-level languages — anything machine-independent
- System languages — designed for writing low-level tasks, like memory and process management
- Scripting languages — generally extremely high-level and powerful
- Domain-specific languages — used in highly special-purpose areas only
- Visual languages — non-text based
- Esoteric languages — not really intended to be used
II. Evolution of Programming Language
A. Early History
-
Years 50: Creation of high-level languages (closer to humans).
- Years 60: Expansion of specialized languages. Forth. Simula I. Lisp, Cobol.
Trying unsuccessfully to impose general languages: Algol, PL / 1.
- Years 70: Duel between structured programming with Pascal and
efficiency of C language. Basic generalized on personal computers from
1977, until the late 80s.
- Years 80: Experimentating other ways including objects. ML. Smalltalk.
On computers, we now use C, Pascal, Basic compiled.
- Years 90: Generalization of object-oriented programming with the performance of
microcomputers. Java, Perl, Python languages in addition to microphones.
- 2000s: Internet Programming (and future innovations, see end of text).
- Years 2010: Concurrency and asynchronicity. JavaScript and Go
languages among others help to create online fluid applications.
First language
Ada Lovelace and Babbage and its nephew were writing programs
for the project of "difference engine", and then the "analytical
engine".
In 1945, the german K. Zuse, inventor of the Z3 computer would have defined
an evolved language for this engine (with arrays and records). Few documents
of the epoch about this language exist.
Assembly
Assemblers exist since the beginning of computers. They associate
a symbolic name to the machine-language code, for example:
add bx, 4
cmp [adr], 3
jmp address
Assembly programming is no longer frequently practiced, even to build fast routines...
Autocode - 1952
Alick E. Glennie
Implemented firstly on Mark 1, then on other computers, this
is a symbolic code.
FLOW-MATIC - 1955
Grace Hopper
Feeling that a symbolic programming language is inaccessible to
researchers, Grace Hopper wanted to use words for instructions of the
UNIVAC I. Separating instructions and data structures was also new. A
compiler was completed by 1958.
IPL - 1956 - Information Processing Language
A. Newell, H. Simon, J.C. Shaw
Low-level list processing language. Implements the RECURSIVITY.
Fortran - 1954-1958 - FORmula TRANslator system
John Backus and other researchers at IBM
Language
dedicated to mathematical calculations.
Fortran II (1958) introduced SUB-ROUTINES, FUNCTIONS, LOOPS, a primitive
FOR control structure.
Identifiers were limited to six characters.
UNCOL - 1958 - Universal Computer Oriented Language
Melvin E. Conway
This is the first bytecode, the first intermediate language,
addressing the need to be able to write programs that run on all
hardware. It has not been implemented but inspired subsequent projects
such as UCSD p-System.
Lisp - 1958-1960 - LISt Processing
Mac Carthy
Functional language for list processing.
It is purely recursive, and not iterative. There is no difference between
code and data.
IAL - 1958 - International Algebraic Logic
First name for Algol 58, never implemented.
ALGOL - 1960 / Algol W - 1966 / Algol 68 - ALGOrithmic
Language
Defined by an international consortium of computer science specialists,
coordinated by IFIP.
Algol
Genie
This was the fist universal language to be machine independent.
Introduces the use of the BNF (Backus Naur Form) grammar to create a syntax
parser.
Introduces BLOCKS of STATEMENTS, and LOCAL VARIABLES inside a block.
Recursivity was implemented but with reticence as this was considered
as useless!
Uses DYNAMIC ARRAYS, and this means that following language (Pascal, C)
have regressed by using static arrays, for better performance.
It has IF THEN ELSE, FOR, the := symbol for assignment (used then by Pascal),
a SWITCH with gotos, the BEGIN END markers, the WHILE loop.
Algol W by Niklaus Wirth in 1966 was using RECORDS, that are dynamic data
structures, CASE, passing parameters by value, precedence of operators.
The same year, Niklaus Wirth has created Euler, a language between Algol
and Pascal.
Algol 60 was still oriented toward mathematical calculations. To try to
reach the original goal of a general purpose language, a new version has
been started in 1964, Algol X, renamed further Algol 68.
Algol 68 was using the =+ sign to merge both assignment and add. It
has introduced UNION and CAST of types. It owns IF THEN ELIF FI,
CASE, GOTO, user-defined operators.
Incremental compiling was not allowed.
COBOL - 1960 - COmmon Business Oriented Language
Defined by a committee, the CODASYL, COnference on DAta SYsystems
Languages
The committee under the auspices of the Department Of Defense,
and manufacturers, universities and users, worked from may 1959 to april
1960.
Grace Murray Hopper, who had designed Flow-Matic, a compiled language
in the 50's, has participated to the committee.
Cobol is a classical procedural language aimed at enterprise management,
in wich a program is divided in 4 divisions: identification, environment,
data, procedure, and they may be divided in sections. It was founded on
data and a program must describe precisely the hardware and input/ouput
data format.
It introduced the RECORD data structure. Programs are documented by the
syntax and are all but ligthweight...
APL - 1964 - A Programming Language
K. Iverson
Language using a mathematical notation, with lot of operators.
A unique type, the array.
Defined from 1957 to 1960, implemented in 1964.
BASIC - 1964 - Beginner’s All-purpose Symbolic
Instruction Code
John Kemeny, Thomas Kurtz
Description
Has been designed in 1963, to be easy to learn and has been
implemented in 1964. The first version was compiled, then it becomes interactive
and interpreted. Each line has a number to allow GOTOs statements to jump
to the line!
Bill Gate and Paul Allen have win an international contest by designing
and implementing a fast and compact Basic, firstly for the Altair (in 4
kb memory!) and then on other micro-computers.
Micro-computers were delivered with Basic in ROM until late 80.
In 1977, the Apple II was sold with an integer Basic. Then the Applesoft
Basic of Microsoft with floating-point. Applesoft was using two-letter
identifiers! Sub-programs were called by GOSUB to line numbers.
The first PC from IBM, (in 1981) was using MS-DOS from Microsoft and its
interpreted Basic (Basica). In 82 Microsoft produced its first compiled
Basic (Quick Basic).
Pascal and C have replaced Basic in the same decade. Microsoft still uses
Basic. Visual Basic for application, ASP for the web, and applications
are extended with a language (macro) that is basic also.
True Basic, by the original authors of the language is compiled and no longer
uses line numbers.
ISWIM - 1966 - If You See What I Mean.
P. Landin
First purely fonctional language, in the mathematical sense.
The first to use LAZY EVALUATION.
Attribute grammars - 1965
Donald Knuth
Completing the BNF method, attribute grammars describes
the semantic of languages to be made of functions. This type of grammar
helps the building of compilers.
Simula 67 - 1962-67
Ole-Johan Dahl, Kristan Nygaard
The Simula project started in 1962. The goal was to build
a tool to describe discrete event system, or network, and a language to
program simulating real world.
Was firstly designed as an Algol extension.
In 1964, Simula 1 has been implemented on Univac 1107. It was used to control
administrations, airports, planning, transport, or social systems.
This was a specialized tool. In 1966, it has been decided to make
it an universal language. Several projects has been launched with the
help of several makers (IBM, Univac, Digital) and this leaded to Simula
67.
This universal language has introduced CLASSES, INHERITANCE and OBJECTS
that are instances of classes. Classes allow to link functions (methods)
to objects.
Logo - 1966
Fuerzeig, Seymour Papert, and others
Aimed to teach programming to children, near Lisp, and based
on moving a "turtle" on the screen.
SNOBOL 4 - 1967 - StroNg Oriented symBOlic Language
D. J. Farber, R. E. Griswold, F. P. Polensky at Bells Labs
Snobol appeared in 1962.
Snobol 4 is the first stable distributed version of Snobol, available in
1967.
This is a processor of strings, founded on the principle of pattern-matching,
concatenation and alternation.
It was the first language to implement associative arrays, indexed
by any type of keys.
It allows to run code stored inside strings.
Data types are: string, integer, real, array, table, pattern and user-defined
types.
CPL - Combined Programming Language
Cambridge and London Universities
This was a combination of Algol 60 and functional language aimed at
proof of theorems. It was using polymorphic testing structures. Typed
language with the "any" joker type. Had list and array.
Complex, was not implemented. I quote it only because it was a step toward
the design of the C language.
BCPL - 1965? - Basic CPL
Martin Richards
It has been intended to be a simplified version of CPL.
Was using these control structures: FOR, LOOP, IF THEN, WHILE, UNTIL, REPEAT,
REPEAT WHILE, SWITCH CASE, etc...
Owns procedures and functions, unlike C.
Block delimiters were $( ..... $) which has inspired probably /* ... */
in C.
PL/1 - 1965? - Programming Language number One - Originally
NPL (New Programming Language)
IBM
The language was designed to be general-purpose and modular.
Keywords are reserved only in the context where they are used as keywords.
It is more hardware independent than predecessors. These types are recognized:
fixed, real, complex, character, bit, bin, pointer, picture, file, etc....
Data have default attributes (as precision for example), that depends
upon the context.
These compound types are built-in: array, structures, unions, and combinations
of them. IF THEN and SELECT .. WHEN .. OTHERWISE are conditional structures,
and variations on the DO structure allows various conditional loops.
Storage classes are introduced: automatic, static (life of the program),
controlled, based. Exceptions are implemented.
Pascal - 1970 - Named from the french mathematician
Blaise Pascal
Niklaus Wirth
Description
Language aimed to ease the building of compilers, and to lead teaching
by forcing to a structured programming.
UCSD Pascal, written by a group of programmers leaded away by Kenneth
Bowles is the first version for micro-computers. It compiles programs
in P-code, that is portable and interpreted (as Java later). It included
a complete development environment, a principle used successfully further
by Turbo Pascal.
In 1981, a role playing game written in Pascal, Wizardry, has had a big
success on Apple II.
When Turbo Pascal (by Anders hejlsberg) appeared in 1983 , fast and having
a complete IDE, the language gained success and is still widely used.
Control structures are near C ones.
Forth - 1971 - Fourth reduced to Forth by the constraint
of 5 letters of the IBM 1130
Charles H. Moore
Defined during 60+, seems to have been implemented in 1971.
Language for astronomical instruments using a stack to replace variables.
Its goal was to be the fourth generation language.
Smalltalk - 1972
Alan Kay and the Software Concept Group
This is a fully object oriented language wich runs always
inside a graphical environnment, with windows, mouse, etc...
C - 1973 - C is the successor of B, which is the successor
of BCPL
Dennis Ritchie
Description
It was firstly destinated to program the UNIX operating system, but
has become quickly universal thanks to its portability and speed.
Allows incremental compiling. In 1965, ATT programmers were using
Bcpl to work on implementing Unix. Displeased with this language, they
made it evolve to a new version named B, then to a new language named
C.
This was the evolving of the hardware that instigate to create C. Bcpl
and B was using integer for pointers, but this was not working on the
new computers.
Bcpl has no type (as Php or other modern scripting languages!). The declarations
int i, char b were created in C. Other types will appear later.
The += operator comes from Algol 68 (but was written =+)
In Bcpl, a block of statements was enclosed inside the (* and *) symbols
as the comment in /* and */ and sub-expressions inside ( and ). I suppose
this symbolism was intended to denote that anything is an expression in
the language, and also to reduce the parsing time. The C language simplified
the writting with the { and } symbols, that does the original idea doesn't
remains.
Union and cast come from Algol 68.
++ was already in the B language.
The keyword "include" comes from PL/I.
The preprocessor was implemented in 1973, and C has been used from this
date to write Unix, but Ritchie worked on it since 1969. The language
has evolved until 1980. .
Prolog - 1970+
A. Colmerauer, D. Roussel
GNU
Prolog
Has been developped both in France at Aix-en-Provence and
at Edimburg.
Has introduced LOGIC PROGRAMMING. A program is made of Horn clauses.
Prolog is declarative, its system of logic inference is an engine of resolution.
SQL - 1970+ - Standard Query Language
IBM
Description
Language of query for relational databases. Successor of the
Square language.
Awk - 1974 - First letters of authors' names
Aho, Kerninghan, Weinberger
Word processing language based on regular expressions, using
a pattern-action principle.
Scheme - 1975 - From "schemmer"
Gerald Jay Sussman and Guy L. Steele at MIT
Scheme
Language derived from Lisp but simplified. Types are
boolean, integer of indefinite size, rational and complex, characters,
symbols, vectors, oriented pairs, lists, associative lists, hash tables.
The S-expression generic type is used to extend the language.
It is often used as a scripting language, by the Gimp for example.
The language and development tool Hop from Inria is Scheme extended into a functional HTML dialect to build
Web 2.0 application.
CLU - 75 - CLUster
Barbara Liskov and MIT.
Coming after Simula, it brings the notion constructor of abstract
type with code for making it. Objects are called clusters (groups). It
brings the iterator concept, an effective system of exceptions
handling, multiple assignments. These ideas were taken up by Python.
Plasma - 1975
Carl Hewitt.
Language of actors. Implemented in Lisp.
Sasl - 1976 - Saint Andrews Static Language
D. Turner.
Aimed to teach the functional programming.
Comes from Iswim, unlimited data structures.
Icon - 1977
Griswold.
Procedural language, with word processing function as Snobol4, and
powerful constructs. Probably the first language goal-oriented : an instruction is executed if an expression with a possible success or failure state is achieved.
It has structured types: list, set, table (dictionary).
A list is declared: name := [ "word", "word", number,
etc...]
A list may be indexed in the form a[i] or be used as a stack.
A "set" hold elements without doubloons, and has several functions:
union, intersection, removing.
The RANGE construct is written: a to b
where "to" is a keyword and "a" and "b"
are variables..
A range may used inside an expression or as argument of a function. The
expression or the function are called with each value in the range.
Ex: write(1 to 5) will display 1, 2, 3, 4 ,5.
Expression don't return a boolean value, but are either evaluated or rejected.
The operation are executed if the expression may be evaluated. This is
the first language where expression evaluating it leaded by the GOAL.
There is a statement of the C language: if ( x= expression) ... which
means: assign to x the result of the expression, and if a is non zero,
then..., this construct is generalized in Icon, if the expression may
be evaluated, x gets the value, else x remains unchanged and the condition
is ignored.
The EVERY..DO construct associated to an expression works as an iterator.
As the range.
The ALTERNATION is another powerful construct. It allows to use a sequence
of parameters until a result is obtained. The symbol is "|".
For example the statement : if a | b | c = 0 | 1 means for.... if
a or b or c is 0 or 1 then ...
ML - 1973? - Meta Language
R. Milner.
Functional language inspired by Iswim.
Its goal was to proof theorem at the Edimburg University.
Functions are replaced by pattern models.
Implemented in Lisp.
Modula 2 - 1979 - MODUlar LAnguage
Niklaus Wirth.
Modula 1 would be defined in 1977. Implemented on
the Lilith workstation at first.
The idea is to reduce the risk of error with coercive programming rules.
However, it adds to Pascal some features of the C language. A call of
function without argument is written f() as in C rather than f as in Pascal.
A program is splitted in modules with local scope, and interfaces for other
modules. Use coroutines. Allows access to the hardware.
Was only used in Universities, because these new features has been added
also to Pascal by the makers of compilers (the units of Turbo Pascal mainly).
Ada - 1980+ - Nickname of Ada Byron de Lovelace, first
woman to program
Designed by a committee leaded by Jean Ichbiah, for the U.S.
Department Of Defense.
Inspired by Pascal and Algol W. Is rather heavy.
Introduces GENERICITY of algorithms and a kind of primitive object orientation,
but becomes really object oriented later.
Introduces PACKAGES, that are independent modules.
C++ - 1981-1986
Bjarne Stroustrup.
Description
Object oriented version of C.
Introduces OPERATOR OVERLOADING. Methods may be inline.
Use // for one-line comment, that comes from BCPL, of which C is a successor!
Further, multiple inheritance and template (generic classes or functions)
has been implemented.
Objective C, invented by Brad Cox in 1984, is another objet
oriented version of C, inspired by smalltalk. No operator overloading.
Used to write NextStep, the operating system of the Next computer, it
has become the programming language of Apple with the return of Steve
Jobs and therefore that of iPhone.
Standard ML - 1984
R. Milner, University of Edimburgh and Cambridge and Inria.
Search for Standard ML Moscow on a search engine.
An implementation of ML.
Eiffel - 1985
Bertrand Meyer.
Description
Procedural language fully object oriented , implementing persistency
and programming per contract (using precondition and postcondition on functions).
Was designed for security of software.
Compiled in C. May be interfaced with other languages. Has features of functional
languages, generic classes, garbage collector.
An open source version exist, Sather,
(from the name of a tower at Berkeley).
GAP - 1986 - Groups, Algorithms and Programming
Johannes Meier, Werner Nickel, Alice Niemeyer, Martin Schönert
and others.
The language has been defined to program mathematical algorithms.
It is interpreted, interactive an untyped. List and records are complex
variables.
The syntax is that of Pascal with some differences. Comments for exemple
are introduced by #.
An end of bloc is denoted by inverted keywords: if fi, do od.
The for loop has the forms: for in list, for in from to.
The language has procedures and functions.
What made it apart if that variables point out values and not memory addresses,
and the form of a definition of function is as a call: x := function(arguments)
body.
A function may be embedded inside another function.
Miranda - 1989 - From the name of a Shakespeare's
heroin (Miranda, means for admirable in latin)
D. Turner.
Inspired by Sasl and ML. Lazy evaluation: arguments of functions
are evaluated only when they are used. Embedded pattern-matching, modules.
Caml - 1987 - Categorical Abstract Machine Language
Suarez, Weiss, Maury.
Inria
Caml and Objective caml in 1996, has implemented ML.
Perl - 1987 - Practical Extracting and Report Language
Larry Wall.
Destinated to replace the command line language of Unix,
Sh, Sed and Awk, it kept the same ugly syntax. Used mainly for system
administration, CGI scripts.
Includes lists and associatives arrays. The FOREACH control structure
allows to scan lists.
Oberon - 1988
Niklaus Wirth.
Successor of Modula 2 (and Pascal).
Several commonly used constructs are suppressed to reduce the risk or
error! A garbage collector is added to.
Haskell - 1990 - Nickname of a logician, Haskell Curry
Purely functional language. Inspired by Miranda and Sasl.
Functional arrays, pattern matching.
ABC 1980-90 - ABC (equivalent to EZ in english)
CWI - Meertens, Pemberton and Guido Van Rossum.
Scripting language elaborated at CWI in Netherlands, and
the goal of which was to become a successor to Quick Basic or scripting
languages of Unix.
Perhaps the first to use INDENTING to denote statements of a block: no markers
as begin/end.
Another innovation, there is no file management, but rather persistency
of the global variables: the value is stored from a session to another!
There are five types: number, string, list, composed (structure without
fieldnames), array.
Python - 1991 - From the english TV movie "Monty
Python Flying Circus"
Guido Van Rossum.
Description
Scripting language with dynamic types. This is a replacement to Perl.
Inspired by ABC, but is extensible with C libraries, and object oriented.
As ABC, used evolved types: tuple, list, dictionary.
The slicing operator [a : b] allows to extract a sub-list from a list.
There is a version that compiles in Java bytecode, jython and ports for .NET.
Pov-Ray - 1991 - Persistence Of Vision (title of a
mediocre science-fiction book).
D. & A. Collins, and contributors.
Pov-Ray is a language for describing 3D images.
DisCo - 1992 - Distributed Co-operation
Reino Kurki-Suonio.
Disco is a specification language for reactive systems
with Pascal-like syntax. Constructs of the language are objects, event-driven
functions (named here actions), and relations. A function is activated
when a state of the system occurs and may be overwritten, this is named
"refinement" in the language. Disco focuses on collective behavior.
Layers are modules of the language. It is an system oriented language
with objects and behavior (not action oriented as it is said in the presentation).
Ruby - 1994 - As the jewel, analogy with Perl
Yukihiro Matsumoto.
Description
Ruby has been designed as successor to Perl and alternative to Python,
to be clearer than the first one, and more object oriented than the
second one. The syntax comes from these two languages, it want to be
without surprise and natural but may be complex.
There is no new control structure as in Scriptol, but a lot of minor
innovations to make the code smaller.
It is an interpreted language easy to extend. Statements are terminated
by end of line. Blocks of statement and loop are delimited by "end".
Most Python's features are present: associative arrays, iterators...
The originality is the dynamic object feature (adding methods to instances)
and scope of variables denoted by a prefix.
Java - 1994 - Java (coffee)
James Gosling and other programmers at Sun.
Description
Conceived at the beginning, in 1991, as an interactive language named
Oak, was unsuccessful. But in 1994 has been rewritten for Internet and
renamed Java. In 1995 navigators can run applets. In january 1996, Javasoft
distributes JDK 1.0, the Java Developpement Kit.
Java is a object-orientedl language, near C++. It compiles in bytecode,
interpreted on any computer. ..
It is simpler than C++: one class by file, automatic memory management,
no pointers. No multiple inheritance nor operator overloading, but integrated
multi-tasking.
Unlike C and C++, has only dynamic arrays.
PHP - 1995 - Personal Home Pages Hypertext Processor
Rasmus Lerdorf.
Description
Multi-platforms scripting language, embedded inside HTML.
Near C but not typed. Variables are prefixed by the $ symbol as the
shell of Unix or as Perl. The interpreter parses a html page that embeds
php code and delivers a pure html page.
An extended library of functions allows webmasters to build dynamic
pages.
Microsoft uses an equivalent language under Windows, ASP, near Basic.
JavaScript - 1995 (Has been firstly named LiveScript)
Brendan Eich at Netscape.
Description
Scripting language to embedd procedural code into web pages.
May be used to other applications, XML based languages for example.
Share the syntax of C or Java, but with untyped variables. The element
of the web page (window, table, etc...) are accessed through the Document
Object Model.
UML - 1996 - Unified Modeling Language
Standard by OMG (Object Management Group) - Grady Booch, Jim Rumbaugh, and Ivar Jacobson.
UML is the union of three modeling languages designed by the three
authors above. The language uses a graphical notation to design software
projects. A source is a diagram expressing objects and their interactions.
A model is made of views and the combination of them describes a complete
system. The model is abstract and domain-independent.
ECMAScript - 1997
Standard by the european standardization organisation E.C.M.A.
Standard to the language invented by Netscape, to let dynamic HTML pages
client-side.
Rebol - 1997 (The design is older) - Relative Expression
Based Object Language
Carl SassenRath.
Interpreted, extensible scripting language that produces compact code.
It is aimed at communication on Internet and distributed computing.
Has 45 types using same operators (Ex: date, money...). Use [ ] to enclose
blocks of statements.
C# - 2000 - (C-sharp), want to succeed to C++
Anders Hejlsberg / Microsoft.
Description
This is the main language of the .NET environment, to
program software working thought Internet. As Java, it keeps the C syntax,
a 34 years old language, with same improvments: garbage collector, no
pointer, interfaces, multi-tasking...
C# compiles to intermediate language, the MSIL (MicroSoft Intermediate
Language), and uses a multi-languages library, the CLR (Common Language
Runtime). The originality of the .NET system is that various language
may be compiled to MSIL and share their classes.
Other new features come with this language:
- structs are now special kind of object, passed by values.
- literals are objects also, with methods..
- attributes are descriptive objects attached to elements of the program
and used by the runtime.
- properties: methods that may be used as variables (prop = 5 is equivalent
to prop(5).
- foreach() to scan arrays (new only for Java and C++).
- delegate replaces pointer of functions of C.
There are improvements on Java also:
- event management is improved.
- operator overloading is present.
- simpler access to the the native system.
AspectJ - 2001 - Aspect for Java
Palo Alto Research Center.
Description
Aspect J is a Java extension that implements aspect oriented
programming. A technique that modularizes crosscutting concerns. The unit
is not the class, but a concern, that spans multiple classes. Concern
may be, for example, properties, area of interest of a system and AOP
describes their relationship, and compose them together into a program.
Aspects encapsulates behavior that concerns multiple classes.
Scriptol - By Denis Sureau, 2001
Description
Scriptol (Scriptwriter Oriented Language) is either compiled in PHP or in C++ or native, giving it a great
portability. It is both a language for applications, for scripting and to
make dynamic web pages.
Blocs of statements and control structures are not closed by "end"
or "}" but, as in XML, with the form "/if", "
/for", "/while" and so on...
The language has new control structures: "for in", "while let", "scan by", etc... The "composite if"structure
eases to implement rules.
Variables and literals are objects. Basic object (number, text,
etc...) and compound ones are created by direct assignment of a value or
a list of arguments to the name.
Scriptol is destinated to evolve and to have, along classes, other
high-level structures to allow programs to be nearest human thought.
Since October 2003, Scriptol allows to use XML as internal data structure.
Scala - February 2004
Description
Ecole Polytechnique Federale de Lausanne
Scala is a pure object oriented language that implements
some Python features in Java syntax. It is statically typed and both procedural
and functional. It currently runs on JVM and .NET.
Go - By Google, 2009
Description
Created by Google for its own development, but placed in the
public domain under a free license, it is designed specifically for
compilation speed.
It is a modern version of C++ without header files, with a simplified
syntax. Classes are replaced by simple interfaces and inheritance is
gone.
It brings concurrency and includes a garbage collector, but with no
substancial contribution to the design of programming languages.
Julia - 2010
Jeff Bezanson, Stefan Karpinski, Viral B. Shah, Alan Edelman. Sponsored by DARPA.
Description
The authors wanted to implement the best features of all other
programming languages: objects, concurrency, homoiconicité, distributed
computing, macro, generics. This with the most concise and clear syntax
as possible. Julia is a significant step in programming languages.
Julia code is compiled through the LLVM JIT compiler and it runs like an interpreter.
Its main areas of application are scientific programs thanks to the
expanded library, cloud with distributed processing and concurrency, and
with the ability of a program to change itself, robotics.
Dart - By Google, 2011
Description
To replace JavaScript, Google feels has irrecoverable design
flaws (this is not the opinion of all actors in the Web), it is similar
to static languages like Java, with classes, single inheritance,
typed or dynamic variables. It does progress in features (concurrency,
mixins, streams) but is a regression in design with respect to
JavaScript whose dynamic features have been a real evolution. JavaScript
in version 5 will have classes and inheritance too, which reduces the
value of Dart on the browser.
Rust - By Mozilla, 2006-2011
Description
This system language originally created by Graydon Hoare in 2006
and taken in 2009 by Mozilla (its employer) has a compiler since 2011.
Its syntax is derived from that of C with additions to manage
concurrency and syntactic additions. It is object oriented and generic
with polymorphic classes as in Haskell.
It is intended to be safer for the Web and taking better advantage of current processors.
Asm.js - By Mozilla, 2013
Description
This subset of JavaScript allows in combination with other tools to
convert applications and libraries written in other languages and use
them in the browser. This makes of the browser a universal interface
for software working online or offline on all operating systems and all
types of devices, from desktop to smartphone.
Swift - By Apple, 2014
Description
Designed to replace Objective-C on Apple's devices including the
iPhone and iTab, it removes some of the defects of this ancient
language. It has a classic design and is distinguished mainly by
changing the name of the elements of language, interfaces becoming
protocols, for example.
B. Modern History
We see that after the plethora of dialects of the 70s, the invention
of languages stagnated about the syntax. Common languages, even
recent ones like Java, C #, PHP, bring no change to the instructions,
Go and Dart are even a regression. Only Julia is a real progress and
exploit fully capabilities of current computers.
The use of JavaScript is spreading along with web applications offline.
- Object-oriented languages
- These languages allows to embed code inside HTML page and thus
to combine statements and data. PHP, ASP, JavaScript are the most
used ones. The .NET platform will allow any language to be embedded
into HTML.
Classes are being replaced by dynamic objects and inheritance by combination.
- Scripting languages
- In the 2000s, several modern scripting languages offer a simpler
and intuitive syntax: Python is the
most widely used for now but is being replaced by Go. Ruby is mainly
used for the Rail library but the trend is in Node and JavaScript.
- Markup languages
- XML was a major trend in the 2000-2010 but is then dedicated to
graphical interfaces. For documents it trends to be replaced by JSON.
Microsoft uses XAML to define graphical interfaces, on the Web with the cross-browsers
plug-in Silverlight or locally on .NET.
SVG is a format to embed graphics in webpages supported by all modern browsers. It may be used to design a user interface.
- SQL
- Thanks to Web applications SQL trends to be more and more popular,
and so is now a part of modern programming.
- Portability
- Languages become more portable thanks to LLVM and Emscriptem. The
first for the virtual machine which runs on any system, the second by
converting the LLVM code in JavaScript.
- Conclusion
- The development of mobile phones with their multiple operating
systems foster HTML 5 as a development platform and related
technologies: SVG, Canvas, CSS. JavaScript becomes the dominant language
for client-side web applications.
Other trends are higher level for languages, programming by aspects,
or by schemas with UML and further concepts, distributed computing on the cloud. - III. What is Programming Language Theory
- Programming language theory (PLT) is a branch of computer science that deals with the design, implementation, analysis, characterization, and classification of programming languages and their individual features. It falls within the discipline of computer science, both depending on and affecting mathematics, software engineering and linguistics. It is a well-recognized branch of computer science, and an active research area, with results published in numerous journals dedicated to PLT, as well as in general computer science and engineering publications.
- IV. Compiler VS. Interpreter
| No | Compiler | Interpreter |
| 1 | Compiler Takes Entire program as input | Interpreter Takes Single instruction as input . |
| 2 | Intermediate Object Code is Generated | No Intermediate Object Code is Generated |
| 3 | Conditional Control Statements are Executes faster | Conditional Control Statements are Executes slower |
| 4 | Memory Requirement : More (Since Object Code is Generated) | Memory Requirement is Less |
| 5 | Program need not be compiled every time | Every time higher level program is converted into lower level program |
| 6 | Errors are displayed after entire program is checked | Errors are displayed for every instruction interpreted (if any) |
| 7 | Example : C Compiler | Example : BASIC |
Explanation :
V. Defining Syntax
A. Character Set
ASCII (American Standard Code for Information Interchange)
- is a
character-encoding scheme originally based on the
English alphabet that encodes 128 specified
characters - the numbers 0-9, the letters a-z and A-Z, some basic
punctuation symbols, some
control codes that originated with
Teletype machines, and a
blank space - into the 7-bit binary integers. ASCII codes represent text in
computers,
communications equipment,
and other devices that use text. Most modern character-encoding schemes
are based on ASCII, though they support many additional characters. ASCII developed from
telegraphic codes. Its first commercial use was as a seven-
bit teleprinter code promoted by Bell data services. Work on the ASCII standard began on October 6, 1960, with the first meeting of the
American Standards Association's (ASA) X3.2 subcommittee. The first edition of the standard was published during 1963
, a major revision during 1967,
and the most recent update during 1986.
ANSI (American National Standards Institute)
Windows 3.x and
Windows 95
support the ANSI character set, which includes
256 characters, numbered 0 to 255. Values 0 to 127
are the same as in the
ASCII character set.
Values 128 to 255 are similar to the
ISO Latin-1
character set, but naturally has extensions and incompatibilities.
You can enter any ANSI character into a Windows application.
If you see it on the keyboard, just press it.
Even if it isn't on your keyboard, you can still enter it
using a special
Alt-Num key sequence.
Unfortunately, this ANSI character set is
incompatible
with the
ECS character set used by DOS.
For example, the British pound symbol is code 163 in
ANSI, but code 156 in ECS. Worse still,
ANSI does not include many of the ECS symbols, particularly
the
line drawing characters.
If you try to display a DOS document in Windows, Windows
attempts to convert the ECS characters to ANSI. Any character
that does not convert is replaced by an arbitrary graphic.
Therefore a round-trip conversion from DOS to Windows and
back will not re-create the original document.
Character Name ANSI Code
... ellipsis 0133
' opening single quote 0145
. bullet 0149
UNICODE
Unicode is a 16-bit character set designed to cover all the
world's major living languages, in addition to scientific symbols and
dead languages that are the subject of scholarly interest.
It eliminates the complexity of multibyte character sets
that are currently used on UNIX and Windows to support
Asian languages.
Unicode was created by a consortium of companies including
Apple, Microsoft, HP, Digital and IBM and merged its efforts
with the ISO-10646 standard to produce a single standard in
1993.
Unicode is already the basis for at least
one operating system: Windows/NT.
Unicode is a 16-bit character set where all characters
occupy the same space. The first 256 values are the same
as the
ISO-Latin character set,
which is also the basis for the
ANSI Character set used in
Windows 3.1 and Windows 95.
But Unicode goes on to define 34,168 distinct coded
characters. In most character sets a single value is often assigned
to several characters. For example, in ASCII a "-" is used
to represent a hyphen, a minus sign, a dash and a non-breaking
hyphen. In Unicode each meaning is given its own code.
The Unicode standard contains only one instance of each
character and assigns it a unique name and code value.
It also supports "combining" accent characters, which follow
the base character that they are to modify.
DECIMAL
Decimal number system is the most commonly used and the most familiar one to the general public.
It is also known as
Base 10 numbering system since it is based on 10 following symbols: 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9.
In decimal system, every digit has its own position as well as the decimal point.
I.e. the number 356.74 has 4 in the Hundredths position, 7 in the Tenths position,
6 in the Units position, 5 in the Tens position, and 3 in the Hundreds position.
Decimal number system is also one of the oldest known numeral system,
which is historically related to Hindu-Arabic numeral system.
HEXADECIMAL
Hex, or
hexadecimal, is a number system of base 16.
This number system is especially interesting because in our casually used decimal system
we have only 10 digits to represent numbers. As hex system has 16 digits,
the extra needed 6 digits are represented by the first 6 letters of English alphabet.
Hence,
hex digits are 0,1,2,3,4,5,6,7,8 and 9 A, B, C, D, E, F.
This number system is the most commonly used in mathematics and information technologies.
I.e. in html programming colors can be represented by a 6-digit
hexadecimal number: FFFFFF represents white,
000000 represents black, and so on.
Software Reliability
- ability of a computer program to perform its intended functions and operations in a systems environment with out experiencing failure.
B. Syntax Group
C. Syntax and Program Reliability
References :
http://cs.lmu.edu/~ray/notes/pltypes/
http://www.scriptol.com/programming/history.php
http://en.wikipedia.org/wiki/Programming_language_theory
http://www.c4learn.com/c-programming/compiler-vs-interpreter/
http://www.robelle.com/smugbook/ascii.html