Friday 19 September 2014

I would actually love to see your Railo 5.x wishlist...

That was a comment from Gert against the article "ColdFusion 12" article.

Fair enough.

I started writing my response as a comment, but whilst typing it my interest was piqued regarding one of my own thought processes. It would just never occur to me to write an article about a wishlist for Railo. And I don't know why. I prefer the product to ColdFusion (which is easy: it's just better, as are the company & personnel behind it), but this sort of article doesn't seem necessary to me, in a Railo context. I suppose it's because getting Adobe to do anything sensible with CFML is a hard-fought battle, and left to their own devices they either mess shit up, or come up with stuff like <cfclient>. So they need strong direction / coercion from the community. Conversely with Railo, they already have a better idea of what a CFML developer needs, and often come up with the goods before it occurs to anyone to ask for it. Or if one does make a good case on either the Google Group or Jira, they just crack on with it and do it.

So it's not neglect of Railo that doesn't have me writing "My Wishlist for Railo 5.x" etc. It's just never been necessary.

Equally in the back of my mind I know the Railo guys will take on board anything anyone suggests for ColdFusion, and either implement it first, or go "nah, not a good fit for Railo". So I suppose my article would better be titled "CFML-next Wishlist".

Still, Gert asked, so Gert gets. Here's what I said in the comment, before promoting it to being an article:

Isn't 5 pretty much in the bag already? I'm kinda expecting it to be released... shortly..?

Realistically anything that I say about ColdFusion equally applies to Railo, except where Railo already has whatever "it" is. So the main things I'd like to see in Railo is a proper command line, so - from the command shell, not from something like CommandBox - I can simply go:

> railo myFile.cfm

And it'll run. Similarly have a proper interactive shell eg:

> railo
RAILO> echo("G'day world")
G'day World


Also have a package manager (again, from the command line, not from something like CommandBox), and publish the standard for developing packages / managing dependencies etc.

These aren't "nice to have", these are essentials. Every language I know of except CFML has these.

Can Railo already do stuff like extend Java classes with CFCs? How about implement Java interfaces? This is necessary for proper CFML / Java interoperability. Mostof my coding is (ahem... was) CFML-centric, but there's a few times I want to do stuff with Java. I know ColdFusion does Java proxying so I can create CFC instances within Java code (I presume Railo can do the same), what I more want to do is to say my CFC implements java.lang.CharSequence (or something), and implement those methods in CFML, and then be able to use my CFC when I'm calling a Java method which needs a CharSequence. Be that in Java code, or within CFML code which is calling Java methods.

Alex Skinner (I think it was Alex? It might have been Sean; or both of them at various stages) suggested ditching my notion of CFScript 2.0, in favour of just being able to run server-side JS as the script solution. Provided it had inter-op libraries so the JS implementation played nice with CFML, that'd be excellent.

I like that everything in Ruby is an object, and every statement is an expression. That could be something to aspire to, as it gives nice options for how we code things.

Also continue to investigation collection / iteration methods, and other functional programming nuances.

And... if we're sticking to CFScript as it stands... revisit all functionality that currently has only the "generic CFScript syntax" as its CFScript implementation, and consider if that is the best way to represent that functionality. And if anyone during that investigation ever mentions "but the tag...", they should be made to wear a pointy hat and go sit in the corner. Because they don't know what they're talking about, and probably are to blame for the direction CFScript has gone recently! The problem domain is "providing the functionality", not "providing a script version of a tag which provides some functionality". Having come up with the best solution in CFScript for each element of CFML's functionality, deprecate the "generic" approach to fulfilling that functionality.

Finally, I'd like there to be a language design committee, rather than this all being done from within Railo. I think there are people in the community that have very good understanding of language design, and that could help iron out some of the stuff that finds its way into the language (obviously Adobe needs this far more than Railo do, but still).

I think that's it. In the case of Railo - and that previous para notwithstanding - I think Railo getting gets things right. So keep doing what you're doing.

And where is Railo 5.0?