Java 12
I don’t see why we don’t have a build system where you simply have to give a project folder with the name of source file with the main() function, give the name of the output executable, the external dependecies to be called with gcc, and that’s it.
But we do. Check out CMake.
Originally CMake was a higher level abstraction over make, and generated makefiles based from the high-level project description. Nowadays it supports other build automation tools, such as Ninja, Visual Studio, Xcode, etc.
I can also tell you without any shred of doubt, that there are many Amazon teams that absolutely hate Java
Irrelevant. What matters is what the company uses, not what some guy's personal taste.
Amazon standardizes on Java. There is no way around this fact.
Well, in Rust, it’s a sum-type
The discussion is on to use monads in C++, and not on why is C++ different than Rust.
I repeat: you do not need sum types to implement a Result monad in C++.
I can tell you without any shred of doubt that Amazon still standardizes on Java-based frameworks, including Spring, and has absolutely no plans to switch. Each Amazon team is able to pick its own tech stack, but the ones that do not use Java or a JDK-based stack are extremely rare, and more than not are working on specialized applications such as mobile development.
The only reason Java is remotely tolerable today is because of influences from those ‘fad’ languages.
This might be your personal opinion but it is not a very informed one, or in touch with reality. Java frameworks such as Spring still dominate the backend ecosystem and some FANGs still standardize their backend development around it.
Unless I’m misreading, you brought monads into it.
You're misreading it. What do you think a 'Result' type is?
compiler support
That remark was on sum types, not monads. You do not need "compiler support" to have Result or neither monads in C++. There are already plenty of libraries that implement those. I use them in some of my projects. No compiler support needed.
As I said, sum types are not required for Return or Either monads. At best, they are convenient.
So, you still have to go through all the dependencies, vulnerabilities and incompatibilities.
That's the point. There is no free lunch. Yet, you can live with stable, pinned versions and only upgrade the ones you really need to, and that means exercise your personal criteria instead of mindlessly upgrade everything just because there was a bump in a version number somewhere in an upstream dependency.
Yes, you can now kind of control the timing,
Timing, extent, scope, and impact. That's the point.
but it’s still unacceptable in my opinion, that you have to spend so much time just to not be an active danger to everyone.
You only spend the time you decide to spend. There are already vulnerability scanners that pinpoint exactly which versions need to be updated, and do that automatically for you. Mindlessly opening the floodgate to each and every change is by definition idiocy and a liability.
I'm not sure you understand that what a union does or does not do is completely irrelevant and besides the point. Python's protocols add support for structural subtyping, and enable both runtime and build-time type checks without requiring major code changes. Don't you understand what that means?
lysdexic
0 post score0 comment score
I'm no Kotlin expert, but I think Kotlin has a far more extensive core language and requires a heavier cognitive load to get up and running than Java.
It might have better developer experience and be less error-prone, but that comes at a price of admission that newbies have to pay.