3 ms·
Yes, that's why kernels are written in java. If you're writing complex code java is rarely the answer as it requires so much complexity itself. Hint: Most jav
by fleitz 13y ago
Yes, that's why kernels are written in java.
If you're writing complex code java is rarely the answer as it requires so much complexity itself.
Hint: Most java projects just appear to be complex because of the poor quality of the language (and developers).
Java is hands down the choice for simple projects written by way too many poor quality developers. The JVM can barely manage 12 GB of memory, Java is a piece of crap when it comes to anything that's actually complex.
- bradhe 13y agoThis comment is laughable at best. Ignorant might be a better word for it.
- fleitz 13y agoCare to elaborate? Here's the 12 GB of memory... http://www.datastax.com/docs/1.0/operations/tuning http://www.datastax.com/docs/1.0/operations/tuning As far as the language is concerned... What problem of high performance & complexity apps does Java 7 solve that C++11 doesn't?
- jfoutz 13y agoIt solves the problem of using mediocre developers to get code into production. Clunky, slow and overly complicated is infinitely better than a segfault.
- sillysaurus2 13y agoAutomatic memory management...? "Just use Boost" is not a viable strategy when it adds so much complexity in and of itself. I'm not defending Java, but it's helpful to know what the limits of each tool are.
- eropple 13y agoAutomatic memory management (especially with a garbage collector) is antithetical to high performance. I like the JVM (for Scala, mostly; Java-the-language can go screw), but there is nothing there really remotely close to C++ and C, and the garbage collector is a very large part of why.. Rust might horn in on C++'s bailiwick, but until then, it's gonna be a while. I strongly disagree that Boost really adds "so much complexity"--and, by the way, shared_ptr and friends are in C++11, and by extension within the standard library. So you don't even need this, unless your goal is to target extremely old platforms. But honestly, if you seriously need shared_ptr, your code design is probably just Not Very Good.
- sillysaurus2 13y agoAutomatic memory management (especially with a garbage collector) is antithetical to high performance. The LMAX Disruptor pattern would like to have a word with you. http://lmax-exchange.github.io/disruptor/ http://lmax-exchange.github.io/disruptor/ http://martinfowler.com/articles/lmax.html http://martinfowler.com/articles/lmax.html http://stackoverflow.com/questions/6559308/how-does-lmaxs-disruptor-pattern-work http://stackoverflow.com/questions/6559308/how-does-lmaxs-di... I'm not just namechecking the Disruptor pattern. I have extensive experience with it. It's about 10% slower than what could be achieved with C -- which is to say, the benefits of not having to program in C far outweigh the 10% loss of performance. And its performance is almost always far higher than what's needed, i.e. the bottlenecks are elsewhere. I strongly disagree that Boost really adds "so much complexity" We'll have to agree to disagree, I think. Importing Boost is often a sign that something is awry with the design goals of the project. Either the choice of language is wrong, or the project is too ambitious. Though there are some aspects of Boost that are pretty good, such as its unit testing framework. if you seriously need shared_ptr, your code design is probably just Not Very Good. This I fully agree with.
- haberman 13y ago> It's about 10% slower than what could be achieved with C What does that even mean? Are you saying that you have a proof of the theoretically fastest C program that would implement the same functionality and it's 10% slower than that? Does the C you're comparing it against use the Disruptor pattern too? Or is this just a comparison against a naive, single-threaded C program? How does that number vary with the overall heap size of the program? Numbers like this get thrown around that strike me as incredibly dubious.
- pjmlp 13y agoGood luck doing manual memory management in whatever language (C, Pascal, C++, ...) with distributed teams, using developers of disparate skill levels. Hunting for memory leaks and pointers gone berserk will become someone's full time job. I like C++, but don't miss using it in enterprise projects.
- 13y ago
- artsrc 13y agoC++ is a tool for language experts. If you can effectively apply that expertise it is extremely expressive and efficient. Java does have some unfortunate complexity, but I don't think it is in the same league. Java also includes a library that is more extensive in some areas than the vanilla standard C++ one. The JVM is also more robust to some types of programmer errors than any run time for C++ that I know of.
- fleitz 13y agoI'm not talking about how many features the language has, I'm talking about the endless amount of line noise that you need to accomplish simple tasks. Most of what the code does is hidden behind ceremony. Imagine Newtown writing out instructions on how to calculate gravity instead of just writing: F = G((m1 m2)/(r^2)) I really don't understand how a language that can't succinctly express calculus from 300 years ago would be regarded as suitable for complex code.
- bdamm 13y agoLanguages like Matlab are best suited for expressing calculus. Why are you choosing a poor tool for the job? Most Java programmers don't care about expressing calculus. They care about expressing interactions between web services, sql, and applying rules as the data flows through their modules. Or between user interface elements and service requests. It's all about moving data around, working on that data when you've got it, and triggering actions.
- fleitz 13y agoThe problems of pushing bits from one server to another aren't that complicated and the pomp and circumstance of java gets in the way of actually accomplishing those things. As you point out when you have a reasonably complicated problem like applying functions java fails miserably and other languages are a much better choice.
- cgh 13y ago
- Theriac25 13y agoPortability, memory safety, speed of compilation, retaining the sanity of developers.
- pron 13y agoConcurrent data structures (hazard pointers don't perform as well as an implementation with a GC).
- millerm 13y agoI would venture to say, with no facts or figures mind you, that if you were to evaluate the number of lines of code dedicated to kernel programming to that of applications running applications on the Internet, that the resultant figure would be so small for kernel code that it would look like kernel development doesn't even exist. Saying that developers who use Java are poor quality is also an awful thing to say. Yes, there are many "poor" Java developers. But, it's only because there are so many Java developers in the first place. So, of course when you take even a small percentage of such a large number there will still be a large enough sample to look significant. It's the same for all other languages. Java has been my primary language for the last 14 years. During that time I have worked with countless individuals who I would regard as some of the smartest and most competent programmers (who develop using Java) I have known or heard of. These people make your banks, file sharing sites, massive online market places, electronic billing etc. work. So, go ahead and bash all the developers from Google, Sun, SpringSource, Apache Contributors, Oracle and the other 10,000+ companies out there, but empirical evidence has shown that the language and platform work. Your statement is just so "trollish"... seriously? Edit: capitalized Internet. Letting the run-on sentences and bad grammar fly.
- fleitz 13y agoWhat about java makes it better for high performance / complexity code? I never said there isn't a lot of java code, or that it doesn't work, my assertion is that java is not the hands down choice for high complexity / performance work. If you've got a bunch of mediocre programmers who can't be trusted to make + add things together then sure java is a great choice.
- bdamm 13y agoIt's a natural fit for enterprise programming where time to implement is usually key and logic is endlessly extended to accommodate whatever new business requirements emerge after the last round was deployed. And robustness is valued more highly than raw performance. Use Java - pay for twice the servers and get ten times the uptime? Done. That means that days or weeks spent hunting your latest memory corruption issue makes C a non-option for these applications. As for mediocre programmers - sure, and a large bunch of mediocre programmers scales, whereas a small team of star programmers doesn't. Someone has to tweak the UI. Someone has to implement all that tedious persistence logic. You need star programmers for that? No. I'm excited to see if Go intrudes on this field, but it's a big field and Go's just starting out.
- EdwardDiego 13y ago> Java is a piece of crap when it comes to anything that's actually complex. Define complex?
- neeleshs 13y agoOh please, Workday uses a JVM managing 160GB. Lucene/Solr are not simple projects, by any yardstick, for example. I do agree Java the language is somewhat cumbersome, but saying that its a piece of crap for anything thats complex is naive
- deleted 13y ago[deleted]
- pron 13y agoYou seriously don't know what you're talking about. Virtually all serious software that uses complex concurrent data structures is written in Java nowadays, because the JDK is pretty much the only runtime that supports state-of-the-art, envelope-pushing, concurrency. Here's my previous discussion with haberman on the subject: https://news.ycombinator.com/item?id=6505853 https://news.ycombinator.com/item?id=6505853
- codygman 13y agohttp://learnyousomeerlang.com/ http://learnyousomeerlang.com/
- pron 13y agoErlang is awesome, but only offers high-level concurrency constructs (actually, just a couple), it does not support low level ones (CAS). You can't write, say, a good concurrent hash-map in Erlang. Or in Haskell, for that matter.
- codygman 13y agoUnless I'm mistaken, this library provides CAS for haskell: http://hackage.haskell.org/package/bits-atomic http://hackage.haskell.org/package/bits-atomic Though if you were only affirming that it isn't a language construct you are correct.
- Zigurd 13y agoI'd like to see any language withstand the combination of big project, lots of managers, mixed levels of experience and expertise on the team, and over-reliance on structure and methodology versus having the right people. It just happens that Java gets picked for those kinds of projects.