Hi @videbar, welcome to ziggit
No hidden control flow means that “what you see is what you get”, there is no operator overloading, no fields that call functions, no destructors, no exceptions.
Example:
{
auto x = doit();
stdout << x.foo;
}
x destructor is called on } (you must know that the object that doit returns have a destructor, but the code of the destructor is elsewhere and you don’t know what it calls), << is a shift operator (that does not shift anything but is overridden and used as printf alternative), in x.foo you expect that there are no side effects but foo actually is a block of code that changes variables and then returns something.
In zig defer
the enclosed code is executed on }
. The code is near its execution point and is visible.
{
const x = init();
defer {
x.deinit();
}
}
Hope it helped.
A good starting point is:
Since you are seeking for the philosophy of the language, start from the first two links in Zig Learning Resources. (both from Andrew Kelley)