ACF-2018 compatibility

We started a document to keep track on all features new to ACF-2018

ATM we have 4 categories:

  • already supported (green)
  • partially supported, maybe needs some adjustments for an exact fit (orange)
  • not supported (red)
  • not sure (white)

Next step is, we make Jira tickets for every single point in that sheet.
Feel free to comment in every upcoming Jira ticket and vote for the feature you like.

1 Like

this pdf (login required) details the changes in depth

Here’s some attached versions for anyone who doesn’t have a login to the Adobe community portal.

files_2018_04_Public_Beta_Whats-new-and-changed.pdf (43.8 KB)

files_2018_04_Public-Beta_Documentation.pdf (932.5 KB)

this script shows me the difference with named arguments, in addition it also shows missing functions and functions with a different argument length.

1 Like

Based on page 22 in this doc

this code


should produce this output
but in my opinion it should be

then end index is 6 what has the value 6, do i miss something?

1 Like

@micstriit A quick review of other languages (JS, java, Python) the ending index is not inclusive meaning it’s “up to but not including”. I would prefer both indexes be inclusive but there seems to be a precedent there in other languages I Adobe probably followed.

@bdw429s when introducing new features into Lucee i always look for existing features that are similar to adapt, in that case i would take the function “mid” as template as we did for the function “ArraySlice”.
what is “offset” and “length”.

here is the update 1, mostly changes to named parameters

implementing typed arrays are not possible in Lucee as they are implemented in ACF.


Lucee supports to use bracked notations to call functions, so the following function call of a component


can also be done as follows


what allows to set the name dynamically


This syntax conflicts with the syntax chosen by ACF for this typed arrays.
Seems they adapted generic types from Java, but in my opinion a bad solution.

Better would be

arrayNew(type:"string");// named arguments

arrayNew(1,“string”); means synchronized?

@Zackster good observation!
With 5.3 we move the attribute “synchronized” to the end of the argument list, so it will be

arrayNew(dimension,type, synchronized);

BUT Lucee 5.3 is backward compatible to 5.2, means if someone does


it will still work because the function detects if “type” is cast-able to a boolean, in that case it uses the value for “synchronized”.
It is not the first time we handle this in that way and normally this does not cause any problem for existing code.

we also discussed to make the argument “synchronized” obsolete, like we did for structs in the past (structNew("synchronized")). In Lucee all structs are synchronized. So the idea is to make all arrays synchronized.

Hi @micstriit, What if arrayNew(1,true) represents a CFC named true.cfc? That’s edge-case, so no need to cater to it right? Thanks!, -Aaron

Hi @micstriit, Agreed. This is fixed in latest public Aether refresh. Thanks!, -Aaron

yeah that would be a problem, similar to name a cfc for example String/Date/Numeric/Query/…
and then use that as a type definition.

function test(Query q) {
test(new Query());

there’s a discussion of this syntax in the ACF forums, might be worth chiming in?

@Zackster thanks to point out, seems the discussion already goes into the right direction.

Ben Nadel has been investigating the new futures / runAsync in ACF 2018

I see there is a very old issue about this

Is there a plan for supporting this in Lucee? (BTW I just got an access denied on that google docs spreadsheet?)