💾 Archived View for yujiri.xyz › software › compile.gmi captured on 2024-08-18 at 17:22:06. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2023-09-08)
-=-=-=-=-=-=-
I think that almost all software should be written in a compiled language. The main realization that led to me deciding this is that interpretation is dynamic linking.
There are a few articles against dynamic linking that have helped me form my opinion against it:
In summary, the benefits of dynamic linking are way over-hyped and don't actually justify the massive complexity of having libraries installed separately, locating them at runtime, worrying about library vesions and conflicts...
And interpretation is just pretty much the same thing, but at the API level instead of the ABI level. When you install a program in an interpreted language it dumps dependencies into shared locations on your system. Ever tried running your system's command to list all the packages you have installed? There's a bunch you have no idea about, right? On an old Artix installation of mine, the only Python apps I had were electrum and youtube-dl and pacman showed 39 python packages installed.
Interpretation offers some conveniences, like not having to distribute different application builds for different targets, the possibility of interactive use, and no risk of forgetting to rebuild after a change and testing the old binary and wondering why your changes didn't take effect.
But the benefit of being able to ship a program as *just* the program and not a bundle of all dependencies is a huge deal to me. Dependencies are an implementation detail and ought to be encapsulated within the program, not leak out into the rest of the system.
There's also the fact that compilation has a fundamental advantage in resource use, and that's also important to me. I don't believe our software should be getting more resource-hungry at the same pace as hardware is getting more powerful. It's inspiring to look back at old software: I installed Windows 98 in qemu on a 1GB disk and it gave me a dialog that was like "Hey, you have a disk bigger than 512MB! How unusual! Want to enable some special large disk support?". 😆. Now my /bin is 1.4GB. How the shit did this happen?
What I'd like to see instead is that resource requirements remain constant, and instead of resource availability increasing, the *cost* of computers decreases.