Fortress: The Successor to Fortran?
An anonymous reader writes "A draft specification of the Fortress language was recently released. Developed by Sun Microsystems as part of a DARPA-funded supercomputing initiative, Fortress is intended to be a successor to Fortran. Guy Steele, a co-author of Java and member of the Fortress development team, hopes that Fortress will to 'do for Fortran what Java did for C.' Steele admits that Java isn't probably the best choice for numerical computing, and that 'it's a mistake to try to make a programming language that is all things to all people... because the needs are so diverse.' Fortress has a number of interesting features, including support for Unicode characters in code, enabling code to look more like formal mathematical expressions. More information about Fortress is given in interview with Steele, and in a talk by Steele. There's also some interesting commentary on Fortress, including some commentary by a member of the Fortress development team, in response to two stories at the programming languages weblog Lambda the Ultimate."
I thought Mathematica was the successor to Fortran. Why don't they just improve the Mathematica calc engine for parallel/distributed supercomputing?
--
make install -not war
Is Sun evil? I don't really think so. I think they're just misguided, and I really hope Fortress doesn't become prevalent in an area that I have to work in. I don't see this turning out well. Lots of good ideas making a good thing worse.
From skimming the language spec I saw a couple cool features. One is support for multiple return values, which I love. I also liked the fobid clause, which throws an unchecked exception on certain conditions. Forbid, along with several other run-time checks in the language spec. will give fortress developers an easier time debugging code. The downside to this language however is that it tries to imitate java. Constantly the language spec compares fortress to java. I don't think Java is a bad language, however we only need one language. It would have been better if Fortress had tried to be different than Java, and explore problem domains that Java is weak in solving.
Philosophy.
Fortran's longevity has come because it compiles fast programs & there have already been a ton of subroutine libraries to draw from, that have been built up over time by many coders. It is also an open standard with MANY compilers for most platforms. Will Sun work on all of this? They didn't think it was important enough to do with Java.
I think it will be hard for a single company to generate a successor & sincerely hope Sun will realize that for languages with no VM, early success will depend on openness. I also think a lot of what peopl want to do is already being done with python + modules compiled from C or Fortran.
Well, it seems to me that 90% of scientific computation today is done with Matlab and similar languages/environments (well, mostly Matlab).
Based upon my experiences, within universities, ONLY in CS departments Matlab is NOT (yet ?) the de facto standard (but it is still tought and used anyways, along with java and some C++).
We learn from history that we learn nothing from history - Tom Veneziano
I suspect it's mostly because FORTRAN has a lot of things built right into the language, rather than added in libraries and such. That means code can be reasonably tidy, but still leave a lot of scope for optimisation. This is particularly true when compared with the state of the art in optimising for difficult languages like C, where even today relatively simple optimisations can be difficult because of aliasing issues and the like.
It's also worth noting that when most of a serious community use the same tool(s), a lot of new work will be done using those tools simply because of familiarity, community and support issues.
If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
its specification allows for more aggressive compiler optimizations than C. fewer aliasing issues for example.
Please modify parent -1 "Should have googled obvious question". The Fortran FAQ answers: http://www.faqs.org/faqs/fortran-faq/
Advice: on VPS providers
I am seeing the first page of the draft and already I see talk about objects... Man.... Do they understand that *WE* do use fortran because of the mathematical bibliothek, the extremly well optimised high performance generated code even massive parallel calculation code ? If this things doesn't have the same performance as fortran *AND* is backward compatible with existing fortran programs it is dead in the water. Why do they think that most scientific out there I know of are still using fortran for ? Do they really think we need abstract stuff with object ? If we did we would use a c++ code+compiler, not fortran
Indeed a search of the spec says "no attempt at backward compatibility/this is a new language with little relation to fortran".
Nothing to see here. Somebody with new idea he thinks are nifty , and forgot from sight why fortran is still used now.
C. Sagan : A demon haunted world:
http://www.amazon.com/gp/product/0345409469/
visit randi.org
First of all, shouldn't it be "what Java did for C++", and second of all the answer to the question in the subject is:
"Fuck it up."
Besides, as the "Real Programmers" phrase goes: "Real Programmers can program FORTRAN in any language."
(I've always liked that; I prefer FORTRAN to other high level languages. But then, I am a dinosaur....)
You mean they are going to castrate Fortran such that idiots can use it, and only idiots will want to use it? We don't need Java, we need people to f$cking learn to program. You get payed decent money for programming don't you have the responsibility to actually learn your profession, rather than depending on castrated tools to prevent you from getting into trouble?
"Why do pipe stress freaks and crystalography weenies prefer Fortran?"
One simple answer is We're not writing a F'ing application!!
A great deal of scientific programming done by scientists and engineerse is NOT to develop an application with a nice gui and users manual - it to solve a complex problem ONCE for him/herself ONLY and get data/results that can be processed by other std application. Rude, crude, and vulgar - tha't is just fine! I write BASIC, Fortran (for 30 years) and C#, assembler, (all of the above) etc, and find that when I want to solve a problem, the last thing I want to pgm in is Cxx. I have watched sw programming change over the years from an emphasis on problem-solving to applications, applications, applications. Not everyone wants, needs, or has time to write an "application" package, Just give me my answer.
Cloned foods give the statement "We had that last week!" a whole new meaning.
C++ has gained alot of ground ... through the use of templates and template metaprogramming
The phrase "phyrrhic victory" comes to mind.
Irritable, left-wing and possibly humorous bumper stickers and t-shirts
Alsoran
I can throw myself at the ground, and miss.
Joking aside -- Yeah, pretty much. I can't stand Java. C is my favorite language, closely followed by C++... because they both *run*. Java is mind-bogglingly slow, considering it is *based* on the speedy C. Ironically, this "do for fortran what java did for c" comment makes me want to learn Fortran, not Fortress.
Yes, and so does C++. What are Fortran's advantages? In the days of the VAX, Fortran compilers often generated faster code than C compilers, but this advantage of Fortran for numerical computation disappeared long ago.
OTOH, C and C++ have a cleaner syntax, no need for line labels, no need to start on column 6 or end in column 72, no need to use an * for continuing lines, etc. Oh, neither does Fortran anymore? So they acknowledge that Fortran *did* have an extremely messy syntax and tried to improve it, did they? Then why not do the right thing and improve it all the way to C/C++ syntax? Most of the improvements people have done to Fortran in the last 25 years, including the ones I quoted from your post, have been done to get Fortran closer to C, by adding features that C had and Fortran didn't.
And when you get down to numerical computation, including parallel computers, the optimization is done at a very low level, where the language syntax is irrelevant. There's nothing magic about Fortran for scientific and numerical computing. In some cases the opposite is true, C allows for better hand optimization. A competent programmer has better control of a C program, because the relationship from high-level code to machine code is clearer and easier to control in C. People often berate C for having pointers, but in Fortran *everything* is passed as pointers, as anyone who ever called Fortran functions from C programs knows.
So, you're a better C coder than he is a Fortran coder, so Fortran must be bad? Interesting conclusion.
It's official. Most of you are morons.
(2) There were tons of interpreted languages before Java. As for portability of compiled programs rather than source code portability -- how is that better than JIT compiling or an ordinary LISP REPL? How is it better to use a binary format rather than an ASCII readable format (such as source code)? What, you mean the `synchronized' keyword? How is it better to use a new keyword instead of just a function? My point exactly. C(++) can be a language of clever tricks and obscure code. It doesn't necessarily have to be, however, and usually it isn't. It's both possible and common to write clean C code. However, C (and arguably C++) allow you to use clever tricks and obscure code if you want to and know what you're doing. In Java, you cannot do that even if you wanted to. I don't really see less choice being better. Those words would carry a lot more weight if you had included an example of such a mistake. If you were thinking about C++, then I fully agree with you, whatever example you may have been thinking of. C++ is the most abysmal excuse for a language I have ever seen. Except for the "compile it" part, I do that every day with open source C programs, and I don't see what makes it so very much greater to just copy a jarball rather than copy and compile a tarball.
While I'm in this mood, let me crush another myth about Java vs. C, namely the "Java is more secure than C since you can't access arbitrary addresses and Java makes array bounds checks" myth. In this case, it is important to seperate the language and the architecture on which the programs run. It is not the Java language that does these things, but rather the JVM. C is quite capable of those things as well -- unfortunately, most (all?) major physical CPU architectures don't support them. Therefore, don't blame C for that -- blame IA32, Sparc, PPC, etc.
Yet another one? Well, since you asked: The "Java is more portable and runs on all architectures" myth. In fact, Java is the least portable language I have ever seen. It only runs on one single architecture: The JVM. It just so happens that there is a JVM emulator for most major physical CPU architectures. Would you say the same about C if there were an IA32 emulator for mostly any platform? Most likely not -- It's just that Sun has marketed Java this way.
all of those long words for everything, geez!
n tire- new-language syntax that is C.
This has always bugged me! And, as a matter of fact, it is always the thing that die-hard C-coders point to first. One C-coder that I worked with explained that "it is not only all the extra letters that you type, it is extra letters that you have to read, too!"
And then it dawned on me: most C-coders never really learned to read in the first place! You don't read letters, you read WORDS! C has always been a cryptic, not easily understood language. COBOL and BASIC, for all their other faults, are very easily readable!
Anybody that can type reasonably well does not have to worry about the number of charcaters they type. But everyone has to worry about the cryptic, refer-to-a-dictionary-until-you-have-learned-an-e
What are Fortran's advantages?
Use the best tool for the job?
Fortran == Formula Translation, not general purpose bloated compiler. It's meant to convert mathematical operations to machine code as efficiently as possible. It just gives us a portable way to do more abacus/slide rule/calculator operations than assembly.
You can put a new marketing spin on anything. The point of the matter is that Fortran has evolved to suit coding mathematical systems, not to design applications. The mythical CS land where all languages are fully optimized and portable doesn't exist, at least yet anyway. If that were so people would just use symbolic math programs!
As far as syntax, I don't see how C is cleaner than Fortran. When you solve mathematical problems in physics, you always present it as a block structured set of equations. At that point, it's just a balance between how many keystrokes I have to make and how long it takes to compile/run. So why is something like exp(x,2) better than x**2?
Finally, I point to the following:
Programming languages should be designed not by piling feature on top of feature, but by removing the weaknesses and restrictions that make additional features appear necessary.
(from Revised Report on Scheme, 1991)
We don't need fortran compilers that make for easier debugging, we need bug free fortran compilers. But that is a different story...
UBU
And when you get down to numerical computation, including parallel computers, the optimization is done at a very low level, where the language syntax is irrelevant.
I can't let you get away with that. Fortran was designed to have a language syntax and structure that makes compiler optimisation easy. 'WHERE' loops can be parallelised, pointer aliasing is tightly controlled (unlike C/C++), etc. It does make a difference.
Do we really, really have to go over this well-trodden ground again?
We obviously do, as the landscape has changed since last you walked it:
Sorry, JIT really helps and modern Java implementations do have some pretty good optimisations, but the design of Java fundamentally means that it will only ever approach the performance of elementary C or C++ as a limit, and there will always be a certain amount of overhead at some stage in the proceedings. You simply cannot avoid this, while still having the bounds checking, still missing value types, etc.
This is years out of date!
Optimised Java does not need to do bounds checking, and does not have this overhead. The Hotspot technology does run-time analysis so that the ranges of loops and potential value limits of variables are determined. This means that bounds checking can be removed in almost all cases.
The Hotspot optimiser does things that no C compiler can ever do - it can determine at run time the best order for machine code instructions for best use of pipelines in certain processors.