C++ has not quite joined Perl, PHP, and Java as languages I will not work with anymore, but it's the next logical candidate.
C++ has not quite joined Perl, PHP, and Java as languages I will not work with anymore, but it's the next logical candidate.
For really tiny stuff Rust won't go there. If you program an 8051 clone, Rust isn't interested in your problem, ideas like "generic programming" and "pattern matching" don't make a whole lot of sense when only 128 bytes of RAM is accessible. But is C really the right tool for that environment either ?
Once you've got 64kB of RAM, that's definitely potential Rust territory.
Java by itself is an extremely simple language.
I really prefer environments where you could start with main() and figure out the behavior from there, and things like Spring make that impossible.
Really, if java only had lambdas and lisp-y macros from the beginning, we wouldn't have these problems.
This is one property of Go that I really like. Because of lack of constructors/destructors/magic functions and all that jazz, the only functions executed in a Go program are functions explicitly called through main().
And yes, lambdas and macros would probably have been a good replacement for that those two were originally meant to achieve.
But then I realized that such build steps re-introduce the same problems as runtime reflection does: You cannot understand the code statically.
So, yeah, maybe reflection and annotations are simply an overused hammer that makes everything look like nails... It feels like every library goes out of its way to use annotations for everything, completely defeating type-safety and static analysis. When it should actually be like, "is there really no way we can solve this without annotations and reflection".
But yeah, "fully automated build step" generally looks like "let's parse enough of the language so that we can implement our own custom reflection system" which leads to every project having an incompatible one and in practice much more pain (and macros) for the developers than if it was a standard one, e.g. Qt, Unreal Engine and so many others have their custom homegrown reflection scheme and there are a thousand libs on GitHub trying to reimplement it: https://github.com/topics/reflection?l=c%2B%2B
It's exactly like type systems being Turing complete : if yours isn't, someone somewhere will be making a language that compiles down to yours with one because of how useful of a property it can be in some cases. All of this is not accidental complexity, the alternative to not having them is much, much, much less productive in practice. My personal experience writing code with reflection is that at the cost of one complicated base library, the app code is literally 10x faster and simpler to write, and the huge majority of the time is spent in app code, not library one.
I've seen worse magic crap happening with Ruby and Python with their auto-magic method invocations.
I want to agree, but at least locally (as in geographically), these technologies seem to be heralded as fantastic. Maybe there's some kind of Spring Bubble around here, but on the main Maven site, Lombok shows up as the #16 most popular package (with primarily logging and language packages above it), and Spring isn't too far behind.
> Ruby and Python with their auto-magic method invocations
It's probably worth separating those two... as far as the functionality goes, Ruby and Python both have the capability of similar magic, but in my experience with popular frameworks, Ruby takes it to a whole other level while in Python it's generally discouraged.
I realize it's all anecdata here, but in my experience working with various companies and platforms, the Ruby magic generally just lives behind the scenes and Just Works. The Java magic would often turn into runtime exceptions, and the people who tried to do Ruby-like magic in Python would have similar difficulties. All of that revolved, primarily, around the ecosystems around the languages.
Now I use Go for most purposes, and C or CUDA when appropriate.
Good riddance.
It still has issues that are commonly associated with hosting provider configuration/control over the runtime, apparently.
(sources are anecdotal; two friends who've had the mental fortitude to stick with the language for so long)