This is like listening to someone with leprosy who thinks it's awesome and is trying to convince other people that they should have leprosy too.Rusky wrote:Macros can also be used for embedded domain-specific languages (typically called EDSLs), which can make your program significantly clearer by essentially creating a new scripting-ish language within the main one for a particular library. They can also be used to add new "language" constructs that would be overly verbose, repetitive, or executed at runtime without them. As long as you don't go overboard with them and make something unreadable for an outsider (this is helped in Rust by making it very clear where a macro!() is used, and by the culture of how often to use them defined by the standard library).
Generics and traits do have their place when used judiciously, as do well-designed conditional compilation and closures/lambdas. I notice you're not complaining about owned/borrowed or standard library tasks/vectors or recursive types...
All this high level wizardry (that's meant to make programming easier) just over-complicates everything and makes everything harder. Each year academic morons shovel more layers worthless trash on top, and each year the idea of an average person being able to write good useful code becomes more insane because of it.
It's not a cure, it's a disease.
To put this in context; I started programming when I was 12. I'd never used a computer before; and learnt Commodore 64 BASIC in about 2 weeks (in my spare time) because it seemed like fun. A few months later I was playing my own platform game.
For the "about 30 years" since then I've watched the entire industry bury itself under its own faeces. To do the same simple platform game you're going to need 2 or more languages, half a dozen libraries, a computer with 100 times as much RAM and CPU power; and a few years of university and 6 months or more experience after that.
Cheers,
Brendan