Proposal:
https://go.googlesource.com/proposal/+/refs/heads/master/design/34481-opencoded-defers.md
Optimizing:
- try not to run defer in a loop(for), which compiler will fallback to traditional defer chain implement
- try to have less exit point inside a function, which compiler will fallback to traditional defer chain implement
Proposal by Example:
defer f1(a) if cond { defer f2(b) } body...compiles to:
deferBits |= 1<<0 tmpF1 = f1 tmpA = a if cond { deferBits |= 1<<1 tmpF2 = f2 tmpB = b } body... exit: if deferBits & 1<<1 != 0 { deferBits &^= 1<<1 tmpF2(tmpB) } if deferBits & 1<<0 != 0 { deferBits &^= 1<<0 tmpF1(tmpA) }
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.