This one has come up a little quickly after our kickoff meeting. To get our feet wet and help work through some old stuff clogging up JIRA I asked @simonhooker to help pull together some tickets for us to discuss. Meeting will be via Zoom. The URL or call-in number is in the Google calendar invite I just sent out.
We donât have to make it through the entire list. I would recommend we decide if each idea is even defined well enough to bring it to a vote. If not, weâll add comments to the ticket and leave it pending. If so, weâll prepare a spreadsheet for the members to enter their votes into. The voting can actually happen later at each memberâs convenience after the meeting (especially if anyone is absent) and weâll simply tabulate the responses and include the outcome in the meeting minutes which will be added here in this post.
Date/Time: 16th September 2015 @ 19:00 UCT In Attendance: Brad Wood, Simon Hooker, Kai Koenig, Sean Corfield, Igal Sapir, Micha Offner, Mark Drew, Dominic Watson Absent: Luis Majano
Summary of votes taken in this meeting
Full details of the discussions surrounding these tickets can be found in the minutes below
LDEV-369 Add a require semicolon or a âACF modeâ - Rejected ( 5 - 3 )
LDEV-438 Allow exceptions to be nested - Accepted ( 9 - 0 )
LDEV-442 Array function to remove duplicates - Accepted ( 7 - 2 )
What is the TAGs definition of âcompatibilityâ
Discussion
Should it be assumed that anything we approve as an âenhancementâ that is not in ACF be only made to Lucee, or should it be in the CFML interpreter?
ExpandPath used as an example Lucee has a ContractPath method that is not in CFML. Should these be removed for CFML compatibility?
Best to not make a general decision and decide case to case
Used to need to define var scoped variables at start of a function. Railo allowed var to be used everywhere.
What is âcompatibilityâ?
CFML compatibility means that an ACF program runs unchanged in the Lucee CFML mode.
Anything that Lucee adds that does not break compatibility is fine
This renders LDEV-369 to not be a compatibility issue as it doesnât prevent ACF code from working and so no need to remove âoptionalâ semicolons
Option to add âstrictâ / âclassicâ code style options such as requiring semicolons?
Important not to take away something that Railo/Lucee users are probably using because this would break code that works on existing Lucee versions
We can do things that allow new functionality
Why is this a âMajorâ priority?
Action Change default Jira priority to be ânewâ or something similar. Simon completed this action on 2015-09-16
If we add a function and then Adobe also decide to add it, how should we then decide? Not a problem right now, discuss that issue when it happens.
We donât want to just end up writing a clone of ACF without being able to add something useful, new functions can easy be polyfilled by users.
Feature flags can be difficult as it requires reconfiguring the server when you port code to allow it to compile.
Conclusion
Features that only exist in Lucee that arenât in ACF today will not be removed.
Going forwards we are ok with adding new features to Lucee CFML as long as it does not break compatibility when users move code from ACF to Lucee.
Whatâs the difference between Proposal and Enhancement?
Discussion
A proposal is something thatâs proposed by someone and when the TAG has decided on an action then it becomes an enhancement
If we have specific types for proposal then we can have a nice output on the website similar to PHP RFC
Once TAG has reviewed the ticket, a Proposal could change to Enhancement
Changing type from Proposal to Enhancement is like changing a status, should there even be separate types?
Potentially redundant to have two types.
Conclusion
Action Revise JIRA workflow to merge Enhancement and Proposal and improve workflow to more closely mirror the Enhancement/Proposal workflow. Simon completed this action on 2015-09-16
Review enhancement tickets
A selection of existing proposals and enhancements were selected for review during this TAG meeting. Not all selected tickets were able to be discussed within the time allowed.
LDEV-369 Add a require semicolon or a âACF modeâ
Discussion
See earlier discussion regarding âcompatibilityâ as the sentiment there largely applies to this ticket.
This is more of a coding style issue than âstrictâness. Is âstrictâ the right term? âclassicâ vs âmodernâ also used.
Semicolons are not always optional within Lucee i.e. with the return statement.
There are precedents in other languages with âoptionalâ semicolons require semicolons in cases where the statement is open to interpretation.
Leaving the âdefaultâ unchanged would prevent breaking existing Lucee code.
This should be a configuration option in the admin panel as well as through Application.cfc.
Conclusion
Vote taken
[ 5 votes ] Reject LDEV-369
[ 3 votes ] Add LDEV-369 to backlog
1 abstentions
Reasons for rejection
Portability checking is the remit of a separate tool such as ColdFusion Builder
Unless Lucee decides to add a full strict ACF compatibility mode there is not much point in addressing the issues piecemeal
If Adobe wish to support all CFML that Lucee does they are welcome to do so, it is up to Lucee to ensure code that works on ACF also works on Lucee and not the other way around.
LDEV-393 Support java-style annotations
Discussion
Positive sentiment towards the idea expressed, but requests for specific use cases have been made.
Comments shouldnât affect semantics of a program. Should be able to do this with proper annotation.
Javadoc comments are fine because documentation do not have semantic meaning. Anything with semantic meaning should be syntactic annotations.
It can be useful to annotate a generated CFML method with a Java annotation. New Relic used as example due to its ability to trace a specific Java function using annotations. This would be useful.
Unable to use pre-available socket libraries due to inability to annotate methods.
Would annotations need to be in precompiled source code? Yes it would need to flow through code gen and attached to the generated source code in the same way as the Java compiler.
Devs express concern that far more detail over exactly how this should look is required. In principle the TAG is in favour of this idea but more clarity is required before it progresses to a vote.
Conclusion
Action Create a thread in the Lucee Lang forum for further comment
Deferred This ticket was sent back for further discussion and clarification before a TAG vote is taken.
LDEV-438 Allow exceptions to be nested
Discussion
This is almost possible at present. Some discussion about implementation followed.
Sentiment across the TAG seemed that this would be a good addition
The current behavior is a result of the original Allaire CFML implementation but could easily be adjusted.
Conclusion
Vote taken
[ 9 votes ] Add LDEV-438 to backlog
[ 0 votes ] Reject LDEV-438
0 abstentions
LDEV-442 Array function to remove duplicates
Discussion
Mostly entered to mirror existing ListRemoveDuplicates
Some sentiment against to reduce function explosion. Sure this could be nice but is it really needed?
Precedent already set by ListRemoveDuplicates.
Arguably more efficient to do it built in
How many people need to do this vs the weight of adding more functions and documentation to the system?
One of the whole CFML/Lucee lang promises is to make things easier than Java etc. This falls in the category of a shortcut function.
Could this be an extension? At present you canât add a member function ( [].removeDuplicates() ) using an extension. Could be possible in the future.
This is easily done by users, there are better ways of implementing it which would argue against implementing the function.
This function could be considered to be useful and shouldnât add much that is inconsistent with existing code.
Conclusion
Vote taken
[ 7 votes ] Add LDEV-442 to backlog
[ 2 votes ] Reject LDEV-442
0 abstentions
LDEV-113 allow construct for ordered structs
Discussion
Strong recommendation to defer this for further discussion
In Railo 4.2 all structs were changed. Most people expect no order because a structure has always been unordered and an ordered struct has a performance cost.
Argument in favour of defaulting a non-empty structure to being ordered, while defaulting empty structures to being linked (unordered).
Suspicion against changing default behavior due to the effect it may have on existing code. Concern over choosing the correct syntax to prevent incompatibility with other engines.
Changing all to ordered would make the engine slower. How much slower it makes it is not quantified. This would be worth testing to see what difference there would be in real applications.
Multiple TAG members object to changing the default due to changing the meaning of the existing syntax.
Does changing an unordered structure to being an ordered one really make a difference? Historically structures have always been âunorderedâ and changing the default meaning of a structure could be a slippery slope.
No fundamental objections to providing a new syntax to create ordered structs.
Conclusion
Action Create a new Lucee Lang thread to discuss syntax. Igal completed this action on 2015-09-16 link
Deferred While the TAG is in favour of this in principle it has been sent back for further discussion on syntax.
Vote on LDEV-369 Add a require semicolon or a âACF modeâ: Reject
Initially when I read the ticket I thought that this might be useful for a CFML compatibility mode. However the discussion we had during the TAG meeting made me reconsider and I agree with the majority that this is not a problem Lucee should deal with. Compatibility should be ACF->Lucee and we shouldnât have to care for Lucee->ACF
Vote on LDEV-438 Allow exceptions to be nested: Add to backlog
Vote on LDEV-442 Array function to remove duplicates: Add to backlog
This was a tricky one imho - I think it can be hard to maintain a balance between useful additions to the function library and cluttering the language as a side effect. In this case I voted for an addition because I think that a) itâs useful and b) justified given thereâs already a precedent with ListRemoveDuplicates. Yes, the functionality can be achieved by users themselves, but adding it is consistent with the existing library.
Vote on LDEV-442 Array function to remove duplicates: Add to backlog
wow, really⌠to me this a no-brainer⌠if itâs implemented in list, then it should be in struct and array for consistency⌠looks like weâre heading down the CF path already⌠wasnât the point of lucee âconsistencyâ
I think the TAG need to blog to this decision as itâs goes against the grain of the organization ideals.
Then again isnât it the same people who blocked cfscript who are now controlling this beast⌠to the same end no doubt. #losingfaith
But itâs so piss-easy to roll yer own (itâs a single expression, see below), I donât really think there needs to be too much urgency to is. Itâs not like they said âwill not fixâ, they just figured thereâs bigger fish to fry first. Which there are.
Then again isnât it the same people who blocked cfscript who are now controlling this beast⌠to the same end no doubt. #losingfaith
What on earth are you talking about? The TAG are a new group and I donât believe weâve made any decisions on cfscript at this point. Why are you being so negative?
Just to generally clarify what âAdd to Backlogâ means:
The TAG has voted in favour that this will be looked at and implemented by the development team.
âAdd to Backlogâ has no positive or negative connotation either way re if something is urgent or not so urgent or when itâll be done. Therefore even your interpretation of âbigger fish to fry firstâ is at this point not correct.
The development team might still reject stuff from the backlog if itâs crazily not viable, but I canât see that happening for this particular issue at all.
Surely at some point youâre not just sitting around shuffling papers, and are actually deciding what goes into the next milestone? Is this not what youâre reporting on here?
I would have thought everything back-logs automatically (without the need for discussion in a meeting, or minuting), and the meetings - in part - decide what gets taken from back-log and you go âyes do itâ, or ânot yetâ. And it was this process you are minuting for us (and in this case it was ânot yetâ)?
Or is what youâre minuting here the exercise of going over all the new tickets that have been raised since the last meeting (or whenever), and doing the initial winnowing, and then thereâs a separate discussion later when getting a release target organised? I guess perhaps its this youâre reporting back on?
I think the current workflow needs to be published and explained. Thereâs a flowchart, but it seems to be stuck in a thread thatâs tag-private. Iâll see that we move that into a new public thread.