In 2019, during my research into finding or making a dream language, I gave a presentation and prepared a slideshow at the local .NET User Group about the history and future of programming. The presentation covers the early history of programming paradigms and the evolution of C-like languages from Label/Goto jump statements to the Object-oriented paradigm. At the end of the presentation is a list of Youtube playlists that contain much more specific in-depth talks, including ones by Kevlin Henney about programming practices and habits and his critical analysis of the ineffectiveness of class hierarchies in OO languages. The act of creating name hierarchies is closer to an art than a science. Another incredible resource were videos by Brian Will about how OO encourages poor design choices. A significant portion of my playlists is dedicated to several presentations on Functional programming languages that each have widely-varying ways for diving into its core concepts and benefits.
I discussed a few exceptional languages that should have more popularity than they do. Of note, the Ada language, while extremely inefficient at expressing ideas, is very good at preventing software bugs and is faster to develop in than C and C++, as a result of its function contract system. Essentially, it uses a meta-language to describe what the function should do, in an abstract sense, then compares the actual code to its signature, and if the code violates its contract, it does not compile.
Among functional languages, Haskell is known as an exemplar of the power and cleanliness of functional languages, and it has been adopted for certain business use cases and some critical back-end server processes.
In my quest for finding a “dream” language, I came across REBOL. REBOL is a multi-paradigm language known as the world’s easiest programming language. It is exceptionally expressive and therefore is very intuitive to understand. It is not maintained, and the language is also not compiled, so it is not much of a contender for usable languages.
Racket is a project that implements a language-oriented paradigm, in which the programmer creates code in domain-specific languages (DSLs) and ties those together in another language, however the tooling remains the same, and the language can be switched between modules by simply declaring it in the first line of the file using #lang [name]
. Unlike REBOL, Racket is maintained, but there is a caveat to using it on macOS. For it to run (as of 2019-03-18 [Y/M/D]), you will have to drag-and-drop the executable file outside of the installation folder and back into it, to force the macOS system to trust the executable. Racket is based on Scheme, which is a Lisp dialect. Most LISP derivatives have died out, are poorly maintained, or have many forks, making it difficult to choose one, but Racket is the most mature iteration and has potential as a long-term solution to programming. Like most Lisps, it uses the parentheses to denote scope in its default language. The nice thing about it is that using its domain-specific language creation mode, you can imitate any other language and write code in that language using Racket’s tool chain (compiler and editor), providing similar benefits to the virtual machines found in Java and .NET.
Within the Windows ecosystem, the F# language offers the benefits of functional programming with the existing libraries of the .NET framework, as well as the underlying .NET virtual machine, allowing your program to run on Windows, Linux, and macOS without needing to make specific code branches for those specific operating systems.
Dream language
A dream language would include characteristics of Haskell, REBOL, and Racket. In particular, I find the most desirable features to be these:
- The dialecting system in Racket that allows you to define domain-specific languages.
- The cleanliness of the Haskell language (Current Haskell language extensions should not be used).
- The syntax cleanliness in REBOL for non-functional paradigms. Its syntax is a great example of what programming can be.