<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-35329380.post6008312993612189205..comments</id><updated>2008-05-16T23:38:01.178-07:00</updated><title type='text'>Comments on In Search of a Title: Language Comparison Series</title><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://alankeefer.blogspot.com/feeds/6008312993612189205/comments/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35329380/6008312993612189205/comments/default'/><link rel='alternate' type='text/html' href='http://alankeefer.blogspot.com/2008/04/language-comparison-series.html'/><author><name>Alan Keefer</name><uri>http://www.blogger.com/profile/04096493616443480802</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-35329380.post-1626227632356491673</id><published>2008-05-16T23:38:00.000-07:00</published><updated>2008-05-16T23:38:00.000-07:00</updated><title type='text'>Perhaps, but it's only avoidable because of what y...</title><content type='html'>Perhaps, but it's only avoidable because of what you don't get.  You can use runtime code generation to generate on-the-fly classes for various bits of the application, but they do very different things than what you get in a more dynamic language.&lt;BR/&gt;&lt;BR/&gt;For example, ActiveRecord magically creates all sorts of classes, methods, and properties based on your database schema.  In Java, there's no possible way to do that:  sure, you could generate the classes at runtime, but how would you use them?&lt;BR/&gt;&lt;BR/&gt;Similarly, the ORM part of Django takes a bunch of classes that describe your model and then lets you use that to create your database and provides a bunch of magic properties and methods for doing queries based on those properties.  Again, there's no decent want to do that in Java without code generation.&lt;BR/&gt;&lt;BR/&gt;You can do all that stuff reflectively in Java, but then you're just passing around bags of strings, which quickly gives you all the disadvantages of not having static types with none of the advantages of having dynamic types.&lt;BR/&gt;&lt;BR/&gt;For what it's worth we do code generation to transform XML metadata about the DB schema into Java classes we can then work with in the application.  There's really no way to avoid that unless we invert things by hand-coding the Java classes and deriving the metadata off of them via annotations, which has its own set of disadvantages (not configurable by customers, not easy to manage with tools, etc.).  So you can't really win either way, and the end result is just way less usable than the frameworks you'll find in dynamic languages.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35329380/6008312993612189205/comments/default/1626227632356491673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35329380/6008312993612189205/comments/default/1626227632356491673'/><link rel='alternate' type='text/html' href='http://alankeefer.blogspot.com/2008/04/language-comparison-series.html?showComment=1211006280000#c1626227632356491673' title=''/><author><name>Alan Keefer</name><uri>http://www.blogger.com/profile/04096493616443480802</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01203230764906426323'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://alankeefer.blogspot.com/2008/04/language-comparison-series.html' ref='tag:blogger.com,1999:blog-35329380.post-6008312993612189205' source='http://www.blogger.com/feeds/35329380/posts/default/6008312993612189205' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-35329380.post-5039772581526437839</id><published>2008-04-13T17:56:00.000-07:00</published><updated>2008-04-13T17:56:00.000-07:00</updated><title type='text'>" Java just doesn't lend itself to great framework...</title><content type='html'>" Java just doesn't lend itself to great frameworks due to its lack of metaprogramming. No matter how clever you are, it's really a pretty fatal flaw in my opinion; the gscript interface to our ORM layer is all dynamic even though GScript is strongly-typed, thanks to the magic of our open type system, but on the Java side we have to do massive amounts of code generation that should be totally unnecessary. "&lt;BR/&gt;&lt;BR/&gt;In regular Java projects, very few people use code generation. It was true maybe in 2003 but we are in 2008 :)&lt;BR/&gt;Java frameworks now (whether i be web, application, ORM etc) eliminate the need for code generation.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/35329380/6008312993612189205/comments/default/5039772581526437839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/35329380/6008312993612189205/comments/default/5039772581526437839'/><link rel='alternate' type='text/html' href='http://alankeefer.blogspot.com/2008/04/language-comparison-series.html?showComment=1208134560000#c5039772581526437839' title=''/><author><name>Emmanuel Bernard</name><uri>http://www.blogger.com/profile/12946048387636548675</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://alankeefer.blogspot.com/2008/04/language-comparison-series.html' ref='tag:blogger.com,1999:blog-35329380.post-6008312993612189205' source='http://www.blogger.com/feeds/35329380/posts/default/6008312993612189205' type='text/html'/></entry></feed>