2025-11-19 -- Maybe more Java? ============================== For quite a while now, my "toolchest" has looked like this: - C or Assembler for very low-level tasks. - C with GTK for GUI programs. - Python for "normal" programs or larger scripts. - Shell scripts for glueing other tools together. Rust is very, very slowly creeping in as well, I sometimes use it for "systems programming" or other "low-level-ish" tasks. But I'll be hon- est, Rust is so hard to learn, I always shy away from it and don't use it often enough. Regarding GTK: I loved it during the GTK2 days but now I have to admit that I'm not that much of a fan anymore. It has become a pretty heavy toolkit by now. I've pretty much stopped using it in my own code and this now leaves a gap. I've dabbled a bit with PyQt6. And I've noticed that I'm slowly getting tired of Python's dynamic typing. I find it more comfortable to have a compiler that reliably tells me when types are wrong (or when there are typos), because frankly, I don't think I've ever really made use of dy- namic typing *at runtime* (except for parsing JSON files into dictionar- ies, I guess). My brain doesn't work that way. I want static typing. I want to get all kinds of stuff out of the way before the program even runs. That's just not the case with Python, you always have to test each and every code path just to catch typos (or more serious errors). Some people might say that this is good practice anyway, but I'm not con- vinced -- how many projects really do have 100% test coverage? (I didn't find tools like mypy or Python's type hints to be helpful.) Long story short, I used IBM Java 1.0.1 on OS/2 Warp 4 for Advent of Code in 2024 and that was a surprisingly nice experience. That's an an- cient version, of course. I wasn't new to Java, but I stopped using it while Java 6 was still the most recent version. Java is bad in these regards: - Does not produce native binaries. You always need a JVM. - Memory management is annoying. Having to decide up-front how much RAM my program is going to use is a bit silly. - The code can get rather "wide" because many class names are very long. But on the other hand, these properties are great: - Compiled language, static typing. - Memory safety is not an issue. - Produces small "binaries". - The offical documentation is really good and a pleasure to work with. - It can do proper multithreading (unlike Python). I've already used multithreading extensively during my Java 6 days and it was nice to work with. - OpenJDK is Free Software now. - It appears to be very stable with few surprises and shenanigans, old stuff still works, probably because it's used so much (?) in enter- prise software. And JVM ramp-up times are not an issue anymore. This used to be annoy- ing, but that's a thing of the past. A "java Hello" takes 33 ms on my box. I'm currently toying around with making a little file manager in Java that uses Swing for a GUI. Swing is *not that bad*. I'll also try to catch up with new features that landed in Java. And then we'll see. Maybe I'll get fed up quickly. Maybe not.