Critical thinking is good for progress. Therefore in this article I will explain the motivation behind my decision to create a new computer language. This may be interesting reading if you are a compiler engineer or curious about new computer languages. My challange is to find the proper symbols and keywords to create a better language.

There are many computer languages out there and takes a lifetime to learn them all. The languages with the strongest position in software industry are  C++, Java and Python. In the past some computer languages have been loved then hated then loved again. For a developer is very hard to switch from a computer language to other. Every new computer language promises to correct previous issues from other languages. Many times the language designers are missing the point:

The point is: Computers do not write programs! Humans  do!

We need a computer language that is logical easy to teach and learn. This language must be robust, performant, complex, stable, maintainable, available and comprehensive. Join me to build this language. I will not be able to do it alone. We need experienced people who know already to build compilers and are ready to contribute for a great new computer language.

Learning experience

I have started programming with FORTRAN then Lisp, Basic, Pascal, ADA  and then C … oh boy what an adventure! Other languages I know today: FoxPro, SQL, PL/SQL, Python, Scala, Java, C++, XML, HTML, CSS, Assembler, Eiffel and PHP. I’m not using them all but Level language has a little bit of inspiration from each one.

Pascal significance:

Learning Pascal was a blast! This language was the most revolutionary and comprehensive language I have ever learned. I was not speaking English before learning Pascal. Learning every other language was a pain, especially Lisp.

Pascal language was so comprehensive that I was able to learn English from it. In these days English was not so popular. We have learned Russian German and French in school. I know for a fact that many young Russians had the same experience. So I guess thanks Pascal for teaching us some English.

In my time the Pascal language was booming. Than comes Delphi and ruin everything. There is still a small community of programmers who work with Free Pascal but the language is history.

Python significance:

Python language has gain a lot of popularity lately. Python is dynamic language so is a little bit slow but the productivity is high. This is due to multi-paradigm approach. Also the fact that is an interpretor helps. The new Python strong points are relevant in computer industry. Swift, Go and Julia are new languages inspired from Python.

  • Type inference
  • Iterable collections
  • Collection literals: {}, [] amd ()
  • Mandatory indentation

JavaScript significance:

Lately the JavaScript becomes very popular because of Internet. JavaScript can now be executed on the server so developers with JavaScript background are called full stack developers. However the JavaScript is very cryptic and difficult to master. I think Java script is going to evolve into a more complex and comprehensive language but will no longer be JavaScript.

Computer languages are used by millions of programmers all over the world hours after hours day by day. That is a colossal effort and struggle with no precedent in history of men kind. We strive to create distant learning, artificial intelligence, knowledge databases and many other incredible things using very primitive computer languages and dialects.

Languages Design Issues

Here are some critics I have found on the Internet for numerous computer languages:

General issues

  • All languages have comments. It is difficult to establish a good convention for comments. Ada is using — , C is using //  and /*…*/, Shell is using # and ; other languages are using `.
  • Single line comments in Assembler use “;” Pascal and OCaml uses (* … *) for block comments. However the (*) is an operator in OCaml. Is also start of the a comment !? So is a trap !!
  • Computer languages are so many today that need to be classified in categories like:  GPL = General programming language , DSL= Domain specific language OR Compiled vs Interpreted OR curly bracket versus non curly bracket languages. Here comes also the markup languages that are actually not programming languages but data structure formats: XML, HTML, JSON
  • Curly bracket languages use the notation { … } to define code blocks. However in mathematics the {…} notation is used in the set theory, therefore this notation should be used for sets of data not for enclosing code blocks. Python and JavaScript use {} to define a SET or a data structure like JSON.
  • Concurrent functional programming languages like Erlang have introduced advanced concepts to make parallel computation effective. However pure functional languages have limitations in performance and are introducing concepts difficult to comprehend. Migration from imperative language to functional programming is very difficult.

Pascal issues

C and C++ issues

  • C language is not safe and is hard to read. Developers can do lots of mistakes that can even crash the operating system. Therefore C is not accepted in many companies as primary programming language. Also evolution of C is slow because of compatibility with older versions of the language.
  • Why C and C++ are Awful Programming Languages
  • In C you can use single = into a decision statement by mistake instead of ==. Many developers fall into this trap. Even if you want this to happen in your application, someone else can think is a mistake when read your program.
  • The C++ language uses angular brackets <….> for templates. Also uses >> symbols for streams. What if you put them together? <…>> . This is a syntax error is it?  This kind of syntax error can happen  wit a pointer used into expressions.  Consider *ptr a pointer content. What is this expression doing then?  x = 1**ptr.  Is a multiplication or a pointer dereferenced two times ?

Python issues

  • In Python and C developers use underscore to declare private variables: ___private___ notation. This is very ugly since _private_ is also used. How many underscores I have used here? I think is a bad practice to start or end any variable with underscore. I think underscore is not natural at all and is just tolerated in computer science.
  • Python has mandatory indentation at a number of spaces. This is nice, but I really miss the closing “end” statement for the blocks. Therefore we will introduce mandatory indentation but also will keep the end of a block statement.
  • Python do not have “;” at end of line. This seams like a nice advantage for an interpreted language. However this create some problems for a compiler. Also when we have a longer line there is need of a “continuation” operator.
  • Not declaring variable types is bad for readability and efficiency of the program. I like to know what kind of variable I deal with. So I preffer a strong type system to a dynamic one. Therefore a I like to have Python language with stronger types.

Java issues

  • After learning C here comes Java like a ninja warrior with kicks and moves. So I have started all over again. Then C++ then JavaScript then Python and others: Suddenly there is a computer language inflation in less then 30 years.
  • Java has object oriented style but also has native types. Therefore is a hybrid language and is not pure object oriented. Some pure object oriented languages exists and are better then Java in this regard. However Java may be more efficient due to this design.
  • In C and Java, “=” symbol is used for assignment. “==” is used for comparison. However “==” is not able to compare 2 Strings in Java! This is confusing and a trap for developers that come to java from other languages. For example if you have a=”one” b=”one” in Java a==b is true or false. This is because strings are objects and comparison will compare references to objects not the values.
  • In Java, symbol + can be used to concatenate strings. Therefore “1” + “2” = “12”. This does not looks natural. In VBScript two strings can be concatenated using &, but this symbol is used for address referencing in C. In PL/SQL the double pipe || is used to concatenate two strings. So for Level language we can chosen & to concatenate two strings. It seams nice and is used in other languages like ADA, VBScript and others.
  • In Java the || is used for OR the && for AND. Symbol & is for bit operations in Java. A total confusion if you come to java from other language like C.

Ada issues

  • Ada is a nice language, however not very popular and a little bit heavy on syntax. Maybe a little bit ahead of it’s time has many valuable features.
  • Ada uses two files for one program unit. Specification and the body. This can be an issue if you rename the package you need to rename the specification.
  • Ada end a section of block using end <section_name>. This is inconvenient if we rename the section.
Conclusion:Is your head about to start spinning? Due to so many issues I think is time for a new programming language to be easy to learn and have a robust and clear syntax to improve programmer productivity and to allow a programmer to create a variety of applications.

See also: Introduction to Level