Thursday, May 24, 2012

What's New in Shiro?

While SVN and the blog have been quiet lately, Shiro itself hasn't.  I believe I spoke somewhere about an old co-worker of mine who would continually ask me what Merlin (which is what Shiro was called at the time) was for; I've been asking myself that question a lot over the last few months, and fleshing out my answer.  The idea of just making a general purpose, super-high-level interpreted language that doesn't really natively-interoperate with any well-known frameworks was fun and led me to having a pretty cool project under my belt, but we already have languages for that.  The various DLR languages, clojure, Lua, python...  that's a sales-pitch I can't make.

The http module was a first start at defining what Shiro was.  Okay, it's a node.js style, event-driven web server automation language.  Neat, but too small of a niche, I felt at the time.  My initial reaction, as you can see from my last post, was to dive in and add a bunch more functionality to the language, but then I remembered my favorite Mark Twain quote, "I would have written a shorter letter, but I didn't have the time," and realized that focused functionality is what was called for, not just throwing in everything from observables to exposed ASTs.

My answer actually came in my dayjob.  I understand what Shiro is now, or rather what it will be.  Shiro is a web platform in a box, for services or whatever.  By integrating Sqlite, cleaning up several areas, re-writing the documentation and punching up the Http module, you can just download the Shiro environment and have a full stack -- http server, database access with SQL support (without even needing an ODBC database anywhere, given how sqlite works), access to "real" databases, and anything else you need to build a web app.  It's Ruby on Rails without being two separate things.  While you can certainly write simple apps that do all kinds of stuff in Shiro, from now on it is going to have a focus.  Coming up with this was a cathartic experience in some ways.

The advantages of such a development environment are numerous.  First, it's a fantastic learning tool for new developers.  You can build out web apps, web services for your apps, or whatever, all with only a single tool.  You can learn about databases without having to deal with connection strings and downloading an RDBMS.  It's also great for more experienced web developers looking to do what I do with Shiro -- quickly mock out web services for prototype and mock development.

This is going to be a gradual shift, and very little will change in the language as it exists today.  Instead I will be building out libraries and APIs (as well as, one day, fixing ShiroChan so it's a better IDE) to facilitate this shift, and doing a ground-up rewrite of the documentation with a focus not just on language semantics, but on the core purpose behind the whole thing.

I remain developing in the 0.9 version, which is not officially released yet.  It's release will include the first steps toward this new paradigm, and hopefully include a blitz of documentation and wiki pages.

(I'm probably still going to do the observable thing though, that's too cool to pass up).

No comments:

Post a Comment