Other than that it is on the case by case basis and requires looking at generating code before and after.
Other than that it is on the case by case basis and requires looking at generating code before and after.
These days unrolling is usually only beneficial if it enables other optimizations across loop iterations because increase in code size can have worse impact than benefit from removing a well predicted branch.
These days unrolling is usually only beneficial if it enables other optimizations across loop iterations because increase in code size can have worse impact than benefit from removing a well predicted branch.
var v = Vector();
var l = [];
list.add(v);
for (var u in l) { print(u.x); }
Even though v does not really escape confines of the function it can't "explode" into fields.
var v = Vector();
var l = [];
list.add(v);
for (var u in l) { print(u.x); }
Even though v does not really escape confines of the function it can't "explode" into fields.
In technical terms: there is no stack allocation, but there is scalar replacement of aggregates. In simple terms: if you have an object and you pass to another function (which is not inlined) that object has to be heap allocated.
In technical terms: there is no stack allocation, but there is scalar replacement of aggregates. In simple terms: if you have an object and you pass to another function (which is not inlined) that object has to be heap allocated.
We are hoping to address most gripes (e.g. data classes, serialization, build_runner slowness) on a much shorter time frame than what macros would have taken us.
We are hoping to address most gripes (e.g. data classes, serialization, build_runner slowness) on a much shorter time frame than what macros would have taken us.