I believe we are coming to a time where we will stop seeing languages as monoliths and we will name language subsets as first class citizens of our namespace.
I personally program often in a strict subset of JavaScript. Liberals, function declarations, and function calls only. Of course I can’t do everything in this space. But many projects are just fine. Most code, at least code that’s pretty close to human-relevant vocabulary) is just names and calls when it’s truly properly refactoreded.
Unfortunately this becomes untenable when I try to use third party packages. Almost all packages expose APIs in the most advanced sections of language syntax... promises, big rich configuration trees, weird chainable DSLs, objects, etc.
So to work with a language subset you need to be able to carve out a namespace within your package management ecosystem. Essentially a fork of the namespace, with people able to “take over” the package and port it to the subset.
In your case this would mean a subset of Scala with strict controls on composeability with the existing primitives.
And you’d port at least high level scala packages to that API space.
I personally program often in a strict subset of JavaScript. Liberals, function declarations, and function calls only. Of course I can’t do everything in this space. But many projects are just fine. Most code, at least code that’s pretty close to human-relevant vocabulary) is just names and calls when it’s truly properly refactoreded.
Unfortunately this becomes untenable when I try to use third party packages. Almost all packages expose APIs in the most advanced sections of language syntax... promises, big rich configuration trees, weird chainable DSLs, objects, etc.
So to work with a language subset you need to be able to carve out a namespace within your package management ecosystem. Essentially a fork of the namespace, with people able to “take over” the package and port it to the subset.
In your case this would mean a subset of Scala with strict controls on composeability with the existing primitives.
And you’d port at least high level scala packages to that API space.