I wish there was a language that was actually multiple levels of compatible languages.
At one end would be dynamic and scripted and would progress to the other side of compiled and static. You would start out at one end for speed of development and progressively optimize and compile.
I suppose python and cython are that language. But it's not as popular as it should be.
> I wish there was a language that was actually multiple levels of compatible languages.
I first read about multi-level programming back in the 80ies and was hooked.
Objective-C has bit of this, because the C part is static and pretty low level, but the object-oriented part is dynamic and can go quite high level [1][2].
My own project, Objective-Smalltalk[3] definitely has "multi-levelness" as one of its primary goals. The way to get there is to make the elements of the language malleable, similar to Open Implementation[4], but using a software-architectural frameworks instead of an object-oriented one.
I wish for this as well. When I was younger, I often used asm blocks in my C code to implement things like blitters. You could even use a variable name as a source/destination in instructions and the compiler did the right thing!
So today we should be able to write 90% of an app in a rapid application development (RAD) language like HyperTalk, MATLAB or Python (or my favorite, the language that doesn't exist that combines all of these) and micro-optimize in places that need it using C/Java/Go/Rust etc. The compiler should automatically generate all glue code for variables and function calls.
My sense of this is that functional programming is gaining popularity because most people are working a few levels too low to be productive. Short imperative code should be able to act as a black box with no access to global variables or sockets and be exercised with known inputs/outputs and be represented in a functional manner. I wish we could deal with logic as truth tables and state transitions rather than the code (declarative rather than imperative).
I mean, you have a REPL with very high level language constructs in which you can do exploratory work, then when you are happy, take the artifacts of your experiments and compile them down into a binary. I got into OCaml in the first place because I wanted a type-safe, natively executing Python...
Groovy's still just a dynamically-typed language primarily used for scripting. It has statically typed extensions but they're not used very much. Groovy's used for scripty stuff like the 20-liners you find in a Gradle build script, but you don't find Groovy in Gradle's own codebase, only Java. Despite the heavy promotion since Groovy 2.0, developers aren't using statically-typed Groovy, but dynamically-typed Groovy is doing fine in Grails, Gradle build scripts, Java class manipulation, etc, everything except building systems. I wouldn't even be surprized if the newer additions to Groovy's own codebase like the Android stuff are written in Java rather than Groovy, despite statically-typed Groovy and Groovy for Android having the same author. That would be the ultimate vote of no confidence in Groovy's statically-typed extensions.
I am waiting for someone to say, but node.js! Then some of us old-timers can jump in with just how long Tcl's been doing this asynchronous callback thing...
I think tcl/tk is still the best quick gui writing setup I have seen. Unfortunately at some point the language dev team took a wrong turn and tried to force non-backward-compatible changes which, in combination with other factors, killed the community. Too bad! No other language has stepped up with such an easy-to-use toolkit.
At one end would be dynamic and scripted and would progress to the other side of compiled and static. You would start out at one end for speed of development and progressively optimize and compile.
I suppose python and cython are that language. But it's not as popular as it should be.