[swift-evolution] Optimization attributes

Charles Kissinger crk at akkyra.com
Thu Jan 7 15:55:05 CST 2016


I wanted to float the idea of adding new attributes for function and method declarations that would allow various safety checks to be turned off (or on) at the level of individual functions. Examples of such attributes would be:

@uncheckedmath  // integer overflow
@uncheckedbounds  // array bounds
@unchecked      // no safety checks, equivalent to -Ounchecked
@fastmath         // if the —fastmath compiler option becomes available in the future

These attributes could have an argument with a value of true or false, allowing the global compiler option to be overridden for particular functions.

This is primarily motivated by the fact that the -Ounchecked compiler option is a very blunt instrument. It globally disables several unrelated safety checks such as integer overflow and array bounds checking. And it operates only at the level of an entire compilation unit. It is hard to reason about all the effects of this option across a large module, and isolating specific code to be compiled separately with -Ounchecked is inconvenient.

These new attributes would allow specific safety checks to be enabled or disabled on a per-function basis. I think the overall effect would be safer programs, because developers would be less likely to resort to the global -Ounchecked compiler option when searching for better performance.

Are optimization attributes such as these feasible?

-CK



More information about the swift-evolution mailing list