5 ms·
Don't forget the tools and infrastructure that support good engineering (dependency management, build, javadoc, findbugs, checkstyle, PMD, cobertura for code-co
by edwinnathaniel 13y ago
Don't forget the tools and infrastructure that support good engineering (dependency management, build, javadoc, findbugs, checkstyle, PMD, cobertura for code-coverage, better unit-testing frameworks, the list goes on).
I'm sure C++ ecosystem has some of those but whether people are using them or not seem quite obvious: how many C++ projects do that out there? Not as many as the Java counterpart.
- pron 13y agoActually, my favorite bits are runtime linking, JMX, VisualVM and, most recently, FlightRecorder + Java Mission Control, which has to be one of the coolest profilers I've seen. But I was just talking about performance.
- edwinnathaniel 13y agoDon't forget the javaagent and the ability to instrument JVM. Event .NET/CLR doesn't have that (They have some low-level COM/Profiler API but boy that takes a lot of effort to work with).
- pron 13y agoHow could I forget? I personally use runtime instrumentation all the time: https://github.com/puniverse/quasar https://github.com/puniverse/quasar
- edwinnathaniel 13y agoSorry I don't mean to hijack thread or anything like that but I work for AppNeta and we're on the APM field instrumenting various platforms. If you ever need an instrumentation tools for your full-stack infrastructure, check us out :).
- jkrems 13y agoAlmost agree, but minor nitpick: the tools and infrastructure (at least most of them) exist on other platforms in the same or better quality as well. Especially dependency management is not necessarily a strong side of Java (one global namespace for types etc.).
- pron 13y ago> one global namespace for types I am not entirely sure what you mean by that, but in Java, a runtime type is determined as a combination of its name and its class-loader. You can (and do) have two versions of the same class running alongside one another in different modules of your code. Granted, supporting this stuff is not easy, but hopefully the long awaited module system planned (currently...) for Java 9 is supposed to make this all both powerful and easy.
- cgh 13y agoWell, the OSGi module system supports this now and is quite powerful. Oh wait, you also said easy.
- camus2 13y ago> how many C++ projects do that out there? Not as many as the Java counterpart. I'm not sure this is a good argument. Projects where performance is critical are coded in C/C++ , not in java ( browsers , AAA games , databases , servers , micro-controllers , oses... ). C/C++ programming is not about writing 'elegant' code with FactoryFactories , but performances. Even if it means using very basic data structures instead of classes or inlining functions everywhere.
- edwinnathaniel 13y agoI'm referring to the tools that ensure the code quality, not the performance critical aspect of it. Besides, all of the projects I've worked for has no FactoryFactories so let's cut that song right here right now.
- pron 13y ago> Projects where performance is critical are coded in C/C++ , not in java ( browsers , AAA games , databases , servers , micro-controllers , oses... ). This is not true. C++ beats Java performance in constrained environments. On servers the situation is not so clear-cut. You see some really fast Java databases. And BTW, Java is better at inlining functions than C++, but C++ handily beats Java when it comes to controlling memory layout (though that, too, is changing).
- camus2 13y ago> This is not true. C++ beats Java performance in constrained environments Every environment is constrained. Devs just got lazy and scaling now means buying more machines instead of performance optimisation. > You see some really fast Java database That eat up way to much memory for little. When you see popular java based os , tell me.
- crypto5 13y ago> Projects where performance is critical are coded in C/C++ , not in java (databases) HBase, Cassandra, VoltDB
- 13y ago