<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Object Mentor Blog: Adopting New JVM Languages in the Enterprise (Update)</title>
    <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description></description>
    <item>
      <title>Adopting New JVM Languages in the Enterprise (Update)</title>
      <description>&lt;p&gt;(Updated to add Groovy, which I should have mentioned the first time. Also mentioned Django under Python.)&lt;/p&gt;


	&lt;p&gt;This is an exciting time to be a Java programmer. The pace of innovation for the Java language is slowing down, in part due to concerns that the language is growing too big and in part due to economic difficulties at Sun, which means there are fewer developers assigned to Java. However, the real &lt;em&gt;crown jewel&lt;/em&gt; of the Java ecosystem, the &lt;span class="caps"&gt;JVM&lt;/span&gt;, has become an attractive platform for new languages. These languages give us exciting new opportunities for growth, while preserving our prior investment in code and deployment infrastructure.&lt;/p&gt;


	&lt;p&gt;This post emphasizes practical issues of evaluating and picking new &lt;span class="caps"&gt;JVM&lt;/span&gt; languages for an established Java-based enterprise.&lt;/p&gt;


	&lt;p&gt;The Interwebs are full of technical comparisons between Java and the different languages, &lt;em&gt;e.g.,&lt;/em&gt; why language X fixes Java&amp;#8217;s perceived issue Y. I won&amp;#8217;t rehash those arguments here, but I will describe some language features, as needed.&lt;/p&gt;


	&lt;p&gt;A similar &amp;#8220;polyglot&amp;#8221; trend is happening on the .NET platform.&lt;/p&gt;


	&lt;h2&gt;The New &lt;span class="caps"&gt;JVM&lt;/span&gt; Languages&lt;/h2&gt;


	&lt;p&gt;I&amp;#8217;ll limit my discussion to these representative (and best known) alternative languages for the &lt;span class="caps"&gt;JVM&lt;/span&gt;.&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;&lt;a href="http://jruby.codehaus.org/"&gt;JRuby&lt;/a&gt; &amp;#8211; Ruby running on the &lt;span class="caps"&gt;JVM&lt;/span&gt;.&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://scala-lang.org"&gt;Scala&lt;/a&gt; &amp;#8211; A hybrid object-oriented and functional language that runs on .NET as well as the &lt;span class="caps"&gt;JVM&lt;/span&gt;. (Disclaimer: I&amp;#8217;m co-writing a book on Scala for O&amp;#8217;Reilly.)&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://clojure.org"&gt;Clojure&lt;/a&gt; &amp;#8211; A Lisp dialect.&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;I picked these languages because they seem to be the most likely candidates for most enterprises considering a new &lt;span class="caps"&gt;JVM&lt;/span&gt; language, although some of the languages listed below could make that claim.&lt;/p&gt;


	&lt;p&gt;There are other deserving languages besides these three, but I don&amp;#8217;t have the time to do them justice. Hopefully, you can generalize the subsequent discussion for these other languages.&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;&lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt; &amp;#8211; A dynamically-typed language designed specifically for interoperability with Java. It will appeal to teams that want a dynamically-typed language that is closer to Java than Ruby. With &lt;a href="http://grails.org/"&gt;Grails&lt;/a&gt;, you have a combination that&amp;#8217;s comparable to Ruby on Rails.&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://jython.org/"&gt;Jython&lt;/a&gt; &amp;#8211; The first non-Java language ported to the &lt;span class="caps"&gt;JVM&lt;/span&gt;, started by Jim Hugunin in 1997. Most of my remarks about JRuby are applicable to Jython. &lt;a href="http://www.djangoproject.com/"&gt;Django&lt;/a&gt; is the Python analog of Rails. If your Java shop already has a lot of Python, consider Jython.&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.fandev.org/"&gt;Fan&lt;/a&gt; &amp;#8211; A hybrid object-oriented and functional language that runs on .NET, too. It has a lot of similarities to Scala, like a scripting-language feel.&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://kenai.com/projects/ioke/"&gt;Ioke&lt;/a&gt; &amp;#8211; (pronounced &amp;#8220;eye-oh-key&amp;#8221;) An innovative language developed by Ola Bini and inspired by Io and Lisp. This is the newest language discussed here. Hence, it has a small following, but a lot of potential. The Io/Lisp-flavored syntax will be more challenging to average Java developers than Scala, JRuby, Jython, Fan, and JavaScript.&lt;/li&gt;
		&lt;li&gt;JavaScript, &lt;em&gt;e.g.,&lt;/em&gt; &lt;a href="http://www.mozilla.org/rhino/"&gt;Rhino&lt;/a&gt; &amp;#8211; Much maligned and misunderstood (&lt;em&gt;e.g.,&lt;/em&gt; due to buggy and inconsistent browser implementations), JavaScript continues to gain converts as an alternative scripting language for Java applications. It is the default scripting language supported by the &lt;span class="caps"&gt;JDK 6&lt;/span&gt; scripting interface.&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://projectfortress.sun.com/Projects/Community/"&gt;Fortress&lt;/a&gt; &amp;#8211; A language designed as a replacement for high-performance &lt;span class="caps"&gt;FORTRAN&lt;/span&gt; for industrial and academic &amp;#8220;number crunching&amp;#8221;. This one will interest scientists and engineers&amp;#8230;&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;Note: Like a lot of people, I use the term &lt;em&gt;scripting language&lt;/em&gt; to refer to languages with a lightweight syntax, usually dynamically typed. The name reflects their convenience for &amp;#8220;scripting&amp;#8221;, but that quality is sometimes seen as pejorative; they aren&amp;#8217;t seen as &amp;#8220;serious&amp;#8221; languages. I reject this view.&lt;/p&gt;


	&lt;p&gt;To learn more about what people are doing on the &lt;span class="caps"&gt;JVM&lt;/span&gt; today (with some guest .NET presentations), a good place to start is the recent &lt;a href="http://openjdk.java.net/projects/mlvm/jvmlangsummit/"&gt;&lt;span class="caps"&gt;JVM&lt;/span&gt; Language Summit&lt;/a&gt;.&lt;/p&gt;


	&lt;h2&gt;Criteria For Evaluating New &lt;span class="caps"&gt;JVM&lt;/span&gt; Languages&lt;/h2&gt;


	&lt;p&gt;I&amp;#8217;ll frame the discussion around a few criteria you should consider when evaluating language choices. I&amp;#8217;ll then discuss how each of the languages address those criteria. Since we&amp;#8217;re restricting ourselves to &lt;span class="caps"&gt;JVM&lt;/span&gt; languages, I assume that each language compiles to valid byte code, so code in the new language and code written in Java can call each other, at least at some level. The &amp;#8220;some level&amp;#8221; part will be one criterion. Substitute X for the language you are considering.&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;&lt;strong&gt;Interoperability&lt;/strong&gt;: How easily can X code invoke Java code and &lt;em&gt;vice versa&lt;/em&gt;? Specifically:
	&lt;ol&gt;
	&lt;li&gt;Create objects (&lt;em&gt;i.e.,&lt;/em&gt; call &lt;code&gt;new Foo(...)&lt;/code&gt;).&lt;/li&gt;
		&lt;li&gt;Call methods on an object.&lt;/li&gt;
		&lt;li&gt;Call static methods on a class.&lt;/li&gt;
		&lt;li&gt;Extend a class.&lt;/li&gt;
		&lt;li&gt;Implement an interface.&lt;/li&gt;
	&lt;/ol&gt;
	&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;Object Model&lt;/strong&gt;: How different is the object model of X compared to Java&amp;#8217;s object model? (This is somewhat tied to the previous point.)&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;New &amp;#8220;Ideas&amp;#8221;&lt;/strong&gt;: Does X support newer programming trends:
	&lt;ol&gt;
	&lt;li&gt;Functional Programming.&lt;/li&gt;
		&lt;li&gt;Metaprogramming.&lt;/li&gt;
		&lt;li&gt;Easier approaches to writing robust concurrent applications.&lt;/li&gt;
		&lt;li&gt;Easier support for processing &lt;span class="caps"&gt;XML&lt;/span&gt;, SQL queries, &lt;em&gt;etc.&lt;/em&gt;&lt;/li&gt;
		&lt;li&gt;Support &lt;a href="http://www.martinfowler.com/bliki/DomainSpecificLanguage.html"&gt;internal &lt;span class="caps"&gt;DSL&lt;/span&gt;&lt;/a&gt; creation.&lt;/li&gt;
		&lt;li&gt;Easier presentation-tier development of web and thick-client UI&amp;#8217;s.&lt;/li&gt;
	&lt;/ol&gt;
	&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;Stability&lt;/strong&gt;: How stable is the language, in terms of:
	&lt;ol&gt;
	&lt;li&gt;Lack of Bugs.&lt;/li&gt;
		&lt;li&gt;Stability of the language&amp;#8217;s syntax, semantics, and library &lt;span class="caps"&gt;API&lt;/span&gt;&amp;#8217;s. (All the languages can call Java &lt;span class="caps"&gt;API&lt;/span&gt;&amp;#8217;s.)&lt;/li&gt;
	&lt;/ol&gt;
	&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt;: How does code written in X perform?&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;Adoption&lt;/strong&gt;: Is X easy to learn and use?&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;Tool Support&lt;/strong&gt;: What about editors, &lt;span class="caps"&gt;IDE&lt;/span&gt;&amp;#8217;s, code coverage, &lt;em&gt;etc.&lt;/em&gt;&lt;/li&gt;
		&lt;li&gt;&lt;strong&gt;Deployment&lt;/strong&gt;: How are apps and libraries written in X deployed? 
	&lt;ol&gt;
	&lt;li&gt;Do I have to modify my existing infrastructure, management, &lt;em&gt;etc.&lt;/em&gt;?&lt;/li&gt;
	&lt;/ol&gt;&lt;/li&gt;
	&lt;/ol&gt;


	&lt;p&gt;The &lt;strong&gt;Interoperability&lt;/strong&gt; point affects ease of adoption and use with a legacy Java code base. The &lt;strong&gt;Object Model&lt;/strong&gt; and &lt;strong&gt;Adoption&lt;/strong&gt; points address the barrier to adoption from the learning point of view. The &lt;strong&gt;New &amp;#8220;Ideas&amp;#8221;&lt;/strong&gt; point asks what each language brings to development that is not available in Java (or poorly supported) and is seen as valuable to the developer. Finally, &lt;strong&gt;Stability&lt;/strong&gt;, &lt;strong&gt;Performance&lt;/strong&gt;, and &lt;strong&gt;Deployment&lt;/strong&gt; address very practical issues that a candidate production language must address.&lt;/p&gt;


	&lt;h2&gt;Comparing the Languages&lt;/h2&gt;


	&lt;h3&gt;JRuby&lt;/h3&gt;


	&lt;p&gt;JRuby is the most popular alternative &lt;span class="caps"&gt;JVM&lt;/span&gt; langauge, driven largely by interest in &lt;a href="http://ruby-lang.org"&gt;Ruby&lt;/a&gt; and &lt;a href="http://rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt;.&lt;/p&gt;


	&lt;h4&gt;Interoperability&lt;/h4&gt;


	&lt;p&gt;Ruby&amp;#8217;s object model is a little different than Java&amp;#8217;s, but JRuby provides straightforward coding idioms that make it easy to call Java from JRuby. Calling JRuby from Java requires the &lt;span class="caps"&gt;JSR 223&lt;/span&gt; scripting interface or a similar approach, unless JRuby is used to compile the Ruby code to byte code first. In that case, shortcuts are possible, which are well documented.&lt;/p&gt;


	&lt;h4&gt;Object Model&lt;/h4&gt;


	&lt;p&gt;Ruby&amp;#8217;s object model is a little different than Java&amp;#8217;s. Ruby support &lt;em&gt;mixin&lt;/em&gt;-style modules, which behave like interfaces &lt;em&gt;with&lt;/em&gt; implementations. So, the Ruby object model needs to be learned, but it is straightforward or the Java developer.&lt;/p&gt;


	&lt;h4&gt;New Ideas&lt;/h4&gt;


	&lt;p&gt;JRuby brings closures to the &lt;span class="caps"&gt;JVM&lt;/span&gt;, a much desired feature that probably won&amp;#8217;t be added in the forthcoming Java 7. Using closures, Ruby supports a number of functional-style iterative operations, like mapping, filtering, and reducing/folding. However, Ruby does not fully support functional programming.&lt;/p&gt;


	&lt;p&gt;Ruby uses dynamic-typing instead of static-typing, which it exploits to provide extensive and powerful metaprogramming facilities.&lt;/p&gt;


	&lt;p&gt;Ruby doesn&amp;#8217;t offer any specific enhancements over Java for safe, robust concurrent programming.&lt;/p&gt;


	&lt;p&gt;Ruby &lt;span class="caps"&gt;API&lt;/span&gt;&amp;#8217;s make &lt;span class="caps"&gt;XML&lt;/span&gt; processing and database access relatively easy. Ruby on Rails is legendary for improving the productivity of web developers and similar benefits are available for thick-client developers using other libraries.&lt;/p&gt;


	&lt;p&gt;Ruby is also one of the best languages for defining &amp;#8220;internal&amp;#8221; &lt;span class="caps"&gt;DSL&lt;/span&gt;&amp;#8217;s, which are used to great affect in Rails (&lt;em&gt;e.g.,&lt;/em&gt; &lt;em&gt;ActiveRecord&lt;/em&gt;).&lt;/p&gt;


	&lt;h4&gt;Stability&lt;/h4&gt;


	&lt;p&gt;JRuby and Ruby are very stable and are widely used in production. JRuby is believed to be the best performing Ruby platform.&lt;/p&gt;


	&lt;p&gt;The Ruby syntax and &lt;span class="caps"&gt;API&lt;/span&gt; are undergoing some significant changes in the current 1.9.X release, but migration is not a major challenge.&lt;/p&gt;


	&lt;h4&gt;Performance&lt;/h4&gt;


	&lt;p&gt;JRuby is believed to be the best performing Ruby platform. While it is a topic of hot debate, Ruby and most dynamically-typed languages have higher runtime overhead compared to statically-typed languages. Also, the &lt;span class="caps"&gt;JVM&lt;/span&gt; has some known performance issues for dynamically-typed languages, some of which will be fixed in &lt;span class="caps"&gt;JDK 7&lt;/span&gt;.&lt;/p&gt;


	&lt;p&gt;As always, enterprises should profile code written in their languages of choice to pick the best one for each particular task.&lt;/p&gt;


	&lt;h4&gt;Adoption&lt;/h4&gt;


	&lt;p&gt;Ruby is very easy to learn, although effective use of advanced techniques like metaprogramming require some time to master. JRuby-specific idioms are also easy to master and are well documented.&lt;/p&gt;


	&lt;h4&gt;Tool Support&lt;/h4&gt;


	&lt;p&gt;Ruby is experiencing tremendous growth in tool support. &lt;span class="caps"&gt;IDE&lt;/span&gt; support still lags support for Java, but IntelliJ, NetBeans, and Eclipse are working on Ruby support. JRuby users can exploit many Java tools.&lt;/p&gt;


	&lt;p&gt;Code analysis tools and testing tools (TDD and &lt;span class="caps"&gt;BDD&lt;/span&gt; styles) are now better than Java&amp;#8217;s.&lt;/p&gt;


	&lt;h4&gt;Deployment&lt;/h4&gt;


	&lt;p&gt;JRuby applications, even Ruby on Rails applications, can be deployed as jars or wars, requiring no modifications to an existing java-based infrastructure. Teams use this approach to minimize the &amp;#8220;friction&amp;#8221; of adopting Ruby, while also getting the performance benefits of the &lt;span class="caps"&gt;JVM&lt;/span&gt;.&lt;/p&gt;


	&lt;p&gt;Because JRuby code is byte code at runtime, it can be managed with &lt;span class="caps"&gt;JMX&lt;/span&gt;, &lt;em&gt;etc.&lt;/em&gt;&lt;/p&gt;


	&lt;h3&gt;Scala&lt;/h3&gt;


	&lt;p&gt;Scala is a statically-typed language that supports an improved object model (with a full &lt;em&gt;mixin&lt;/em&gt; mechanism called &lt;em&gt;traits&lt;/em&gt;; similar to Ruby &lt;em&gt;modules&lt;/em&gt;) and full support for functional programming, following a design goal of the inventor of Scala, Martin Odersky, that these two &lt;em&gt;paradigms&lt;/em&gt; can be integrated, despite some surface incompatibilities.  Odersky was involved in the design of Java generics (through earlier research languages) and he wrote the original version of the current &lt;code&gt;javac&lt;/code&gt;. The name is a contraction of &amp;#8220;scalable language&amp;#8221;, but the first &amp;#8220;a&amp;#8221; is pronounced like &amp;#8220;ah&amp;#8221;, not long as in the word &amp;#8220;hay&amp;#8221;.&lt;/p&gt;


	&lt;p&gt;The syntax looks like a cross between Ruby (method definitions start with the &lt;code&gt;def&lt;/code&gt; keyword) and Java (&lt;em&gt;e.g.,&lt;/em&gt; curly braces). Type inferencing and other syntactic conventions significantly reduce the &amp;#8220;cluuter&amp;#8221;, such as the number of explicit type declarations (&amp;#8220;annotations&amp;#8221;) compared to Java. Scala syntax is very succinct, sometimes even more so than Ruby!  For more on Scala, see also my previous blog postings, &lt;a href="http://blog.objectmentor.com/articles/2008/08/03/the-seductions-of-scala-part-i"&gt;part 1&lt;/a&gt;, &lt;a href="http://blog.objectmentor.com/articles/2008/08/05/the-seductions-of-scala-part-ii-functional-programming"&gt;part 2&lt;/a&gt;, &lt;a href="http://blog.objectmentor.com/articles/2008/08/14/the-seductions-of-scala-part-iii-concurrent-programming"&gt;part 3&lt;/a&gt;, and this related post on &lt;a href="http://blog.objectmentor.com/articles/2008/09/27/traits-vs-aspects-in-scala"&gt;traits vs. aspects&lt;/a&gt;.&lt;/p&gt;


	&lt;h4&gt;Interoperability&lt;/h4&gt;


	&lt;p&gt;Scala&amp;#8217;s has the most seamless interoperability with Java of any of the languages discussed here. This is due in part to Scala&amp;#8217;s static typing and &amp;#8220;closed&amp;#8221; classes (as opposed to Ruby&amp;#8217;s &amp;#8220;open&amp;#8221; classes). It is &lt;em&gt;trivial&lt;/em&gt; to import and use Java classes, implement interfaces, &lt;em&gt;etc&lt;/em&gt;.&lt;/p&gt;


	&lt;p&gt;Direct &lt;span class="caps"&gt;API&lt;/span&gt; calls from Java to Scala are also supported. The developer needs to know how the names of Scala methods are encoding in byte code. For example, Scala methods can have &amp;#8220;operator&amp;#8221; names, like &amp;#8221;+&amp;#8221;. In the byte code, that name will be &amp;#8221;$plus&amp;#8221;.&lt;/p&gt;


	&lt;h4&gt;Object Model&lt;/h4&gt;


	&lt;p&gt;Scala&amp;#8217;s object model extends Java&amp;#8217;s model with &lt;em&gt;traits&lt;/em&gt;, which support flexble &lt;em&gt;mixin&lt;/em&gt; composition. Traits behave like interfaces &lt;em&gt;with&lt;/em&gt; implementations. The Scala object model provides other sophisticated features for building &amp;#8220;scalable applications&amp;#8221;.&lt;/p&gt;


	&lt;h4&gt;New Ideas&lt;/h4&gt;


	&lt;p&gt;Scala brings full support for functional programming to the &lt;span class="caps"&gt;JVM&lt;/span&gt;, including first-class function and closures. Other aspects of functional programming, like immutable variables and side-effect free functions, are encouraged by the language, but not mandated, as Scala is not a pure functional language. (Functional programming is very effective strategy for writing tread-safe programs, &lt;em&gt;etc.&lt;/em&gt;) Scala&amp;#8217;s &lt;em&gt;Actor&lt;/em&gt; library is a port of Erlang&amp;#8217;s &lt;em&gt;Actor&lt;/em&gt; library, a message-based concurrency approach.&lt;/p&gt;


	&lt;p&gt;In my view, the &lt;em&gt;Actor model is the best general-purpose approach to concurrency.&lt;/em&gt; There are times when multi-threaded code is needed for performance, but not for most concurrent applications. (Note: there are Actor libraries for Java, &lt;em&gt;e.g.,&lt;/em&gt; &lt;a href="http://www.malhar.net/sriram/kilim/"&gt;Kilim&lt;/a&gt;.)&lt;/p&gt;


	&lt;p&gt;Scala has very good support for building internal &lt;span class="caps"&gt;DSL&lt;/span&gt;&amp;#8217;s, although it is not quite as good as Ruby&amp;#8217;s features for this purpose. It has a combinator parser library that makes external &lt;span class="caps"&gt;DSL&lt;/span&gt; creation comparatively easy. Scala also offers some innovative &lt;span class="caps"&gt;API&lt;/span&gt;&amp;#8217;s for &lt;span class="caps"&gt;XML&lt;/span&gt; processing and Swing development.&lt;/p&gt;


	&lt;h4&gt;Stability&lt;/h4&gt;


	&lt;p&gt;Scala is over 5 years old and it is very stable. The &lt;span class="caps"&gt;API&lt;/span&gt; and syntax continue to evolve, but no major, disruptive changes are expected. In fact, the structure of the language is such that almost all changes occur in libraries, not the language grammar.&lt;/p&gt;


	&lt;p&gt;There are some well-known production deployments, such as back-end services at &lt;a href="http://twitter.com"&gt;twitter&lt;/a&gt;.&lt;/p&gt;


	&lt;h4&gt;Performance&lt;/h4&gt;


	&lt;p&gt;Scala provides comparable performance to Java, since it is very close &amp;#8220;structurally&amp;#8221; to Java code at the byte-code level, given the static typing and &amp;#8220;closed&amp;#8221; classes. Hence, Scala can exploit &lt;span class="caps"&gt;JVM&lt;/span&gt; optimizations that aren&amp;#8217;t available to dynamically-typed languages.&lt;/p&gt;


	&lt;p&gt;However, Scala will also benefit from planned improvements to support dynamically-typed languages, such as tail-call optimizations (which Scala current does in the compiler.) Hence, Scala &lt;em&gt;probably&lt;/em&gt; has marginally better performance than JRuby, in general. If true, Scala may be more appealing than JRuby as a general-purpose, &lt;em&gt;systems&lt;/em&gt; language, where performance is &lt;em&gt;critical&lt;/em&gt;.&lt;/p&gt;


	&lt;h4&gt;Adoption&lt;/h4&gt;


	&lt;p&gt;Scala is harder to learn and master than JRuby, because it is a more comprehensive language. It not only supports a sophisticated object model, but it also supports functional programming, type inferencing, &lt;em&gt;etc.&lt;/em&gt; In my view, the extra effort will be rewarded with higher productivity. Also, because it is closer to Java than JRuby and Clojure, new users will be able to start using it quickly as a &amp;#8220;better object-oriented Java&amp;#8221;, while they continue to learn the more advanced features, like functional programming, that will accelerate their productivity over the long term.&lt;/p&gt;


	&lt;h4&gt;Tool Support&lt;/h4&gt;


	&lt;p&gt;Scala support in &lt;span class="caps"&gt;IDE&lt;/span&gt;&amp;#8217;s still lags support for Java, but it is improving. IntelliJ, NetBeans, and Eclipse now support Scala with plugins. Maven and ant are widely used as the build tool for Scala applications. Several excellent &lt;span class="caps"&gt;TDD&lt;/span&gt; and &lt;span class="caps"&gt;BDD&lt;/span&gt; libraries are available.&lt;/p&gt;


	&lt;h4&gt;Deployment&lt;/h4&gt;


	&lt;p&gt;Scala applications are packaged and deployed just like Java applications, since Scala files are compiled to class files. A Scala runtime jar is also required.&lt;/p&gt;


	&lt;h3&gt;Clojure&lt;/h3&gt;


	&lt;p&gt;Of the three new &lt;span class="caps"&gt;JVM&lt;/span&gt; languages discussed here, Clojure is the least like Java, due to its Lisp syntax and innovative &amp;#8220;programming model&amp;#8221;. Yet it is also the most innovative and exciting new &lt;span class="caps"&gt;JVM&lt;/span&gt; language for many people. Clojure interoperates with Java code, but it emphasizes functional programming. Unlike the other languages, Clojure does not support object-oriented programming. Instead, it relies on mechanisms like multi-methods and macros to address design problems for which &lt;span class="caps"&gt;OOP&lt;/span&gt; is often used.&lt;/p&gt;


	&lt;p&gt;One exciting innovation in Clojure is support for &lt;em&gt;software transactional memory&lt;/em&gt;, which uses a database-style transactional approach to concurrent modifications of in-memory, mutable state. &lt;span class="caps"&gt;STM&lt;/span&gt; is somewhat controversial. You can google for arguments about its practicality, &lt;em&gt;etc.&lt;/em&gt; However, Clojure&amp;#8217;s implementation appears to be successful.&lt;/p&gt;


	&lt;p&gt;Clojure also has other innovative ways of supporting &amp;#8220;principled&amp;#8221; modification of mutable data, while encouraging the use of immutable data. These features with &lt;span class="caps"&gt;STM&lt;/span&gt; are the basis of Clojure&amp;#8217;s approach to robust concurrency.&lt;/p&gt;


	&lt;p&gt;Finally, Clojure implements several optimizations in the compiler that are important for functional programming, such as optimizing tail call recursion.&lt;/p&gt;


	&lt;p&gt;Disclaimer: I know less about Clojure than JRuby and Scala. While I have endeavored to get the facts right, there may be errors in the following analysis. Feedback is welcome.&lt;/p&gt;


	&lt;h4&gt;Interoperability&lt;/h4&gt;


	&lt;p&gt;Despite the Lisp syntax and functional-programming emphasis, Clojure interoperates with Java. Calling java from Clojure uses direct &lt;span class="caps"&gt;API&lt;/span&gt; calls, as for JRuby and Scala. Calling Clojure from Java is a more involved. You have to create Java proxies on the Clojure side to generate the byte code needed on the Java side. The idioms for doing this are straightforward, however.&lt;/p&gt;


	&lt;h4&gt;Object Model&lt;/h4&gt;


	&lt;p&gt;Clojure is not an object-oriented language. However, in order to interoperate with Java code, Clojure supports implementing interfaces and instantiating Java objects. Otherwise, Clojure offers a significant departure for develops well versed in object-oriented programming, but with little functional programming experience.&lt;/p&gt;


	&lt;h4&gt;New Ideas&lt;/h4&gt;


	&lt;p&gt;Clojure brings to the &lt;span class="caps"&gt;JVM&lt;/span&gt; full support for functional programming and popular Lisp concepts like macros, multi-methods, and powerful metaprogramming. It has innovative approaches to safe concurrency, including &amp;#8220;principled&amp;#8221; mechanisms for supporting mutable state, as discussed previously.&lt;/p&gt;


	&lt;p&gt;Clojure&amp;#8217;s succinct syntax and built-in libraries make processing &lt;span class="caps"&gt;XML&lt;/span&gt; succinct and efficient. &lt;span class="caps"&gt;DSL&lt;/span&gt; creation is also supported using Lisp mechanisms, like macros.&lt;/p&gt;


	&lt;h4&gt;Stability&lt;/h4&gt;


	&lt;p&gt;Clojure is the newest of the three languages profiled here. Hence, it may be the most subject to change. However, given the nature of Lisps, it is more likely that changes will occur in libraries than the language itself. Stability in terms of bugs does not appear to be an issue.&lt;/p&gt;


	&lt;p&gt;Clojure also has the fewest known production deployments of the three languages. However, industry adoption is expected to happen rapidly.&lt;/p&gt;


	&lt;h4&gt;Performance&lt;/h4&gt;


	&lt;p&gt;Clojure supports type &amp;#8220;hints&amp;#8221; to assist in optimizing performance. The preliminary discussions I have seen suggest that Clojure offers very good performance.&lt;/p&gt;


	&lt;h4&gt;Adoption&lt;/h4&gt;


	&lt;p&gt;Clojure is more of a departure from Java than is Scala. It will require a motivated team that likes Lisp ;) However, such a team may learn Clojure faster than Scala, since Clojure is a simpler language, &lt;em&gt;e.g.,&lt;/em&gt; because it doesn&amp;#8217;t have its own object model. Also, Lisps are well known for being simple languages, where the real learning comes in understanding how to use it effectively!&lt;/p&gt;


	&lt;p&gt;However, in my view, as for Scala, the extra learning effort will be rewarded with higher productivity.&lt;/p&gt;


	&lt;h4&gt;Tool Support&lt;/h4&gt;


	&lt;p&gt;As a new language, tool support is limited. Most Clojure developers use Emacs with its excellent Lisp support. Many Java tools can be used with Clojure.&lt;/p&gt;


	&lt;h4&gt;Deployment&lt;/h4&gt;


	&lt;p&gt;Clojure deployment appears to be as straightforward as for the other languages. A Clojure runtime jar is required.&lt;/p&gt;


	&lt;h3&gt;Comparisons&lt;/h3&gt;


	&lt;p&gt;Briefly, let&amp;#8217;s review the points and compare the three languages.&lt;/p&gt;


	&lt;h4&gt;Interoperability&lt;/h4&gt;


	&lt;p&gt;All three languages make calling Java code straightforward. Scala interoperates most seamlessly. Scala code is easiest to invoke from Java code, using direct &lt;span class="caps"&gt;API&lt;/span&gt; calls, as long as you know how Scala encodes method names that have &amp;#8220;illegal&amp;#8221; characters (according to the &lt;span class="caps"&gt;JVM&lt;/span&gt; spec.). Calling JRuby and Clojure code from Java is more involved.&lt;/p&gt;


	&lt;p&gt;Therefore, if you expect to continue writing Java code that needs to make frequent &lt;span class="caps"&gt;API&lt;/span&gt; calls to the  code in the new language, Scala will be a better choice.&lt;/p&gt;


	&lt;h4&gt;Object Model&lt;/h4&gt;


	&lt;p&gt;Scala is closest to Java&amp;#8217;s object model. Ruby&amp;#8217;s object model is superficially similar to Scala&amp;#8217;s, but the dynamic nature of Ruby brings significant differences. Both extend Java&amp;#8217;s object model with &lt;em&gt;mixin&lt;/em&gt; composition through &lt;em&gt;traits&lt;/em&gt; (Scala) or &lt;em&gt;modules&lt;/em&gt; (Ruby), that act like &lt;em&gt;interfaces with implementations&lt;/em&gt;.&lt;/p&gt;


	&lt;p&gt;Clojure is quite different, with an emphasis on functional programming and no direct support for object-oriented programming.&lt;/p&gt;


	&lt;h4&gt;New Ideas&lt;/h4&gt;


	&lt;p&gt;JRuby brings the productivity and power of a dynamically-typed language to the &lt;span class="caps"&gt;JVM&lt;/span&gt;, along with the drawbacks. It also brings some functional idioms.&lt;/p&gt;


	&lt;p&gt;Scala and Clojure bring full support for functional programming. Scala provides a complete Actor model of concurrency (as a library). Clojure brings software transactional memory and other innovations for writing robust concurrent applications. JRuby and Ruby don&amp;#8217;t add anything specific for concurrency.&lt;/p&gt;


	&lt;p&gt;JRuby, like Ruby, is exceptionally good for writing internal &lt;span class="caps"&gt;DSL&lt;/span&gt;&amp;#8217;s. Scala is also very good and Clojure benefits from Lisp&amp;#8217;s support for &lt;span class="caps"&gt;DSL&lt;/span&gt; creation.&lt;/p&gt;


	&lt;h4&gt;Stability&lt;/h4&gt;


	&lt;p&gt;All the language implementations are of high quality. Scala is the most mature, but JRuby has the widest adoption in production.&lt;/p&gt;


	&lt;h4&gt;Performance&lt;/h4&gt;


	&lt;p&gt;Performance should be comparable for all, but JRuby and Clojure have to deal with some inefficiencies inherent to running dynamic languages on the &lt;span class="caps"&gt;JVM&lt;/span&gt;. Your mileage may vary, so &lt;em&gt;please&lt;/em&gt; run realistic profiling experiments on sample implementations that are representative of your needs. Avoid &amp;#8220;prematurely optimization&amp;#8221; when choosing a new language. Often, team productivity and &amp;#8220;time to market&amp;#8221; are more important than raw performance.&lt;/p&gt;


	&lt;h4&gt;Adoption&lt;/h4&gt;


	&lt;p&gt;JRuby is the the easiest of the three languages to learn and adopt if you already have some Ruby or Ruby on Rails code in your environment.&lt;/p&gt;


	&lt;p&gt;Scala has the lowest barrier to adoption because it is the language that most resembles Java &amp;#8220;philosophically&amp;#8221; (static typing, emphasis on object-oriented programming, &lt;em&gt;etc.&lt;/em&gt;). Adopters can start with Scala as a &amp;#8220;better Java&amp;#8221; and gradually learn the advanced features (&lt;em&gt;mixin&lt;/em&gt; composition with traits and functional programming). Scala will appeal the most to teams that prefer statically-typed languages, yet want some of the benefits of dynamically-typed languages, like a succinct syntax.&lt;/p&gt;


	&lt;p&gt;However, Scala is the most complex of the three languages, while Clojure requires the biggest conceptual leap from Java.&lt;/p&gt;


	&lt;p&gt;Clojure will appeal to teams willing to explore more radical departures from what they are doing now, with potentially great payoffs!&lt;/p&gt;


	&lt;h4&gt;Deployment&lt;/h4&gt;


	&lt;p&gt;Deployment is easy with all three languages. Scala is most like Java, since you normally compile to class files (there is a limited interpreter mode). JRuby and Clojure code can be interpreted at runtime or compiled.&lt;/p&gt;


	&lt;h2&gt;Summary and Conclusions&lt;/h2&gt;


	&lt;p&gt;All three choices (or comparable substitutions from the list of other languages), will provide a Java team with a more modern language, yet fully leverage the existing investment in Java. Scala is the easiest incremental change. JRuby brings the vibrant Ruby world to the &lt;span class="caps"&gt;JVM&lt;/span&gt;. Clojure offers the most innovative departures from Java.&lt;/p&gt;</description>
      <pubDate>Thu, 15 Jan 2009 01:40:00 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:391065da-b6e2-4f4e-b3a1-cc911d3955df</guid>
      <author>Dean Wampler</author>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise</link>
      <category>Dean's Deprecations</category>
      <category>Dynamic Languages</category>
      <category>Agile Methods</category>
      <category>Scala</category>
      <category>JRuby</category>
      <category>clojure</category>
      <category>jvm</category>
      <category>enterprise</category>
      <category>Java</category>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by cheap snapback</title>
      <description>&lt;p&gt;So in addition to 50 yards, you will apperceive that the hat youve compensated for matches you and of acceptable top quality.&lt;/p&gt;</description>
      <pubDate>Sat, 14 Jan 2012 14:08:58 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:db2138f0-ec95-4c40-bc79-8fcc30d575af</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-197872</link>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by cheap snapback hats</title>
      <description>&lt;p&gt;Wide selection of brand new snapbacks a fresh installment of mitchell and ness x lakers snapbacks has just landed on the e-commerce runway new era snapback hat to match lebron 9 miami nights.&lt;/p&gt;</description>
      <pubDate>Sat, 14 Jan 2012 13:57:39 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:39b0c3d6-2b04-49e9-b2ab-cafff84b6878</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-197867</link>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by inexpensive jerseys</title>
      <description>&lt;p&gt;Physical purchasing provides you a likelihood to attending at the hat aloof afore you access it, not like back you are attractive on line.&lt;/p&gt;</description>
      <pubDate>Sat, 14 Jan 2012 13:54:22 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:f5f3273f-97da-4d25-a212-40d994d801bf</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-197866</link>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by cheap china jerseys</title>
      <description>&lt;p&gt;Outlets that accept sports associated things are apprenticed to accept stocks of these articles in assorted models back of the addition in fresh era snapback and the newest developments in appearance for these hats.&lt;/p&gt;</description>
      <pubDate>Sat, 14 Jan 2012 13:52:08 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:12ab31b3-0614-4768-9022-95c60956b669</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-197865</link>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by cheap air shoes</title>
      <description>&lt;p&gt;Yet addition breadth in which you can locate them for auction is suppliers which accommodate jeu things and merchandise.&lt;/p&gt;</description>
      <pubDate>Sat, 14 Jan 2012 13:49:47 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:223ee630-1e7c-46f2-87fd-167a2357925c</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-197864</link>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by Cheap Beats By Dr.Dre</title>
      <description>&lt;p&gt;She stopped a few years, until the 2008 producer Vincent van Herbert sign her to Interscope.&lt;/p&gt;</description>
      <pubDate>Tue, 08 Nov 2011 21:27:48 -0600</pubDate>
      <guid isPermaLink="false">urn:uuid:42fdc788-8090-463e-81d3-88868244dd1b</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-170213</link>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by christian louboutin</title>
      <description>&lt;p&gt;The professional design make you foot more comfortable. Even more tantalizing,this pattern make your legs look as long as you can,it will make you looked more attractive.Moveover,it has reasonable price.If you are a popular woman,do not miss it.&lt;/p&gt;


	&lt;p&gt;Technical details of Christian Louboutin Velours Scrunch Suede Boots Coffee:&lt;/p&gt;


	&lt;pre&gt;&lt;code&gt;Color: Coffee
Material: Suede
4(100mm) heel
Signature red sole x&lt;/code&gt;&lt;/pre&gt;


	&lt;p&gt;Fashion, delicate, luxurious Christian louboutins shoes on sale, one of its series is Christian Louboutin Tall Boots, is urbanism collocation. This Christian louboutins shoes design makes people new and refreshing. Red soles shoes is personality, your charm will be wonderful performance.&lt;/p&gt;</description>
      <pubDate>Thu, 03 Nov 2011 09:27:31 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:d8b6b63a-b4a0-4da8-bf76-ec21ba184b85</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-167626</link>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by flac converter</title>
      <description>&lt;p&gt;good post, i think so.Thank you!&lt;/p&gt;</description>
      <pubDate>Thu, 27 Oct 2011 02:56:30 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:abcfcb05-2692-445d-af97-8d1bd3ccc1fe</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-164491</link>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by name:Belstaff Jackets Uk Online </title>
      <description>&lt;p&gt;There&#8217;s no denying the fact that our is  well-know for its fine quality. &lt;a href="http://www.belstaffjacketsukonline.com/mens-belstaff-xl-500-jacket-c-16.html" rel="nofollow"&gt;Mens  Belstaff XL 500 Jacket&lt;/a&gt; There are many repeat  customers just for the&lt;a href="http://www.belstaffjacketsukonline.com/" rel="nofollow"&gt;Belstaff Jackets Uk Online&lt;/a&gt; quality of our products. &lt;a href="http://www.belstaffjacketsukonline.com/mens-belstaff-daytona-blouson-jacket-c-14.html" rel="nofollow"&gt;Mens  Belstaff Daytona Blouson Jacket&lt;/a&gt; Here, I provide you the  most fashionable and most durable that always designed with high qaulity and  also fo&lt;a href="http://www.belstaffjacketsukonline.com/mens-belstaff-jackets-c-13.html" rel="nofollow"&gt;Mens  Belstaff Jackets&lt;/a&gt;llow the fashion trend. &lt;a href="http://www.belstaffjacketsukonline.com/" rel="nofollow"&gt;Belstaff leather&lt;/a&gt; In order to improve.&lt;a href="http://www.belstaffjacketsukonline.com/mens-moncler-down-jackets-c-17.html" rel="nofollow"&gt;Mens  Moncler Down Jackets&lt;/a&gt; customer satisfaction&lt;a href="http://www.belstaffjacketsukonline.com/mens-belstaff-bags-c-12.html" rel="nofollow"&gt;Belstaff  Bags&lt;/a&gt;, a number of discount &lt;a href="http://www.belstaffjacketsukonline.com/" rel="nofollow"&gt; Belstaff Jacket&lt;/a&gt;activities  are ongoing in&lt;a href="http://www.belstaffjacketsukonline.com/" rel="nofollow"&gt;Belstaff UK&lt;/a&gt; our store. &lt;a href="http://www.belstaffjacketsukonline.com/mens-belstaff-trialmaster-classic-tourist-jacket-c-15.html" rel="nofollow"&gt;Mens  Belstaff Trialmaster Classic Tourist Jacket&lt;/a&gt;Such  as the which with pretty design and colorful style, &lt;a href="http://www.belstaffjacketsukonline.com/womens-belstaff-jackets-c-11.html" rel="nofollow"&gt;Womens  Belstaff Jackets &lt;/a&gt;and the which made of the latest  technology and follow the fashionable trend. Just come to our you will find  many unexpected surprise are waiting for you.&lt;/p&gt;</description>
      <pubDate>Mon, 17 Oct 2011 20:40:35 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:a6a71750-31b7-49a8-a4a3-d8835af445ba</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-158606</link>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by Ashley Bowling</title>
      <description>&lt;p&gt;A fish always rots from the head down&lt;/p&gt;</description>
      <pubDate>Sat, 15 Oct 2011 15:26:09 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:75996593-37f5-4589-a578-24df02c9c264</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-157184</link>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by canada goose coat</title>
      <description>&lt;p&gt;When it comes to feather dress, what appears in your mind? Which kind brand of down jacket do you like prefer? Though there are many down jackets for you to choose from, on the word, which one you really enjoy? I want to say that &lt;a href="http://www.shopcanadagoosejackets.com/cag012-p-12.html" rel="nofollow"&gt;canada goose coats&lt;/a&gt; is really your best choice. I believe you can&amp;#8217;t agree with me any more. When you take the quality into consideration, you will find that it is superior to any other kind of coat. Besides, &lt;a href="http://www.shopcanadagoosejackets.com/" rel="nofollow"&gt;discount canada goose jackets&lt;/a&gt; is a world well-known brand, which has gained high reputation in the world, which has accepted by our customers and some organization. Because of its high quality, some of our loyal customers have promoted it to the people around them. In their opinion, it is good to informing others to know it. Recently, &lt;a href="http://www.shopcanadagoosejackets.com/canada-goose-trillium-parka-c-5.html" rel="nofollow"&gt;Canada Goose Trillium Parka&lt;/a&gt; is on hot sale. What I have to inform you is that all the products there are made by hand, so they are elaborative and elegant enough. It is really beautiful once you dress in. So, if you are a lovely girl or woman, go to the store to buy one for you. You will appreciate it that you have such a coat.In addition, they also have any other products like &lt;a href="http://www.shopcanadagoosejackets.com/canada-goose-gloves-c-6.html" rel="nofollow"&gt;canada goose Gloves&lt;/a&gt; and &lt;a href="http://www.shopcanadagoosejackets.com/canada-goose-snow-mantra-parka-9501m-black-p-9.html" rel="nofollow"&gt;canada goose jacket supplier&lt;/a&gt;.Hope your will like its!&lt;/p&gt;</description>
      <pubDate>Thu, 13 Oct 2011 01:38:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:636edb69-31d4-45b6-87e2-490368bc3a86</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-155739</link>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by canada goose coat</title>
      <description>&lt;p&gt;When it comes to feather dress, what appears in your mind? Which kind brand of down jacket do you like prefer? Though there are many down jackets for you to choose from, on the word, which one you really enjoy? I want to say that &lt;a href="http://www.shopcanadagoosejackets.com/cag012-p-12.html" rel="nofollow"&gt;canada goose coats&lt;/a&gt; is really your best choice. I believe you can&amp;#8217;t agree with me any more. When you take the quality into consideration, you will find that it is superior to any other kind of coat. Besides, &lt;a href="http://www.shopcanadagoosejackets.com/" rel="nofollow"&gt;discount canada goose jackets&lt;/a&gt; is a world well-known brand, which has gained high reputation in the world, which has accepted by our customers and some organization. Because of its high quality, some of our loyal customers have promoted it to the people around them. In their opinion, it is good to informing others to know it. Recently, &lt;a href="http://www.shopcanadagoosejackets.com/canada-goose-trillium-parka-c-5.html" rel="nofollow"&gt;Canada Goose Trillium Parka&lt;/a&gt; is on hot sale. What I have to inform you is that all the products there are made by hand, so they are elaborative and elegant enough. It is really beautiful once you dress in. So, if you are a lovely girl or woman, go to the store to buy one for you. You will appreciate it that you have such a coat.In addition, they also have any other products like &lt;a href="http://www.shopcanadagoosejackets.com/canada-goose-gloves-c-6.html" rel="nofollow"&gt;canada goose Gloves&lt;/a&gt; and &lt;a href="http://www.shopcanadagoosejackets.com/canada-goose-snow-mantra-parka-9501m-black-p-9.html" rel="nofollow"&gt;canada goose jacket supplier&lt;/a&gt;.Hope your will like its!&lt;/p&gt;</description>
      <pubDate>Wed, 28 Sep 2011 20:59:50 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:113ce7b1-ce36-41e5-b0f2-570caea88e99</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-147005</link>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by canada goose coat</title>
      <description>&lt;p&gt;When it comes to feather dress, what appears in your mind? Which kind brand of down jacket do you like prefer? Though there are many down jackets for you to choose from, on the word, which one you really enjoy? I want to say that &lt;a href="http://www.shopcanadagoosejackets.com/cag012-p-12.html" rel="nofollow"&gt;canada goose coats&lt;/a&gt; is really your best choice. I believe you can&amp;#8217;t agree with me any more. When you take the quality into consideration, you will find that it is superior to any other kind of coat. Besides, &lt;a href="http://www.shopcanadagoosejackets.com/" rel="nofollow"&gt;discount canada goose jackets&lt;/a&gt; is a world well-known brand, which has gained high reputation in the world, which has accepted by our customers and some organization. Because of its high quality, some of our loyal customers have promoted it to the people around them. In their opinion, it is good to informing others to know it. Recently, &lt;a href="http://www.shopcanadagoosejackets.com/canada-goose-trillium-parka-c-5.html" rel="nofollow"&gt;Canada Goose Trillium Parka&lt;/a&gt; is on hot sale. What I have to inform you is that all the products there are made by hand, so they are elaborative and elegant enough. It is really beautiful once you dress in. So, if you are a lovely girl or woman, go to the store to buy one for you. You will appreciate it that you have such a coat.In addition, they also have any other products like &lt;a href="http://www.shopcanadagoosejackets.com/canada-goose-gloves-c-6.html" rel="nofollow"&gt;canada goose Gloves&lt;/a&gt; and &lt;a href="http://www.shopcanadagoosejackets.com/canada-goose-snow-mantra-parka-9501m-black-p-9.html" rel="nofollow"&gt;canada goose jacket supplier&lt;/a&gt;.Hope your will like its!&lt;/p&gt;</description>
      <pubDate>Wed, 28 Sep 2011 20:13:49 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:70325a47-9e78-49f9-a7c2-abef393cf3fa</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-146859</link>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by louis vuitton handbags womens on sale</title>
      <description>&lt;p&gt;Those are amazing. Wonderful collection. This is real design. Love it man. Thank you so much for shearing.&lt;/p&gt;</description>
      <pubDate>Mon, 19 Sep 2011 19:50:44 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:7230dd78-9d32-4f69-a0fc-5ab9a1a1b652</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-142988</link>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by upvc door</title>
      <description>&lt;p&gt;&lt;a href="http://ukdoorshop.co.uk/" rel="nofollow"&gt;upvc door&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Mon, 12 Sep 2011 21:53:01 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:fca3f849-e5bc-4627-a3e5-f4e9fae88e7b</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-139448</link>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by beats by dre store</title>
      <description>&lt;p&gt;and informative, I really enjoyed&lt;a href="http://www.drdrebeatsheadphones-australia.com" rel="nofollow"&gt;high quality headphones&lt;/a&gt;
&lt;a href="http://www.drdrebeatsheadphones-australia.com" rel="nofollow"&gt;new design headphones&lt;/a&gt;reading it and will certainly&lt;/p&gt;</description>
      <pubDate>Tue, 23 Aug 2011 04:10:41 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:979bb5fb-b555-46ad-87dd-1d7eabca7900</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-131786</link>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by Crystal Jewellery</title>
      <description>&lt;p&gt;Great post! Nice and informative, I really enjoyed reading it and will certainly share this post with my friends .  Read everything  about  &lt;a href="http://www.jewelleryxy.com/gold-karat.html" rel="nofollow"&gt;the concept of gold karat when applied to gold&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Thu, 18 Aug 2011 12:30:57 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:0e2cad24-f61d-4f3b-ab39-bf40728d5c71</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-129489</link>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by composite doors</title>
      <description>&lt;p&gt;There is lots of important information here in this site. Though it looks bit complicated. But it truly has significant contribution to the topic. I told my buddies to go through this regularly. Good job .&lt;/p&gt;</description>
      <pubDate>Sat, 30 Jul 2011 12:43:55 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:e984b718-1ea6-447a-83a9-43fe714394ae</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-122290</link>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by upvc door</title>
      <description>&lt;p&gt;This blog seems to be advanced than other blogs. It&#8217;s very appealing to the readers. I found every posts informative. You need to improve the looks. Well done anyway.&lt;/p&gt;</description>
      <pubDate>Sat, 30 Jul 2011 12:42:35 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:dbb1f5e0-a8ca-4413-8846-d1b0e2359321</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-122289</link>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by stump removal Houston</title>
      <description>&lt;p&gt;This blog definitely has very broad collection. The resources are really comprehensive. I have been visiting at least two or three times a week. It helps me a lot to gain knowledge about this topic. Looking forward to get more stuffs like this.&lt;/p&gt;</description>
      <pubDate>Mon, 20 Jun 2011 00:48:27 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:de245e39-f031-4bbe-a776-d81c911abd69</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-112747</link>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by cookies gift baskets</title>
      <description>&lt;p&gt;Blog posts about wedding and bridal are always rare to find , at least with great quality,you qualify for a great blog post writer title,kep the great job happening&lt;/p&gt;</description>
      <pubDate>Sun, 19 Jun 2011 11:25:55 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:9653d80a-cc1c-4328-8cf6-b85db1cb02c6</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-112467</link>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by hcg diet atlanta</title>
      <description>&lt;p&gt;Really appreciate the effort behind this site. It is perfectly designed. I can have a glance easily because of the eye catching background. I almost daily move my mouse scroll here. Well done.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.lookyoungatlanta.com/HCG-diet.html" rel="nofollow"&gt;hcg diet atlanta&lt;/a&gt;&lt;/p&gt;</description>
      <pubDate>Sat, 18 Jun 2011 06:01:04 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:17324fb1-90ab-45b3-b307-26598a287d51</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-112278</link>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by commission predators</title>
      <description>&lt;p&gt;What a wonderful article! And are doing well on the whole, but their work also has shortcomings.&lt;/p&gt;</description>
      <pubDate>Fri, 17 Jun 2011 11:31:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:78dbec35-2610-4404-998e-790140f5607f</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-111812</link>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by lose thigh</title>
      <description>&lt;p&gt;Thanks for the JVM discussion!&lt;/p&gt;</description>
      <pubDate>Sun, 12 Jun 2011 20:59:21 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:2853056f-bfac-4f9f-9f1c-df2fa7068b5f</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-110379</link>
    </item>
    <item>
      <title>"Adopting New JVM Languages in the Enterprise (Update)" by abercrombie paris</title>
      <description>&lt;p&gt;These databases are typically managed with functional techniques, like map-reduce.&lt;/p&gt;</description>
      <pubDate>Thu, 09 Jun 2011 09:20:16 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:ec58cf17-4fb4-4580-b58f-275d1c29fd17</guid>
      <link>http://blog.objectmentor.com/articles/2009/01/15/adopting-new-jvm-languages-in-the-enterprise#comment-109468</link>
    </item>
  </channel>
</rss>

