Numerical Computing in Java? 196
Nightshade queries: "I work for a department in a big financial company that uses equal amounts of C++ and Java. For a variety of reasons, we've decided that Java is the future of the group because of all the benefits of the language (it's so easy to use compared to C++, we can use Eclipse, Ant, jUnit, etc). The problem is that we do a lot of numerical computing and Java has no operator overloading! Languages like C# have operator overloading and because of this company's like CenterSpace have popped up with some nice looking numerical libraries. Try to find numerical packages for Java and it'll be pretty tough. What have people done in terms of numerical computing in Java? We currently use the Jama and Colt libraries for matrices and complex numbers, but these have awkward interfaces without operator overloading and are incomplete (no support for things like symmetric matrices) so we're looking for better solutions. So should we bite the bullet and switch to C#? Should we use a pre-processor like JFront? What have other people done?"
No Operator Overloading is a BAD THING (Score:5, Insightful)
All it does is make us have to type more and take a few hundred milliseconds more time to look at a line of code like
CrazyObjectNumber a = new CrazyObjectNumber(...);
CrazyObjectNumber b = new CrazyObjectNumber(...);
CrazyObjectNumber c = (a * b) + 53;
Which line 3 ends up being:
CrazyObjectNumber c = ((a = a.multiply(b)).add(53)).clone();
Which one is easier to read?
Re:No Operator Overloading is a BAD THING (Score:2)
CrazyObjectNumber a = new CrazyObjectNumber(...);
CrazyObjectNumber b = new CrazyObjectNumber(...);
CrazyObjectNumber c = (a * b) + 53;
Which line 3 ends up being:
CrazyObjectNumber c = ((a = a.multiply(b)).add(53)).clone();
Which one is easier to read?
This one is
CrazyObjectNumber c = ((a = a.multiply(b)).add(53)).clone();
Re:No Operator Overloading is a BAD THING (Score:2)
Re:No Operator Overloading is a BAD THING (Score:5, Funny)
And that is why I never, ever comment my code.
Re:No Operator Overloading is a BAD THING (Score:3, Insightful)
And that is why I never, ever comment my code.
That was moderated as funny, but in reality it is an excellent idea. People still have to understand what your code does, so if you write you code in such a way that it is perfectly clear what you are doing, and with variable, class and method names that clearly indicate thier function, there is abso
Re:No Operator Overloading is a BAD THING (Score:3, Insightful)
Sure it may not be easy to figure out which is broken but that's better than figuring whether the 10 lines of Java are correct or not (and which 10 lines to focus on) (if they're wrong you don't have a quick "checksum").
Re:That's a bad idea. (Score:2)
Re:That's a bad idea. (Score:2)
I'll back it up for him...
Putting code in comments is a bad idea, because comments can't be verified. A misleading comment does more harm than good: it takes extra time for a developer unfamiliar with the code to work out what it does, and to realise that the comment is incorrect. This is the most important reason to write "self-documenting" code, i.e., code that describes its own behaviour without the need to duplicate that work in a comment (as the great-great-...-grandparent post so hideously suggested
Re:That's a bad idea. (Score:2)
He said that was a bad idea, and talked about saying the same thing twice.
So I was curious to see whether he couldn't read/think properly or if he actually had something interesting to say. Or both.
Re:That's a bad idea. (Score:2)
The only problem with this is that if the code is "wrong" (ie works perfectly as code, but just does the wrong thing) then someone else is going to have a hard time telling that's the case.
That said I prefer not to comment and leave it to unit testing to verify my code isn't "wrong": in that sense the unit tests are a kind of verifiable comment.
Mod AC up (Score:2)
Unit tests might sometimes not work (or give useful results) when the program isn't working - e.g. badly broken. Whereas the comments could still be useful in those cases (maybe even more so
And if you are looking at the code, means you are going to be spending time with the code anyway, so the comments are a nice and handy reference.
I don't think you'd need comments everywhere - at least for most code - since most code is just run of the mill. Comments would be usefu
Re:Mod AC up (Score:2)
If the original developer didn't bother getting the unit tests right do you seriously think he'd get the comments right?
Re:No Operator Overloading is a BAD THING (Score:2)
CrazyObjectNumber c = a.clone();
c.multiply(b);
c.add(53);
or (using static methods)
CrazyObjectNumber i = CrazyObjectNumber.multiply(a,b)
CrazyObjectNumbe
Nobody forces you to put things on one line in Java. Inlining happens automatically when it makes sense. Code completion and refactoring will help you avoid most of the typing.
Re:No Operator Overloading is a BAD THING (Score:2)
CrazyObjectNumber c = a.clone();
c.multiply(b);
c.add(53);
For one, it would have to be:
CrazyObjectNumber c = a.clone();
c = c.multiply(b);
c = c.add(53);
Whether or not you break it up into multiple lines, its still a pain in the ass to type code so verbatim. c * b is just simpler than c.multiply(b).
Re:No Operator Overloading is a BAD THING (Score:2)
I read that just like I read which also doesn't need an assignment...
That said, I'm not really sure whether I like operator overloading... I understand the utility, but I've never felt compelled to use it...
Re:No Operator Overloading is a BAD THING (Score:2)
Re:No Operator Overloading is a BAD THING (Score:2)
In fact often it makes it harder at least for some people anyway - people who prefer to stare at one page and figure it out, rather jump from page to page.
No, operator overloading is a GOOD THING! (Score:3, Insightful)
Here are a few reasons not to do it.
Re:No, operator overloading is a GOOD THING! (Score:2)
Clear and consistent syntax is the whole reason + doesn't mean whatever you define it to be. To me a.add(b) is not any less clear than a + b, + a b or a b + which are all equivalent expressions.
Outside the domain of math heavy code, there is no good reason for operator overloading. Inside this domain you proba
Re:No, operator overloading is a GOOD THING! (Score:2)
In a simple case, no. But one approach scales much, much better than the other, as exemplified in several code samples posted in this discussion. There's also the generic algorithm issue that is usually over-looked in this debate, which I've mentioned in other posts.
Well, sin
Operator Overloading is evil, evil, evil (Score:5, Insightful)
But dude, have you ever programmed in C++? Used STL? Blech! Blech^2! I know there are people who love these things, but the readability is unforgivable. Only a Perl code could make it look good. Operator overloading brings out the worst in developers, encourages them to be waaaay to clever for anybody's good. In C++, the evil started with (what the hell were they thinking?!) and went downhill from there. Once you open the door to crap like that, the crap will come.
Years ago, I was at a forum with Josh Bloch and Gilad Bracha where a Java numerics guy berated them for not having overloading and asked them to add it. Bracha basically said "over my cold, dead body." I'm with him on that. The greater cause of readable Java trumps the minor benefits of overloading.
Okay, mom.... (Score:2)
I do program in C++, and I know that it's one of the most flexible, expressive, and efficient programming languages that you'll ever find. It is a lan
Re:Okay, mom.... (Score:2)
C++ is an abomination plain and simple. It's a Frankenstein's monster of a functional language (C) that's had OO constructs bolted and stitched onto it.
C gave you a pistol and allowed you to shoot yourself in the foot. C++ gave you a machine with the trigger and the safety catch switched around and came with an instruction manual that encouraged you to shoot yourself in the foot (a previous posters cout C still has a place: writing low level, fast and efficient stuff. C++ is just a willy-wavers' ("ooh lo
Re:Okay, mom.... (Score:2, Insightful)
http://www.google.com/search?hl=en&lr=&ie=UTF-8&o
Re:Okay, mom.... (Score:2)
cout << "Design error"; (Score:3, Insightful)
The problem with using << for C++ I/O streams isn't really the use of operator overloading, it's the fact that it puts into code what should be data: the order of the terms to be output. As anyone who's worked with internationalised code much can tell you, that's a "D'oh!" mistake.
As for readability, I write serious maths software using C++. We already use complex matrix multiplication expressions and the like, which are hard enough to read already when you're constrained to a textual representation
Re:cout << "Design error"; (Score:2)
Sure, and they all suck, as demonstrated by the fact that pretty much no serious UI code uses them. They are child's toys, and several decades after the invention of printf, you'd hope we knew better.
No, it doesn't, but then neither do the major problems with C++ I/O streams. That was ki
Re:Operator Overloading is evil, evil, evil (Score:2)
Compare this to some equivalent Java code:
Note: no bizarre operating overloading and only one line of code.
Re:No Operator Overloading is a BAD THING (Score:2)
Operator overloading is perfect for number classes, obviously. But how often do you write number classes?
The problem with operator overloading is not just confusion over the meaning of the operator, it also that operators have an additional attribute that needs to be remembered and accounted for: precedence. Say you've got a String class that has append() and replicate() meth
Re:No Operator Overloading is a BAD THING (Score:2)
Re:No Operator Overloading is a BAD THING (Score:2)
Re:No Operator Overloading is a BAD THING (Score:2)
Re: No, Operator Overloading is a BAD THING (Score:3, Informative)
My f**k'd up example was in Java not C++. The problems you bring up aren't present in Java. We are discussing Java, not C++. You do not seem to be knowledgable in Java, hence your statement, '...do braindead things like mutating objects in place...need to specify clone()'. Clone does not mutate any object. The need for it is to make a copy so that c won't be modified when someone modifies a.
I'm not going to get into another religious debate over something that has been
Re: No, Operator Overloading is a BAD THING (Score:2, Informative)
c.equals(a) == true
presuming that you have implemented equals correctly, of course
Re: Bad coders are a BAD THING (Score:2)
How hard is that?
Re:No Operator Overloading is a BAD THING (Score:2)
How do you know what any function call you make is going to do in detail in a project that size?
The answer is: you don't.
But then again, you shouldn't need to. You trust that the function is going to do the job its interface says it will, and anything that doesn't is a bug. Of course, the same is true of any other function you call you make
Use the right tools for the right job... (Score:5, Insightful)
Re:Use the right tools for the right job... (Score:2)
>replacements that much easier. you only need to look for a new
>hammerman rather then a full blown carpenter.
It makes sense until the office-full of hammerheads wastes days bashing at a problem that could be solved by a screwdriver in 15 minutes.
Re:Operator overloading is only half the story (Score:2)
MyVector[int] vec = new MyVector[int]
All calls like this
int value = vec.find(x)
are replaced with
int value = (int) vec.find(x)
C++ templates are much more versatile.
Re:Operator overloading is only half the story (Score:2)
"bloated" isn't spelled "versatile".
I hate overloading (Score:3, Insightful)
I also dislike "virtual" inheritance for the same reason.
I just don't think OO programming is the greatest thing since sliced bread. That's a very unpopular view.
Re:I hate overloading (Score:2)
If you mean inheriting vitual methods (plain methods in Java) thenyou have your views biased towards more static way of solving problems. Dynamic method dispatching it great to abstract and reduce code complexity.
Unless you come from the Fortran camp.
Re: virtual inheritance (Score:2)
Re: virtual inheritance (Score:2)
There are schools of thought that would argue any use of MI that doesn't involve common base classes is probably doing something wrong. In practice, either view is rather absolute, no?
There are useful idioms using mix-ins, and there are times when combining two separate hierarchies is justified. There aren't many of either -- hence the unpopularity of any sort of multiple inhe
Re:I hate overloading (Score:2)
But Gosling hates complex numbers. The view he expressed to me was, in effect, that they open the
door to quaternions, and (me genoito) cayley numbers. It's a slippery slope, dontcha know. I think he'd rather not allow floating point at all,
since it could lead to Dedekind cuts,
Re:I hate overloading (Score:2)
When you are debugging, your debugger steps into an operator just like it steps into a function. Guess why? Its the same.
Complex add(Complex& lhs, Complex& rhs) {
}
and
Complex operator+(Complex& rhs) {
}
Both are the same code. Your debugger steps you right int the "function/operator".
Unfortunatly, your post is neither insightfull nor does operator overloading have to do anything with OO, erm
In fact only Eiffel and C++ offer
Re:I hate overloading (Score:2)
Java Hurt (Score:3, Interesting)
Read "How JAVA's Floating-Point Hurts Everyone Everywhere".
http://www.cs.berkeley.edu/~wkahan/
For speed, Fortran is still best. Most enginering codes are in Fortran.
Re:Java Hurt (Score:4, Interesting)
That does not compute, logically - erm
Anyway, from the very paper you pointed to, C9x does complex math better than Fortran. Interesting - I wish there were some detail to it though.
These are not the languages you are looking for (Score:5, Insightful)
Go get Matlab (or Mathematica or Mathcad/Maple). Matlab has a powerful scripting language that does exactly what you need, and you can download thousands of functions written for it. Or just hire me and I'll write a translator from Matlab to your favorite language. Oh wait: translators already exist, so nevermind.
Also, why are you trying to confuse yourself (and future maintainers) with operator overloading in C++? It's just a Bad Idea (TM). Don't do it.
Re:These are not the languages you are looking for (Score:4, Interesting)
One step further along that road: consider using Python to glue together old pieces.
If Java was a step toward elegant simple expression away from C++, the Python is yet another wonderful step in that direction [mindview.net]. The URL is for Bruce Eckel's site: he of the Thinking in {C++,Java} book series fame.
You can glue together all those highly efficient numerical kernels written in FORTRAN, C or C++ with a nice object oriented scripting language. No need to go through more off-road stress testing of a new Java implementation of SomeOldAlgorithm with all the quirky corner cases that people have already hit using the crust old code in languages no one wants to learn anymore.
Re:These are not the languages you are looking for (Score:2)
You say that you work for a large financial company. You might check with the company's research group: they likely already use one of Maple/Mathematica/Matlab; so you could potentially be best off using what they use.
Re:These are not the languages you are looking for (Score:2)
Maple is the king when it comes to algebraic stuff though. I have sometimes worked out the problem in Maple and then calcul
Re:These are not the languages you are looking for (Score:2)
Matlab, schmatlab, I want to compute something! (Score:2)
From the standpoint of a language, Matlab is, gee, I don't know where to begin. It really has this cobbled-together lets-figure-out-how-to-graft-on-objects feel to it like Visual Basic only more so. The really simple is simple, and the somewhat complicated gets to be rats' nest real
Matlab may be slower than C++... (Score:2)
I've never seen a side-by-side comparison of Java to Matlab, but if forced to guess I'd definitely really Java to be faster. However, Java is definitely not designed for any kind of mathematical work, so coding and maintenance would end up being a pain. (Trust me, I've been there.)
If you want ease of coding for mathematics, do what this post's grandparent said, and get yourself a dedicated mathematic
Re:Matlab may be slower than C++... (Score:2)
In the end you end up prototyping and testing in Matlab and then redoing (using the Matlab system to compare results against) in another language.
The question is however if not Matlab is "fast enough", particularly if you spend some time optimising by compiling libraries and even some parts o
Re:Matlab may be slower than C++... (Score:2)
For math-intensive applications? Um... not to be a jerk or anything, but can you prove that?
My experience with Java math shows it to be 20-50% slower than the C++ equivalent. I'm willing to be proven wrong, though, if you can show me a benchmark in which Java comes out ahead.
(Of course you can make Java much faster by writing native code, or maybe by using deep Ja
Re:These are not the languages you are looking for (Score:3, Interesting)
That said Matlabs main strength is the near infinite libraries (generally all numerical mathematical and engineering research is done in Matlab, so basically anything you can ever want is available) and prototyping speed. The m-files are interpreted at runtime and you can also "code" in interactive mode much like with Python (but Matlab i
Jython (Score:5, Interesting)
I have not used either for a long time, but use plain Python [python.org] and Numerical Python a lot [pfdubois.com]; sure beats Matlab [mathworks.com] and Mathematica [wolfram.com] for most things. Right now for solving optimization problems with 10k+ s.t. constraints.
Re:Jython (Score:2, Insightful)
Other than that, I can't think of any reason why I'd use it, especially for numeric computation. Why be 2 versions behind in the language when you can have some very useful and elegant features like generator expressions now?
Do BOTH! (Score:2, Interesting)
The dev teams working with java are used to the quirks of the language, thus should be very familiar with how to use the library, even though it might not be the best it could be.
However, If you are looking to provide a tool for companies to use for development, I would recommend both. There is a need for
Re:Do BOTH! (Score:2)
Try Java on .NET... (Score:2)
Re:Try Java on .NET... (Score:2)
If you REALLY must use
Re:Try Java on .NET... (Score:2)
a) most Java apps have little direct contact with java bytecodes (i.e. only those apps that dynamically generate them for whatever reason)
b) the application environment is identical - you can use you usual java compiler to produce bytescodes and them translate them into MSIL codes. The usual Java library API is sti
Pathetic (Score:3)
That's pathetic.
That's like saying, I've got this *great* idea but I can't code it up because I'm using C and it has brackets and not "BEGIN
It's a different language - get used to it.
Re:Pathetic (Score:2)
#define END }
So there.
Re:Pathetic (Score:2)
Re:Pathetic (Score:2)
Well, let's just do everything in Lambda calculus then.. it has all the same functionality.
Syntactic sugar is the purpose of programming languages. It's to make writing algorithms as easy, natural, and efficient as possible. We're so engrained in these procedure based languages that we seem to have accepted the fact that add(a, b) is the natural way to do things.
It's not.
Re:Pathetic (Score:2)
the people who designed it to run on toasters? [sun.com]
Re:Pathetic (Score:2)
Hiding the complexity of operations behind "sugar" allows the programmer to recognise mathematical conventions of relationships and operators and thus more quickly understand the code or to write it.
It is possible to write it without the sugar (heck, you could write it in assembly) it just takes more effort to do so and far more difficult to verify correctness. On large, difficult
multiple options (Score:2, Informative)
This seems like low short-term risk because you reduce the number of technologies that have to work together, but you incur more long-term risk because of technology churn.
2. Combine libraries
A library implemented in Java/.NET can call a library implemented in
Another way is to develop bindings, like we used to do to call C++ libraries from Ada, and such.
3. 'On the wire' integration
This is similar to (2) exc
Interfaces (Score:5, Interesting)
There are two main considerations you have with respect to libraries of numerical routines:
(1) Having access to quick, accurate, and reliable numerical analytic routines such as singular value decompositions, FFTs, and optimizers.
(2) Having convenient and standard ways within your organization of defining vectors and matrices, as well as simple operations (e.g. dot products) on them.
To address the first problem, I think you have to look first to the quality of the numerical routines you plan to use. Paying attention to their native language or available interfaces is foolish. Would you really trust a 5-year-old SVD written in Java over something from LAPACK or NAG? I sure wouldn't, and I would never guarantee a model calibration based on it!
Thus, your numerical analytic routines will come in some hoary library, and you will have to interface to it as best you can. In many cases you could use JNI or, if that makes you nervous, have the Java portion communicate with the library wrapped in a separate process using sockets or something. But the point is, quality is more important than interface here.
The other issue is standardization of vector and matrix encapsulations etc. Here I am less opinionated, but my thoughts are roughly as follows: there are probably lots of vector/matrix implementations out there, some of which must be good. You might as well just choose one with an API and implementation you are impressed with...it's not as though you will be expecting it to do your numerical math. Sure you won't get operator overloading (if you're in Java) but having done financial mathematics in C, C++ and MatLab, I can say with a fair degree of certainty that you will use overloading far less often than you might think.
You now have a convenient standard for manipulating objects, and a quality library. Write the glue and you're done.
Oh, and for those people recommending MatLab/Octave/Mathematica etc., let me just say that most of us in finance know about them and many use them for prototyping. Python, and (ugh) VB too. But ultimately one is often asked to create a library that gets handed off to internal developers for use in one or more custom apps, which are then distributed to anywhere from 5 to a couple hundred users, and run on portfolios of thousands of securities. Even if, say, your MatLab routine didn't need licensing for each workstation and took just a couple milliseconds to run, you're still looking at perceptible delays before the user sees results.
Modern financial applications are one of those few remaining arenas in which computers are Not Yet Fast Enough.
Horses for courses (Score:4, Insightful)
Any competent group generally needs to be able to handle a mix of languages, from C/C++/Java, Perl/Python/Ruby/etc, and the myriad of narrow languages (SQL, templating, shell & batch, HTML, lua, etc., etc.).
Perhaps you should use C, C++ or FORTRAN for the numerical portions and native Java for the general purpose portions.
- Barrie
Re:Horses for courses (Score:2)
I find that statement a bit strong. In my experience, most people are fluent (i.e. practiced, experienced) with only one or maybe two programming languages. Getting to know a language and its assorted libraries can take quite some time, and the knowledge quickly gets old. Coding in both Java and C++ is probably already too much for most people.
My new hammer is so easy to use (Score:2)
but it won't drill holes, what do I have to do to my hammer to make it drill holes?
---
object-oriented design is the roman numerals of computing.
-- Rob Pike
other witicisms [dotgeek.org]
Use Fortran 95 (Score:2, Interesting)
Re:Use Fortran 95 (Score:2)
Try JNI (Score:3, Insightful)
This will allow you to make use of a lot of pre-existing C++ code, and to write code in C++ when it turns out to be better at a particular problem, while still using Java for the majority of your application.
I've used JNI extensively for graphics applications (which are heavy on math), where it's either much faster in C++ (yes yes, java is much faster than it used to be, but sometimes much faster still isn't quite fast enough), or just much easier to solve a given problem in C++, even though Java is the best choice for most of the application.
J.A.D.E (Score:2)
It seems to have some nice math and physics packages.
Use Nice! (Score:5, Interesting)
You can also use Eclipse, JUnit and Ant with Nice. Don't hesitate to ask for help on the nice-info mailing list.
MathML + library + code generator (Score:2)
You can use editors in most Word processing environments to write formulars in MathML. E.g google for "MathType".
We then use a generator to map MathML on java methods. If methods are mising we write them.
For a MathML equation like: quotient
As I said above, if such a function is missing a programmer writes it.
angel'o'spher
No religion wars, please (Score:2, Insightful)
The statement "since it is so easy to misuse" doesn't count: I'd like to know WHY it is so easy to misuses.
The statement "you'd better use other languages for mathematical calculus" doesn't apply either: I'm in a financial project and we use Java, and there are some pretty complicate expression even in economics.
The statement "I used it in C++ and it was a mess" is also not appropriate as an answer to my question: if Jav
Programming is a skill (Score:2)
While many of your points (for either side) have merit, I think it's important to remember that programming is a skill. It is not something just anyone can do, and doing it well requires a sufficient level of knowledge and ability. If you're working with people who Just Don't Get It(TM) so badly that they write misleading operator overloads, then you have far bigger problems than the presence of operator overloading in your language.
Languages can protect against careless errors: everyone knows you shouldn
Re:Programming is a skill (Score:2)
Indeed, a language cannot prevent this kind of confusion, since "You
Operater Overloading doesn't thrill me (Score:2)
Jakarta Commons Math & other stuff (Score:2, Informative)
Secondly, I'd probably consider isolating all the formulas and then put them aside somewhere (XML, database,
Then make a parser that can read that format (i.e. using the libraries you mentioned), substitute variables, and calculate a result. The advantages that I see:
1) you centralize all numerical stuff
2) in a readable format
3) so
not just operator overloading (Score:2, Insightful)
The C# language is considerably better for numerical computing than Java. However, C# implementations are still a bit behind Java implementations (although they seem to be catching up fast).
I would recom
Screw the language wars ... (Score:2, Interesting)
Jakarta's Commons Math library ( http://jakarta.apache.org/commons/math/ [apache.org]) has some interesting classes (including handling of complex numbers and lots of statistical stuff). I haven't used it in anger and hence do not know the extent of their support for the features you are looking for, but it is a good start. It is also designed to be a lot faster than Sun's math APIs.
And yes, they're all objects and there is no operator overloading. And I reflect sentime
Re:Can you elaborate? (Score:4, Insightful)
a = sqrt(abs((b + c) * (d / e)));
vs
a = Math.sqrt(Math.abs((b.add(c).multiply(d.divide(e)
for the small cases (such as this one) it doesn't make as much difference, but for complex equations it adds up quickly.
Re:Can you elaborate? (Score:2)
Even for simple case such as yours, I'd avoid trying to pack it all on one line. Misplaced parentheses are easy mistakes to make and extemely difficult to debug.
Re:Can you elaborate? (Score:2)
When all the operations are turned into function calls, it gets much harder to debug. That's partly because of all the extra parens, and also partly because your brain has to interpret mathematics and English words at the same time. (That kind of thing tends to be harder than working with one or the other.) If you then split the equation out onto multi
Re:Can you elaborate? (Score:2)
I have just the opposite opinion. Interpreting a line (or multiple lines) with method calls is no more or less difficult than interpreting lines with overloaded operators. I think the OP has the opposite opinion and I was trying to understand why they felt that way.
Re:Can you elaborate? (Score:2)
a = Math.sqrt(Math.abs((b + c)multiply((d/e)) ))
That is, a mix of "native" operators and adhoc methods. With overloading you would be able to forget about the type of the variable or the return value and let the VM figure it all out.
Static import in Java 1.5 (Score:2)
Re:java is the future (Score:2)
Re:java is the future (Score:2, Insightful)
From Java's perspective, the two are tied together.
You (currently) can't have Java without C, while you can have C, without Java.
It's safe to assume that until another language comes around that can do things as well as C/C++, that Java will continue to be written in C.
So to say that Java is the future, while condemning C/C++ to the past is short-sighted at best, and ignorant at worst.
Where would a
yup! (Score:2)
Sparc (Score:2)