My take on Matt Raible's spreadsheet December 9, 2010
Here are my ratings on Lift (and, yes I'm aware that Matt's scale is 0-1 and my ratings are on Matt's scale, except mine goes to 11).
screencast on building a comet chat app.With Lift, you don't worry about the plumbing, setting up routes, etc. Thus, Ajax is much, much easier and Comet (server-push) is better than any other framework available. Sure, writing a green-screen style CRUD app with Lift isn't a major win over other web frameworks, but when it comes to stuff that's hard or impossible in other web frameworks, Lift makes it someplace between super-easy and possible. For more, see my
I've seen a number of reports on Lift vs. JSF2/Struts2/GWT/Flash/Spring MVC/Grails done internally by companies and government agencies looking to commit to web framework for various different long-running projects. While Lift has not been chosen for all the projects, Lift has consistently come in first in terms of smallest lines of code and top developer ratings (and these are generally Java developers who have had prior experience with at least one of the other competing frameworks.) So, repeatedly, big-business Java developers have been able to pick Lift up and deliver projects more efficiently than with competing technologies in shorter periods of time while learning the framework and the Scala language. Put another way, one corporate Lift developer recently posted to the Lift list:
The deeper I get the more I think that the cognitive barrier to
understanding Lift is that one expects things to be so much more work
than it actually is.
Job Trends, yep, it's zero.
Scalatewhich provides Mustache, Scaml (like Haml) and SSP (Velocity-like), you can use it with Lift. Lift also supports using Scala XML literals so you can code your templates right in Scala. Or, you can use Lift's snippet mechanism to have templates that cannot contain any business logic and are developer friendly. So, for example, if we were to build a table using Lift's snippet mechanism, our view would look like:
And our Scala code would look like:
So, the designer inserts a "lift:MySnippet" class into an element that has dynamic behavior and the developer binds dynamic content via CSS selectors. If you can find something that's more concise or more oriented to the way of the web, show it to me. But I think this is hands-down the best templating system I've ever seen.
wiring which allows you define relationships between components and update all dependent components automatically), or they can stand alone. Lift is also based on Scala which is a functional language, so Lift's components are literally functions that transform template HTML to browser HTML.You've got 5 components on that page alone. You've got the menu component and the messages component and the clock component (which updates every 10 seconds based on server push) and the chat component... and let's not forget the main content component. What Lift doesn't have is something separate or different from Lift that is called a "component system." Lift is not front-controller, so each snippet on the page is a component. Each piece of dynamically rendered content is a component. Yes, the components can interact (see Lift's
find all the tickets opened by Novell and Foursquare... not a lot.
Validation, here again, Lift gets at least a 2. Lift's Screen and Wizard have tremendously powerful validation. For example: val name = field("Name", "", minLen(2, "Name too short")).
Quality of document, here I'll give Lift a 0.5. Lift's documentation is not as good as it could or should be.
It's also type-safe, composable (you can easily combine components of a REST service together because all of Lift's REST services are defined as Scala functions), and secure.
So, yes, I see Lift as far better than any other web framework. This is by design. I have taken the best ideas that I've found in many of the excellent web frameworks, but also taken the approach of turning the HTTP request/response cycle into plumbing that need only be exposed when your application needs it, otherwise the developer focuses on the business logic. Lift provides the best Comet and Ajax support of any web framework. Lift is the most secure web framework around. And developers are very, very productive writing (and maintaining) Lift apps.
I can go on in greater depth about Lift's use of simple concepts like keeping the page around as well formed XML until it's time to stream it to the browser which radically enhances security and flexibility. I could talk about the composition of functions as a much more manageable way to build any logic (basically, the promise of OO, except materialized differently.) But at the end of the day, folks have adopted Lift, despite its differences and those that acknowledge its differences quickly become more productive with Lift than almost any other framework. Those that embrace its differences change the world.