I would like to argue two points. First that a new extension should not be
created, and second, if it is created it should not be called “.lucee”.
I have just read through the group and all of the arguments that I could
find for a new extension to separate the way code is processed are because
of the following needs: deprecation of existing code features and idioms,
addition of new features and idioms that would not be backwards compatible,
and a way to break away from the stigma of CFML.
Deprecation can happen inside of the existing cfml files without the need
for a new extension. Deprecation of tags, functions or idioms can be
handled at the engine level in many ways - the easiest I can see would be a
pragma rule in Application.cfc that sets a language level. Something
similiar to “use strict” in javascript. Any CFML engine (such as ACF) that
does not implement these pragmas can just ignore it. Any use of deprecated
functionality or idioms can start throwing errors if the pragma is used.
If necessary, the pragmas could have levels of enforcement, for instance
to throw a warning into a log file instead of an exception at a certain
level.
New features that are not backward compatible could be handled with the
same sort of pragma rule. The way var works in a block vs function scoping
for instance - at a certain pragma level it can have the new implementation.
Again, a pragma is just one way - using “this.” settings is another, or a
specific file that would sit alongside Application.cfc. I’m sure there are
others we could come up with.
Breaking away from the stigma and baggage of CFML is a valid concern, but I
would like to argue that the likelihood of lucee appealing to a wider
audience outside of the current CFML community is low. There are just too
many options for other languages on the JVM alone, languages that have been
designed from the ground up with a consistent vision and with modern
features. Also, unless the intention for “lucee.next” is to start an
entirely new language from scratch, you are still going to be taking at
least some of CFML’s baggage with you regardless. Calling it a new name in
hopes to trick some newcomer that lucee isn’t the CFML they’ve heard about
isn’t going to work for very long. IMO the best way to appeal to a broader
demographic is to expand the interoperability with other languages - both
using those languages inside of CFML and using CFML inside of other
languages. See the work Sean is doing with cfmljure. Using CFML as a
templating language from groovy would have a lot of appeal I believe.
Being able to use JS via Nashorn in lucee would be amazing. I know there
has been some talk about JSR-223 in the past which is a step in the right
direction - the ability to use those other languages inside of CFML would
be just a nice.
That said, if you find that it is necessary to have a new extension, please
reconsider using “.lucee” specifically. Firstly it makes compatible forks
and language implementations harder if not impossible. Consider if this
idea had come up a few years ago and “.railo” had been used. When it was
forked and became Lucee we would have been in the same boat that we have
been in with the .ra files, only it would be a much worse situation. I’m
sure its hard to consider that Lucee might be forked by the same crew
again, but surely it cannot be ruled out completely? The same would also
apply to anyone else wanting to come along and fork lucee into a compatible
engine.
It also means that Adobe cannot / will not be able to implement the
advances made. No matter what your opinion of Adobe and their handling of
the language, they have implemented features initially developed in Railo
and there is no reason to believe they wouldn’t continue to do so. And
even if you think that Lucee should forge its own path away from ACF, that
doesn’t mean that we should preclude them from being able to take up these
features, and make a compatible engine going forward. Using “.lucee” means
that at best they will implement the same features with a different
extension. This will also make things harder on library authors hoping to
support multiple engines, something that is at least possible today. Using
“.lucee” will ultimately lead to a lack of choices for developers. We
already have a documentation problem in all engines. In the past week
alone I have used the ACF documentation for lucee code many times. I have
used railo documentation in the past for ACF code because of holes they
have. Ultimately if you at least consider that the CFML history is not
something that we will be able to shake completely, we are a stronger
community together than we are individually. Of course Adobe might not
pick up any of the advances made here - but I just don’t see any good
reason for making it harder for them to do so.
There are other options available if a new extension is necessary. “.cfs”
for cfscript or “.cfn” for CF-next. I’m certain that if necessary there are
other - more inclusive - options available. In an ideal world we could get
to a broader language specification and the file extension could reflect
the version of that language, but of course I don’t believe that to happen
anytime soon.