5 ms·
RAII is mostly already there, or at least a C-spirited version of it, thanks to variable length arrays. Unfortunately, there's little compiler support for larg
by enriquto 5y ago
RAII is mostly already there, or at least a C-spirited version of it, thanks to variable length arrays. Unfortunately, there's little compiler support for large vla, both clang and gcc seem to choke on them because they put them on the stack (which is the naive implementation of vla).
- bonzini 5y agoHow would variable length arrays, for example, help with releasing a mutex on early returns from a function?
- enriquto 5y agoThey wouldn't, of course! Releasing resources silently (other than the memory of automatic variables) is very un-C-like.
- dataflow 5y ago> RAII is mostly already there >> Releasing resources silently (other than the memory of automatic variables) is very un-C-like The "R" is literally "resource", right? Sounds like instead of RAII you just meant unique_ptr. Though I beg to differ on whether releasing memory automatically is any different from releasing other resources as far as being C-like is concerned!
- bonzini 5y agoIt's not silent, you do declare that you want it released; you just do it before and it applies to all early returns. For example MUTEX_LOCK_GUARD(&lock) for (i = 0; i < n; i++) if (a[i] == x) return i; return -1; Real world example here: https://github.com/qemu/qemu/blob/master/block/iscsi.c#L325 https://github.com/qemu/qemu/blob/master/block/iscsi.c#L325 And the implementation: https://github.com/qemu/qemu/blob/master/include/qemu/lockable.h https://github.com/qemu/qemu/blob/master/include/qemu/lockab... (after inlining, the abstraction is completely zero cost).
- pjmlp 5y agoVLA are out of the races since C11. So you can forget about compilers caring to improve the quality of an optional feature, that was even cleaned from Linux kernel.