Do We Need Another Programming Language?
Wednesday, August 9, 2000
Scotts Valley, CA
On June 26, 2000 Microsoft introduced the language reference for a new
programming language,
C# (pronounced
"See Sharp"). The chief designer of C# is none other than our dear
friend
Anders Hejlsberg,
Distinguished Engineer in the Developer Division at
Microsoft. C# combines features from C, C++, Visual Basic, Delphi, Java,
and adds a few extra green crystals. You might be asking yourself, "Does the world need
another programming language?"
I'm reminded of a television commercial about Prunes. The commercial
asked the question, are three enough? are six too many? You might
ask the same question about programming languages. How many do we
need? Do we have enough languages? Should developers create new
languages? Should programmers add new language extensions to existing languages?
My answers to all of the questions are: not sure, not sure, lots, no, yes, and
yes.
Programming languages (and the compilers, debuggers, and other tools) help
developers build the software that takes advantage of business opportunities and solve
real problems. Years ago a
new programming language, PL/I (Programming Language One), from IBM combined the
best features of FORTRAN, COBOL, ALGOL 60, LISP, assembly language, and current programming
language research. PL/I was supposed to be the perfect language for both
business and scientific programming. It was sometimes called the
"kitchen sink" of languages, it had everything. Yet, we have
seen many new programming languages appear during the short history of our
computer industry.
New programming languages, and extensions to existing programming languages
keep our craft, our industry, and our imaginations alive. Imagine if we
were still programming everything in assembly language (I know, some of you
still do). Imagine if we were still using Fortran for systems
programming. What if we were building web applications and web pages with
COBOL and COBOLscript? Would the developer's world be a better
place? Would we be more productive? Would we be able to go home at
5pm every night? What would we do without types, strings, structures,
objects, packages, loops, runtime libraries, garbage collection, pointers,
functions, parameters, dynamic arrays, recursion, exceptions, inheritance,
interfaces, templates, and the rest?
As a language junkie, I have watched the arrival of a new programming
language with the enthusiasm of a child tasting their first bowl of ice
cream. I have stayed up late at night reading through the language
specification and programmers reference manuals. I have read all of the
magazine articles, books, and newsgroups for information about new
languages. I have waited, with anticipation, for tools and industry
infrastructure to support the new language. By now you must know that I am
really crazy. But I can't help myself. I love being a
programmer. Having lots of programming languages in my bag of tricks is
just one part of being a good programmer.
I met Microsoft's announcement of C# with excitement. I also enjoyed
the C# announcement on a personal level because Anders was a big part of the
language. Anders will always be a member of the extended Borland family. C# has many
influences from Anders' work at Borland on Turbo Pascal and Delphi. My
congratulations go out to Anders and his team. I look forward to reading
more information about C# in the future.
Author's Note: This article does not reflect any
forward looking plans or statements about Borland products,
future support for any languages, platforms, etc.
My List Of Popular Programming Languages
Many popular programming languages have
appeared over the years. Of course the word "popular" is a very
subjective term. What defines the popularity of a programming language? Is
this like a beauty contest, a popularity contest? I won't try to come up with a
criteria for selection to this list. I've based my choices on 30+ years of
computing experience, anecdotal evidence of language use, language listings on
the internet, in magazines and books, and feedback from my peers. You can
also add your comments to the thread associated with this article. I've
listed each language with its year of introduction and notable features.
My popular programming language list is not a complete listing of languages - compiled, interpreted, scripted, or otherwise. I will leave complete and updated language lists to others on the internet. I have provided some links to other sources of langugage histories and lists. I will consider updating this article at a moments notice based on feedback, clearer thinking, and continued reflection. With new languages being created all the time, this article represents a moment in time.
| Year |
Language |
Features |
| 1957 |
FORTRAN
"IBM Mathematical FORmula TRANslating System" by John
Backus, et al, IBM |
logical if, do loop, data types included logical, integer,
real, double-precision. |
| 1958 |
LISP
"LISt Processing language" by John McCarthy,
MIT |
List structure for symbolic expressions and other
information, small set of operations expressed as functions (car, cdr,
cons), conditional expressions, dynamic scoping, lambda expressions for naming functions,
symbolic expressions instead of numeric expressions, recursion, LISP
programs stored as LISP data, garbage collection. |
| 1960 |
COBOL "COmmon Business Oriented Language"
by the CODASYL Committee. |
separate data and code sections, structured types (arrays
and records), long
variable names. numeric and string data types, strong typing. |
| 1960 |
ALGOL "ALGORithmic Language" (original specification in 1958), ALGOL 68 (1968) |
First language with a formal grammar (BNF). Data types, compound statements, identifiers of any length,
multi-dimensional arrays, block structured allocation and visibility,
parameter passing: call-by-value, call-by-name, recursive procedures,
stack-dynamic arrays, symbol tables, stack evaluation of arithmetic,
garbage collection. No I/O (I/O was left to the implementor). |
| 1964 |
BASIC
"Beginner's All-purpose Symbolic Instruction
Code" by John
G. Kemeny and Thomas E. Kurtz,
Dartmouth College |
Included language features from ALGOL and FORTRAN.
Interpreted language, no distinction between integers and
floating point, dynamic string storage, IF..THEN, and GOSUB statements.
Used line numbers for all statements. |
| 1965 |
SIMULA
by Kristen Nygaard and Ole-Johan
Dahl, Norwegian Computing Centre |
First object-oriented language. Based on Algol. Added
classes, reference variables (pointers to objects), pass by reference,
char, text, I/O, and coroutines. |
| 1967 |
PL/I by
IBM |
concurrent tasks, run-time exceptions, recursive procedures,
pointers as a data type, array slices. programming language for
systems and applications programming. |
| 1971 |
Pascal by
Niklaus Wirth, ETH |
case statement, type safety, enumeration type. |
| 1972 |
Smalltalk by Alan Kay et al, Xerox
Parc |
pure object-oriented, message passing metaphor, dynamic typing,
reflection, integral graphics environment, large library. |
| 1972 |
C
by Dennis M. Ritchie, AT&T Bell Labs |
Terse, low-level and permissive. macro
pre-processor. Library routines provide for input, output, and
operating system calls. |
| 1976 |
SQL
"Structured Query Language" by IBM |
basic language constructs for defining and manipulating
tables of data. |
| 1979 |
Ada by Jean Ichbiah's
team at CII Honeywell [note: US Department of Defense received 15 language
proposals. Four finalists were chosen: Cii-Honeywell Bull,
Intermetrics, SofTech, and SRI International] |
Pascal descendant language. Added packages, exception handling, generics (templates), tasks,
hardware access, strong typing, data abstraction, sub types and derived
types, operator overloading, if-then-elsif-endif, case-is-when-endcase,
loop-exit-endloop, goto. Parameters can be in, out and inout. |
| 1983 |
C++
by Bjarne Stroustrup, AT&T Bell Labs (now called AT&T Labs) |
A superset of C. Added type checking (prototypes), function overloading,
operator overloading, references, classes, inheritance, polymorphism,
templates, exception handling, runtime type information, streams for I/O. |
| 1985 |
Object Pascal
by Apple Computer and Nicklaus Wirth |
Added objects to Pascal. |
| 1987 |
PERL, by Larry Wall |
interpreted language, strong text matching functions, procedural and object oriented, abstract database
interface(DBI),
open sourced. |
| 1991 |
Visual Basic
by Microsoft |
added properties and events to Basic. |
| 1993 |
Delphi by
Borland |
added PME (properties, methods, events), exceptions, etc to Object Pascal |
| 1995 |
Java, by Sun Microsystems |
Small-instruction set, object-oriented, interpreted language,
runs on top of a virtual machine, garbage collection, interfaces. |
| 1995 |
Javascript
by Netscape |
Scripting language for client and server side HTML. Similar
to C syntax. Variables are case sensitive, variables can change
type, rich object library. |
A Few Other Notable Languages
There are many other notable languages. These languages are covered on
numerous web sites. Besides the languages listed above, it is worth noting
a few of the thousands of programming languages that have been created over the
years that were notable in their own way. I could have listed a few more
here as well. I may make further additions in the future.
PlanKalKuel (1945) by Konrad Zuse
- first programming
language - one data type-bool (1 bit). Objects are built up from arrays of
bits.
Short Code (1949) by John
W. Mauchly - first programming language used on an electronic device.
APL "A Programming Language" (1962) by Kenneth E. Iverson. The APL language includes a set of symbols (letters, numbers, punctuation,
algebra, and special shapes), a very simple set of rules, and a large function library. Data can be either numeric or text.
SNOBOL
(1964) by David J. Farber, Ralph
E. Griswold, and F.P. Polensky - Bell Labs. Featured string manipulation, used for pattern matching.
Logo (1967)
by Wallace Feurzeig, Daniel Bobrow, et al Bolt, Beranek, & Newman and Seymour
Papert, MIT . A dialect of LISP featuring interactivity, modularity,
extensibility, flexibility of data types. Logo is best known for
its "turtle graphics."
Prolog "Programming in
Logic" (1971) by Alain Colmerauer, Robert Kowalski, and Phillipe Roussel. Designed for natural language processing applications. Control
structure was depth-first search with backtracking.
Modula-2
(1978), Modula-3,
Oberon (1988) - Niklaus Wirth, ETH - continues the refinement of
Pascal. Modula added the "module" to encapsulate functions,
procedures, and data structures. Modula also included single processor (sequential)
concurrency and hardware access. Oberon added inheritence, extensible
record types, multi-dimensional open arrays, garbage collection. Oberon
eliminated variant records, enumeration types, subranges, lower array indicies,
and for loops.
CommonLisp
(1981) by DARPA (Defense Advanced Research Projects Agency) and a group of
companies and educational institutions - lexically scoped (default), can be
dynamically scoped, data structures, closures, multiple values, types using
declare and a variety of numerical types.
Eiffel (1985) by Bertrand Meyer and ISE - Language includes
design by contract, assertions, and statically typed/dynamically bound objects.
Python (1991) by
Guido van Rossum.
Interpreted object-oriented language. The language includes modules, exceptions, dynamic typing, very high level dynamic data types, and classes.
Over 2000 Programming Languages and Counting
There are too many languages to write about in this article. The list of
known programming languages is over 2000 and growing. There are many
sources of programming language information on the Internet. Below you'll
find a few of these links.
Be Well, Stay Challenged, and Have Fun!
David Intersimone "David I"
davidi@borland.com