**Design Issues in Modern Programming Languages ** Ahmet Alp Balkan

This essay has been prepared for Programming Languages CS course. It can be freely used and distributed. Details of a programming language design is one the most controversial issue in the theory of programming languages. Many years ago, languages designed for programming computers have

a syntax such that only a machine can understand and translate. Such languages were called “low-level programming languages” and they were not providing any abstraction functionality while coding a new program using these languages. [1] These machine languages are evolved to assembler and many years later we have “high-level programming languages” which sometimes hide all details of computer architecture and language implementation details with abstracting many kinds of functionality. People “create” something when they do need it. With evolution of computers and computer programming, many reasons triggered creation of new programming languages. Most of the time, these reasons are about efficiency, usability, style, functionality (capability) of usage of these programming languages. Let’s say if a company hires a software engineer and request a computer program does a particular job, if engineer would code this program in assembly language, it may take months; on the other side, most probably, it would take a few days using a new-generation programming language. That is about the efficiency and saving money for enterprise market in software engineering. To do particular jobs in computers, labs or people design new programming languages which developers can get rid of unnecessary parts of implementation.

Readability and ease of coding are also reasons behind appearance of new programming languages. Recall from low-level programming languages, the first languages i.e. FORTRAN, ALGOL, COBOL were not consist on good readable codes. This is a big deal since many software is created collaborated today, the code written on a language must be readable easily by other developers as well. However, major languages designed in last 15 years consist on a syntax which is human-friendly. In this issue, it is not all about programming language design but also developers' coding style. [2] On the other hand language syntax is exactly a limiting factor for code readability. Any code written on a language may not be readable even it has been coded by a pretty good developer. Besides that, collaboration is limited by readability. When Hejlsberg released C# language, one of the important benefit was ease of coding and readability of code.[3]

The coding style factor has been another issue while designing new languages. Many language patterns and coding approaches needed to be evident in new languages. Such as object-oriented programming. Developers should not deal with infrastructure of a programming language; instead, they should code their programs with good programming practices and useful design patterns. For instance, some of languages do not have enumeration at all and enumeration makes code easy to understand and refactor. Some languages support inheritance, some do multiple inheritance, and some do not support inheritance at all. Some languages have strong typing style and some have weak-typing. This point becomes important when developing reliable programs such as military systems or computational systems etc. Robustness and safe conversion and type checking is important in such situations. Primitive languages does not have type checking at all, however with the evolution of languages, such features are evolved, too.[4] Scope rules also a rule in these cases. Some languages are “imperative languages” and some are “functional languages”. Imperative languages provide a good programming practive such as “divide and conquer”. This provides a reusable interface for written modules for a program. _Encapsulation _is important arguments of objective languages . Built-in or externally integrated libraries, APIs, data services (SOAP etc.) can work with objective languges. On the other hand, functional languages can do every functionality but they are not so flexible for developers and still coders should cope with innecessarily long implementations. In brief, many languages have convenient rules in type checking, scope rules and common language features etc. This makes languages easy to learn for developers.

Another contemporary issue in the programming language design is functionality. A language may handle processes and subroutines which are going to work on personal computer systems. However, there must be a need to adopt such languages when using different platforms such as mobile devices, while appliances and embedded systems. In these situations, primitive languages are not capable to handle such cases. Some languages may have scalability and feasibility problems on different disciplines of programming. For example, C language is not preferable for coding large-scale distributed systems. Many distributed systems such as Hive, Hadoop, SOLR uses Java or Scala programming language_s_ because of granularity. _Concurrency _feature is an important feature for large-scaled reliable systems. Let’s say a telecommunication service uses C language and changing code on-the-fly may be impossible without interrupting service and making servers down for a while. On the other hand, languages such as _Erlang _are designed for full-support to concurrency. However, some languages run native threads with underlying C APIs. This is not an efficient way since embedding native-C codes bring redundancy and it is not a good programming practice. Concurrency and scalability issues are arised from map/reduce algorithms, usually. [5] Recently, Google released a programming language called Go, which supports concurrency. [6] “Real-time programming” is another discipline in programming languages concept which stands for guarantee of execution time and proper output or functionality. Some languages could not guarantee execution time of code snippets, however, in these days languages such as Java supports it. [7] Real-time computing become important issue in military software or space shuttle systems etc.

As said before, “need” is important for programming languages. Today we have many purposes of computing such as computer graphics, large-datasets computing, scientific computing, scripting, concurrent programming, logic programming, parallel programming, distributed programming, procedural programming, object-oriented programming and quantum programming etc. [8] or instance today we have many WEB Scripting languages such as Perl, Python, PHP, ASP (VBScript), ASP.NET, JSP, ColdFusion, Scala, Ruby etc. The needs invite people to invent new programming languages. For scientific computing we have such languages MATLAB, R, FORTRAN etc. [9] As the computer science and programming language design discipline goes further, new features will be adopted or new languages will be created in the next years.

FURTHER READING

  1. “Low level programming language”, _Wikipedia Article, _retrieved on Dec 20, 2009.

  2. “What makes a good programming language”, David Chisnall, _InformIT, _retrieved on Dec 20, 2009.

  3. “C#", _Wikipedia Article,_retrieved on Dec 20, 2009.

  4. “Type system in Programming Languages”, _Wikipedia Article, _retrieved on Dec 20, 2009.

  5. “Can Your Programming Language Do This?", Joel Spolsky, _JoelOnSoftware,_retrieved on Dec 20, 2009.

  6. “Go : a new programming language”, Robert Griesemer, _Google Code Blog, _retrieved on Dec 20, 2009.

  7. “Real time computing”, _Wikipedia Article, _retrieved on Dec 20, 2009.

  8. “Computing paradigms”, _Wikipedia Article, _retrieved on Dec 20, 2009.

  9. A big list of programming languages”, _Programming for Scientists, _retrieved on Dec 20, 2009.