Programming Languages
Introduction
And God said: Let there be command line… And there was command line. When progrAdam questioned about “language-oriented programming”, He threw an OutOfBoundsException. For the time being yet…
Writing a Hello World program in Turbo Pascal takes less code than in C#. Still text, programming languages do evolve slower than most people think or expect. From object-Oriented to Managed abstraction. Trends of abstraction in code include Declarative , Dynamic, Concurrent aspects. There seems to be a shift in Internal Domain Specific Languages (iDSL’s) to be more ‘gentle’ in their declarations. One of the main goals of programming is that programming itself and programmers should make use of ‘Adaptive intelligence’ in order to ‘Say more in less code’. It is debatable, but it seems that for the time being there shall be no ONE TRUE language.
Enablers
- Functional programming (c#3.0 , Ruby, Python, Scala, F#, Haskell, Erlang)
- Dynamic-Static Programming (integration) = Best of Both worlds
- Meta-Programming (textual macro languages, specialized code generators)
- MultiCore Processors of ‘a’ specific type = executable code translated into any programming language
- Concurrent Programming (Fortress, Chapel, X10)
- Declarative Programming: Emphasis on What, excluding How
Inhibitors
Current Programming Paradigms
In broad strokes, programming languages divide into programming paradigms and a classification by intended domain of use. Paradigms include procedural programming, object-oriented programming, functional programming, and logic programming; some languages are hybrids of paradigms or multi-paradigmatic. There is no overarching classification scheme for programming languages. A given programming language does not usually have a single ancestor language. Languages commonly arise by combining the elements of several predecessor languages with new ideas in circulation at the time. Ideas that originate in one language will diffuse throughout a family of related languages, and then leap suddenly across familial gaps to appear in an entirely different family. The current trends of programming involve:
1. Mechanisms for adding security and reliability verification to the language: extended static checking, information flow control, static thread safety.
2. Alternative mechanisms for modularity
3. Component-oriented software development.
4. Metaprogramming, reflection or access to the abstract syntax tree
5. Increased emphasis on distribution and mobility.
6. Integration with databases, including XML and relational databases.
The paradigm of SaaS, has given birth to Programming-as-a-Service. Apex Code is a strongly-typed programming language that executes on the Force.com platform. Apex is used to add business logic to applications, to write database triggers, and to program controllers in the user interface layer. It has a tight integration with the database and query language, good web services support, and includes features such as futures and governors for execution in a multi-tenant environment
Programming Environments (IDE)
Modern tools and compiler tricks mean that higher-level abstractions (where you hand low level control over to your tools) can actually provide better performance. For example it is said that optimizing compilers are capable of producing faster assembly language than even good coders. Similarly, JIT compilers (like the one in the Common Language Runtime of the .NET framework) are purportedly pushing for "better than C" performance. So the trend is inexorably towards higher-level languages and tools. The programming environment is also changing. With two major changes foreseen :
1. Distributed processing where the platform a program may be running on is no longer a single machine or processor
2. Virtual environments where a program is an object in a 3D virtual world
Auto-Managed Code
Managed code can be Java and C#. Back in 1999 I used PCs hooked up to the Internet without a firewall. Oh we had anti-virus but the Internet was not the ferocious war zone it is today. If you hook up a naked (i.e. unprotected by firewall) PC to the Internet today, it will be assimilated within minutes by some nasty or other. Without building security into code development computers are highly vulnerable. Managed code eliminates whole swathes of danger by building a wall between applications and the hardware they run on. It's not quite sandboxing where code cannot use hardware resources but it's not so far off.
Web Resources
http://wiki.developerforce.com/index.php/Apex
http://www.acm.org/crossroads/xrds12-3/paulgraham.html
http://www.voidspace.org.uk/python/articles/object_shaped_future.shtml
http://www.eweek.com/c/a/Application-Development/The-Future-of-Programming-Less-Is-More/
http://www.peterelst.com/blog/2008/10/07/the-future-of-programming-languages/