S.Isaac Dealey posted an interesting blog entry about whether or not certain functionality should be added to the core CFML language. He was talking specifically about the ability to work with zip compressed archives but the argument applies to many other things.
His assertion is that since a lot of functionality can be easily added through the use of ColdFusion extensibility options–User Defined Functions, Custom Tags, and ColdFusion Components–and because of this some common functionality does not need to be added to the core CFML language or function library.
I completely agree that developers should take full advantage of extensibility and the great resources available to us such as cflib.org and Macromedia Exchange. With these options individuals can add functionality to CF and share that functionality with others.
However, I disagree that this replaces the need for new functionality to be added to the core language for several reasons.
Availability. Having functionality included in the language natively means that a developer can use it immediately and doesn’t have to locate an external UDF/tag/CFC. It also means that the functionality is available globally to the whole server without having to include it or use some code that may be server specific to initialize the extensions.
Quality. Functionality included in ColdFusion has a certain guarantee of quality. While CF has had a few very buggy releases, overall the quality is high and the writing, testing, and version control standards are higher than is present in most free libraries. I know from experience that cflib.org does very good testing of UDF’s submitted to them, but that is not the case in all libraries and initial testing doesn’t compare to a full battery of regression tests.
Speed. Particularly when wrapping Java calls in CFML, speed can become an issue. For cases such as the zip functions under discussion, the code interacts with several Java objects in a potentially long loop. Whenever CFML code makes a call to a Java object this call is always made through reflection. What would be a simple object call in Java translates to several levels of object calls in the code generated by ColdFusion and utilized by the underlying CF runtime libraries.
For these reasons, I would hope that in the next version of ColdFusion, the engineers would in fact take a look at the whole J2SE and J2EE libraries and add some new native CF functions or tags that wrap available functionality.