Re:A fun optimization trick from rsync
by nwmcsween on Sunday October 28, 2018 @10:43PM
(#18324640)
Not really its just a static var on a switch statement nothing really bad about it, in fact its a semi nice way to handle a simple state machine.
[ Parent
| on HN ]
Not tooo uncommon either. It's a "reasonable" way to write generators in C (if you're masochistic Python programmer, I guess.)
Switch on the last return point at the top of the function, and make all variables that need to persist between calls `static`.
(I've written it before, and I swear I didn't invent it... Maybe it's just a short skip from Duff's Device? Still, using it to pick up before the last return instead of after is new trick for me!)
Yes, it's basically the idea in Duff's device. Protothreads (http://dunkels.com/adam/pt/) uses a pretty similar trick.
Ah, that's exactly the trick I was thinking of. I think I learned it from [1], but I'm pretty sure Protothreads predates that post. Thanks for the link!
1: https://www.chiark.greenend.org.uk/~sgtatham/coroutines.html
This was modeled on early Fortran where all local variables were static and it was trivial to implement persistent state machines.
To my eyes it also looked like a Duff's device which kept track of the successful state.