The biggest difference in my language (which as of yet does not have a name) is that it is immutable, and function results are lazy. This means that it can be highly parallel, and the laziness means that there is much less synchronisation needed when parallelising computations.
I'm also making some of the syntax more traditional, in order to make large programs more manageable.
It's implemented as a Kotlin multiplatform project, which means that I can build the interpreter for the JVM, native and Javascript.
Why am I talking about this? Well, it's because my biggest issue with APL is that it's not really suited for large programs (where large means on the order of 100 lines of code or more). Dyalog provides some extensions that make imperative programming easier, but the syntax is really ugly.
Thus, I'm trying to merge the idea of concise APL syntax together with typical functional programming. So you'll be able to write code like this:
if (foo = bar) {
a←⍉b
} else {
print "debug message"
a←x∘.+y
}
Even though the core syntax is still APL, the structure of the program is much easier to understand, compared to the way you'd write it in APL.I still don't know if experiment will actually lead to something good, but at least it's a fun project where I can play with Kotlin multiplatform support.
The code is on my Github, but I'm not linking it here since it's quite early, and it's not really usable yet (there are a lot of functions missing). I'm expecting anyone who actually looks it up anyway to understand that it's not ready yet.