-
Notifications
You must be signed in to change notification settings - Fork 269
Status update and autumn plans #1287
-
Thank you everyone for all your support and contributions to cppfront for the past two years since I first showed to the world at CppCon 2022!
Now that my September whirlwind of CppCon 2024 is over and we're heading into autumn, I've been reflecting (no pun intended) on what's next for cppfront.
The iron triangle: "You can have good, cheap, and fast. Pick any two."
The main problem has been that I'm resource-constrained: I have only so many hours in the day, and I've been unable to keep up with PRs and issues while also making further progress on Cpp2. There are two basic ways to solve an oversubscription problem:
- Add resources: This means finding more of my time for this project = adding/maintaining cppfront + writing/updating papers to contribute features to ISO C++ standardization. Status: I'm working on it.
- Prioritize work more strictly: This means saying No more often (e.g., to issues, PRs, responding to questions, etc.). Status: See below.
So for the near term, I want to try the following priorities...
Priority 1: Fix bugs that block a very few major new efforts/experiments
Definitions:
- "bugs" includes ICEs, correctness bugs, and performance bugs
- "block" means something essential to the success of the effort/experiment doesn't work and has no reasonable workaround
- "a very few" means, at any given point in time, ideally one and no more than two or three
- "major new" means an attempt to achieve a 'big' result that breaks new ground, such as:
- a project like @MaxSagebaum's
regexmetafunction (Feature/regular expression metafunction #904 ) which broke new ground by being an order of magnitude bigger than any Cpp2 metafunction yet written by anyone including me - a single bug that prevents translating a wide set of the cppreference examples to @bluetarpmedia's cpp2reference.com
- a project like @MaxSagebaum's
Priority 2: Cpp2 features, especially expand the reflection API
Prioritize changes that will be breaking changes, including to finish tweaks to function syntax (consistently use =, refine return styles).
Today, Cpp2 supports reflecting over the declarations in a type, and (if invoked while the type is being defined, where this doesn't violate ODR) generating and adding new members to the type.
I want to extend this to be able to:
- reflect on namespaces, template/ordinary parameter lists, and function bodies (statements and expressions)
- generate new declarations and add them to a namespace (including to a type's enclosing namespace while applying one of the type metafunctions with
@) - if invoked while the type or function is being defined
- generate new parameters and add them to a template/ordinary parameter list
- generate new statements and expressions and add them to the function body
Tie-in to Priority 1: I may have a volunteer to try writing an "autodiff" using reflection on function bodies. That's exciting because "autodiff" has long been one of my aims, and a place where if we'd had support in today's C++ the industry would have made much faster progress in the experimentation phase of ML and AI (by being able to run experiments faster in a compiled language rather than Python => can run many more experiments => can developer better models).
Priority 3: Smaller quick-value-add targets of opportunity
Includes:
- add/finish Cpp2 features on my list as I come across new ideas/motivations for implementing them
- seeing usability/adoption feedback about something that I can easily improve for better UX
- getting an easy-to-process PR
Edited to add: This includes features that mostly work now but that I should finish sooner rather than later, notably the function call syntax changes discussed in the recent parts of #714, because we know the update is desirable and the longer I wait the more it will cost in terms of code breakage.
Priority 4: Fix bugs that block lots of use cases
When I can't get to these, the answer will need to be: "Sorry, we can't do that yet, you need to write it in Cpp1 and then you can use it seamlessly from Cpp2!"
Priority 5: Other ideas and suggestions
Alas, this is going to disappoint a lot of people. Sorry! 😞 It includes some really cool things I've love to see, like enabling two-stage compilation to enable user-written metaclass functions outside cppfront's own compilation such as #797 and #907 by @JohelEGP and @DyXel, but where I just realistically have to choose between spending a great deal of time reviewing the PRs (or other costs such as supporting a more complex build model) vs. making progress on Priorities 1-4 in particular.
That said, I will keep reading feature suggestions (including outside this repo) and new issues, and if I'm convinced I may take ideas and move them to Priority 2 or 3 above!
When I can't get to these, the answer will need to be: "Sorry, we can't do that yet, but you can do this in your own repo and let us know how it goes!"
Notes
Not listed above: I'll still try to answer questions as I'm able, in spare cycles while I'm waiting for regression tests to run or to take a break from coding.
That's the plan as of today! I'm sorry some of this will be disappointing, at least in the short term, but I really do appreciate all your input and support. Thanks again, and I'm looking forward to seeing how much the project can achieve in the coming months... stay tuned. 🙏
Beta Was this translation helpful? Give feedback.
All reactions
-
👍 17 -
❤️ 13
Replies: 4 comments 6 replies
-
For priority number 5, had my suspicions that you wouldn't be able / wouldn't have time to review these bigger PRs. But you don't need to apologize! It's completely understandable, its impressive you even have had enough time to dedicate to this experiment given your position and responsibilities. As for me, I like seeing things finished, so I'll still dedicate the necessary effort to take #1261 and #1137 where it can be used by others and myself, even if it wouldn't be merged in the near term.
Beta Was this translation helpful? Give feedback.
All reactions
-
❤️ 1
-
Well said.
With regards to program-defined metafunctions in particular,
what matters most to me is that it's something that's definitely coming.
Even if it might change form when it's closer to being widely available.
I'll keep living in 2030 today.
Beta Was this translation helpful? Give feedback.
All reactions
-
❤️ 1
-
Thanks very much for understanding... I know you've both put so much work into that feature in particular, and it's definitely something I want to achieve on the roadmap.
Beta Was this translation helpful? Give feedback.
All reactions
-
Totally understandable.
Beta Was this translation helpful? Give feedback.
All reactions
-
The priority list seems centered around issues and discussions within the repository.
I suppose you'll still make time for Cpp2 feedback from other sources.
I like to see such influence suddenly pop up, like commit 8504e86 most recently.
Beta Was this translation helpful? Give feedback.
All reactions
-
Thanks! That's right, I intended to fit it under Priority 3 I think, "targets of opportunity"... will update to make this clearer.
Beta Was this translation helpful? Give feedback.
All reactions
-
Also I had this, but it was buried in Priority 5: "That said, I will keep reading feature suggestions and new issues, and if I'm convinced I may take ideas and move them to Priority 2 or 3 above!" I'll add "(including outside this repo)"...
Beta Was this translation helpful? Give feedback.
All reactions
-
And I'll try to turn around "small noncontroversial" PRs == don't require much review and are obviously good. Someone went to the trouble of writing the code (not just stating a problem) so it's worth considering these as long as they don't take up too much time. [Edit: Added to Priority 3]
Thinking about this because Step 1 for me is to clean up the PRs by merging them or deferring them...
Beta Was this translation helpful? Give feedback.
All reactions
-
👍 1
-
Oh, I excluded PRs from the list because I'm rusty.
Simply mentioning "within the repository" should have been enough.
Beta Was this translation helpful? Give feedback.
All reactions
-
Thanks for the update! I haven't tracked the progress of this project lately, but just checked in and was surprised everything that has been implemented!
Beta Was this translation helpful? Give feedback.