Red Hat Uncloaks 'Java Killer': the Ceylon Project
talawahdotnet writes "Gavin King of Red Hat/Hibernate/Seam fame recently unveiled the top secret project that he has been working on over the past two years, a new language and SDK designed to replace Java in the enterprise. The project came out of hiding without much fanfare or publicity at QCon Beijing in a keynote titled 'The Ceylon Project — the next generation of Java language?'"
Am I the only one who read, "Cylon"?
Do they have a plan?
There is no "I disagree" mod for a reason. Flamebait, Troll, and Overrated are not substitutes.
aren't enough (damn subject would have dropped the 'h' and that would have made me cry).
We need yet another JVM language to 'kill' Java. Epic. Brilliant.
The other languages were developed much more openly, not dropped like an MS product. Get real, Red Hat.
We already have a Java killer; his name is Larry Ellison.
There's no -1 for "I don't get it."
If C# didn't kill Java, I don't see how anything else is going to.
A "Java killer" that relies on the JVM to run sounds like it's in for an uphill battle.
Writing an SDK from scratch in a homebrewed language that does everything the Java SDK does? Well, good luck anyway.
Breakfast served all day!
I personally don't think it's ambitious at all. Their syntax and grammar only differ slightly from regular Java. Plus the fact that they're targeting the JVM means that they only need to patch javac (and javadoc) to make a new language. Despite how humongous the JDK is, the java compiler itself is relatively lean (only 140KLOC).
Two words: Oracle.
What's the second word?
Do they have a plan?
1. Create awesome programming language that kills Java
2. ???
3. Profit
sysadmins and parents of newborns get the same amount of sleep.
"FuckingBullshitAss Oracle" is implied whenever somebody says "Oracle".
They are proposing a new language, with new syntax, requiring new libraries... that runs on the JVM.
Since Oracle owns the JVM and is trying to find ways to extract money from it, a new language that requires the JVM seems pointless.
If you just want better syntax, why not use one of the existing JVM languages such as Scala?
If you are pioneering a completely new language, why not pioneer a new virtual machine, and lawyer up and make sure Oracle doesn't have any grounds to sue you?
steveha
lf(1): it's like ls(1) but sorts filenames by extension, tersely
":=" as the assignment operator is a case of back to the future. Pascal uses it, and for anyone who's mistakenly typed "=" rather than "==" in C/C++ it can only be a good thing.
Why don't we just move Linux kernel development to the ADA language, before it's too late?
1. Put these guys, Walter Bright, and a few other folks (Alexandrescu? a couple of the best folks from the Java and C# camps?) in a building.
2. Lock the doors from the outside and guard the building until they've come up with the One True C++ Successor (both compilable to native code and a good target for a JIT) and the basic design for its standard library.
3. Profit^H^H^H^H^H^H End the ridiculous situation we have where systems-level programming is held back by 40-year-old braindead technologies like the C preprocessor while the dominant business programming languages are controlled by corporations with terrible track records.
Two words:
Oracle.
What's the second word?
Lawyers.
I'm sure "SlashdotMedia" will improve on all the wonders that Dice Holdings blessed us all with
The selling point to the enterprise is the JDK. If it was all about a better language that develops quicker they could have gone for Ruby years ago. In particular once sun brought JRuby in-house. The issue at hand is the Enterprise wants the bloatware in the J2EE SDK. Those classes and libraries represent a lot of work a developer doesn't have to figure out themselves.
My number 1 missing feature in Java is the ability to set object references to be 'copy on write'.
I'm doing numerical/scientific programming. Say I have an object which contains an array, and a 'get' function to return that array. Currently I have two choices: I can return a pointer to my object's array, or make a copy of the array and return that.
Returning a pointer is very fast, but now my class is at the mercy of callers which might write into my array. Returning a copy is safe, but so long as the callers behave themselves and don't try to write to it, is a waste of time and memory. If I could return a "copy-on-write-reference" to my array, I'd get the best of both worlds.
Any reference reached via a copy-on-write-reference would also need to be copy-on-write. If you make copy-on-write a qualifier on a variable, this could be all enforced by the compiler.
Are there any languages which do something like this?
Quattuor res in hoc mundo sanctae sunt: libri, liberi, libertas et liberalitas.
You're not always comparing with a constant; far safer is to wrap the variables with accessor methods, so you get a break if you try
if (objectA.getX() = objectB.getX())
It might be a bit more effort to type up, but it catches a bunch of easy gotchas.
Man who leaps off cliff jumps to conclusion.
As long as it runs on the JVM, it's still stuck without support for unsigned data types. Not interested.
I do not fail; I succeed at finding out what does not work.
Don't forget all the other important languages!
* brainfuck
* whitespace
* piet
* INTERCAL
* false
* befunge
* malbolge
and, of course (last but not least!)
* LOLCODE
It's easier to be a result of the past, but more fun to be a cause of the future! http://www.spacefinancegroup.com/
You're not pronouncing it properly. Pronounce the two syllables as two words. "Ora Kill", same as Larry Ellison does.
Oops. That should have been "high-order functions". Corrected
Oh wow, are you serious? If this is the kind of verbosity that Java requires, I am definitely not sad to not be a Java developer. Guess the toy dynamic languages (Python, etc) have spoiled me.
Or maybe you should use a compiler that warns when "=" is used in a conditional expression, and compile with "warnings as errors".
If C# didn't kill Java, I don't see how anything else is going to.
Yes, because a proprietary, patent encumbered, single-platform copy of Java with minimal enhancements was surely going to kill Java.
</sarcasm>
Considering how all programming languages that use := are hated with a passion, I would say that a swastika would make a better assignment operator by now.
Contrary to the popular belief, there indeed is no God.
Why is that language designers feel they must come up with gratuitous differences to differentiate their babies?
I'm talking about where keywords are used in the same (or much the same) way, but they've come up with something different after spending some time with a thesaurus:
E.g., instead of Java "implements" for interfaces, you get "satisfies".
abstract is replaced by "formal"
"actual" means "override"?
"public" -> "shared" : what's the value-add?
"var" -> "local" : var types much easier.
I'm not a lawyer, but I play one on the Internet. Blog
What? Those classes represent a lot of work the developer absolutely has to figure out themselves. Nobody just looks at J2EE and goes, "hey, that makes sense." J2EE costs time and money, it doesn't save time and money.
Great, I expect a email from a recruiter tomorrow wanting someone with 10 years of production Ceylon experience.
Got Code?
Oracle have threatened to sue anyone and their aunt Mildred if they step out of line on the Java standard or violate any Java-related patent. Apache needs a JVM-type system to run Tomcat and Debian will supply patentware over their collective dead bodies (once an open-source license for dead bodies is agreed upon). Red Hat knows this. Red Hat also knows that commercial vendors like Adobe (Cold Fusion runs on JRun, a servlet engine) like Java because nothing makes for bigger profits than free. Patent-based lock-ins don't usually mean free. Sun killed JScript, sure, but we're talking proprietary extensions and a platform-specific compiler designed by Microsoft for the sole purpose of killing Java. It was a digital gunfight and it's not surprising Sun used the guns it had.
Oracle, on the other hand, already uses proprietary extensions (they bought JRockit and it has all kinds of weird stuff), platform-specific compilers (you'll notice real-time Java isn't available for that many OS') and proprietary implementations (JDK7 doesn't include some of Oracle's accelerations to JDK6). Language dilution - and the inevitable long-term death of Java as a result - isn't an issue for them. They're not using patents to protect Java, but to protect a virtual monopoly.
It's a small world and it smells funny; I'd buy another if it wasn't for the money; Take back what I paid (SoM)
You have obviously never been on a *huge* software development project. The reason you use accessors and mutators (getters & setters) is so you can change the underlying representation without breaking all the uses in you million lines of code.I've had to make changes to underlying representation without breaking th client contract (signature). This is why such practices are used (plus, these methods are auto-generated by most tools anyway).
Well, in Ruby (which is a fully OOPL) getters and setters are used too, but the language syntax allows you to define methods such as 'property' and 'property=' so that setters and getters look exactly like direct access, and much less verbose than the dreadful getPropX() and setPropX() methods you usually have in Java or C++.
"I'm never quite so stupid as when I'm being smart" (Linus van Pelt)
Yes, but it also means you don't have to figure out how to persist your objects to your database, how to transfer them seamlessly from one box to another in a load balanced environment, how to manage the lifetime of per-user and per-session objects, how to set up your system to locate the URLs of your web services, how to send messages from one object to another on a remote machine, how to store your resources so that they can be altered without recompilation, and many other things...
Sure, J2EE takes a while to learn. But it provides a whole load of features that would take a lot longer to write if you had to do them from scratch.
There are many language features that have been available for ages, especially in various Lisps. The problem is always getting those features into mainstream. Arguably, closures only got there with JavaScript, and even then it took a while for people to actually notice they're there. The first mainstream language which not only had them, but actively advertised it, with standard library build largely around the concept, was Ruby.
(One could argue that in both cases it was rather Smalltalk, but I think that it is a matter of debate whether it was sufficiently mainstream. There's certainly no doubt with JavaScript.)
Java needs to be replaced. I have taught Java for years, because many colleges think it is a good first language to learn. Only recently have I actually attempted to develop commercial quality applications in it. Frankly, Java sucks big green ones. Generic types (with type-erasure) are a total hack, denying the running code valuable information. Abstract classes are only half-implemented, since you cannot have abstract static methods (e.g., factory methods). Meta-programming in Java is extremely limited - Reflection covers a few aspects, but even these are very awkward to use. Exception handling is awkward, there is no multiple inheritance, not all types are objects - hacked with boxing and unboxing. And so on, and so forth, and so on...
The chances of this language going anywhere are small. Anyone who has enjoyed studying compilers has written (or at least imagined) their own language. Creating new languages is fun, lots of people do it, and mostly - even if they are good - the languages disappear down a deep, dark hole. Success for a language requires a lot of support from many different parts of the IT community: lots of libraries, job prospects, more libraries, books, courses, real world applications, and did I mention code libraries? There are zillions of languages out there, many of them better than Java. Unfortunately, none of them to date have gotten the necessary support. What are the chances that this language will be different?
Enjoy life! This is not a dress rehearsal.
All I hear about the C# patent is FUD; mono is out there and hasn't been sued yet. Wheras there are actual known Java patents that stopped the Apache foundation from reimplementing java.
I am trolling
Sounds attractive but very ambitious.
Let's not forget that Microsoft has thrown its weight behind the .NET platform which is arguably superior to Java in many (but not all) ways and they still haven't even dented the popularity of Java.
Part of the issue is that Java just works. It may be verbose, horribly broken in some respects but it still works. The only way you're going to wean people of vanilla Java is to produce a Java++, something which compiles syntactically correct Java with no modifications, supports all existing Java libs with no modifications, but offers some rich extensions that reduce the amount of crud / boiler plate developers have to write and hopefully eliminate a bunch of potential bugs too.
No language which is not a superset of Java really stands a chance. People promoting Scala, Google Go, Ruby or similar are pissing into the wind on this matter. It has to be a superset, or close to one of what already exists. Arguably even Groovy isn't close enough. I hope Red Hat take this on board and look at the limited success that other Java wannabes have enjoyed so far.
Aside from the language aspect I think Apache & Google would be the natural partners to promote this language. I don't know how that sits with Red Hat but really there needs to be a consortium of heavy weights to promote mind share amongst developers and popularise a migration. I expect most Java developers would be happy for walk away from Oracle / Suns pathetic stewardship if there were something better and compatible to go to.
J2EE costs time and money, it doesn't save time and money.
Every language costs time and money to learn. In Java's case it's not the language so much as all the technologies that are built with it. That, in a nutshell is why any replacement for Java has to be as close to 100% compatible as possible. You literally want to be able to sit a Java developer of any competence in front of MiracleJ or whatever the language is called and for them to not notice much difference. It should feel comfortable, familiar. It should build the mass of code they likely have to maintain.
As time progresses of course, you can wean them off the horrible crud / boilerplate they're used to and show them all the shortcuts, notations & new features that cut down the code they have to write. Much in the same way as happened in C to C++ migration. C++ was seen as C but better (yes I know there are very slight differences) so virtually every developer migrated across in due course. It should feel so natural to migrate that you have to have very explicit and esoteric reasons for staying put.
In what way is Scala not a super set of Java?
Scala is not a superset of the Java language. It may be byte code compatible which is not the same thing at all. By that definition Jython would also be a superset of Java since it too generates bytecodes and runs on a JVM.
What in god's name makes you think we want the legions of mindless Java programmers to join us?
No comment.
So let me get this straight. It's better for someone to take, for example, C, or Ruby, or PHP and implement roll their own implementations of:
1. Thread pool management
2. Load balancing and fail-over
3. Session replication
4. Distributed transaction management
5. Naming directory
6. EIS connection management
7. Pluggable authentication and authorization
8. HTTP request parsing and invocation
9. Tags and markup for data binding / AJAX support
10. UI component model
11. Logging
12. Web service management and deployment (including WSDL generation and publishing)
13. XML binding (marshaling and unmarshaling)
14. And so forth and so on
Now in this scenario the implementations will likely:
1. Only implement the functionality that is (perceived to be) needed
2. Will not be tested
3. Will not have the benefit of community scrutiny, certification, or knowledge
4. Will not be immediately understood by any developer other than the author(s) regardless of how much experience they have
Yes, you have to invest to learn JEE.
Yes JEE deals with complex issues and as a result is difficult to understand.
However, having invested that time, anyone who knows it in one place knows it everywhere. That is what saves time and money -- being able to hire someone who already knows JEE and have them hit the ground running.
Further, having a prescribed solution for many common problems allows developers to focus on the business needs, not the boilerplate.
Anyone who does not appreciate what JEE brings to the table is not a serious enterprise developer.
My number 1 missing feature in Java is the ability to set object references to be 'copy on write'.
I'm doing numerical/scientific programming. Say I have an object which contains an array, and a 'get' function to return that array. Currently I have two choices: I can return a pointer to my object's array, or make a copy of the array and return that.
Returning a pointer is very fast, but now my class is at the mercy of callers which might write into my array. Returning a copy is safe, but so long as the callers behave themselves and don't try to write to it, is a waste of time and memory. If I could return a "copy-on-write-reference" to my array, I'd get the best of both worlds.
Any reference reached via a copy-on-write-reference would also need to be copy-on-write. If you make copy-on-write a qualifier on a variable, this could be all enforced by the compiler.
Are there any languages which do something like this?
You don't need the compiler to know about copy-on-write. To write a generic copy-on-write pointer class it is enough to have a compiler that knows about const-ness, as well as operator overloading that also allows overloading pointer operations (dereference..). Both features are available in C++, and in fact some implementations of STL string have used copy-on-write. Like reference-counting, performance becomes horrible with multiple threads because of the extra locks that are then needed.
That's because that's not the main trap that Mono represents.
Microsoft tolerates Mono because it's a clone of a Microsoft technology. They haven't tried to stop Wine, either. Microsoft knows what most of the useful idiots who support the use of Mono appear not to have realized: if your business is in any way, shape, or form built on Microsoft technologies, you will face extreme pressure from all sides to move to a full Microsoft stack.
The patent angle will only ever be used if it looks like Mono is causing important customers to migrate away from Windows. But that isn't happening.
Well, I tried a lot of the things you mention. However
I'm not really sure why you mix languages and technologies in you sentence that have nothing in common with each other and a few of them are even JVM languages (which means they need J2EE support anyway).
As I pointed out most people don't actually use J2EE in the way it was originally conceived.
Most people use a Tomcat, Spring and Hibernate, thats it. If you want to have an app server (JBoss etc.), you should have a reason for it.
For me it is absolutely no difference in what environment I debugging, first of all debugging takes perhaps %1 of my development time. I don't debug framework code, unless I'm sure the bug is there. Second we mainly have test cases on use case level, if I need to debug something I start that "Test" in debug mode.
Regarding deploying, I cant see any significant difference between deploying a PHP Application under Zend or a few *.war/*.jar files under Tomcat.
Well, frankly your post looks like if you just have put lots of buzzwords and frameworks/languages into one long sentence. ... don't get your point ... dead end why should I use that?
C# -- does not run everywhere, mediocre support regarding equivalents of J2EE
PHP -- half interpreted, not really compiled, flawed runtime library
Ruby -- just not my taste language wise, but also reinvention of lots J2EE features, basically useless without RAILS
Python -- just a language
Clojure -- runs on the JVM and is a Lisp dialect
Smalltalk -- again only a language, as soon as you wan't to do big scale stuff you also need frameworks
Haskell -- a language, what support does it have for scaling large applications I don't know
CakePHP -- obviously for PHP
Zend Framework -- PHP
GWT -- pretty useless without J2EE behind it, so what is your point?
Cappucino -- looks promising on the client side, that leaves again open the server side
Zope -- is a python framework/runtime engine, it is difficult to scale
ASP MVC -- a MS technology like C#
Grok -- based on Zope if I'm not mistaken
Rails -- well, based on Ruby, see above - basically only really useful for simple DB and page driven web applications
Sinatra -- again a Ruby web framework
I doubt idiots with fat wallets demand J2EE. Most of the time they demand:
* Java
* has to fit into our backend infra structure
* has to access our databases
* new databases (for this application) should run on the same software
* has to scale
* my own programmers need to maintain it (hence the requirements above)
* needs to be open so future extensions / services can interoperate with it
Anyway, the main critics about J2EE comes from the time when it was "invented" ... it has evolved considerably since then.
Usually you have only a little effort when you set up the project for the first time. As soon as you start working on it you mainly program POJOs, easy to test with unit tests, and the interaction among them via the frameworks are easy to test with scenario driven tests. If you have to debug, you lack experience (or someone in your team who is responsible for the fact that you have to debug). Keep in mind: with hot code replacement most developers program in the running environment in debug mode anyway (that excludes me, as I prefer to "clean room" develop my code and think while I work and see if the test runs).
So, how would I develop a huge new application?
GWT for the frontend, development of server components in Scala and Java, glueing it together and giving functionality close to the front end with Groovy. Testing with JMeter (backend Services) and Selenium (Web Pages) and JUnit for low level stuff if needed, backend access likely directly on the DB with iBatis, or via dedicated backend services which are best accessed via REST.
Small scale applications: GWT for client, hibernate/iBatis services as GWT server components. The only J2EE you need here is a tomcat (or similar) an
Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.