The Coming War Over the Future of Java
snydeq writes "Fatal Exception's Neil McAllister writes about what could be the end of the Java Community Process as we know it. With the Apache Software Foundation declaring war on Oracle over Java, the next likely step would be a vote of no confidence in the JCP, which, if the ASF can convince enough members to follow suit, 'could effectively unravel the Java community as a whole,' McAllister writes, with educators, academics, and researchers having little incentive to remain loyal to an Oracle-controlled platform. 'Independent developers could face the toughest decisions of all. Even if the JCP dissolves, many developers will be left with few alternatives,' with .Net offering little advantage, and Perl, Python, and Ruby unable to match Java's performance. The dark horse? Google Go — a language Google might just fast-track in light of its patent suit with Oracle over Android."
Reader Revorm adds related news that Oracle and Apple have announced the OpenJDK project for OS X.
They are the one and only company that can pull this thing straight. They have the money, they have proven their commitment to OSS, so I sincerely hope they step in and fix this. It's too important to let Oracle mess everything up.
You know, this is very puzzling. Why hasn't FOSS come up its own managed runtime+language stack?
It's certainly not for a lack of engineering talent.
Procrastination? Lack of vision? Or is open source just too tribal and fragmented to coordinate on something so big and cross-disciplinary?
It kind of sounds like Oracle is shooting themselves in the foot with these suits against google...
check out the Mp3 Garbler I built!
Maybe I'm being naive, but right now C# looks fairly tempting. MS aren't pulling strange "premium VM" tricks, Mono is well developed and generally works as expected, and it's not a huge leap in terms of language. Many libraries in Java have C# equivalents (Bouncy Castle, iText, etc.). If we were going to leap from Java, C# would definitely be top of my likely destinations.
But no, obviously we're more likely to jump to a language I've never heard of before, with none of the libraries we use, and no experience base to pull from...
Really? As competition to Java it is fairly comparable. It has some features that, used improperly will lead to slower code (though, they are nice as a convenience), it is missing some features, has some features that Java is missing, and the free version of Visual Studios, at least in my opinion, is a nicer IDE than Eclipse, Netbeans or Anjuta. And it's not being used in a bunch of lawsuits by it's owner.
As a point of reference as to where I'm coming from with this post - Sysadmin + Java programmer at work, C/C#/Python Programmer at home.
Self proclaimed typo king, and inventor of the bear destroying coffee table (patent not pending).
So assuming the JCP does dissolve, I fail to see why folks couldn't find a way to fork Java. Are there patents in place that would completely moot any such effort? What about clean-room reverse-engineering of the JVM, wouldn't that open some doors?
Confused by the summary's lack of options,
"What in the name of Fats Waller is that?"
"A four-foot prune."
quoting: "with .Net offering little advantage, and Perl, Python, and Ruby unable to match Java's performance"
ehhm... what? who wrote such ignorant statement? Or was this written in the early 90s where some of those languages did not even exist?
It's too bad that some of the most promising new languages (Scala, Clojure) are JDK based. What we need is a modern lingua-de-franca, a language that's structured enough, with modern features, a good standard library, and that doesnt take 10 years to master. Go is still proprietary shite that will bite you after Google turns evil (and you know they will). Havent looked at D yet. Erlang maybe?
Is there any high-level, easy language today that's not threathened somewhow by f%^&%ng patents from the big guys?
-- Home is where you eat your heart out.
Not to mention that C# already has a ton of useful features that are, at best, planned for Java 7 and 8 (or later).
I've done significant cross-platform .Net/mono development and 99% of the stuff "just works". I'd argue that Mono is actually a better cross-platform development environment than Java *right now*. Java often requires tweaks because different builtins work differently on different platforms, even though they're not supposed to.
The open source weak spot has always been the infighting, eventual lawsuits, splitting and renaming, remember that old saying about too many cooks in the kitchen?
did you forget to take your meds?
Google is trying to force the legal issue and end this with a court battle.
Apache is trying to end it using the JCP
IBM is trying to be all chummy and get Oracle to support OpenJDK
If Google wins then Java is Free, if Apache wins then Java is Free, if IBM wins then Java is theirs.
An Apple is a fruit. There are only so many words, and Go seems as good as any and better than some.
Just sayin'.
We may even codename the next release "Paris"...
http://www.dieblinkenlights.com
... the biggest loser in all of this is the customer.
As per fucking usual.
THE HONOUR OF THE KNIGHTS - CC Licensed Sci-Fi Novel
"'...many developers will be left with few alternatives,' with .Net offering little advantage"
Logically isn't that the same as saying, "...many developers will be left with few alternatives,' however .Net offers some advantage"
If java gets screwed who care, back to C!
They could have called it Goo. They just would have to be careful to never put "grey" in front of it.
Actually, thinking again, I guess they actually want it to behave like grey goo: Eat up market share from any other language until everyone writes his code in Goo.
The Tao of math: The numbers you can count are not the real numbers.
If Perl, Python, and Ruby are unable to match Java's performance, I'll take their portability, ease of development, lack of overhead and succinctness over Java any day.
Rich And Stupid is not so bad as Working For Rich And Stupid.
to Open JDK.
http://blogs.sun.com/theaquarium/entry/the_story_of_a_tweet
Basically, the original news about Oracle splitting the JVM to open/free but crippled and premium/fast commercial one were wrong and based on misinterpretation of a tweet.
Apple just today announced they are contributing their java/jvm implementation to the Open JDK project, so there will be JDK for OS X in the future as well.
So, everyone calm down and enjoy JVM + your favourite language (Scala, Clojure or what ever else you like).
As the island of our knowledge grows, so does the shore of our ignorance.
go? Python is as big at google as java. Aren't they working on drastic improvements to performance in the python vm? At this point it seems like go is a toy language that a few guys are messing around with in their 20% time. Definitely overblown.
Objective C is associated with Apple but it's not an apple exclusive. It has the late binding attraction of Java, but the speed of C. It simplifies objects and is easier to write than C++.
Some drink at the fountain of knowledge. Others just gargle.
I understand the need to drive page hits by claiming, "In this bad situation $LANGUAGE could step in and fill the void", but Go seems like an odd choice. It's not that I don't like it: I've written some pet projects with it and it's a fascinating language that I doubt I'd mind having to code in as a full-time job, but they're not similar languages at all, it's an apples-and-oranges comparison
Java is interpreted, Go is compiled. Go lacks inheritance, generics, huge backing libraries, and a bunch of other things that Java programmers rely on. Basically, Go is not an application language, it's a systems programming language that happens to have garbage collection; it's closer to a replacement for C++ than one for Java.
In any event, I just don't see people abandoning Java en masse because of this Oracle spat. There's just too much legacy code out there, and too many programmers fluent in Java and nothing else.
Dislike the Electoral College? Lobby your state to join the National Popular Vote Interstate Compact.
As per fucking usual.
I wish fucking were more usual in my life.
< ... sigh ... >
"What in the name of Fats Waller is that?"
"A four-foot prune."
Every open/free license in existence should be rewritten to exempt Oracle from being able to use the software, or modify it, or any thing else. Let Oracle write their own operating systems, device drivers, web servers, etc. from scratch, with no help at all from open source. Add a provision that Oracle and only Oracle can use the software ONLY if they pay out the ass for it, under terms which mirror Oracle's own licensing. A tit-for-tat approach like this might get them to come around.... oh... sometime after Ellison retires or dies.
You see? You see? Your stupid minds! Stupid! Stupid!
To me Oracle's behavior is very reminiscent of MS past behavior. Assimilate and destroy. I see no good coming from anything Oracle touches. I'm looking at you Larry.
Conservative, mod down for violating
Perl, Python, and Ruby unable to match Java's performance
I don't know about Ruby, but Perl has damn good performance, such that it still runs a number of major web sites, including this one. The ONLY reason Java is as popular is because Corporate America loves a corporate solution and Java was being sold as a solution by major vendors(think IBM, Sun and for a while Microsoft).
You cannot really sell Perl, or Python, or Ruby as a corporate solution because they cannot hijack a version, edit it and claim it is special. Hell, Perl runs on EVERYTHING what more can IBM add to it? This is really why good open source languages are neglected by large companies, they cannot charge anything for it.
Yes, there are plenty of projects to speed up Python. Unladen Swallow, Pypy and Psyco, at least.
Dilbert RSS feed
I love python but if I had to choose a language to write a web app in that at some point I may need to scale it would be PHP. Why you ask, well I have a compiler that can take it to
native C++ available if I need it.
Got Code?
Maybe they want it to behave like a fast, simply, easy-to-parallelize language?
-- 'The' Lord and Master Bitman On High, Master Of All
And if you write a user interface with it, that would be a GooUI
The Digital Sorceress
The language is portable to any platform, very powerful, and isn't at-risk of suffering the same fate as Java.
The criticisms of it are mostly fluff in my opinion...people trying to say that their personal stylistic perferences should be industry standards, or justifying their own lack of skill by saying C++ makes things harder than they should be, etc.
It might be worthwhile to explore what it would take to make some variation of Lisp (*cough*sbcl*cough*) a workable choice for modern software developers. My own sense is that the major things lacking are a modern, powerful, cross-platform GUI and a general "lack of polish" (for lack of a better term) when it comes to interfacing with the rest of the world, but perhaps there are other fundamental issues? This seems appropriate:
We were not out to win over the Lisp programmers; we were after the C++ programmers. We managed to drag a lot of them about halfway to Lisp.
- Guy Steele, Java spec co-author (http://www.paulgraham.com/quotes.html)
Maybe it's time to drag them the rest of the way?
"I object to doing things that computers can do." -- Olin Shivers, lispers.org
Does anyone else find it a little too convenient that Apple decided to the drop support for their JVM recently as well? Of course they may have already known this was direction things were headed and just preempted it. I’m wondering if it’s not just a war brewing in the Java world, but against open source as well. Open source projects have become competitive with commercial offerings cutting into the profits of big companies and they are taking steps to eliminate them. So far big companies have been pretty effective destroying the communities around projects which call into question the viability and therefore the adoption rate of open source software.
GOO was already taken - it's a lisp dialect by Jonathan Bachrach of MIT. "GOO" is an acronym for "Generic Object Orientator."
Bachrach was one of the people working on Dylan, and people in language and compiler development circles (such as the creators of Google Go) would likely have known about his work (or at least know how to google "goo language" and discover that the name was already in use for a computer language).
people are going to stop using java merely because of the ambiguity that surrounds the language and its future. it will die due to what might happen before what does happen.
If you're a 100% Microsoft shop, then C# may be a solution. If you need to support multiple platforms, then C# is right out the window.
Understanding that the entire toolchain and widespread adoption is the most important part of getting it. We all (at least, if we were there for it) know how Java happened - the short version is that Sun positioned it as an alternative to the MS Borganism that many companies were rightly afraid of back then.
I still think Java pretty much sucks. But it has the tools, and perhaps more importantly, a huge number of able bodied code monkeys who can write it.
Enter Oracle. The entire strategy that they've pursued forever is not much different than what Microsoft tried - build or buy essential parts of the stack, and then march up and down it to dominate your category, then extract as much rent as possible. It works better in the enterprise space and is bloodier because there are fewer players. (Microsoft's ecology was too varied with too many players to really dominate like Oracle can.)
So, Oracle's strategy is obvious. They own Java, and thus indirectly can manipulate the terms of output of thousands of developers. They don't care about people liking them, and inertia means they can extract rent for a long time (Even if a second Sun/Java moment happened - say, Parrot v. Java, ramp-up for Parrot to fill the niches, get solid, debugged libraries for everything, get widely deployed, and get thousands of developers up to speed takes how long?)
They don't give a shit about Apache, or developer goodwill. The for-profit players like IBM have different strategies, but keep in mind that their goals are profit maximization, too.
So there are some potentially interesting strategic plays to be made between the various players, but anyone with a bit of experience with the business side of the industry has seen this show before.
I forget what 8 was for.
I'm sick of reading slashdot stories and comments that compare dissimilar languages with Java. What makes Java interesting, useful, and modern is the JVM; these comparisons between language features alone are ridiculous. Most of the languages suggested as alternatives in Java-related posts in the last month are merely interpreted. Python, ruby, perl, etc. are all modernish, high-level languages with dynamic typing. They all run (primarily) on their slow, crippled interpreters. This has numerous drawbacks including problematic multithreading (c.f. the arguments about python's GIL and workarounds over the years), if it's even attempted (in perl, separate processes are the only reliable way to do concurrent programming).
And now Slashdot compares Go to Java. Go is certainly interesting, but it's not in the same space as Java. Java is a portable, networked, object-oriented *application* language. It removes a lot of hassles not necessary to tinker with when writing applications. It has useful, established APIs (servlets, EJBs) for building large-scale enterprise applications. Go compiles to machine code and is therefore not portable. Go doesn't allow inheritance. Go is a language that tries to solve a different problem than Java has solved. Go is no replacement.
Java is by no means the end of all languages and runtimes, but it has set the bar pretty high. It would be wonderful for other projects to adopt Java's features and improve and extend them. It'd be awesome if such an efforts weren't completely nullified by having Microsoft as its boss.
For the naive (and the dude who argues that python is a suitable replacement for Java), below is a list of features Java provides:
Java's JVM does true multithreading. The memory model is tight, efficient, and predictable. The language includes useful mechanisms for writing for concurrency (everything from traditional locking mechanisms to concurrent data structures and the convenient "synchronized" keyword). Productive, predictable concurrency is possible in Java and not in many other languages.
The JVM offers other benefits, including security. The class verifier can sort out malicious code before it's executed. The class loader can check roles granted to a piece of code and a cryptographic signature and decide not to run code on that basis. Even if a piece of code gets loaded and executed, it's sandboxed. Talking about these features is usually relegated to discussions about java applets, but their relevance to other applications is noteworthy.
Java includes a lot of well-organized, stable libraries for doing everything from handling HTTP requests and crafting responses to doing cryptography. Its collections API has many data structures that just aren't present in other languages without looking to a third party.
Finally, the JVM makes naive code fast. One can write reasonably expressive, straightforward code and expect that the hotspot compiler will optimize it. It's a boon for getting maintainable, quality code out-the-door quickly.
I too am bothered by Oracle's litigiousness, but running away from Java isn't a solution. We need alternatives, that's for sure, but the availability of such is a lot more limited than the average slashdotter seems to think.
As TheTurtlesMoves points out, you do it the same way as usual - figure out what is going on through test cases, inspecting the state, reading the code and so on. Erlang does have one advantage though: you can buy QuickCheck which will generate reasonable test cases automatically from properties you specify. If your program goes boom - QuickCheck will shrink the test case until your program stops going boom, and show you the smallest example it could find that makes your program go boom.
The South Park episodes with Satan and Saddam pop into my head. Which one is Satan, Steve or Larry?
that was meant to be a joke right? i've written wxPython scripts, and even perl with wxWidget extensions, specifically to replace sluggish memory guzzling java "gui applications". an example of java app actually outperforming perl, python, and ruby (like google apps for java vs. google apps for python) should be a standard link on such claims.
Having to work for a living is the root of all evil.
While Sun may not have had a stellar track record (e.g. their alleged mismanagement of OpenOffice.org), at least they were not trying to actively sabotage things.
I think LibreOffice has a reasonably clear path forward independent of OpenOffice.org/Oracle, but I am still concerned for the future of MySQL and VirtualBox. At least MySQL has the MariaDB fork (and maybe we'd all be better off migrating to PostgreSQL anyhow). I am not aware of an active VirtualBox development community outside of Oracle though; they're probably at risk if Oracle decides to shake things up.
If Oracle can't or won't pull their fingers out of their arses then someone will fork it and slowly but surely it will carry on its merry way even if its called something else for legal reasons. Sun / Oracle have pissed off enough people that I can see this really happening.
Congratulations, this is officially the dumbest criticism of Google of all time.
Tell me again why OSS is so great? One of the benefits often touted has been that OSS is not held hostage by a single vendor and no matter what happens, you will always be able to do what you want with your applications and data. Does this current situation with Java cast doubt on that meme? In some ways it seems to re-enforce it. If Oracle did not buy Sun, nobody would be worried about Java. Here we have a single corporation that is upsetting a very large apple cart. Java is all over the place. Countless companies and developers are fully invested in the platform.
I bet Microsoft execs are cackling with glee right now. As much as they are maligned, they have a stable product roadmap. They can tell you what is coming out in 2015. They have plans for the next version of SQL server, Exchange, .net, IIS, etc, etc.
They say that time will tell. You get what you pay for. There is no such thing as a free lunch. So many cliche's, all of them relevant.
Oh, wait ...
Sent from my ASR33 using ASCII
I saw a comparison a while again of 3 sites implementing identical functionality in PHP, Python, and Java, and the performance characteristics were nearly identical, assuming that none of them were interpreting on the fly. (ie, php had a bytecode cash that was hot for the purposes of the test, etc.)
If anything, I'd say that while runtime speed might be similar, Java uses more memory per connection.
Sooo... since when?
Google must be salivating at the idea of Java crashing right as Go starts to... well, go.
Logical and functional languages are great - absolutely wonderful. I have written tens of thousands of lines of code in them, and would take them over Java, C#, Ruby, and all the rest any day. As long as you do not need side effects. For pure algorithms, for pure data processing, they are great. As soon as you want to handle ugly, practical things like user interfaces, they are just awful. And, let's face it, most applications don't need complex algorithms - they are driven by the need to interact with users and save data to databases. Pure side-effects. And for that - I really hate to say it - no language out there has really improved much on good ole pre-.NET Visual Basic.
Java is ok, Ruby is nice, the other languages I've used all have their pluses and minuses. I confess I've somehow managed to miss Python. Unfortunately, none of the languages I know make the grunt-work of writing, testing and debugging user interfaces and databases any easier. In fact, the nicer a language is in an aesthetic, theoretical sense, the more likely it is to make real-life things like GUI and database development really difficult. For all the praise of the Apache libraries, things like Apache Hibernate are really just patches that try to hide the fundamental mismatch between an OO language and a relational database. They don't fix anything, they just sweep the dirt under the rug.
So, I've groused enough. Somebody please tell me which wonderful language I've overlooked that makes GUI and database development genuinely easier?
Enjoy life! This is not a dress rehearsal.
One of two things are going to happen: Oracle loses the suit to google, Java is open sourced and apache takes it over for business as usual. Either Apache or Google will host and promote development from that point forward. Both of them have a vested interest in seeing it go somewhere. Or, it could go the other way - oracle wins the suit against google, now they're sitting on an IP goldmine, and they milk it for the settlement and promptly sell it to Sony. Blu-rays are all java, Sony is willing to pay $BIG_MONEY for the IP, I'm sure, and Oracle isn't really interested in owning yet another language. They sell it to Sony with a license lease forever for a dollar or something similar and then Sony owns it.
This reminds me of when Parcplace and Digitalk merged. The infighting did no good to the Smalltalk language.
Why do we need a "process" that decides that a popular technology should be "formalized" in a spec that more often than not is incompatible with the established framework in question.
Examples:
* log4j established as a de facto standard? Let us add a different logging API to the standard library!
* OSGi established as component architecture? Let us write a JCR instead of accept that the market has spoken!
* Spring as IoC container? No, we need a spec for that sort of thing too!
The JCP has become irrelevant, Springsource + Apache + JBoss and a few others are the driving forces.
I'm not arrogant enough to tack that on via FTFY
And thank you for that
Bow-ties are cool.
http://llvm.org/
The LLVM Core libraries provide a modern source- and target-independent optimizer, along with code generation support for many popular CPUs (as well as some less common ones!) These libraries are built around a well specified code representation known as the LLVM intermediate representation ("LLVM IR"). The LLVM Core libraries are well documented, and it is particularly easy to invent your own language (or port an existing compiler) to use LLVM as an optimizer and code generator.
JIT compile or batch compile to native or run in interpreter.
The issue is the languages themselves. If you have to write all of the performance critical sections in C, why bother using the non C language in the first place?
Because the performance critical sections often account for relatively small portions of the overall program?
The idea is to write what you need to write, and get it done efficiently, by using a high-level language. And then you go back and optimize the 10% of code that gains you 90% of the benefit to be had from optimization.
Bow-ties are cool.
Steve Balmer throws a war-chair at Larry Ellison. It's quickly rebuffed with an arm guard. Larry summons an army of lawyers. Balmer, expecting his chair-throwing prowess to be all he'd need to win found himself out manned. Before he can summon his legal team for backup on his WIndows 7 phone, he's captured, brought before Ellison, and forced to bow! Ellison claims his role as Darklord of the IT world and the black sceptre is torn from Balmer's clenched fist. "I'll get you for this, Ellison! So help me..." (fade to black)
Unladen Swallow, [...]
That depends. Is it going to be an African or a European swallow?
with .Net offering little advantage
.NET is technically superior to Java in almost every way. But, this is the vacuum known as slashdot, where an extremely viable solution will be cast off as "offering little advantage" simply because it is associated with Microsoft. It's cool. You can go on writing mountains of boiler plate code in your horribly stagnant neo-cobol.
Similes are like metaphors
I've looked at the GNUstep runtime and I've written some very interesting things in it on Linux, including a basic UI library modeled after UIKit based on opengl. I'm surprised there is not more of an objective C following, especially being based on gcc with runtime compatibility with C++.
The good thing about java, and J2EE, was the wealth of libraries that came with the JDK.
With C++, from what I remember (haven't professionally programmed with C++ in a decade) there was Boost, but the rest was using libraries available to the operating system itself, or doing a lot of research (like for libpurple).
Both are great languages, but Java was nice for having such a large available pool of things to work with.
Uh, Linux geek since 1999.
Time for all the developers in the world to file a class action lawsuit against Oracle. When Java was under Sun, it had a feeling of openness and robustness that brought in developers. That openness is just about gone (and knowing Oracle, the robustness might also be gone too). So now all of the developers who have learned Java through school and work face a daunting future, because of one company. I am not saying that it isn't easy to learn a new language, but what is hard is to become an expert in a new language.
Can you sense my bitterness? I take what Oracle is doing as personal, and rightly so. So it is developers passionate about a platform versus a short sighted, push everyone aside, so I can make money company.
Probably because they solve a problem that is only really applicable in the closed-source world: needing to run the same binary on multiple operating systems / architectures.
Not really: they also solve the problem of delivering compiled code in a form that can be easily sandboxed. You can load untrusted code into your process (e.g. an applet on a web page) and run it, confident that the VM and language make it impossible for that code to access memory/files/hardware you don't want it to access.
It would be possible to perform sandboxing on C source code, if there were a standardized "safe" set of APIs, and if you restricted the language and compiler to forbid things like pointer arithmetic, unions, and inline assembly. But then you wouldn't really be writing C anymore, you'd be writing in a language that isn't quite C using a library that isn't quite the C library.
Visual IRC: Fast. Powerful. Free.
The language is portable to any platform, very powerful, and isn't at-risk of suffering the same fate as Java.
The criticisms of it are mostly fluff in my opinion...people trying to say that their personal stylistic perferences should be industry standards, or justifying their own lack of skill by saying C++ makes things harder than they should be, etc.
C++ is not an application-level programming, but a systems-level one. Java plays both roles. Furthermore, it is not the language that is of value, but the enormous (and standard) class library; a defined component model standard for distributed computing; a defined component model standard for thin-client development; a defined standard for persistence; a defined transactional model; etc, etc, etc.
Many of the things mentioned above (sans the hiccups and false starts) have been refined, tested and tried on the field for a decade now. That is what's lacking in C++ (a language that I like more than Java... and I work on Java for a living mind you.)
There are no comparison between the two languages because they are incomparable; defined and designed for two completely different niches and roles. It's not about replacing one language with another, but about replacing an entire ecosystem with another one.
Having worked on both, worked on Java for the last 12 years (on both application and system development) and about to work again in C++ and C (embedded stuff), I can tell you this:
C++ (or the lack of equivalent enterprise/distributed plumbing) makes it unsuitable for the roles fulfilled by Java (or .NET). And vice versa, Java (despite having a shitload of de-facto and de-jure standard plumbing) is unsuitable for the roles filled by C++.
When you work with both languages and when you work on both application and system development, you very quickly how different they are; how silly is to compare them; and how impractical (if not impossible) is to consider using one in place of the other.
The core aspects of C++ don't fail on different platforms. Various common C++ libraries with sophisticated utility functions might. And of course hardware drivers and such probably will. But these aren't a problem of C++ itself, just of their unique implementations.
Good code design, with separation of logic from interface, etc, make the problems you listed minimal.
It just so happens that plenty of amateur coders write open source to make a name for themselves, and they don't do this right (since they are amateurs), and their bad code is what must be compiled 15 different ways and breaks on different platforms.
"Google Go picks up developer endorsements -
The programming language aims to combine the speed of Python with the robustness of C++"
Er.... wtf? Python is faster than native code now, eh..?
Erlang trumps J2EE in all respects!
C can be a high level language. In one recent project, I added garbage collection to C and tagged types. The code is a lot like Javascript. Function arguments, return values, parameters and local variables are of type "val", the null pointer is replaced by a nil which is safe to use, type errors throw exceptions.
Even string literals are incorporated into the scheme. Using the macro lit("foo") I make a string literal foo (proper compile-time static data) which is type-tagged and behaves as an object of string type. The garbage collector recognizes these as pure objects (just like fixed integers, etc) and skips over them.
The val object is represented as a pointer, but with a few spare bits which serve as a type tag. Fixed width integers are unboxed, and the nil object is actually a null pointer, which nicely integrates into C, because you can write code like if (obj) { ... } which means ``if the object is not nil ...''. nil is also the empty list and list terminator (exactly like in Lisp).
Instead of printf, I use a function called format. All of its arguments are "val" so there are no type issues. The function can detect when there aren't enough arguments for the format string and throw an exception. format sends output to a stream object.
Basically C gives you the basic flow control constructs, functions, and expression syntax. How you manipulate the bits is up to you; you can fix the semantics of the data items being pushed around.
There are limitations, of course, because C doesn't give you enough access to the language to tweak the compiler. For instance, you can't teach the compiler to generate code which is aware of your garbage collector.
An individual C compiler could have extensions for that, but there is no such thing in the standard language, and even hacks like this are outside of the standard (though de-facto quite portable, which is often what counts).
Excuse me if I'm not understanding this. I read earlier that some of the original Java engineers are forking Java from a pre-Oracle open source distribution. Can a completely unencumbered distribution be created from that, to which the Java community could rally?
Oliver's law of assumed responsibility: If you're seen fixing it, you will be blamed for breaking it.
To quote: "Even if the JCP dissolves, many developers will be left with few alternatives, with .Net offering little advantage, and Perl, Python, and Ruby unable to match Java's performance."
What nonsense.
The person who wrote the above quoted statement discards .Net because HE doesn't like MICROSOFT, not because there's anything wrong with .Net. The "advantage" he seeks is probably supposed to be "more freedom" but Java and Mono are BOTH GPL; I smell straw somewhere around here...
I find it funny that he bemoans the fact we can't switch to the Slashdot-approved scripting languages because they're not as good as Java. Nobody seems to have picked up on that. I thought all the Perl, Python, and Ruby guys thought their languages were BETTER than Java!
The most telling part of the above quote is this: he doesn't mention the OBVIOUS fallback positions for a Java programmer: C and C++. I'm a Java programmer, and if I ever found myself unable to work in Java, I'd work in C. It has the same syntax, and it's simpler philosophically because it's procedural. I've got K&R at home, I could dust it off and re-read over a weekend.
The only difficulty would be that I'd have to figure out a nice way to do GUI's. Would I roll a Perl-TK front-end and call C on the backend? Or would I bite the bullet and learn GTK? I hear GTK works on different platforms... I could use QT, or go to hell with myself and do something really flashy with OpenGL. So many choices...
It doesn't really matter anyway, because Java and Mono are GPL, so they can't be taken away.
Everybody relax and let Apache do their thing. I hope they win.
Thus spake the master programmer:
"When the program is being tested, it is too late to make design changes." (Tao)
I had a long read through the language spec and Go seems immature to me. One example is the way it enforces K&R style braces. The authors claim that this is done to simplify the parser. But honestly, what do you compromise by having a more flexible parser?
http://michaelsmith.id.au
When I was in University, they tried to feed us Java. It kinda worked, and I did as much Java as I had to, but when they tried to utter the word 'speed' (and one Prof. did) I distinctly remember uttering the phrase "speedy as a narcoticized slug" after hearing one too many times the phrase 'Java byte code'. My complaints with the language also included 1) having to either know or memorize about 10,000 "CORE" functions, having to write more code than COBOL to get it to emit "HELLO WORLD", and execution speed that left a big whopping whole lot to be desired. I compared it to C. I could type this (and only this) in C #include void main(void){ printf("\nHello World");} and compile it, and have it run, extremely fast, with a tight, fast, stand-alone executable. If I stripped off the debugging symbols, the result was 2/3 the size. Now I've written assembly to do the same, and its *MUCH* smaller and somewhat faster, but compared to java, these are all speed demons. Java could never really run stand alone (you always needed a java interpreter in some flavor or other) around to actually make things go. So in terms of actual real speed, how much faster is Java than Perl, Ruby and Python? Its a valid question.
C can be a high level language. In one recent project, I added garbage collection to C and tagged types.
There are limitations, of course, because C doesn't give you enough access to the language to tweak the compiler. For instance, you can't teach the compiler to generate code which is aware of your garbage collector.
So all that, and you also have to manually operate your GC? It could be I'm not envisioning this thing but it seems like a bunch of trouble, and without quite all the benefits one would hope for from type-tagged values and GC.
It seems to me that I could do all that, and then write a bunch of C code that explicitly invokes the GC (or do similar in C++ and spare myself a little bit of that stuff) - or I could just link C code into Python or another high-level language. If the point of using a high-level language is for ease of writing my non-performance-critical code, going with the ready-made option seems like the better way to go.
Bow-ties are cool.
but you will pry my uninformed opinions out of my cold dead hands.
I can't seem to REMEMBER microsoft being bad. Or well at least not THAT bad. And it was a LONG TIME ago.
Who could honestly say NOTHING CHANGED?
I think one of the problems is people don't know how to write modern, best-practices C++. Like bounds-checking, STL, Boost, auto_ptr, etc.
(Not really claiming that I do. Anybody know a good source for learning good *modern* C++?)
I'm not a lawyer, but I play one on the Internet. Blog
Compiler speed which is one of the features of the language.
I second the suggestion about Qt.
There used to be some reservation about Qt in the community, but now its available under LGPL (and also commercially if you want).
There's a screen painter along with a free IDE (Qt Creator).
Qt is on mobile phones, car computers, Mac/Lin/Win, etc.
> I also would love if it had the ability to understand what platform it is on and adjust to have the "feel" of the native OS.
They claim "Native Aqua look and feel, with Aqua-style widgets" (Qt for Mac)
Btw, there's also another popular cross-platform graphics toolkit called WxWidgets. A lot of apps use that (with C++ and Python)
I'm not a lawyer, but I play one on the Internet. Blog
Google Go?! Really?
The one very strong point that java has is not the language itself but the absolutely massive support structure behind it that encompasses a collaborative library base unmatched by any other language as well as extensive development tools, server software and support software and IDE's too support not only the language but also the most productive and popular libraries.
Replacing the language is trivial at best but replicating the support base the language has and the knowledge associated with it is a completely different matter.
If Java is no longer the no choice ansewer to development, that would actually be a good thing as it would promote and encourage innovation with a language that at this point is definitely showing its age and heritage (not to say that its is a bad language but it certainly has grown some evolutionary quirks).
GPLv2: I want my rights, I want my phone call! DRM: What use is a phone call, if you are unable to speak?
For more on the Google/Oracle patent litigation, check this out.