Slashdot is powered by your submissions, so send in your scoop

 



Forgot your password?
typodupeerror
×
Programming IT Technology

New Intermediate Language Proposed 443

WillOutPower writes "Sun is inviting Cray (of supercomputer fame) and IBM (needs no introduction...) to join and create a new intermediate run-time language for high-performance computing. Java's bytecode, Java Grande, and Microsoft's IL language for the Common Language Runtime, it seems a natural progression. I wonder if the format will be in XML? Does this mean ubiquitous grid computing? Maybe now I won't have to write my neural network in C for performance :-)"
This discussion has been archived. No new comments can be posted.

New Intermediate Language Proposed

Comments Filter:
  • by Anonymous Coward
    ...binary.
  • by Uzik2 ( 679490 ) on Friday December 26, 2003 @05:34PM (#7814750)
    I recall a system based on USCD Pascal. You would
    write an interpreter on your target hardware that
    would run the pascal p-code. It was supposed to
    solve all sorts of problems. Except it was slow.
    Nobody would write anything for it, I guess
    because they didn't like Pascal, or USCD didn't
    fire anybodies imagination with the product.

    I don't see why we need to go through this again.
    If you need performance write it in assembler or
    use nicely optimized C. If you don't then an
    interpreted scripting language will usually
    suffice. What's the benefit to yet another
    layer of abstraction?
    • And we'll probably be doing the same stuff for ages to come, if companies are to keep making money by reinventing the wheel. I don't see *popular* programming languages/intermediate formats/runtime environments having undergone any particularly significant change in quite a few years now. I don't see what .NET (no MS bashing intended here) with all its runtime/intermediate format/etc.. has done that is substantially different than what has existed before. (AND XML crap doesn't count at all as any kind of pr
      • I believe CLR is supposed to be portable like Java, but functions are compiled to machine level code upon their first call. Of course there are no performance comparisons out there vs Java, because part of the EULA is that you will not publish any. :P
      • by VertigoAce ( 257771 ) on Friday December 26, 2003 @06:38PM (#7815017)
        One interesting feature of .Net is language interoperability. Someone can write a class in VB.NET and I can inherit from that class in C++ just the same as if the original was written in C++. Sure there were ways of doing this before, but you generally had to treat other components in a different way from stuff written and compiled in your current project's language.

        A more typical usage would be to write anything that needs better performance or that needs access to non-.net libraries in C++ (since it can be compiled to machine code before distributing) and then use that component in other languages that are easier for putting a GUI together. Again, it's always been possible to do stuff like this, but .NET makes it seamless (it's just like linking to any other library).
        • IL codes are neat. I hope they look at Tannenbaums work.
        • by voodoo1man ( 594237 ) on Friday December 26, 2003 @08:21PM (#7815339)
          Sure, as long as your class looks just like a C# one. Need multimethods, dynamic class redefinition, method combination, a non-crippled model of multiple inheritance, or maybe even prototypes? You're out of luck, because for this interoperability to work, your classes will either have to be C# classes or you have to make them look like ones, and .NET doesn't give you a Meta Object Protocol to do it.
          • Well, the .NET framework gives you lots of appropriate choices. VB.NET and managed C++ can share objects with C#, for example. You can also define classes in VB.NET or managed C++ or whatever and use them in C#. There is a standard for the size of various data types in this framwork (ints, floats, chars, etc), so you don't have to worry about data loss or funny conversions when using data from a class written in a different language.
            • by cakoose ( 460295 ) on Saturday December 27, 2003 @05:48AM (#7816645) Homepage

              I think what he's saying is that the syntax isn't the only thing that defines a language. A language's type system probably plays a more important part in defining how the language works.

              With .Net, it may seem like you have a lot of interoperating languages, but they're all basically the same language with different superficial characteristics. VB developers complain [devhood.com] about how VB.Net is totally different from previous versions of Visual Basic. It's because they gutted its internals and implanted C#. I wouldn't be able to tell the difference because I see similar syntax, but someone who really knows the language will detect a different core.

              That's not to say that different type systems cannot be emulated. Nice [sf.net] is a language with Java-like syntax but with a much better type system (among other things) and it still runs on an ordinary JVM. However, any interoperability will have to be at the level of the lowest common denominator. If you want to call Nice code from Java, your interface ends up losing or having to give up some power.

              You really can't even share libraries between truely different languages. The STL just doesn't fit into the Java/C#-style type systems (though generics is a step towards accomodating the STL). Perl libraries are also distinct. Imagine dealing with a Haskell-style lazy list in your C# code. It just wont feel right.

    • I recall a system based on USCD Pascal. I also :-) Except it was slow. Well, on my Apple ][ it was good for the fastest code after Assembler. It only got catched when Z80 coprocessors with CPM and Turbo Pascal came en vouge.
      I did really a lot of programming in UCSD pascal, and long UCSD p-code was the most wide spread operation sytem/virtual machine.
      If you need performance write it in assembler or
      use nicely optimized C.

      Assembler loses all higher level abstractions, like inheritance, interface implementation, class relationships(relations, aggregations and compositions), thread synchronization. The same is true for C, besides that it is on source level not able to express higher level concepts. You might use assembler instead of C.
      How do you optimize assemberl? The operation system, the non existing, but hypotetical VM, the loader, the processor, none of hem can optimzie "assembler". I mean: In Java Byte Code I have all the higher level abstractions of the system inspectable via reflection etc. In assembler I have nothing.
      New bytecodes, able to express more higher level informations e.g. like prarallelization, or even this problem: consider you have an CPU server, consider you have code migrating to youor server, consider you want to trust that code, consider, the "owner" of the code does not want to trust you .... So you need a VM on your CPU server, able to execute encrypted bytecode, so hat you as owner of the CPU dont see what the code is calculating. BUT you, a CPU server, you dont want your system compromized, or the code of other clients compromized by any piece of code.
      Or, consider this, you want byte code as an mobile agent, similar to the scenario above, but it should be allowed to replicate over a GRID, but only under certain restrictions.
      You want to optimize every replica at the VM where it is finally executed, to take an optimum of resources on that point. How do you do that in "assembler"?
      Modern byte codes will be likely even closer to the constructs of the high level languages than byte code is. Resource allocation, object creation, class loading, higher level concepts, like delegation, parallelism, synchronization(on multiple mutexes probably), serialization, distributed(pervasive) computing, probably OODB support build in, probably a light weight EJB like execution environment, probably a 4 level hierarchy of VM, meta container, container and executed code ... probably where the VM is itself only "executed" code inside of a meta cotainer. That means modern VMs probably will extract core VM features like garbage collection and thread scheduling outside of the VM into a library, and every piece of code may "class load" its own garbage collection schema. Consider differnt garbage collectors per thread and not per VM.
      Well, I could continue for a day with improvements ....
      What's the benefit to yet another
      layer of abstraction?


      The benefit is to optimze on that layer of abstraction and then to project/generate/assemble the optimzation down onto the machine layer(or the next lower layer).

      angel'o'sphere
      • by NickFitz ( 5849 ) <slashdot&nickfitz,co,uk> on Saturday December 27, 2003 @08:46AM (#7816898) Homepage
        You might use assembler instead of C

        Unless you really need to use every cycle, you're better off writing in a high level language and then recoding the critical portions (as identified through thorough profiling) in assembly language. (I speak as one who needed to use every cycle when I was a games programmer in the 80s. I've often thought of doing an all-assembly, no OS required app today, just to see how ludicrously fast it would run.)

        How do you optimize assember?

        You gain extensive experience with the procesor and platform to which you are writing, and you work bloody hard. It also depends on whether you are optimising for space or speed. For example: writing a game for the Amiga, I was told by the customer that it had to run on machines with half a meg of RAM (the entry-level machine). I once spent a whole day seeking a way to save 12 bytes; the first part of the solution involved recoding a routine using a different algorithm. The rewrite saved me 8 of my 12 bytes, and executed in the same number of clock cycles (that was a crucial constraint). I then got the other four bytes by using the interrupt vector for an interrupt I'd disabled. As I was writing to the silicon (not even using any ROM routines), I could get away with this. I wonder what kind of warnings a modern C++ compiler would throw up for this kind of behaviour ;-)

        Assembly language is fun, but life can be too short. I had to spend so much time fitting the above-mentioned game into half a meg that, by the time it came to market, 1Mb was the standard required by all games anyway.

        Assembler loses all higher level abstractions... In assembler I have nothing

        If you design your code well you have plenty. Even when you inline code to save the overhead of call/return, you will be aware of the functional purpose of those 50 instructions considered as a single entity. The same discipline required to write well-constructed code is needed for assembler. It's similar to using an old version of BASIC, with only GOTO and GOSUB for transferring control; although it allows the sloppy thinker to produce spaghetti code, a good coder will adhere to the same abstractions as they would use in a higher level language.

        I'll stop rambling about the past and go and write myself a Forth system now :-)

        (P.S. p-code was extremely cool. When I first got acquainted with Java, it was the first thing I thought of. Plus ca change, plus ca ne change pas...)

    • UCSD Pascal (Score:4, Insightful)

      by Detritus ( 11846 ) on Friday December 26, 2003 @06:47PM (#7815058) Homepage
      For its time, UCSD Pascal was an excellent language and operating system. Its main problems were price and politics, not performance or technical issues. Many people, including myself, wrote software for it. The speed penalty of the p-code interpreter was offset by the compactness of p-code, which was important on the memory-constrained PCs of the time. UCSD Pascal, like other alternative operating systems of the period, could not compete with MS-DOS and PC-DOS, which sold for well under $100, on price.
  • Article text (Score:3, Informative)

    by kiwipeso ( 467618 ) <andrew.mc@paradise.net.nz> on Friday December 26, 2003 @05:34PM (#7814751) Homepage Journal
    Mountain View, Calif. - Sun Microsystems is inviting competitors IBM Corp. and Cray Inc. to collaborate on defining a new computer language it claims could bolster performance and productivity for scientific and technical computing. The effort is part of a government-sponsored program under which the three companies are competing to design a petascale-class computer by 2010.

    Sun's goal is to apply its expertise in Java to defining an architecture-independent, low-level software standard - like Java bytecodes - that a language could present to any computer's run-time environment. Sun wants the so-called Portable Intermediate Language and Run-Time Environment to become an open industry standard.

    The low-level software would have some support for existing computer languages. But users would gain maximum benefit when they generated the low-level code based on the new technical computing language Sun has asked IBM and Cray to help define.

    Whether IBM and Cray will agree to collaborate on the effort is unclear. Both companies have their own software plans that include developing new languages and operating systems as part of their competing work on the High Productivity Computing Systems (HPCS) project under the Defense Advanced Research Projects Agency (Darpa).

    "We think languages are one area where the three of us should cooperate, not compete," said Jim Mitchell, who took on leadership of Sun's HPCS effort in August.

    Last week Sun proposed to IBM's HPCS researchers they pool separate efforts on such a software language, an idea Sun said Darpa officials back. Sun also plans to invite Cray into the effort. Representatives from IBM and Cray were not available at press time.

    The language could be used not just for the petascale systems in the project, but for a broader class of scientific and technical computers.

    "Java has made it easy to program using a small number of threads. But in this [technical computing] world you have to handle thousands or hundreds of thousands of threads. We need the right language constructs to do that," Mitchell said.
  • What's the point? (Score:2, Insightful)

    by Sheetrock ( 152993 )
    We've already established that moderate proficiency in a high-level language with a good optimizing compiler is worth far more than mastery of assembly in today's environment, what with the size and scope of most programming tasks nowadays. Creating an intermediate language seems to couple the worst inefficiencies of high-level programming and assembly micromanagement: something akin to writing 'machine code' directly for a Java VM to optimize your application instead of just writing the darn thing in C, c
    • Re:What's the point? (Score:3, Interesting)

      by miu ( 626917 )
      I think they are hoping that creating intermediate targets will make optimization and scaling easier. This is similar to the approach taken by gcc. The core compiler team can focus on creating a correct and effecient intermediate representation and the team porting to a new architecture focuses on taking the intermediate representation and creating correct and effecient assembly for that target.
    • Re:What's the point? (Score:5, Interesting)

      by basking2 ( 233941 ) on Friday December 26, 2003 @05:54PM (#7814871) Homepage
      This is a good question to ask.

      So, one of the ideas behind C# was to make an intermediate laguage (MS-Java-byte-code, if you will) which could be quickly compiled for the CPU in question. Stick a system call envrionment and garbage collector around it and you have [roughly] what C# is. One of the nice things about Java was that it was for no specific machine... it was very very simple at the instruction level, but making native code from that can be a pain.

      Now, from the looks of the posted article some folks now want an intermediate laguage that can represent concepts like instruction vectorization and maybe SMP (hypter threading) and perhaps some other more complicated constructs that Java's machine code just doesn't talk about.

      The end result is that you would have very fast machine code for the number-crunching loops in the code and portability. The compile time would be fairly quick and the optimization for the local CPU would be "smart" and fast if you marked up what where vectorizable instructions.

      Why C# falls short, I can't say. I've only looked at the Java machine, never at how C# represets a program.

      Hope this is helpful!

      • by btakita ( 620031 )

        So, one of the ideas behind C# was to make an intermediate laguage (MS-Java-byte-code, if you will) which could be quickly compiled for the CPU in question. Stick a system call envrionment and garbage collector around it and you have [roughly] what C# is.

        Another Java programmer, who has almost no experience with .NET, yet thinks he has enough "understanding" of .NET to put it into a nutshell. However, you're not as bad as most people.

        Why C# falls short, I can't say.

        Could it be that there is less th

        • by Tim C ( 15259 )
          Please, enlighten us. I'm not trolling, incidently - I'm a Java programmer professionally, although I admit that I've not really looked too deeply into Java's bytecode, but I'm training myself in C# and .NET - I have a genuine interest.

          Anyways, why are there a bunch of Java programmers, ignorant of .NET architecture and capabilities, who are so intent on slandering .NET? If people criticize something, shouldn't they at least understand that thing first?

          Same reason you get C/C++/Perl programmers slanderi
        • by HiThere ( 15173 ) *
          I will consider "fair treatment" for NET once I'm convinced that it isn't tied by patents or copyrights or other legal restrictions to the implementations that MS chooses to allow.

          OTOH, I'm dubious of Java for similar reasons. But Sun is in less of a position to be abusive.

        • LOL!! Whoops, I mixed up .NET and C#. Sorry about that. Yes, I am a Java programmer more so than a C# programmer. No, I do not have no experience with .NET.

          I will say that I'm a little annoyed that you chose to fly off the handle like you did. So, rather than get into a shouting match with you, here is a paper [msdnaa.net] for you and the folks here to check out on the JVM and CLR. Note that they are both largly stack machines but the CLR from MS made some design improvements. Please also note (if you are familia

    • Re:What's the point? (Score:3, Informative)

      by Tim C ( 15259 )
      omething akin to writing 'machine code' directly for a Java VM to optimize your application instead of just writing the darn thing in C, compiling it to the three platforms it's going to run on, and getting a 300% speed boost.

      Can you provide any evidence for the quoted 300% speed boost? I code Java for a living, and ignoring the JVM startup hit (how often do you start and stop the sort of app you'd write in Java anyway?), it's anything but slow.
      • " it's anything but slow"

        It's also a memory hog! ;-)

        Kiddin. Whatever I code in C. I let the compiler sort out what platform it runs on. [hint: I write portable C code so it doesn't matter]

        Tom
    • by plastik55 ( 218435 ) on Friday December 26, 2003 @06:09PM (#7814930) Homepage
      Because a well-designed intermediate language will help optimization. Being somewhat higher-level than raw machine code, not yet having to worry about the specific details of registers and pipelining, makes it easier to perform higher-level optimizations because the IL can be more easily analyzed. And when you compile from IL to the target you will have just the same opportunities for platform-specific optimizations as if you had compiled straight from the source language.

      The other benefits of using an IL are manifold. New languages can be implemented without having to write a compiler for each platform. New architectures can be supported without having to write compilers for each language.
      • Re:What's the point? (Score:5, Interesting)

        by Lazy Jones ( 8403 ) * on Friday December 26, 2003 @07:36PM (#7815213) Homepage Journal
        Because a well-designed intermediate language will help optimization

        All good compilers already use well-designed intermediate languages. A general intermediate language that aims to be equally suitable for many high level languages will most likely be inferior to the best intermediate language for a particular high level language.

        The other benefits of using an IL are manifold. New languages can be implemented without having to write a compiler for each platform.

        Great. Just what we need - another of those braindead technological "advances" like human-readable data interchange formats that makes life easier for a few developers (simpler, cheaper compiler development) and harder for millions of users (worse performance). Frankly, the only advantage for the rest of us I can think of would be the higher probability of the resulting tools being mostly bug-free.

      • Sun just wants to inject Java into yet another domain space where it isn't needed or wanted. Let me guess - the Sun proposal will be Java bytecodes.
      • by Mike McTernan ( 260224 ) on Friday December 26, 2003 @08:18PM (#7815331)
        In terms of compiler optimisation, the higher the language the better. Strict typing and a language that allows the compiler to infer more about the call tree should enable better global optimisation. Lower level languages suffer from the problem that the programmer is explictly describing how to do something, and not what it is trying to do; thus the compiler can just unroll loops and perform peephole optimisations.

        If a language was sufficently high enough that you could describe to the compiler that you were implementing a recursive function (e.g. shell sort), the compiler should then be able to perform fold-unfold optimisation and convert the code into a more efficient tail iterative function. Fans of Haskell and similar languages might recognise this. Some C compilers will convert recursion to iteration where possible, but this is only in simple cases.

        The fact is that today, even as C has reached maturity and as high level as it is, there are still some optimisations that are impossible because of subtleties of the language. For example, multiple pointers may point to the same memory, but depending on how the pointers are assigned, the compiler has no idea that this is the case, and has to follow the code in a literal fashion.

        My personal view is that languages like Java still have a lot to offer. I would like to see a lot more investment in the compiler to perform better optimisations, and would also like to see a compile on install system for Java like C#; if I run an applcation it would atleast be nice if the compiled parts were cached somewhere. This I believe could make good performance gains, and it's interesting that Sun's Server Hotspot VM actually performs more optimisation when compiling a class than the Client VM, however, because of the increase in time taken to load and compile a class, the Client VM omits some optimisation techniques to favour speedier loading. I guess this descision is to make GUI's more responsive and reduce app load times; compile at install would remove this constraint. We should be going to higher level languages, not lower, and concentrate on getting to compiler correct.
    • by iabervon ( 1971 ) on Friday December 26, 2003 @06:21PM (#7814968) Homepage Journal
      All good compilers use at least one intermediate language. It's practically impossible to do good optimizations otherwise, even on a single platform. For example, you want to inline functions if that would improve performance, but in order to determine whether it improves performance means that you need to look at things like register allocation, which depends on things like the machine code implementation of complex expressions; however, inlining a function needs to be done with the higher level information about flow control and the structure of the function call. So you basically can't do any of the interesting optimizations without a good intermediate language.

      Furthermore, getting from the high-level langauge to the intermediate language is cross-platform, which means that any optimizations done at this level are then available to all of the code generators for different platforms; this code is reused across back-ends. It also means that you can support multiple front-ends with the same back-end, and make your C++ and Java automatically compatible by virtue of sharing an intermediate language, and they also both benefit from the same architecture-specific back-end.

      There's no reason that having an intermediate language means that you'll stop compiling at that level and use an interpreter for the intermediate language to run the program. In fact, gcc always compiles its intermediate language into machine code, and it can compile Java bytecode into machine code as well. Modern JVMs compile the bytecode into native machine code when the tradeoff seems to be favorable, and they can do optimizations at this point that a C compiler can't do (such as inlining the function that a function pointer usually points to).

      An intermediate language essentially pushes more of the skill into the optimizing compiler, because the same optimizing compiler can be used for more tasks. Also, if the compiler is used at runtime, it can optimze based on profiling the actual workload on the actual hardware. This is especially important if, for example, IBM decides to distribute a single set of binaries which should run optimally on all of their hardware; you run the optimizer with the best possible information.
    • Re:What's the point? (Score:5, Interesting)

      by grotgrot ( 451123 ) on Friday December 26, 2003 @06:45PM (#7815051)
      What's wrong with making a good compiler that writes directly to machine code?

      Because that doesn't give you best performance. Machine code represents an exact processor implementation. Tradeoffs have to be made with backwards compatibility (eg Redhat is compiled for Pentium), expected cache sizes (optimising size vs performance), processor specifcs (Itanium has 4 instructions per bundle, Sparc has one instruction after branch) etc.

      While it is true that you could compile for an exact machine, it is a horrible way of trying to ship stuff to other people, and it does require recompilation if anything changes. (The former is why Redhat pretty much picks base Pentium - if they didn't they would need 5 or so variants of each package just in the Intel/AMD space. Granted they do supply a few variants of some packages, but not everything, and Gentoo people can confirm that doing everything does help).

      Using IL lets the system optimise for the exact system you are running at the point of invocation. It can even make choices not available at compile time. For example if memory is under pressure it can optimise for space rather than performance.

      It also allows for way more aggressive optimisation based on what the program actually does. While whole program optimisation is becoming available now (generally implemented by considering all source as one unit at link time), that still doesn't address libraries. At runtime bits of the standard libraries (eg UI, networking) can be more optimally integrated the running program.

      Machine code also holds back improvements. For example they could have made an x86 processor with double the number of registers years ago. If programs were using IL, a small change in the OS kernel and suddenly everything is running faster.

      Needless to say, using IL aggresively is not new. To see it taken to the logical conclusion, look into the AS/400 (or whatever letter of the alphabet IBM calls it this week). I highly recommend Inside the AS/400 [amazon.com] by Frank Soltis.

    • by angel'o'sphere ( 80593 ) <angelo.schneider ... e ['oom' in gap]> on Friday December 26, 2003 @06:54PM (#7815080) Journal
      Ah, come on, that is anything but not insightfull ...
      What's wrong with making a good compiler that writes directly to machine code?
      a) it wont run on my phone, because no one will port teh compiler
      b) it wont run on my new internet enabled microwave, because no one want to port the compiler
      c) it wont run on my cars electronic, as no one want to port teh compiler
      d) it wont run on the next ESA space probe, the Venus Express, because no one want to port the compiler
      and so on.
      Whats wrong with having an ultimative VM designed and freeing all software developers from all porting issues for one and for ever?
      Whats wrong with having an ultimative VM designed and freeing all hardware developers to be braked out by compatibility issues?
      Come one, code geeks. Make a step into the future!! A 4 GHz Pentium is about 16 million times faster than my Apple ][ which I used 15 years ago. Why should I be burdened with coding habits over 20 years old? I dont want to write 10 to 100 lines of assembelr a day, because it expresses far less in terms of instructions than 10 to 100 lines of C. And I dont want to write 10 to 100 line sof C a day becaue it expresses far less in terms of instructions than 10 to 100 lines o C++ ... and so on for Smalltalk, Python, LISP ...
      We need more different higher level languages and more VMs, as it is easyer to make a new VM than a new processor. We do not need more compilers for the same old languages just because one built a new processor somewhere ... which is wasting 80% of its die (and 80% of its resources, energy put inot its production, waste produced and released into the environment) to be "compatible" with some old 8086 invention.
      angel'o'sphere
    • What's wrong with making a good compiler that writes directly to machine code?

      What's wrong with encouraging good clean portable code, using good clean portable libraries?
    • Compilers 101 (Score:5, Informative)

      by p3d0 ( 42270 ) on Friday December 26, 2003 @09:14PM (#7815464)
      I don't understand your question, but if you're asking why we need intermediate languages, then I can answer that.

      Imagine N high-level languages and M target platforms. A naive approach would wind up creating NxM separate compilers.

      Intermediate languages (ILs) allow you to write N "front-ends" that compile the N high-level languages to the IL, and M "back-ends" that compile from the IL to the M target platforms. So rather than needing NxM compilers, you only need N+M.

      Even more significant is the optimizer. Front-ends and back-ends are relatively straightforward, but optimizers are very hard to write well. In the naive approach, you need NxM optimizers. With an IL, you only need one. The front-end translates to IL; the optimizer transforms IL to better IL, and the back-end translates to native code.

      In summary, to answer one of your questions:

      What's wrong with making a good compiler that writes directly to machine code?
      Every optimizing compiler uses an IL anyway. These companies, I presume, are simply agreeing to use the same IL across their products (though I'm only guessing because the article is slashdotted).
  • XML ? (Score:5, Funny)

    by noselasd ( 594905 ) on Friday December 26, 2003 @05:36PM (#7814764)
    Did I see XML and performance in the same sentence ?! ... brain overload.. does not make sense...
    • Re:XML ? (Score:2, Insightful)

      by Anonymous Coward
      Good god. XML is VERY VERY good for what it was designed for: semantic markup of texts. It is not very good as a straightjacket on a programming language.
    • The days that loading binaries from disk into memory was a significant performance hit are long gone...
    • Re:XML ? (Score:5, Funny)

      by benjamindees ( 441808 ) on Friday December 26, 2003 @05:47PM (#7814833) Homepage
      I saw that too.
      Then I saw Posted by michael and everything was better.
    • by Anonymous Coward
      Is it the 'XML' and 'performance' or fact that you found a complete sentence on Slashdot sending your brain into overload?
    • Hey - Maybe it does.

      The only way to get performance out of XML would be to have IBM, Sun or Cray making XML cards. Like how graphics cards speed up 3D rendering to the point of almost real time ray tracing. Load your DTD and XLST into you XPU - XML Processor Unit and fire away.

      I know it's just some weird delusion of the poster - the article mentions nothing about it. How hard would it be to create your own XML processing hardware? Would it be faster and what would it do?
    • I read someplace that there is nothing that XML can do that Lisp can't. Maybe they are talking about remaking lisp again.
  • by b17bmbr ( 608864 ) on Friday December 26, 2003 @05:37PM (#7814774)
    The effort is part of a government-sponsored program under which the three companies are competing to design a petascale-class computer by 2010.

    will sun survive until then?
  • GCC (Score:5, Insightful)

    by norwoodites ( 226775 ) <pinskia@BOHRgmail.com minus physicist> on Friday December 26, 2003 @05:39PM (#7814790) Journal
    Sun should have invited us GCC developers also to help out with this because most of us want a way to do Inter modular optimizations but we have the FSF looking over our shoulder on how we implement it, right now (the mainline) you have to compile all the source files at the same time to get IMA to work correctly and you have to say to produce an .o file first.
    • I don't see how Sun is even relevant or why it matters who they "invite". They had their chance with Java and they blew it. I doubt the numerical community is going to give them another chance after what they have been through with Sun over the last decade.

      I suspect the next intermediate language for high-performance numerical computing is either going to be the CLR, some extension of the CLR, or something entirely different, developed in academia.
  • Buzzword compliance (Score:5, Interesting)

    by ajs ( 35943 ) <ajs@ajs . c om> on Friday December 26, 2003 @05:41PM (#7814796) Homepage Journal
    I really hope the author's smiley was to indicate that he understood that his string of buzzwords was meaningless.

    What I hope is that Sun takes a good, long look at the only intermediate assembly that has been designed with language neutrality in mind, Parrot [perl.com]. While this article is over 2 years old, it's a decent starting point. Parrot has already been used to implement rudimentary versions of Perl 5, Perl 6, Python, Java, Scheme and a number of other languages. The proof of concept is done, and Sun could start with a wonderfully advanced next generation byte code language if they can avoid dismissing Parrot as, "a Perl thing" with their usual distain for things "not of Sun".... IBM on the other hand is usally more open to good ideas.
    • by Tim C ( 15259 ) on Friday December 26, 2003 @05:54PM (#7814877)
      Language neutral? Perhaps I'm just skimming your linked-to article too quickly, but this is what leapt out of the page at me:

      "Parrot is strongly related to Perl 6... Perl 6 plans to separate the design of the compiler and the interpreter. This is why we've come up with a subproject, which we've called Parrot that has a certain, limited amount of independence from Perl 6." [emphasis added]

      That certainly doesn't sound like it's been designed with language neutrality in mind. For what it's worth, MS's IL was designed with at least four languages in mind - VB.NET, C#, managed C++ and J#, and a couple of dozen others have been or are being ported to it, including Fortran, Cobol, Haskel, and (iirc) even perl.

      As you say, the article is over two years old, so maybe they've changed their goals since then - but that article at least gives a very strong impression that Parrot is tied intimately in with Perl.
      • by Elian ( 10270 ) on Friday December 26, 2003 @07:54PM (#7815272) Homepage
        Nah. we put that in to not scare people. Parrot is, for all intents and purposes, completely independent from Perl 6 and has been for ages. (well before that article was written). While we're going to put in anything we need to make perl 6 run on parrot, the same can be said of anything we need to run Python and Ruby. (Which has already happened, FWIW) The only difference is that Matz and Guido haven't asked for anything yet...
    • by penguin7of9 ( 697383 ) on Friday December 26, 2003 @07:37PM (#7815219)
      Parrot looks like it will be a nice intermediate language for languages like Python, Perl, and Java. But Parrot lack the right primitives for an intermediate language for high-performance numerical computing.

      Right now the only widely used intermediate language that comes close to being suitable for high-performance numerical computing is Microsoft's CLR (JVM actually still has better implementations, but it lacks important primitives like value classes).
    • Why is it I find PARROT more readable than Perl?
  • *SIGH* (Score:3, Insightful)

    by mike3k ( 574665 ) <mike3k@@@gmail...com> on Friday December 26, 2003 @05:42PM (#7814800) Homepage
    No wonder we have to keep making faster CPUs just to maintain the same performance. Is Java on a PIII or G4 any faster than hand-optimized assembly code on a 486 or 68030?

    Soon we'll need a 10 GHz CPU just to be able to boot tomorrow's OS in less than 5 minutes.
    • Cheer up. (Score:4, Interesting)

      by SharpFang ( 651121 ) on Friday December 26, 2003 @06:06PM (#7814914) Homepage Journal
      Quite insighful... but it isn't as bad as it looks.
      1) Nobody forces you to write in Java for PIII. Write hand-optimised asm sniplets for PIII and include them in bigger Java or C app for time-critical pieces. You get real PIII performance.
      2) The software quality drops, but slower than CPU speed rises. That means your Java app for PIII will still work -slightly- faster than hand-coded ASM for 486.
      3) Development cost. You can spend a week to write a really fast small piece of code in ASM. Or you can spend that week on writing quite a big, though slow app.
      Most visible in games. Things like Morrowind, where crossing the map without stop takes a hour or more, and exploring all the corners is months of play, were plainly impossible when it all required hand-coding. Now for a developer it takes shorter to create a mountain in game than for a player to climb it. Of course the player needs better CPU to be able to display the mountain which wasn't hand-optimised, just created in an artificial high-level language defining the game world, but if you're going to enjoy the experience - why not?
      • Things like Morrowind, where crossing the map without stop takes a hour or more, and exploring all the corners is months of play, were plainly impossible when it all required hand-coding

        You forgot to mention that Morrowind was buggy, slow, crashed often, and had horrible loading times. ;)

        (was a great game anyways)
  • ANDF? (Score:3, Informative)

    by myg ( 705374 ) on Friday December 26, 2003 @05:45PM (#7814819)
    What about the Architecture Neutral Distribution Format from the TenDRA [tendra.org] project?

    That format could be extended into a vendor-neutral format for both interpretation, just-in-time compilation, and batch compilation.

  • Need more info... (Score:4, Insightful)

    by devphil ( 51341 ) on Friday December 26, 2003 @05:46PM (#7814824) Homepage


    The article is very light on details.

    The low-level software would have some support for existing computer languages. But users would gain maximum benefit when they generated the low-level code based on the new technical computing language Sun has asked IBM and Cray to help define.

    Huh?

    So, how many languages are being proposed here? A new "low-level" one, plus a higher-level "technical computing language" designed to make the most of the lower-level one? Just what's so special about this new low-level language that requires a specific new language to get the "maximum benefit" out of it? I don't have to write in Java to be able to compile to the JVM bytecode. For that matter, I could write in Java and compile to some other assembly language.

    New back-ends ("low-level languages," if I understand the article) are added to GCC all the time. We never needed to add a whole 'nother front-end just for them.

    I suspect that the real situation is less weird, and the journalist got confused... or heck, who knows, maybe they're proposing half a dozen new languages. It's Sun, after all.

    Maybe now I won't have to write my neural network in C for performance :-)

    Odd. I wouldn't have thought you'd need to do that these days anyway.

  • a language that feels like medium-to-high level (like, say ANSI C) but is in fact assembly - for certain new CPU. Can be run over VMs like Java or other cross-platform languages, can have other "metalanguages" built on top of it (like C++ or Perl on top of C) and is crossplatform for 'generic' platforms - but there exists a platform which is native for it, so bytecode can be run on it without any VM. Just perfect for embedded applications etc, while not leaving PCs and other "desktop boxes" out. (plus you c
    • a language that feels like medium-to-high level (like, say ANSI C) but is in fact assembly - for certain new CPU.

      This is kind of nonsense. It cannot really be "assembly" (at least in the normal sense in which assembly is defined, where there is a 1-1 or close to 1-1 correspondence between instructions in the language and machine instructions) if it supports things like procedures, nested complex arithmetic expressions, and named variables, and no sane high-level language can be without those things. Re
      • FREE YOUR MIND! (Score:3, Interesting)

        by SharpFang ( 651121 )
        Don't limit your imagination to bounds of i386-compatibile architecture!

        Ever thought about writing interpreter or VM in VHDL and implementing it on a FPGA board? That would be pretty similar.

        >if it supports things like procedures
        Stacks substituted for local variables, CALL, RET, what a problem?

        >nested complex arithmetic expressions,
        Can be un-nested at compile time, not really going far from assembly. Just remember that each +, ( or % is a separate call. Can be RPN, why not? That's very close to ass
  • by Waffle Iron ( 339739 ) on Friday December 26, 2003 @05:50PM (#7814850)
    "There is no problem in computer science that cannot be solved by adding another layer of indirection."
  • by Via_Patrino ( 702161 ) on Friday December 26, 2003 @05:50PM (#7814853)
    I don't think they're trying to create a language for "high-performance computing" but a language for a "high-performance multi-processor computer", since they're focusing on threads and sun isn't a very good example (jvm) of high-performance.

    In my opinion I would like a C language variation that let me specify how many bits i would like to use for a variable, because it would save a lot time because of memory bandwidth (cache space included) and is very boring to make a good implementation of that in assembly.
    • I would like a C language variation that let me specify how many bits i would like to use for a variable

      In C we already have types like uint8_t and int16_t. In addition to that you can use bitfields for fields in your structs. What more would you ask for? Remember, that often extra space is actually added between your variables, for performance reasons. Alligned access is faster than unalligned access.
    • In my opinion I would like a C language variation that let me specify how many bits i would like to use for a variable, because it would save a lot time because of memory bandwidth (cache space included) and is very boring to make a good implementation of that in assembly.

      You're joking, right? C has officially had that (bit-fields) since '99. And any time the number of bits is not either 1 or a multiple of 8, it's much, much slower than it would be otherwise, because despite any difference in memory/cache

  • by Anonymous Coward
    "I wonder if the format will be in XML? [...] Maybe now I won't have to write my neural network in C for performance"

    Is he on crack? :-)
    • Why?
      1) Learn the new language well.
      2) Find some sucker who will employ you, or other ???
      3) Profit!!!
      4) For money earned, employ programmers from India to write your neural network in assembly for performance.
  • Parrot assembly? (Score:3, Insightful)

    by Ars-Fartsica ( 166957 ) on Friday December 26, 2003 @05:55PM (#7814878)
    I thought an open, peer-reviewed, high performance IL/runtime was exactlywhat Parrot was trying to accomplish.
  • by esj at harvee ( 7456 ) on Friday December 26, 2003 @05:58PM (#7814892) Homepage
    Architectural Neutral Distribution Format [uni-karlsruhe.de] has been around for years and solves many of the same problems (and more).

    I guess it is one more time around the (reinvention) wheel for sun.
  • The problem is with the high level languages, not with the intermediate ones. If the source is C, efficiently vectorizing it is a problem that will not be solved by a new intermediate representation. And if it's a new high level language - well, we'll need to design the IL with respect to that HLL.

    APL, J and K are three languages that could be considered IL for high performance computing. But they're high enough to write code directly in them; And so far, it seems, implementations do a wonderful job withou
  • C-Bonics (Score:3, Funny)

    by Epistax ( 544591 ) <epistax @ g m a il.com> on Friday December 26, 2003 @06:49PM (#7815064) Journal
    I propose that this intermediate language be called C-Bonics, and it should be taught in all classrooms in place of C. Many people don't learn proper C in their homes so it isn't fair to force them to do it in school.
  • by fw3 ( 523647 ) * on Friday December 26, 2003 @07:01PM (#7815098) Homepage Journal
    Then you (like the pos(t)er of this article and most of the comments) probably don't follow what the value is here.

    Maintaining high performance code across cpu achitectures is bad enough (and I know of some supercomputing centers which are continuing with technically inferior AMD64/Xeon clusters rather than switch to PPC970 precisely because they know they can't afford to re-optimize for that arch).

    Factor in that today most numerically intensive code is still written in FORTRAN because competing languages simply can't be as easily optimized.

    Now let's think about SMP, while POSIX threads are portable, the best performace probably requires different threading code depending on arch/unix varriant. (And of course NPTL for linux is still in CVS.)

    Now let's think about massively parallel, where inter-cpu communication will be handled a bit differently on every platform.

    So the payoffs to developing an efficient cross-platform language layer are pretty substantial. (Which does not imply that I expect IBM to jump on to Sun's bandwagon on this :-))

  • Grid (Score:2, Insightful)

    There are several issues with regard to current programming techniques and grid computing for HPC. Some include:

    • Legacy code - both user code and 3rd party libraries such as NAG.
    • Matching OSes. Java alleviates this to some extent at the expense of performance . Also not all JVMs are equal. If you can use more resources then slower, less efficient execution isn't such a problem. I.e. a balance between ease of use and code efficiency. Good java code helps!
    • Matching executables and dynamic libraries. Static c
  • too little, too late (Score:5, Interesting)

    by penguin7of9 ( 697383 ) on Friday December 26, 2003 @07:28PM (#7815186)
    The effort is part of a government-sponsored program under which the three companies are competing to design a petascale-class computer by 2010.

    We already have such a runtime: it's called "CLR". The CLR is roughly like the JVM but with features required for high performance computing added (foremost, value classes).

    Sun wants the so-called Portable Intermediate Language and Run-Time Environment to become an open industry standard.

    I hope people won't fall for that again. Sun promised that Java would be an "open industry standard", but they withdrew from two open standards institutions and then turned Java over to a privately run consortium, with specifications only available under restrictive licenses.

    Sun's goal is to apply its expertise in Java to defining an architecture-independent, low-level software standard - like Java bytecodes - that a language could present to any computer's run-time environment.

    Sun's "expertise" in this area is not a recommendation: the JVM has a number of serious design problems (e.g., conformant array types, arithmetic requirements, lack of multidimensional arrays) that attest to Sun's lack of expertise and competence in this area.

    What this amounts to is Sun conceding that Java simply isn't suitable as a high-performance numerical platform and that it will never get fixed (another broken promise from Sun). But because the CLR actually has many of the features needed for a high-performance numerical platform, Sun is worried about their marketshare.

    The question for potential users is: why wait until 2010 when the CLR is already here? And why trust Sun after they have disappointed the community so thoroughly, both in terms of broken promises on an open Java standard and in terms of technology?

    Maybe we will be using a portable high-performance runtime other than the CLR by 2010, but I sure hope Sun will have nothing to do with it. (In fact, I think there is a good chance Sun won't even be around then anymore.)
    • Mod parent up (Score:2, Interesting)

      by Anonymous Coward
      That is right on the money. Sun is trying to make an alternative to the CLR - a blantant attempt to take back developers who've switched from Sun J2EE to MS .Net.

      Now, I'm all for having alternatives, but what's going to happen to Java? Will Java compile to IL? The Mono project and DotGNU project both have plans for compiling Java to IL, allowing .Net and Java apps to talk to each other natively - why then is Sun developing yet another IL standard? The Common Intermediate Language, the ECMA standard which i
  • Even if other big players like MS do not participate, this could really be cool for cross-platform applications. Imagine a caching JIT for such a language. Now imagine a converter that could take Java or .NET assemblies and convert them to this new "byte-code". I am sure a 3rd party would step-up to write the MS version!

    Now we are talking! I want my C# to compile to native code on Linux, Sun, and IBM mainframes. I want to take Java programmers in my firm and have their code call my C# and visa-versa.
  • by Anonymous Coward
    Having tried to write HPC apps in Java, there are some very serious problems with the current JVM.
    1. Lack of scientific data types, such as complex numbers.
    2. Lack of multidimensional arrays.
    3. Inept implementation of floating point arithmetic.
    4. Poor choices for defaults, such as array bounds checking and pretty printing ascii I/O.
    5. Onerous penalties for JNI calls and serialization.
    6. Intermindable process for correcting deficiencies with the language.

    SUN has not displayed an understanding of HPC. Adding Ope

  • XML? (Score:3, Funny)

    by CatOne ( 655161 ) on Friday December 26, 2003 @08:14PM (#7815319)
    Why, so intermediate files can be 100 times larger than they already are? :-P
  • About time. (Score:3, Interesting)

    by AnotherBlackHat ( 265897 ) on Saturday December 27, 2003 @12:46AM (#7816119) Homepage
    I was begining to wonder if the pcode code concept was ever going to catch on - it's what, 35 years old now?

    -- this is not a .sig

  • by Animats ( 122034 ) on Saturday December 27, 2003 @02:05AM (#7816290) Homepage
    This is yet another attempt to breathe life into the boondoggle of massively parallel architectures.

    Over the last few decades, there have been many exotic parallel architectures. Dataflow machines, connection machines, vector machines, hypercubes, associative memory machines (remember LINDA?), perfect shuffle machines, random-interconnect machines, networked memory machines, and partially-shared-memory machines have all come and gone. Some have come and gone more than once. None has been successful enough to sell commercially in quantity. Very few of these machines have ever been purchased by any non-government entity.

    There are two ends of the parallelism spectrum - the shared-memory symmetrical multiprocessor, where all memory is shared, and the networked cluster, where no memory is shared. Both are successful and widely used. Everything in between has been a flop.

    Despite decades of failure, people keep coming up with new bad ways to hook CPUs together, and getting government agencies to fund them. It's more a pork program than a way to get real work done.

    By the time one of these big wierdo machines is built, debugged, and programmed, it's outdated. A few years later, people are getting the same job done on desktops. Look at chess. In 1997, it took Deep Blue to beat Kasparov. Kasparov is now losing games to a desktop four-processor IA-32 machine.

    Figuring out more effective ways to use clusters is far more cost effective than putting a National Supercomputer Center in some Congressman's district in Outer Nowhere. [arsc.edu] There's a whole chain of these tax-funded "National Supercomputer Centers". The "Alabama Supercomputer Center" [asc.edu] has ended up as an ISP for the public school system, hosting E-mail accounts and such. It's all pork.

  • JAVA vs. .NET (Score:3, Insightful)

    by digitaltraveller ( 167469 ) on Saturday December 27, 2003 @05:00AM (#7816594) Homepage
    Putting corporate politics aside, what would be nice from a technical perspective is an intermediate language that is register-based. Microsoft decided to copy java so thoroughly they also copied java's mistakes by making the .NET runtime a stack machine. Market reality tells us Intel/AMD is not going away anytime soon, it would have been wise to make MSIL fit more nicely into the x86 architecture for performance purposes.

    The mono/.DOTGNU projects are similarly unfathomable. It will be nice to have these tools available to run more bloated GUI's, but if one of these projects really wanted to differentiate itself, that project should instead focus on a C# to native-compiler using gcc's backend and let the other project focus on a compiler-to-MSIL. I guarantee you that project would become the 'winner'.
  • by roman_mir ( 125474 ) on Saturday December 27, 2003 @12:37PM (#7817684) Homepage Journal
    I posted this before, but it looks to me that this is still on topic here. How about making Java Free, openning it to new possibilities, optimizations etc.
    ----------
    I would like to see GNU/Linux to become a more powerful platform and by a more powerful platform I mean a platform that provides the user with a pleasant experience. Now, to provide a pleasant experience a platform must give the user a choice - a choice of applications that exist for the platform is a step in the right direction. However, GNU/Linux is not such a platform yet. If it were, it would have been embraced by the masses already and it is not. There are a few things that GNU/Linux system is lacking and one of the more important lacking components is a convenient tool that allows a novice create his/her own software for the platform, software that easily manipulates data imported from multiple sources and allows to create graphical interfaces to that data. In the Microsoft this functionality is provided by such a ubiquitous tool as Visual Basic. In the Free Software world there are many tools that are extremely powerful but none of them have the same kind of momentum that Visual Basic delivers on Microsoft platform.

    To answer the question- "What can be the VB for Free Software?" we need to look at the kind of problems that will have to be solved by this tool. The problems solved by VB are of many kinds, but for the general public VB provides the bridge that closes the gap between a user and a multitude of small problems that the user wants to solve. Of-course it is possible to just create a VB IDE for FS platforms but I believe there is a more interesting solution to this problem and it is Java. Just like VB, Java runs in a virtual machine, so the user will never really have direct access to any hardware resources, but an abstract layer of JVM can provide a nice buffer between the user and the hardware and at the same time Java will always behave in the same way on multiple other platforms, including Windows. Java has thousands of convenience libraries, there is enough Free Software written for Java that can be integrated into an IDE. However there is a big problem with the language itself - it is not Free.

    Sun allows anyone to use Java for free but nobody can modify the language itself except for Sun. In order for Java to become for Free Software and Gnu/Linux what VB became for Microsoft, Java has to be Freed and put out under the GPL. There is also probably a good business sense in it for the Sun Microsystems as well - their language suddenly becomes the language of choice for millions and thousands will work on improving the language, the virtual machine, the compiler etc. In this case Sun will stay in a position that Linus finds himself in - they become the gate-keepers for the vanilla Java tree, but Java will branch and will become much more spread than it is right now. Sun can capitalize on that by providing more Java based solutions and services.

    Now it is likely that Sun management will not agree to the change of their Java's status, however, if there was an immediately profitable reason for them to do this, they just may turn around and start thinking about it. A reason that is profitable could be a large sum of cash available to them upon releasing Java under the GPL. Where could this money come from? These money could be collected by the FS and OS supporters, the developers and the users who would like to see more momentum in the GNU/Linux movement towards a successful (wide spread) desktop solution. I suppose no one will seriously object to have one more powerful tool in their Free Software tool-bag. Java can be this tool and it can be just the thing needed to tip the scales over towards quick appearance of a useful and a popular GNU/Linux desktop.

"I'm a mean green mother from outer space" -- Audrey II, The Little Shop of Horrors

Working...