Slashdot Mirror


Gosu Programming Language Released To Public

llamafirst writes "Guidewire Software released the Gosu programming language for public availability. Gosu is a general-purpose programming language built on top of the Java Virtual Machine (JVM). It is object-oriented, static typed, imperative, and 100% Java compatible (use/extend Java types, implement Java interfaces, compile to Java bytecode). It has type inference (very readable code yet static typing!), in-line functions that you can pass as objects (closures / lambda expressions / blocks), enhancements (inject methods + properties, even on Java types!), and simplified generics. Gosu is provided via the Apache License v2.0. The language itself is not yet open source, although that is planned for a future community release. You can read a complete introduction to the Gosu language, a comparison to other languages, and syntax differences from Java."

49 of 330 comments (clear)

  1. Sounds like Scala by NightWhistler · · Score: 3, Insightful

    From a quick glance it looks like Scala with a more Java-like syntax... I wonder what added benefit they hope to bring.

    I'd be very interested to see an in-depth comparison of the two.

    --
    PageTurner Reader: open-source e-reader for Android with cloudsync. http://pageturner-reader.org
    1. Re:Sounds like Scala by NightWhistler · · Score: 4, Informative

      OK, replying to myself because I obviously didn't have enough coffee yet:

      They list as the benefits over Scala
        - Extensible type system
        - Easy transition from Java
        - Reified Generics

      From those 3 points, only the last one sounds useful...

      --
      PageTurner Reader: open-source e-reader for Android with cloudsync. http://pageturner-reader.org
  2. Re:built on top of the Java Virtual Machine by phantomfive · · Score: 2, Interesting

    The JVM is open source. The patents Oracle has are for the machine, not for compiling to byte code. They aren't Java specific either, anyone with a VM who does JIT compiling could fall under the patents, which is why Microsoft has to pay Oracle for a license.

    In other words, since they are only compiling to byte code, and Oracle doesn't have any patents on that, and they can't (nor desire) to take away people's ability to use the JVM, this isn't a problem.

    The misconception is that if Google hadn't used Java in Android they would have been ok, but if they had used a JIT compiler they likely would have fallen under the patents no matter what language they used.

    --
    Qxe4
  3. Another Language by phantomfive · · Score: 4, Insightful

    At one time in my programming life I liked learning languages, I made it my goal to learn pretty near every interesting language from APL to FORTH.

    Then one day I woke up and realized, it isn't the language, you can write good or bad code in any language. It's how you use the language, and how you organize the code that matters most. I realized as long as you have the ability to encapsulate, you can write good code in any language, even in assembly.

    In fact, with a good macro library, I can write code just as fast and well in assembly as in any other language.

    Or, on the other hand, maybe I've fallen into the trap represented by this saying, "The determined real programmer can write Fortran in any language." But I don't think so. :)

    --
    Qxe4
    1. Re:Another Language by Anonymous Coward · · Score: 5, Insightful

      Perhaps it is tempting to see only encapsulation as the sine qua non in programming languages. However, a programming language does not merely make an algorithm machine readable, but also human readable (eg. yourself after 2 weeks). Therefor, the following properties are important:

      - Conciseness: eg. Haskell is more suitable in representing certain algorithms, as part of the interpretter/compiler makes 'good' choices, you'd have to specify otherwise. The same goes for languages such as Prolog.
      - Manipulatibility: to change a certain aspect of an algorithm (or of a whole system), we need a representation of this aspect. Aspect Oriented Programming, Lambda expressions and meta-object oriented programming are examples of this.
      - Suitability to domain: whether a mathematician or a business process manager reads your code matters. Their experience and expectations differ.
      - lots more...

      Yes, all of it is reducable to a Turing Machine, but languages matter. A lot.

    2. Re:Another Language by OneSmartFellow · · Score: 3, Insightful

      it isn't the language, you can write good or bad code in any language

      But, VB makes writing bad code trivial, and writing good code challenging.

    3. Re:Another Language by SharpFang · · Score: 2, Insightful

      ORG 0000h
          LCALL MACROLIB #initialize the macro library
                            #from now on, let's write some macros we have just defined.
          class HelloWorld {
              public static void main(String[] args)
              {
                  System.out.println("Hello World!");
              }
          }
          LCALL EXECUTE
          JMP $

      --
      45 5F E1 04 22 CA 29 C4 93 3F 95 05 2B 79 2A B2
    4. Re:Another Language by phantomfive · · Score: 2, Insightful

      Indeed, those do matter.

      My point is, if you give me sufficient encapsulation tools, I can write code that is concise, readable and manipulable. And it is something anyone can do.

      --
      Qxe4
    5. Re:Another Language by kaffiene · · Score: 4, Insightful

      Exactly. Which is why this "all languages are equivalent" mantra is just so much bullshit. All languages have domains for which they are more or less suited.

      I don't do script-like tasks in assembler, I don't do device drivers in Java, I don't write enterprise apps in Javascript or VB. Neither do most sane software engineers. This isn't a coincidence, it's because certain tools are better at certain jobs. People who argue that it doesn't matter what language you use cannot explain why good software engineers know why some languages are inappropriate for some jobs.

    6. Re:Another Language by obarthelemy · · Score: 2, Insightful

      Hey, I'm gonna try for an analogy that is neither cars nor pizzas. Let the mod points roll !

      Languages are like MP3 players: some have strong points, extra features, nice ergonomics better price.. but in the end, what counts is the Apple-like ecosystems: users, developpers, tools, PR, content...

      Judging a language on its own merits is nice and all, but in the end, wuality of the tool sets, docs, hype... are probably a bigger contributing factor.

      --
      The Cloud - because you don't care if your apps and data are up in the air.
    7. Re:Another Language by icebraining · · Score: 3, Insightful

      How many lines do you need to emulate a Python's list comprehension statement in assembly? Even if you encapsulate, assembly simply doesn't let you express everything in the statement without a massive number of LOCs.

      Higher level languages are more readable for higher level concepts. It's not the same.

    8. Re:Another Language by chudnall · · Score: 2, Interesting

      there's no way any normal person can write easily in C what is possible in Haskell.

      I used to think that too, up until about a week ago when someone on reddit was challenged to write a C++ equivalent to Haskell's zippers. What he came up with was pretty impressive.

      Possibly that guy is not a normal person though. :)

      --
      Disclaimer: Evolution comes with NO WARRANTY, except for the IMPLIED WARRANTY of FITNESS FOR A PARTICULAR PURPOSE.
    9. Re:Another Language by hesiod · · Score: 2, Insightful

      A compiler translates code INTO assembly (or machine code). An assembler translates assembly code into machine code.

      Geez, the kids these days are spoiled with their fancy IDEs, and don't even know what assemblers and linkers are. So sad.

  4. Yuck!!! by gustgr · · Score: 2, Interesting

    Phonetically gosu sounds identical to the Portuguese word "gozo", which literally means cum (as in ejaculation).

    1. Re:Yuck!!! by gustgr · · Score: 2, Interesting

      Interesting to know. Originally it was used in the same way as it is used in Spanish, meaning joy or pleasure (when a noun). In Brazilian Portuguese it has acquired the sexual connotation besides the usual meanings. Funny thing is that I just discovered that gozo means sweet in Basque.

  5. Epic type system fail - universal covariance by shutdown+-p+now · · Score: 5, Informative

    The introduction has this gem:

    Gosu supports a simplified version of generics. Generics are a way to abstract the behavior of a class to work with different types of objects, but to still retain type safety. There are no wildcards, and generic types are covariant, like Java arrays, which is usually what you want.

    And here's how to make the type system bite the dust with this flaw:

    uses java.util.*;
    var xs : List<Object> = null;
    var ys = new ArrayList<String>();
    xs = ys; // type system allows this blatant LSP violation
    xs.add(123); // we just added an integer to a list of strings - great
    print(xs.get(0)); // yeah, this prints 123 - just to be sure
    ys.get(0).length(); // finally, a ClassCastException which should've happened 3 lines earlier

    What's funny is that Eiffel has already fallen into the very same trap, and is still trying to dig itself out of it.

    1. Re:Epic type system fail - universal covariance by shutdown+-p+now · · Score: 4, Insightful

      The really funny thing is that in practice all generics really need to do is prevent you from having to repeat casts everywhere, catch errors moderately soon, and aid in documentation. Which is what these do.

      They don't let you "catch errors moderately soon" in many real scenarios. It's the same problem as implicit null value for reference types everywhere - end result is you can have one part of code returning null where it shouldn't, that null get quietly propagated throughout your system from component to component because no-one needs to do anything to it, and then it all finally blows up when some other code elsewhere receives a value that should not be null but is - and you end up with a NullPointerException and, often, no clue as to what code originally produced the invalid value.

      Same thing here - someone, somewhere will create a collection of subtype, implicitly upcast it to supertype, and pass it over because they do not understand that List<Number> cannot always be substituted for any random List<Object> - because it's non-intuitive, despite being true (since add() is not covariant). All the evidence I need for this are all the questions asking about how to do just that in Java or C# on StackOverflow. When you ask people to post the code, it almost invariably turns out to be broken, and the type system did them a favor by rejecting it.

      The real 'trap' here is thinking that something has to be theoretically perfect to be useful or convenient.

      We're not talking about "theoretically perfect" here. We're talking about a language that's statically typed - the sole benefit of which is type safety unless explicitly overriden (by casts etc) - but which then forgoes this very benefit.

      Furthermore, the only other language I'm aware of which has the same flaw is Eiffel. Neither Java nor C# nor any other language with generics has this. They all either have no variance at all (which is inconvenient by safe), or declaration-site variance (C# 4.0 "in" and "out" on type parameters) which is easier on the API client but does not let you express all relationships, or usage-site variance (Java generic wildcards) which requires API client to understand what it is all about.

    2. Re:Epic type system fail - universal covariance by shutdown+-p+now · · Score: 2, Interesting

      Fair enough. I still hold by my earlier assertion that this is the mistake of the same proportion and impact as nullable-types-by-default (about which there have been repeated published regrets by the very language designers which introduced them), but I do understand the argument from pragmaticism. Time will tell if your trade-off was worth it or not.

      Then again, those who grok variance (and other advanced stuff) already have Scala, while Gosu could take the niche of a language that is not that far removed from Java (including the learning curve!), but still somewhat more convenient. On the other hand, you do introduce closures - which a lot of the very same people having troubles with variance and wildcards have problem wrapping their heads around - so I'm not sure if the overall balance is good enough for this niche.

      Or whether the niche will even exist for much longer - after all, at some point OOP was that new-fangled academic concept, only present in exotic languages like Simula, and beyond the comprehension of mere mortals coding in FORTRAN or COBOL.

    3. Re:Epic type system fail - universal covariance by shutdown+-p+now · · Score: 2, Informative

      Talking about initial null references and all, I don't know about your Java compiler, but mine refuses to compile a program where an initially unassigned reference is attempted to be used. That's what it's all about isn't it - if the initial use of a unassigned (null) reference is prohibited at compile-time, then surely nothing will propagate anywhere and make a mess?

      No, that's not it. The initial value of an unassigned local variable is "unassigned", not null, which is why the compiler won't let you use it unless all code paths leading to the current point assign or initialize it. But you can still explicitly initialize with null, and then everything I said applies.

      Unassigned fields are initialized to null, and can be used as such with no explicit assignment/initialization.

      Additionally, and regardless of how smart/strict a compiler is, are you saying that you would prefer another constant such as say 'unassigned' (which in fact cannot be assigned explicitly) as a value for unassigned references? Then, if an 'unassigned' value pops up from nowhere at runtime after your program has aborted with a thrown exception, you at least know that it was not a null pointer but that you're using a compiler that cannot tell where an unassigned reference is being used? Just thinking aloud...

      No. The point is that the type system should ensure that a reference that is possibly null cannot be used without first explicitly checking for null. This generally means that references should be non-nullable by default, and if you want null as a valid value, you have to indicate it as part of the type.

      E.g. to borrow C# value type syntax for this - "Foo x" would be a non-nullable local variable, while "Foo? y" would be a nullable one. You shouldn't be able to write "x = null"; nor, for that matter, "x = y", without some check first that "y" is not null. Then, if your program compiles at all, you know that the code does perform all the explicit null checks that need to be done, and, therefore, a NullPointerException is impossible (there's no guarantee that it does what it should in the branches where the value is null, of course, but that's another matter).

    4. Re:Epic type system fail - universal covariance by shutdown+-p+now · · Score: 2, Insightful

      Since when does the line xs=ys; not generate a warning

      Are you, perhaps, confusing it with Java arrays? This is Gosu, not Java. It does not generate any warnings there, by design. In Java, the direct translation of the above would have not compiled. It would have compiled if those were arrays and not Lists, and would have not generated a warning in that case.

    5. Re:Epic type system fail - universal covariance by shutdown+-p+now · · Score: 2, Informative

      Which makes me wonder, what do all these language-design people have against contravariance?

      It depends on which of the two we're talking about: variance of method argument and return types, or variance of generics.

      For generics, the logic goes roughly like this:

      1. Generics are mostly used for collections.
      2. Intuitively, people expect a collection of objects of derived class to be substitutable for a collecton of objects of base class, even if it is not sound.
      3. In practice, most uses of collections per #2 are sound (i.e. only use the covariant methods, not contravariant ones).
      4. So, just default to covariant to make things mostly "just work", at the expense of late error reporting when the use is actually incorrect.

      For contravariance of method arguments, the only argument I've seen about the lack of it is that it is very rarely useful in practice (unlike contravariance for generics), so it's simply not worth implementing. I think that it should still be there as a matter of consistency, but it is a valid argument, especially when resources are always limited in practice. As Eric Lippert (of C# fame) once put it, "whenever someone asks me why C# doesn't have feature X, I ask him why C# should have feature X rather than Y, Z or any other that are on the ever-growing backlog".

      For Eiffel specifically, which uses covariance, it is because it lets you write stuff such as:

      class Foo
        feature equals(other: like Current)
      end

      which Meyer believes is more correct from OOD point of view than:

      class Foo
        feature equals(other: Foo)
      end

      Because you really want "equals" to be of the same type - it's part of the contract of the type. He goes into more detail on his reasoning here (search for "Unfortunately, the combination of static typing with other requirements of the object-oriented method makes the issues more difficult than they appear at first").

  6. Re:stop posting obvious untruths in stories. by shutdown+-p+now · · Score: 2, Informative

    if a type is EVER inferred, then the language is NOT statically typed. just because some preprocessor interpreter assigned a static type heuristically doesn't mean the language has anything to do with static typing... in fact, if the language ever infers type, that has EVERYTHING to do with DYNAMIC typing.

    You might want to go tell the authors and users of ML (incl. OCaml) and Haskell that they're using dynamically typed languages. Somehow I'm sure they will be very open to this idea.

  7. call be back.... by batistuta · · Score: 5, Insightful

    >> The language itself is not yet open source,

    ok, call me back once it is. I don't really need another programming language, let alone a closed-source once.

  8. Re:built on top of the Java Virtual Machine by MemoryDragon · · Score: 2, Interesting

    It is rather questionable if JIT related patents can hold up in a courtcase, JIT compilation has been around since the 70s Smalltalk and Lisp have been using it for decades.

  9. Re:Run for the hills! by shutdown+-p+now · · Score: 3, Funny

    As a geek, you should actually prefer "and", because it is quicker to type than "&&" - it does not engage Shift, and it does not require pressing the same key twice (which requires waiting for release after the first press). Same for "or" vs "||".

  10. Re:Wonder how this turns out... by kaffiene · · Score: 4, Insightful

    You have to be some kind of uber noob to think that Java and the ecosystem it has engendered could ever be called "nothing of value". There are more jobs in Java and open source projects on Source Forge in Java than in any other language. Java is not everyone's cup of tea - neither are other significant languages like C or LISP, but to pretend that Java, like any of these languages offers "nothing of value" is either arrogance or ignorance beyond belief.

    I know that /. no longer caters to a technically literate crowd but you take the cake. I feel stupider for even bothering to reply to you.

  11. Re:Run for the hills! by MichaelSmith · · Score: 2, Funny

    var1&&var2 works but var1andvar2 doesn't

  12. Online help browser sucks. by acooks · · Score: 4, Insightful

    Gosu people, your help browser sucks caravans.

    If I middle-click on a link, I don't want the page I'm currently reading to jump away. I want to read whatever is linked to _later_. Redirecting me and then breaking my browser's "Back" button, without even providing an alternative js back button, is unforgivable.

  13. Learning languages and their philosophies... by boorack · · Score: 4, Insightful
    Granted that not only you learn a language but also grasp philosophies/patterns/paradigms/etc. behind it, it's a Good Thing (TM) to learn new languages on regular basis. You need, however, learn much more than mere language.

    It's good to learn some assembly languages to see how machines work.

    It's good to learn C to get accustomed with low level things, pointer arithmetic, in-memory layout of code & data, OS internals and tons of other things. It's good to tinker and experiment with high performance C code, see how functions look disassembled. Try adding two matrixes row by row and then column by column and see performance differences etc.

    It's good to learn C++ to get accustomed with it's metaprogramming facilities, learn how to implement semi-automatic memory management via smart pointers and how all these high level things interact with low level.

    It's good to learn Java to get accustomed with that whole big world of objects, OOP patterns, TDD, exception handling strategies and tons of other things.

    It's good to learn Scala to get smooth introduction into functional programming concepts (higher level functions, closures etc.) and see how it can be incorporated into traditional object oriented code and more interesting concurrency models (actor model for example).

    It's good to learn Erlang to grasp functional programming even more, learn how to effectively use pattern matching, see the THE actor model implementation and learn about it's interesting error handling philosophy.

    It's good to learn LISP to grasp it's macro system that still cannot be matched in any other language. See Common Lisp at work and Clojure for it's approach to parallelism, mutability and distinction between values and identities.

    It's good to learn Haskell to see how to program in purely functional way and see monads in action.

    Not that I'm in any way competent in all things above. Much of it (plus other things) is still on my TODO list. I'm still being surprised by new ideas showing blind spots of my ignorance on regular basis. I don't buy however that learning new languages doesn't matter anymore. It matters. It's important. Maybe we should choose new languages to learn more carefully, choose less but dig deeper.

  14. Re:Run for the hills! by icebraining · · Score: 2, Interesting

    No, as I geek I prefer because "readability counts". Gains in productivity from key presses are irrelevant compared to the gains in productivity from understanding code as you skim it.

  15. Re:Why bother? There are better alternatives by icebraining · · Score: 2, Informative

    The JVM runs in more systems than the CLR. Assuming it's not too big, you could possibly use it on Android in the near future.

  16. Re:Alright! by carsongross · · Score: 3, Informative

    We aren't trying to sell anything to anyone. Well, unless you happen to be an insurance carrier. I assume not.

    We just released our language, and are excited about it.

  17. Re:Run for the hills! by danieltdp · · Score: 3, Insightful

    Which is good, because it teaches programmers the positive impact white space has on readability

    --
    -- dnl
  18. Re:Alright! by hesiod · · Score: 3, Insightful

    Convince me Scala is better than Haskell. Convince me cucumbers are better than green peppers. Convince me a bucket of dirt is better than a pile of gravel.

    He doesn't have to convince you of anything, because obviously you have already picked your preferred language and think that anything else is useless.

  19. Re:Wonder how this turns out... by danieltdp · · Score: 2, Insightful

    It was runnning the original game. You should be aware that 90% of the code that is running is OpenGl and Java does not implement it. It uses a wrapper to the locally available native OpenGl libraries. So the only overhead is the JNI calls, which have been being reduced a lot on recend versions.

    The point is: any language can do it reasonably well. 3d is done on the video card, not on the compiler or he VM.

    --
    -- dnl
  20. Re:Wonder how this turns out... by psyclone · · Score: 2, Informative

    Stop spreading the old Java FUD. Please do some research if you feel so strongly about how someone else chooses to do their work. I don't care what languages you use, why should you care what I use?

    This is a mature 3D library + engine:

    http://www.jmonkeyengine.com/engine-core/

  21. Stop It! by sycodon · · Score: 2, Insightful

    Just stop with the new (but just rearranged) same old languages:

    Basic,
    C,
    C#,
    C+,
    C++,
    COBOL,
    Dyalog APL,
    Eiffel,
    F#,
    Java,
    Javascript,
    Jscript,
    Mercury,
    Mondrian,
    Oberon,
    Pascal,
    Perl,
    Python,
    Salford,
    SmallTalk,
    Standard ML,
    VBscript,
    Visual Basic,
    VisualJ++,

    Really...isn't it time to rethink all of these different, but same (except for the whacko Python,PHP stuff) and come up with one standard language? Extend it with different libraries if you want, but this dreaming up a new language that is pretty much the same as all the others except the line ends with ";" or you declare the type first instead of last or assignment is "=" except when it's "==". Or iterative structures that all work the same but all have different syntax? WTF people?

    Think of all the talent locked up in someone who has done language A for 10 years but is totally useless to you because your project uses language B? The concepts are the same, yet people's knowledge is arbitrarily walled off in this development environment or that environment. How can this be considered good?

    Innovation doesn't mean re-inventing the wheel.

    --
    When Fascism comes to America, it will call itself Anti-Fascism, and tell you to give up your guns.
    1. Re:Stop It! by Just+Some+Guy · · Score: 2, Interesting

      Really...isn't it time to rethink all of these different, but same (except for the whacko Python,PHP stuff) and come up with one standard language?

      Not just "no", but "hell no". While all of those are Turing complete, I guarantee that you would not want to use Visual Basic to solve the same kinds of problems you'd want to use ML or Prolog for. Very few of the languages you list ("C+"? Heh!) are just minor variations on the others. Their are real, substantial differences between the approaches they take, and things like type systems and garbage collection have implications a lot deeper than just picking which syntax to use for assignment (which I don't think ML even supports in the traditional sense).

      --
      Dewey, what part of this looks like authorities should be involved?
    2. Re:Stop It! by sycodon · · Score: 2, Interesting

      Since I am not CS person (Business, rather), I won't attempt to to argue with you about that.

      However, I think that any reasonable person would recognize that this Tower of Babel approach is holding back software development as a whole, needlessly fragmenting knowledge and impacting the careers of excellent programmers simply because they didn't jump on the latest bandwagon X years ago.

      Do you realize that Donald Knuth probably would not be "qualified" for 80% of the job postings on Dice...the man that practically invented programming? How stupid is that?

      I would think it is entirely possible to bolt a syntax "UI" onto an underlying language implementation that would preserve the lower level advantages held by some languages while supporting a common syntax and enabling the vast knowledge and experience in the industry to be freely exchangeable. In fact, I know it is because that's essentially what Microsoft did with C#.net and Visual Basic.net

      And C+? Yeah, probably something Microsoft did internally I bet. Not sure because I just made it up.

      --
      When Fascism comes to America, it will call itself Anti-Fascism, and tell you to give up your guns.
    3. Re:Stop It! by ciggieposeur · · Score: 2, Insightful

      However, I think that any reasonable person would recognize that this Tower of Babel approach is holding back software development as a whole, needlessly fragmenting knowledge and impacting the careers of excellent programmers simply because they didn't jump on the latest bandwagon X years ago.

      A little yes but mostly no. A programming language isn't just syntax, it's the entire ecosystem of libraries, tools, operating system support, university teaching, and available documentation. Just as business/finance/economics has multiple sub-disciplines and "schools" that are appropriate to different business situations, so does each major programming platform lend itself to creating certain kinds of applications. Saying "let's use programming language X to solve problem Y" is just as foolish as insisting that Six Sigma will always produce the same business outcome as LEAN.

      If you must pick one thing that's holding back software development as a whole, pick human nature within business organizations. The story of LISP shows what happens when one programming language is "too powerful": managers didn't want to replace ten conventional Fortran/C/Pascal/etc. programmers with one good LISP programmer because it would simultaneously lead to that one LISP person being irreplaceable and the manager himself/herself becoming redundant. Contrast with the story of Java, a language deliberately restricted in order to enable lower-skill developers to produce something of value: Java was incredibly successfully precisely because it did not create a business dependency on ultra-productive irreplaceable programmers.

      The "Tower of Babel" is only bad for the first few years of a general-purpose (not assembly language) programming language, when it needs to grow its compiler/interpreter and base libraries for common things like networking, threads, OS integration, GUI support, math, crypto, and basic algorithms. After that it becomes just another tool that may have good uses for certain situations. Every good programmer will have at least half a dozen such languages in their toolbox: mine includes C, C++, Perl, bash shell script, Java, Common Lisp, and Clojure, and I am adding to that D to eventually replace most of my use of C++ and Java.

    4. Re:Stop It! by poopdeville · · Score: 5, Insightful

      Since I am not CS person (Business, rather), I won't attempt to to argue with you about that.

      Here is a business-like analogy: How hard is it to divide roman numerals? It's not easy. There are dozens of rules to memorize in order to make it work. Compare this to using Arabic numerals, where you only have to memorize two rules.

      However, I think that any reasonable person would recognize that this Tower of Babel approach is holding back software development as a whole, needlessly fragmenting knowledge and impacting the careers of excellent programmers simply because they didn't jump on the latest bandwagon X years ago.

      Yes, this is a big problem. But the issue isn't the "Tower of Babel" so much as a misunderstanding of the domains in which a tool can work well, which ultimately leads to "churn". There is an old joke along the lines of "Any sufficiently complex software project implements a buggy version of half of Lisp". There is some truth to that. Lisp is a language that allows abstraction over basically any term. This is something that imperative/OO programmers want, but they don't know how to say (and they tend to cover their ears screaming "LA LA LA LA LA" when academics tell them the problem was solved in the 1960s). So they build up ad hoc solutions to quantify over specific terms. Each of these operations is potentially tricky and buggy. The "Tower of Babel" is a consequence of this. Some of it is legitimate -- new languages can provide better tools (that is, new ways to quantify) to increase productivity. But benefits only accrue if businesses switch to them, at a potentially high cost.

      --
      After all, I am strangely colored.
    5. Re:Stop It! by Anonymous Coward · · Score: 2, Funny

      Just stop with the new (but just rearranged) same old woodworking tools:

      Adze,
      Allen wrench,
      Belt sander,
      Buffer,
      Chainsaw,
      Chisel,
      Dremel,
      Engraver,
      Hammer,
      Lathe,
      Miter saw,
      Ratchet,
      Router,
      Sandpaper,
      Saw,
      Screwdriver,
      Table saw,
      Wrench,

      Really, blah blah blah...

    6. Re:Stop It! by wwphx · · Score: 2, Interesting

      I have a button at home from my days of wearing buttons at science fiction conventions that says "C: The power of assembler with the flexibility of assembler."

      Yes, I am old school. The first languages that I learned were Basic, Cobol, RPG, Fortran, followed by Pascal, C, C++, and some assembler. Then lots more. And frankly, I'm bored. Gee, now we have a language that is 100% compatible with Java! If it's so compatible, how is it different? What are the substantial advantages that it offers that I should bother learning it? And how is learning yet another obscure language going to enhance my employability? I saw one of my old teachers many years ago, and she told me that they no longer taught programming theory as a standalone class. Apparently people want to learn a programming language rather than learning how to program.

      Programming theory ignorance and lack of flexibility makes me a sad panda.

      Oh, you left Ada off your list.

      --
      When you sympathize with stupidity, you start thinking like an idiot.
    7. Re:Stop It! by Just+Some+Guy · · Score: 2, Insightful

      In Python:

      mycounter = 0

      That's not just a syntactic difference, and it's not just assigning a value to a variable. Instead, it's creating an int object with a value of 0 and binding the name "mycounter" to it. Since Python objects have types but variables don't (as they're all basically pointers to objects), there's no type declaration necessary - or even feasible without significant ugliness.

      In turn, you're missing my point in that these aren't just cosmetic differences that a little bit of syntax unification can hide. For instance, you include languages on your list that implement single assignment and don't really support (or at least don't encourage) variable assignment in the sense you're describing.

      --
      Dewey, what part of this looks like authorities should be involved?
    8. Re:Stop It! by Surt · · Score: 2, Funny

      It's happening because languages are nowhere near maturity yet. Give it another 150 years and we'll be down to about 5 or 6 commonly used languages. Right now no one has it adequately right.

      --
      "Who is the Journal of Quantum Physics going to believe?" --Stephen Hawking
    9. Re:Stop It! by ciggieposeur · · Score: 3, Insightful

      "Clojure" and "D"?

      Just shoot me now.

      Why are you so hostile to learning? Clojure is a modern "Lisp done right", with all of the syntactic power of LISP minus quite a bit of historical goop, running on a very modern JVM with the goodies that that provides (the massive portfolio of Java libraries and mostly platform independence). D is a very modern "C++ done right" that is very well-suited for applications where you need the ability to occasionally shoot yourself in the foot (i.e. high performance, constrained memory, low-level access) but most of the time would like to use higher-level conveniences like garbage collection and templates.

      One thing about the multiple sub-disciplines and "schools"...they all use English.

      Sure, they all use English, but they don't say the same thing. (And actually many of them don't. Business is global these days.)

  22. I disagree by luis_a_espinal · · Score: 2, Insightful

    OK, replying to myself because I obviously didn't have enough coffee yet:

    They list as the benefits over Scala - Extensible type system - Easy transition from Java - Reified Generics

    From those 3 points, only the last one sounds useful...

    You are kidding right? In reality-land, for better or worse, #2 is probably as important of all for a lot of Java shops as #3 if not more. Type erasure sucks balls, but we can get it to work (just as we were able to write good working code without generics.)

    Adoption and ease of transition are things people tend to undervalue/underestimate. Being able to leverage a language with better qualities with as little code change as possible is certainly an enormous, practical incentive. For me, I would give an eye to work on something else (Scala, Ruby/Python on the VM or Clojure), but the reality on the ground is that something like Groovy (using the Groovy++ compiler, though) is the most likely candidate for adoption given its easier transition.

    Gosu seems to embrace the good qualities of next gen JVM languages (and C#) without a substantial deviation to the syntax.

    Necessary /. anti-fanboy disclaimer: Before the /. fanboy crowd displays their usual lack of reading comprehension, I'm not saying that Java syntax is superior or that the syntax sported by the other JVM languages is deficient or bizarre. I'm simply stating the fact that there is an associated, practical cost of transition (in terms of education, time of getting proficiency, possible introduction of coding errors, etc) that is proportional to the syntax differences that need to be overcome - this without considering the external pressures of writing software for solving problems in the right here and right now.

    With infinite time and resources, and zero friction from requirement/requirement changes and organization dynamics, syntax differences would not matter. AFAIK, that is not the context in which programming shops operate. . Another important addition is the use of delegates. Oh my, I can only think of the possibilities we currently can only do in Java with a lot of boilerplate.

  23. Re:How precious by profundus · · Score: 2, Insightful

    I would love to see you develop modern enterprise apps in C++. Different languages often are suited to different tasks.

    And why exactly are you so anti Java, to the extent you are making a froth mouthed fool of yourself? It's alright if you don't know how to program in Java. There is plenty of respectable, often much more cerebral, glamorous work you can do, from writing device drivers to application prgramming. What is 'your' beef?

    and badly written code is not just a Java phenomenon. See http://thedailywtf.com/ for examples in most common languages.

    --
    A new revelation every day
  24. Inexperienced Programmers by bill_mcgonigle · · Score: 2, Insightful

    Think of all the talent locked up in someone who has done language A for 10 years but is totally useless to you because your project uses language B? The concepts are the same, yet people's knowledge is arbitrarily walled off in this development environment or that environment. How can this be considered good?

    Innovation doesn't mean re-inventing the wheel.

    Sounds like inexperienced programmers. The first 10 languages you learn are challenging, after that it's all syntax and frameworks.

    Now then, some languages are bundled with extremely baroque and quirky frameworks which can suck up most of your development time. But this language is actually doing it right - by being Java-compatible on the JVM, the programmer can recycle his Java Library knowledge. Parrot is another similar approach, where Perl, Python, Ruby, etc. programmers will be able to trade libraries.

    The bigger problem list is probably:

    JDK,
    CPAN,
    Gems,
    STL,
    PyPi,
    etc.

    These might be worse - they're largely duplication of labor, whereas the languages are at least trying to do something different.

    --
    My God, it's Full of Source!
    OUTSIDE_IP=$(dig +short my.ip @outsideip.net)