3 ms·
This is awesome. Could they reconcile this with [[gsl::Owner]] or gsl::owner<T> somehow so we don't end up with multiple syntaxes in C++? https://reviews.llvm.
by dataflow 3y ago
This is awesome. Could they reconcile this with [[gsl::Owner]] or gsl::owner<T> somehow so we don't end up with multiple syntaxes in C++?
https://reviews.llvm.org/D64448 https://reviews.llvm.org/D64448
https://github.com/microsoft/GSL/blob/main/docs/headers.md#gslowner https://github.com/microsoft/GSL/blob/main/docs/headers.md#g...
- thradams 3y agoI think gsl::Owner is related with RAII. The difference with cake ownership and RAII , is that with C++ RAII, the destructor is unconditionally called at end of scope. Then flow analysis is not required in RAII. Cake requires flow analysis because "destructor" is not unconditionally called. When the compiler can see that the owner is not owning a object (because the pointer is null for instance) then the "destructor" is not necessary. To understand the difference. With flow analysis (how it works today) int main() { FILE *owner f = fopen("file.txt", "r"); if (f) fclose(f); } Without flow analysis (or with a very simple one, where the destroy must be the last statement) void fclose2(FILE * owner p) { if (p) fclose(p); } int main() { FILE *owner f = fopen("file.txt", "r"); if (f){ } fclose2(f); }
- thradams 3y agothe other difference in RAII destructor cannot be turned off. In cake the same object can be a "view" struct X x = {0}; //... view struct X x2 = x; destroy(&x); //x2 does not need destructor