This is an automated archive made by the Lemmit Bot.
The original was posted on /r/programminglanguages by /u/kraileth on 2024-04-01 09:49:57.
Now and then new posts are created in this sub where people are asking for more original ideas to implement in their PL project. I’d like to see a little discussion / collecting ideas for an important scenario: Our future.
I’d argue that in early CS a lot of the developments in language design were influenced by a key factor that seems to have been largely forgotten about - extreme resource constrains. These days are gone, but we live in an age where we will likely be forced to accept that resources that we got accustomed to treat as basically unlimited are not in fact endless. Doomsday prophecies about the world ending next Thursday as well as hard-core denial of any environmental problems aside, we can anticipate new laws being passed in the not too distant future that will massively impact the IT sector.
How could language design help to get to a more sustainable future? What emerging problems do you see that should be discussed? And what can you imagine programming with new languages could be like in 2050?
Here’s just a couple of points that come to mind when I think of this:
- Solving problems at the right place. A lot of people love Rust and the idea of memory safety and it’s not hard to see why. We could however have computers which solve a lot of the common issues using Capability Hardware (Arm’s Morello for example is a thing - the hardware actually exists and people have e. g. ported software as complex as KDE5 for demonstration purposes). What would a modern language look like that does not have to take all the problems relating to pointers into account?
- Good caching. Thanks to CI and such we’re building software over and over again. Programs like
ccache
help a lot with that but it seems like most languages don’t have such tooling available. What can be done when designing a language to make such a feature more feasible? - Resource monitoring. Let’s assume a rather extreme case where law would require a company selling a new device to support it for 15 years. What could language design do to help write programs that can be maintained for a very long time and to ensure that hardware requirements do not increase to a level where the old device cannot run the software anymore?
- Dependency management. Quite some languages today come with packages, crates, etc. This is obviously a controversial topic. Using such means give more fine-grained control but can also cause harm when people are pinning old “known working” versions and sticking to those. What could be done to create a language well suited to create libraries which can be relied on without just freezing the dependencies?
We’re still / only a quarter century away from that point. Far enough away that a lot can happen in the meantime but not so far away that we cannot make any remotely sensible predictions at all. Looking forward to read what people think about this and what other topics come up in that context.