[swift-evolution] [META] Re-invigorating the compiler directive discussion

Dmitri Gribenko gribozavr at gmail.com
Mon Mar 14 17:03:22 CDT 2016


On Mon, Mar 14, 2016 at 2:23 PM, Erica Sadun <erica at ericasadun.com> wrote:
>
>> On Mar 14, 2016, at 3:12 PM, Dmitri Gribenko <gribozavr at gmail.com> wrote:
>>
>> On Mon, Mar 14, 2016 at 1:41 PM, Erica Sadun <erica at ericasadun.com> wrote:
>>>
>>>> On Mar 14, 2016, at 1:55 PM, Dmitri Gribenko <gribozavr at gmail.com> wrote:
>>>>
>>>> On Mon, Mar 14, 2016 at 11:48 AM, Erica Sadun via swift-evolution
>>>> <swift-evolution at swift.org> wrote:
>>>>> Question to everyone with regard to `#if platform()`:
>>>>>
>>>>> Right now, I'm leaning towards tossing `#if platform()` since #if
>>>>> imports(Darwin) can universally distinguish Apple.
>>>>
>>>> There's a direction that we want to move to a unified name for the
>>>> libc module for all platform, so "can import Darwin" might not be a
>>>> viable long-term strategy.
>>>
>>>
>>> Dmitri:
>>>
>>> Will this do it? https://gist.github.com/erica/103b5cd17bde4171ae0b
>>
>> Sounds like a good direction, but to validate it, could you think of
>> some things you would write in practice that would be guarded by these
>> #if conditions?
>>
>> Dmitri
>
> Quite frankly, I want to test imports not platforms.  Things I care personally about:
>
> * testing imports for differentiating code for tvOS/iOS vs OS X primarily: https://gist.github.com/erica/b7f4226b8201945602f2
> * testing sim/device for camera/keychain: https://gist.github.com/erica/6c3892fe603659b6e5ab
> * testing debug (yes, in methods is just peachy fine for me) for better logging mostly: https://gist.github.com/erica/d20639b409fe1b318c0e
>
> Things I'm doing as a courtesy for the community that I probably will never use:
>
> * testing platform conditions: https://gist.github.com/erica/5a344b12bd989f6395c2

The use cases for this one are clear to me, you can find many in
low-level code.  I think the majority of the #if's found in the
standard library are either checks for 32/64 bit, or ObjC/Native
runtime, or future-proofing checks for endianness.

> * testing for specific platform deployment:  https://gist.github.com/erica/103b5cd17bde4171ae0b
>
> -- E, who is still ready and willing to toss the last (platform(Apple)) of these if there's no good use-case motivating it.

It is not that I'm saying that there is no good use case, it is just
that they are not obvious to me.  Here's something I could imagine
happening:

#if platform(Unix)
use system()
#else if platform(Windows)
use CreateProcessEx
#else
#error "unknown platform"
#endif

But I'm not sure that "Unix-like" and "Windows-like" are precise
enough to write the kinds of checks you would want to write in
low-level code.

Dmitri

-- 
main(i,j){for(i=2;;i++){for(j=2;j<i;j++){if(!(i%j)){j=0;break;}}if
(j){printf("%d\n",i);}}} /*Dmitri Gribenko <gribozavr at gmail.com>*/


More information about the swift-evolution mailing list