[swift-evolution] [Pitch] Expose assert configuration functions in standard library
Jacob Bandes-Storch
jtbandes at gmail.com
Sun May 29 13:07:59 CDT 2016
Am I understanding correctly that
-Onone → _isDebugAssertConfiguration is true
-O → _isReleaseAssertConfiguration is true
-Ounchecked → _isFastAssertConfiguration is true
?
If the goal is to expose the optimization level to user code, might I
suggest something like
enum OptimizationLevel {
case none
case standard
case unchecked
}
var optimizationLevel: OptimizationLevel { get }
IMO, users may still want to control certain things with per-configuration
flags, but that's still achievable with -DX and #if X. Exposing the
optimization level makes sense to me.
On Sun, May 29, 2016 at 10:59 AM, Erica Sadun via swift-evolution <
swift-evolution at swift.org> wrote:
> Back in March, I somewhat foolishly agreed to pick up the gauntlet for a
> series of community-requested proposals centered on build configurations.
> Requested items included:
>
>
> - A way to test for destination platforms like Apple, Linux,
> Windows, Unix-like, UIKit-supporting, etc
> - A way to test for Simulator/Emulator vs Hardware targets
> - A way to test for debug builds
> - A way to test for platform conditions (bigendian, littlendian,
> bitwidth 32 and 64, objc-interop, see lib/Basic/LangOptions.cpp)
>
>
> This splintered down into a series of draft proposals. The first adopted
> proposal, SE-0075
> <https://github.com/apple/swift-evolution/blob/master/proposals/0075-import-test.md> adds
> a build configuration import test similar to Clang's __has_include. It lets
> you test whether a module like UIKit is available, letting you customize
> code for specific modules.
>
> Next up on my list is debug-specific coding. Summarizing to date:
>
>
> - There's a general consensus that a debug state occurs when
> assertions can fire and are not disabled by compile-time optimizations.
> - The concept of "debug" is nuanced enough that introducing a single #if
> debug build configuration test is insufficient for substantial set of
> community members who interacted in previous discussions and Swift
> developers who have sent me feedback outside this list.
> - Conditioning debug on Xcode debug/release schemes is a no-go.
> - Hidden helper functions already exist in Swift.
> - Members of the core team believe using build configurations is the
> wrong point to conditionalize code.
>
>
> Joe Groff wrote, "We specifically avoided making debug/release an #if
> condition because we considered #if to be the wrong point at which to start
> conditionalizing code generation for assertions. Though the final
> executable image's behavior is unavoidably dependent on whether asserts are
> enabled, we didn't want the SIL for inlineable code to be, since that would
> mean libraries with inlineable code would need to ship three times the
> amount of serialized SIL to support the right behavior in -Onone, -O, and
> -Ounchecked builds. Instead, the standard library has some hidden helper
> functions, _isDebugAssertConfiguration, _isReleaseAssertConfiguration, and
> _isFastAssertConfiguration, which are guaranteed to be constant-folded away
> before final code generation."
>
> My pitch: I want to promote these three helper functions to the standard
> library and remove their underscore prefixes. My primary use case is to
> limit logging and development-servicing functions (for example, statistical
> measurements) to "debug" builds. I believe a sufficient quorum of the
> community has similar needs that would be served by making these first
> class "listed" functions.
>
> Doing so:
>
>
> - Eliminates the build configuration approach
> - Eliminates the need to define what "debug" means
> - Conditions configuration testing on assertion firing state not Xcode
> schemes or build flags (e.g. -D debug)
> - Uses already-existing global functions, requiring no coding
>
>
> Thoughts?
>
> -- E
> p.s. I'd warmly welcome any third party assistance with the outstanding
> requests
>
>
>
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160529/6508d8b1/attachment.html>
More information about the swift-evolution
mailing list