Home » Community » U++ community news and announcements » 2022(?).2 beta
Re: 2022(?).2 beta [message #59390 is a reply to message #59389] |
Mon, 19 December 2022 23:54 |
Lance
Messages: 527 Registered: March 2007
|
Contributor |
|
|
mirek wrote on Mon, 19 December 2022 17:35Lance wrote on Mon, 19 December 2022 23:14mirek wrote on Mon, 19 December 2022 14:22Lance wrote on Mon, 19 December 2022 19:10And some of the viable options if multi-c++-version support is a necessity (as proposed by Klugier and me):
1. [=] to [&] when necessary. Make local copies of variables that are originally captured by value with undesired modification, and refer only to the copy in the lambda body. A fictitious example:
[&] does not help and the problem is not local copies.
This does not work:
struct MyApp : TopWindow {
Button b;
MyApp() {
int j = 12;
b << [&] { PromptOK(AsString(j)); };
}
};
I see. Reference to local variables invalidated out of function body. So this option is eliminated. We are left with only 2.
3. Disable warning and hope that it will be deprecated for really long time. I bet it will.
See, this whole thing is rather unfortunate. There are 3 options, none of them really good. 2 of these require significant work and a chance of introducing new bugs....
1. Disable warnings option: almost effortless. but like I mentioned in a previous post, when you eventually decide to move to c++20, everybody else need to move with you overnight, or otherwise there will be the same problem of supporting pre- & post-c++20 world simultaneously. I am fine with that but not sure if other people will like it.
2. Klugier's other proposal ([this, a,b,c]). Heavy work, chance of bugs.
3. My proposal. Majority work can be done in 20 minutes. Other examples or packages, etc can be left until a bug is reported (mainly in the case old [=] doesn't involve a `this`, just change back to [=], can be fixed without thinking). I don't expect other subtle bug be introduce because of this approach. And it should settle down in a time span of months, but involves little work on maintainers/users' part after the initial 20 minutes or so.
In a previous post, I have listed procedures I took. Replace in files, then compiler will tell the case where original [=] doesn't involves `this`, in which cases we change them back to [=]. I fail to see any chance a subtle bug will be introduced as they mean exactly same thing, just added compliance to c++20.
BR,
Lance
PS: you probably understand my approach fully. but let me explain it once more.
Context:
we have around 120ish [=] lambda capture in u++ source tree, majority of which should be changed to [=,this] from c++20 onwards. Unfortunately [=,this] is not valid pre-c++20. We want a way to make both worlds happy.
Conditional Macro: one apparent approach is to use a macro that expands to [=] with std = pre-c++20 and [=, this] when std>=c++20. If we do it properly, no bug will be introduced because of this: they are functionally equivalent.
Now suppose we have such a macro named MY_MACRO, which will be expanded to = or =,this, depending on c++ standard used.
Recommended Procedure
1. Do "Replace in Files" for all files under $UPPSRC, replace all occurences of [=] with [MY_MARCO]
2. Open a less involving package to fix the cases where no `this` were captured originally. The one I used is <examples/Color>. F7 to compile it, with -std=c++20, preferably in debug mode to save time. There will be like 3-4 cases where we have wrongfully replaced [=] with [=,this], locate them, change back to [=]. Now the bulk of jobs are done;
3. Open package `theide`, do the same thing as in step 2. We will encounter 2 other cases where we have wrongfully made the replacement. Fix them, theide will compile fine;
4. We can do a buildall on the u++ src tree(I remember we have something like that), then we can fix all such wrongful replacements at once. Or we can leave it until it's be compiled and reported by users.
5. We have a clean uppsrc that's c++-version-smart on existing lambda captures.
[Updated on: Tue, 20 December 2022 00:38] Report message to a moderator
|
|
|
|
|
2022(?).2 beta
By: mirek on Sat, 03 December 2022 15:47
|
|
|
Re: 2022(?).2 beta
By: Novo on Sun, 04 December 2022 17:48
|
|
|
Re: 2022(?).2 beta
By: mr_ped on Thu, 08 December 2022 00:54
|
|
|
Re: 2022(?).2 beta
By: mirek on Fri, 09 December 2022 09:56
|
|
|
Re: 2022(?).2 beta
By: Tom1 on Sat, 10 December 2022 19:17
|
|
|
Re: 2022(?).2 beta
By: mirek on Sat, 10 December 2022 23:39
|
|
|
Re: 2022(?).2 beta
By: Tom1 on Sun, 11 December 2022 19:03
|
|
|
Re: 2022(?).2 beta
By: Lance on Sun, 11 December 2022 19:45
|
|
|
Re: 2022(?).2 beta
By: mirek on Sun, 11 December 2022 20:02
|
|
|
Re: 2022(?).2 beta
By: Lance on Sun, 11 December 2022 21:13
|
|
|
Re: 2022(?).2 beta
By: mirek on Sun, 11 December 2022 22:54
|
|
|
Re: 2022(?).2 beta
By: Klugier on Sun, 11 December 2022 23:08
|
|
|
Re: 2022(?).2 beta
By: Lance on Mon, 12 December 2022 00:47
|
|
|
Re: 2022(?).2 beta
By: mirek on Mon, 12 December 2022 10:44
|
|
|
Re: 2022(?).2 beta
By: Lance on Tue, 13 December 2022 03:19
|
|
|
Re: 2022(?).2 beta
By: Lance on Mon, 12 December 2022 00:52
|
|
|
Re: 2022(?).2 beta
By: mirek on Mon, 12 December 2022 22:18
|
|
|
Re: 2022(?).2 beta
By: Lance on Tue, 13 December 2022 03:21
|
|
|
Re: 2022(?).2 beta
By: Tom1 on Tue, 13 December 2022 10:25
|
|
|
Re: 2022(?).2 beta
By: mirek on Tue, 13 December 2022 10:45
|
|
|
Re: 2022(?).2 beta
By: Tom1 on Tue, 13 December 2022 10:56
|
|
|
Re: 2022(?).2 beta
By: mirek on Tue, 13 December 2022 11:08
|
|
|
Re: 2022(?).2 beta
By: Tom1 on Tue, 13 December 2022 11:42
|
|
|
Re: 2022(?).2 beta
By: mirek on Tue, 13 December 2022 11:57
|
|
|
Re: 2022(?).2 beta
By: mirek on Tue, 13 December 2022 11:58
|
|
|
Re: 2022(?).2 beta
By: mirek on Tue, 13 December 2022 13:21
|
|
|
Re: 2022(?).2 beta
By: Tom1 on Tue, 13 December 2022 13:30
|
|
|
Re: 2022(?).2 beta
By: mirek on Tue, 13 December 2022 14:40
|
|
|
Re: 2022(?).2 beta
By: mdelfede on Sun, 18 December 2022 23:03
|
|
|
Re: 2022(?).2 beta
By: Lance on Sun, 18 December 2022 23:14
|
|
|
Re: 2022(?).2 beta
By: Klugier on Sun, 18 December 2022 23:35
|
|
|
Re: 2022(?).2 beta
By: Lance on Mon, 19 December 2022 00:46
|
|
|
Re: 2022(?).2 beta
By: zsolt on Mon, 12 December 2022 12:42
|
|
|
Re: 2022(?).2 beta
By: mirek on Mon, 12 December 2022 12:59
|
|
|
Re: 2022(?).2 beta
By: zsolt on Mon, 12 December 2022 13:24
|
|
|
Re: 2022(?).2 beta
By: mirek on Mon, 12 December 2022 22:17
|
|
|
Re: 2022(?).2 beta
By: zsolt on Tue, 13 December 2022 17:33
|
|
|
Re: 2022(?).2 beta
By: zsolt on Tue, 13 December 2022 17:39
|
|
|
Re: 2022(?).2 beta
By: mirek on Tue, 13 December 2022 17:49
|
|
|
Re: 2022(?).2 beta
By: zsolt on Tue, 13 December 2022 18:17
|
|
|
Re: 2022(?).2 beta
By: mirek on Tue, 13 December 2022 18:32
|
|
|
Re: 2022(?).2 beta
By: zsolt on Tue, 13 December 2022 19:01
|
|
|
Re: 2022(?).2 beta
By: mirek on Tue, 13 December 2022 19:12
|
|
|
Re: 2022(?).2 beta
By: zsolt on Tue, 13 December 2022 20:01
|
|
|
Re: 2022(?).2 beta
By: mirek on Wed, 14 December 2022 14:05
|
|
|
Re: 2022(?).2 beta
By: Lance on Sun, 18 December 2022 05:07
|
|
|
Re: 2022(?).2 beta
By: mirek on Sun, 18 December 2022 13:26
|
|
|
Re: 2022(?).2 beta
By: Lance on Sun, 18 December 2022 14:48
|
|
|
Re: 2022(?).2 beta
By: Klugier on Sun, 18 December 2022 15:41
|
|
|
Re: 2022(?).2 beta
By: Lance on Sun, 18 December 2022 18:50
|
|
|
Re: 2022(?).2 beta
By: mirek on Sun, 18 December 2022 19:55
|
|
|
Re: 2022(?).2 beta
By: Lance on Sun, 18 December 2022 20:08
|
|
|
Re: 2022(?).2 beta
By: Klugier on Sun, 18 December 2022 21:54
|
|
|
Re: 2022(?).2 beta
By: zsolt on Sun, 18 December 2022 22:33
|
|
|
Re: 2022(?).2 beta
By: Lance on Sun, 18 December 2022 22:55
|
|
|
Re: 2022(?).2 beta
By: zsolt on Sun, 18 December 2022 23:29
|
|
|
Re: 2022(?).2 beta
By: Lance on Mon, 19 December 2022 00:41
|
|
|
Re: 2022(?).2 beta
By: mirek on Mon, 19 December 2022 10:08
|
|
|
Re: 2022(?).2 beta
By: Lance on Mon, 19 December 2022 18:43
|
|
|
Re: 2022(?).2 beta
By: Lance on Mon, 19 December 2022 19:10
|
|
|
Re: 2022(?).2 beta
By: mirek on Mon, 19 December 2022 20:22
|
|
|
Re: 2022(?).2 beta
By: Lance on Mon, 19 December 2022 23:14
|
|
|
Re: 2022(?).2 beta
By: mirek on Mon, 19 December 2022 23:35
|
|
|
Re: 2022(?).2 beta
By: Lance on Mon, 19 December 2022 23:54
|
|
|
Re: 2022(?).2 beta
By: Novo on Tue, 20 December 2022 00:19
|
|
|
Re: 2022(?).2 beta
By: Lance on Tue, 20 December 2022 00:48
|
|
|
Re: 2022(?).2 beta
By: Novo on Mon, 19 December 2022 05:36
|
|
|
Re: 2022(?).2 beta
By: mirek on Mon, 19 December 2022 00:15
|
|
|
Re: 2022(?).2 beta
By: Lance on Sun, 18 December 2022 22:35
|
|
|
Re: 2022(?).2 beta
By: mirek on Mon, 19 December 2022 00:18
|
|
|
Re: 2022(?).2 beta
By: zsolt on Sun, 18 December 2022 16:08
|
|
|
Re: 2022(?).2 beta
By: pvictor on Wed, 14 December 2022 12:56
|
|
|
Re: 2022(?).2 beta
By: mirek on Wed, 14 December 2022 14:04
|
|
|
Re: 2022(?).2 beta
By: mr_ped on Sun, 18 December 2022 19:46
|
|
|
Re: 2022(?).2 beta
By: mirek on Sun, 18 December 2022 19:53
|
|
|
Re: 2022(?).2 beta
By: mirek on Mon, 19 December 2022 12:20
|
Goto Forum:
Current Time: Tue May 14 18:35:12 CEST 2024
Total time taken to generate the page: 0.03701 seconds
|