This is interesting because it was another integer error. I recall a very similar error in one of Google's services, which validated some JVM code or something like that, and which successfully tricked one of the mechanisms into accepting code it shouldn't; this is important because it was the entire basis of the underlying security mechanism. Ada lacks these issues because it forces the programmer to think about these problems, unless he specifically chooses modular arithmetic, and Lisp lacks these problems and more because it supports integers of arbitrary lengths.
I never want to use a C language library for anything, and I always choose to implement libraries I need in the language I'm writing, properly. Most often, I see the logical dependency as a giant mess, and this leads me to do nothing at all. I always win.
Apparently, compiling also extracts documentation out of the code for the inline help system. That's the kind of tight integration I was recalling. Building the system brings all kinds of additional metadata in that you just don't see on other platforms, especially proprietary ones.
This is something Lisp systems have been doing for decades. This reminds me of how unimpressed I was reading about some of the things Google's system does, such as collecting where each function is used. The Emacs command for this is
M-.
although it's broken on my system for some reason and I never cared to get it working.
Having said that, if you do try out Pharo, be sure to make use of the wonderful method finder
The finder appears to be implemented as an exhaustive search, interestingly. This reminds me of someone who tried to use the
--help
and perhaps also the
--version
flag on every program in his UNIX system, which somehow completely destroyed the installation. It's fair to say a Smalltalk system would actually work, however.
It may excite you to develop that XML parser but someone will be cursing your name one day because you didn't harden yourself against the
billion laughs attack or something like that.
Yes, that is one problem with partial solutions. There's a class of programmer, or really smart person in general, whom I call the
intelligent idiot. An intelligent idiot can always optimize something, but he can never remove it. I've seen SIMD used to parse JSON. The Linux kernel has a hyper optimized strlen implementation. Both of these absurdly optimized pieces of code always lose to a system that simply drops the asinine requirements instead. It's far too common for people to treat requirements as immovable and unchangeable, which often leads both sides to grotesque contortions; by simply changing the interface, millions of lines of code and years of wasted time can be eliminated for almost no cost.
What resources (books, tutorials, videos, etc) would you recommend for that sort of thing?
Learn Lisp. A
design pattern in Lisp is called a macro, and only written once, not repeatedly.