New-Breed HLLs

The way forward is: assume that ALL current programming languages are assemblers, and create new-breed HLLs that emit such assemblers.  


Concurrency

Concurrency is a programming paradigm.


See Rob Pike's talk "Concurrency is not Paralellism" https://vimeo.com/49718712.


Parallelism is a specific problem.  Parallelism and Concurrency are often conflated together.


Every parallel program employs the concurrent paradigm.


Not every concurrent program is parallel.


Concurrency is a programming paradigm that is useful on its own, like Structured Programming, OO, FP, etc., etc., etc.


Isolation

I invent the word "isolation" to mean uber-encapsulation.


Isolation encapsulates everything that encapsulation does, but, also encapsulates control-flow, whereas encapsulation does not.


Isolation exists in operating systems such as UNIX, but does not appear in commonly-available programming languages.

DaS

I invent the word "DaS" to mean Diagrams as Syntax.


It is possible to parse diagrams in the same way that we now parse textual languages. 


The key ideas that I use are:

What Makes a Good Assembler?

 "Good" assembler languages are ones that are easy to emit.


"Good" assembler languages are not the same as "good" programming languages.


Good assembler languges are "loosey goosey".


Good assembler languages do not require declaration-before-use.


Good assembler languages do not have strong-typing[2].


Good assembler languages provide 1st class functions.


Good assembler languages provide anonymous functions.


Examples of good assembler languages are Lisp and JavaScript.

Riffing

New-breed HLLs will riff on the ideas of concurrency, isolation, DaS.


Projectional Editors

Projectional editors edit assembler language.


A good place to start creating a projectional editor is by using a "good" assembler language (see "What Makes a Good Assembler?").


SCLs

I invent the word "SCL" to mean Solution-Centric Language.


SCLs are a sub-class of DSLs[3], but are tuned to the details of a solution to one specific problem.  In other words, what Engineers do[4].




PEGs

I believe the PEG[5] technology is a break-through technology that makes SCLs possible and allows them to be used liberally.


Ohm-JS

I am exploring Ohm-JS[6].  I have written about it and will continue to write about it.


[1] and understood

[2] Strong-typing is provided by the HLL, not the assembler.  Strong-typing is for people, but assembler languages are for automation, not for people.

[3] Domain Specific Languages

[4] Engineers solve one "real" problem at a time, using the best available technologies.

[5] https://bford.info/pub/lang/peg/

[6] https://github.com/harc/ohm