Re:Tell HN: C Experts Panel – Ask us anything about C
by NickDunn on Tuesday April 14, 2020 @09:37AM
(#22865752)
It could be very useful for cleaning resources. I've never used GoLang, but can see how that could be useful in various circumstances.
As we're talking about C, I suspect a feature like that, with the potential to make things safer, would also enable the unwary to shoot themselves in the foot more easily.
Re:Tell HN: C Experts Panel – Ask us anything about C
by pascal_cuoq on Tuesday April 14, 2020 @10:27AM
(#22866376)
It sounds like the __attribute__((cleanup(…))) already offered by GCC is similar to this. I probably won't have time to investigate the differences while the AMA is ongoing though.
Re:Tell HN: C Experts Panel – Ask us anything about C
by majke on Tuesday April 14, 2020 @10:03AM
(#22866087)
I personally don't like golang's defer. For me it obscures the flow of the program. For example when I acquire a lock, I like to see where exactly it's released.
For me "defer" only makes sense in the context of exceptions, basically as an equivalent to "finally". This is a slippery slope though, since golang's exceptions are, for a reason, rudimentary.
Re:Tell HN: C Experts Panel – Ask us anything about C
by bokwoon on Tuesday April 14, 2020 @10:14AM
(#22866228)
How about deferring until the surrounding block scope ends? In Go you can get around the limitation of defer only executing at the end of a function by wrapping any arbitrary section of code inside an immediately executed anonymous function. But in C I'm not sure that's possible so maybe one could declare a new block scope instead to control when defer kicks in.
Re:Tell HN: C Experts Panel – Ask us anything about C
by smasher164 on Tuesday April 14, 2020 @03:13PM
(#22870202)
I would love to see defer in the language. It helps keep cleanup code close to the resource that is acquired.
Would the proposed defer statement apply to loops as well? How would one implement such defers without dynamic allocation?
The GoLang defer statement defers the execution of a function until the surrounding function returns. The deferred call's arguments are evaluated immediately, but the function call is not executed until the surrounding function returns. It looks like an interesting mechanism for cleaning up resources.