> On Apr 26, 2016, at 1:24 PM, John McCall via swift-evolution > <swift-evolut...@swift.org> wrote: > >> On Apr 26, 2016, at 1:03 PM, Sangjin Han <tinysun....@gmail.com> wrote: >> The problem can be solved by modifying that code. Thanks you. I thought that >> code will affect only to the CLong type not Int. > > It changes what 'long' gets imported as. If there's a Windows API defined > using 'long' (rather than some more meaningful typedef like 'size_t'), it's > important for it to be imported as Int32 rather than Int, since 'long' is > always 32 bits under MSVC. > >> But I meet another problem to fix it. I couldn't find the conditional method >> to distinct x86_64-*-windows-msvc with x86_64-*-windows-cygnus in Swift >> source. >> >> "#if os(Windows)" can not distinct MSVC from Cygwin. >> >> Should I add new condition 'env()' for the environment? > > That is an excellent question. > > My understanding / memory is that, as far as their programming interfaces > goes, Cygwin and MSVC are very, very different environments. Maybe it's > useful to have a condition that's true for both environments — although I'm > not sure why it would — but I don't think it deserves to be as prominent as > os(Windows). So my gut reaction is that, rather than adding a #env, we ought > to just reserve os(Windows) for MSVC compatibility and make a new os(Cygwin) > for Cygwin. > > This needs to be raised on swift-evolution, though. CC'ing that list.
It's an interesting question. Mingw, Cygwin, and MSVC definitely vary greatly in ABI and C language level behavior, but the underlying Win32 system libraries remain the same. I think it makes sense to consider them different os(...) environments, but it would also make sense IMO to have a broader platform check for Win32. Along similar lines, Linux, FreeBSD, and Darwin are different OSes, but all also share a POSIX environment. -Joe _______________________________________________ swift-dev mailing list swift-dev@swift.org https://lists.swift.org/mailman/listinfo/swift-dev