Tuesday, 16 February 2016

ColdFusion 2016: Adobe finally abandons CFML

I should have suffixed that with "for all intents and purposes".

Today ColdFusion 2016 was released. My executive summary of this release is that it's by far the worst ColdFusion release since CFMX6.0. 6.0 was basically released as alpha quality, and not usable for I think three additional beta patches, finally being usable at 6.1.

ColdFusion 2016 continues Adobe's increasingly prevalent tendency to aim to appeal more to PHB types, but this time finally decides to completely marginalise the actual CFML developer. If ColdFusion 11's only addition to CFML had been <cfclient>... it'd still be a better ColdFusion release - in terms of CFML - than CF2016 is. That's how crap CF2016 is.

In this light, I think it's clear that Adobe have pretty much given up on the CFML community, instead thinking their "community" is a bunch of purchase-order-signing IT managers.

ColdFusion 2016 includes a bunch of non-CFML features, which are varying degrees of relevance and interest to the CFML developer, but there are only... 2 (f***ing two!!)... enhancements to the CFML language. We've been waiting two years for more stuff to go into the CFML language, and that's what we get. This is appallingly cynical from Adobe.

So what are the CFML features? Let me quote from the release docs:

Language enhancements

For safe navigation, “?.” operator has been introduced. Collections support for “ordered” and “sorted” has been introduced. Refer this section to know more about all the language enhancements.

That's it. Two things.

I've already written about both of the features they list above:

Both of these have changed since I wrote about them:
  • the scope of sorted/ordered structs has been pegged back a bit, and there's now only ordered structs, as Adobe realised "ordered" and "sorted" are synonymous terms, and they only really needed the one concept. The implementation they have shipped is a bare minimum to not take the piss, but it's not as good as the alpha version I wrote up. I'll leave it to you to examine the final implementation.
  • the implementation of the safe-navigation operator has been tweaked to also do a null-safety-check on the last right-hand-side operand (read the linked-to article for explanation of this), but it has been released in an incomplete state as it only supports dot notation, not bracket notation.
They've actually forgotten a coupla small things: there are now iteration methods for queries (.map().reduce() etc), and I heard someone mention there's also a valueArray() method now... I've not tested that.

I've had a quick look at the query iteration methods, but do't have anything to show for it yet. I'll get onto that next.

And actually there is another feature: arrays are now "passed by reference" rather than "passed by value", which is long overdue, and more a design bugfix than a feature IMO. And is that really a CFML feature? I guess it's code-centric.

To be fair there's also some tweaks to PDF functionality, but as the whole concept of PDFs makes me...


... sorry, dunno what happened: dropped off there for a second. Um... right... PDFs... yeah, one can do stuff with redaction and comments and metadata, but I have no idea what and intend to keep it that way.

The other actually good developer-centric feature of ColdFusion 2016 is the CLI, which is a welcome addition, and has been implemented well. But it's not a CFML enhancement. I wrote up the alpha implementation a while back: "ColdFusion 2016: the long-awaited CLI". It's not moved much since then, so I won't go into it more.

But what about all those tickets Adobe marked "to fix" shortly before and during the pre-release? Nothing, as far as I can tell. I know goalposts change during development of new software, but I really do think Adobe changed the status on those tickets purely to get people off their back, and they never really had any intention of fixing them in ColdFusion 2016. I'm sure someone will come back saying "they just said 'to fix', they never said when". That's just disingenuous. But I'm sure that was the particular combination of smoke and mirrors they were going to fall back on if anyone called them on it.

What other stuff is there?

NTLM authorisation has finally been added to I think all features which should have had it from the outset. This is not a new feature IMO, but basically bringing beta-quality features up to release quality. It makes them usable beyond general proof of concept.

There's a half-baked, feature which allows one to hive session storage off to a redis data store which isn't bad conceptually, but I don't think the realisation is that good. Still: this is an administrative feature, not a language feature.

The marquee features of ColdFusion 2016 are ColdFusion-administrative sort of stuff, indeed the main feature, the API Manager is a completely separate app, and I'm not sure why it's been shipped as part of ColdFusion. Note it's an API Manager, not a ColdFusion API Manager. SO it's like a separate Adobe product they bunged in with ColdFusion 2016 simply cos they got the same team developing it. Well: developing it at the expense of actually working on ColdFusion itself, it seems.

ColdFusion Builder has had a code security scanner built into it, but that's CFB not ColdFusion, so who cares about that? It requires using CFB to use it, so that pretty much invalidates it as far as being relevant goes, I think.

One caution I have here is that the pre-release cycle seemed very short this time around. It's usually about a year, I think; this time it was more like six months. I cannot go into detail about the inner workings of the PR due to an enduring NDA, but I will let the reduced duration speak for itself. As I would always advise: do not upgrade your environments yet. Perhaps put a ColdFusion 2016 server into your test lab and run your tests against it. But do not make plans to go live with it yet. I would usually recommend waiting until the .0.1 or .0.2 release of any new ColdFusion version before running with it, but if one takes the duration of the prerelease, I think one ought to consider this a public beta rather than the release version, so perhaps hold off longer even than usual.

What an abject disappoint.

As a footnote to this, Ray's written an article about his thoughts on ColdFusion 2016, as well as pushed the boat out a bit and made some (supposedly) NDA-friendly observations about the ColdFusion 2016 Pre-release programme. You've probably already read his stuff before landing here, but if not: Adobe ColdFusion 2016 Released.

I'll give those query iteration methods a whirl and report back...