On Wednesday, 7 October 2015 17:38:00 UTC+2, bluescarni wrote: > > Some random thoughts: > > - I am not so convinced the strategy of automatic long -> long long > patching is actually feasible, I think in practice this is gonna be a big > can of worms. Pushing upstream to fix their code is a much better long-term > solution IMO (and I'd rather have nothing to do with projects which refuse > portability and code-quality patches, but that's just me :) > - mingw-w64 is a high quality compiler. I recently had to develop for a > while on a Windows 64 machine, and had to recompile a full stacks of > dependencies (MPFR, GMP, Boost, etc.). It was not so easy (most issues were > related to build systems), but the end result was pretty impressive > performance-wise. > - While for C code you can probably interoperate with libraries compiled > with MSVC, for C++ you will end up having issues related, e.g., to > different implementations of exception handling. My suggestion would be to > forget about MSVC and compile the full stack of dependencies exclusively > with mingw. > - Python on windows 64 does not play properly with mingw due to some > long-standing issues in some header files. If you want to compile Python > C/C++ extensions on Win64 you will have to patch slightly the Python > headers and re-generate the definitions of the Python library. The issue is > explored, e.g., here: > > > http://ascend4.org/Setting_up_a_MinGW-w64_build_environment#Setup_Python_for_compilation_of_extensions >
Someone has asked me off list to point out the following: "the MSYS2 project have ported CPython and have provided four packages that don't use MSVC: mingw-w64-{i686,x86_64}-ptython{2,3} (as well as ones that link to msys-2.0.dll)." I see that there is a list of packages here: http://sourceforge.net/p/msys2/wiki/Packages/ > > Generally speaking, mingw-w64 is a really good option for C/C++ > development on Windows. The biggest problem is the proliferation of > distributions (mingw-w64, TDM mingw, mingw-build, msys2, etc.), but the > toolchain is solid. clang is getting there as well, so it's worth keeping > it in mind for the future. > > Cheers, > > Francesco. > > > On 7 October 2015 at 16:35, Bill Hart <goodwi...@googlemail.com > <javascript:>> wrote: > >> HI all, >> >> William Stein recently bemoaned the fact that SageMath currently only >> runs natively on some brands of Linux, and not natively on the latest >> Windows or OSX (that is to say nothing of BSD). [1] >> >> Until recently, a port of SageMath to Windows has seemed like a pipe >> dream. However, things have changed a lot, and I think it would now be >> possible to achieve this (for some definition of the word "native"). >> >> I've tried VM's before and it has always ended in disaster. They either >> screw up my networking, they have performance issues, or don't support my >> mouse properly, or change my keyboard layout, or it's impossible to get >> files from my hard drive into the system easily, or they take up too much >> disk space or need to be constantly downloaded to update them, or some >> features don't work, or people stop supporting them, etc. The disadvantages >> of VMs are so numerous I hardly need to enumerate them. And even if it is a >> solution for users, it's hardly a solution for serious Windows developers. >> >> As some people know, I've been recently working on a Julia based >> "computer algebra system" for a much more limited subset of "computer >> algebra" than Sage targets. What people may not know is that that entire >> technology stack works natively on Windows. >> >> I can't express how fantastic it was to be sitting on a train recently, >> with no web access whatsoever and to be able to do work on my Windows 10 >> (64 bit) laptop on the train. And everything ran as fast, or in some cases >> faster, than my Linux server. That's the first time that has happened since >> I started doing computational stuff about 10 years ago! >> >> MSYS2 as a solution >> ================ >> >> The new technology that makes all this work is MSYS2. Here are some of >> its features: >> >> * Installing MSYS2 on Windows couldn't be easier. [2] >> * It supports proper Windows exception handling protocols. >> * It has an amazing command line package manager called Pacman, which >> Just Works TM. >> * Unlike Cygwin, it's very minimal, and takes little time to install. >> * It's fast. Very fast. >> * Parallel make works. >> * The resulting binaries are fast, sometimes faster on my laptop than on >> the Linux server I usually use for development. >> * MSYS2 provides a posix layer! (Applications can be distributed with an >> MSYS2 dll for this.) >> * Multithreading using pthreads Just Works TM (Applications can be >> distributed with a winthreads dll for this. I've actually used this, no >> patching required, so I am not speaking theoretically here.) >> * Like native Windows, sizeof(long) = 4 and sizeof(long long) = 8 on >> MSYS2. This means interop with native Windows applications or assembly >> objects is a cynch. >> * The resulting applications can be run on Windows as essentially native >> applications. They don't have to be run from within the MSYS2 shell. They >> can also be distributed as binary packages for those that don't care about >> the source code. But here's the thing: it's not *necessary* to distribute >> them as binary packages. It's now quite feasible for developers to actually >> *build* packages on Windows. And let's face it, this is the type of >> developer we actually want on the Windows platform. Simply supporting users >> and not developers is just going to increase the maintenance burden for >> people who work on other platforms. We want actual Windows developers, not >> just users! >> >> The only bad thing about MSYS2 is that autotools is still incredibly slow >> (Flint roll-your-own configure takes 5s at most on Windows, whereas >> autotools can take some minutes to configure a package). Note: make is not >> slow (at least not on Windows 64 -- it's not as fast on 32 bit Windows, but >> fortunately almost no one is using Windows 32 any more anyway). >> >> Proposal >> ======= >> >> What I propose is to begin porting Sage dependencies to Windows (note >> that by Windows, I mean Windows 64, i.e. what everyone is using). What this >> would mean is porting them to MSYS2 (at least initially). Note it's not a >> big step from there to MinGW or MSVC if people want to do that later. >> Microsoft have made MSVC much, much more friendly to GNU conventions, >> recently. (For some users, porting to Windows natively is synonymous with >> supporting MSVC using Visual Solution files. But I'm not suggesting we do >> that.) >> >> Since we know that many upstream projects simply will not accept >> thousands of patches to their repositories for supporting Windows 64, much >> less do they have developer resources to support them on an ongoing basis, >> here is what I think needs to be done: >> >> 1) Automagically patch their source trees at build time so that long >> becomes long long and unsigned long becomes unsigned long long on Windows. >> 2) Automagically patch their source trees at build time so that >> printf/scanf("%ld") becomes printf/scanf("%lld") on Windows. >> 3) Send a very small number of "Windows" patches upstream for the few >> instances of nonportable code that probably doesn't work anywhere except >> Linux, let alone on Windows. >> >> Is this feasible? >> >> Yes it is. Note that libpari still works today on Windows 64 (actually >> natively with MinGW, not just with MSYS). On Windows 64 their build >> automagically patches their source tree. As far as I know, this hasn't been >> touched in years, and it still works today as well as the day it was >> written (modulo a couple of trivial bugs in their actual build system)! >> >> [Optionally, we should investigate the feasibility of providing Makefiles >> for Windows, automatically generated by autotools, but stored on a server >> so that they do not have to be generated at build time (of course the user >> still has the option of doing that if they really want). This may not be >> feasible, but it's worth investigating. Obviously paths would have to be >> patched on a per user basis. But Windows is a very homogeneous environment, >> so most of what autotools actually does on Windows is pretty pointless.] >> >> What we've done so far >> ================== >> >> So far, the following packages (and probably many more) work fine on >> Windows 64, with the provisions noted: >> >> * MPIR-2.7.0 >> * MPFR-3.1.3 >> * Flint-2.4.5 >> * libpari-2.7.4 -- GP is not patched, and there are some bugs in the Pari >> build script, but I've been able to hack them to get libpari to build on >> Windows 64. The %ld -> %lld patching is not done yet. >> * Antic >> * OpenBLAS (the Julia people already build this on Windows, since they >> use it heavily) >> >> Python must also work, since I use IJulia on my Windows 64 laptop, which >> is basically the same thing as the IPython notebook. This I download as >> part of the Anaconda distribution currently. >> >> You can find Windows 32 and 64 dlls for most of the packages mentioned >> above, here: >> >> http://nemocas.org/binaries/ >> >> My intention is to publish a note every time I update this collection of >> dlls and to gradually expand them to cover more packages. We'd eventually >> want to use dlltray, or the OpenSUSE cross platform build service [3] for >> hosting these (the latter is not trivial at the moment, since their package >> management system doesn't handle some of the complexities of building >> packages that Sage would rely on). >> >> It would be fantastic if others were to join me in extending this list >> over time. I'd be happy to host the dlls there (actually the machine is >> provided by William Stein), at least until the hosting requirements start >> to become nontrivial. >> >> The only requirement would be to send dlls for Window 32 and 64 and a >> tarball of the source used to generate them (or alternatively a git repo I >> can clone), so that we aren't violating anyone's GPL. We'd also have to >> agree on what exception handling protocol to use. It would be very >> convenient for me should that match the one used by the Julia project. >> >> We will shortly be porting Arb to Windows 64. I'll post an update when >> that is done. >> >> Note that Julia itself works on Windows and they have an interest in >> porting lots of stuff to work natively on Windows. So it's possible some >> joint effort could be mutually beneficial. >> >> MPIR vs GMP >> ========== >> >> One of MPIR's dirty little secrets is we abandon the GMP interface on >> Windows 64, for good reason. They make all their _ui and _si function take >> an unsigned long/long instead of an unsigned long long/long long, even >> though limbs are 64 bits on Windows. >> >> In some timings I did recently, this slows some operations down by a >> factor of 6, and in Flint we have to supply a GMP compatibility header, so >> that we can use GMP in the same way we use MPIR on Windows 64 (which is >> pretty time consuming to write and obviously a performance sink). >> >> As I'm not interested in just having something that works on Windows but >> doesn't care about performance, I personally believe that such an effort >> should be based on MPIR not GMP for the time being. >> >> Final note >> ======== >> >> The Julia project targeted Windows very early on, and they have attracted >> serious, extremely knowledgeable Windows developers (who have been very >> helpful to me). I think this speaks for itself. >> >> Bill. >> >> [1] https://plus.google.com/115360165819500279592/posts/HiXvz9bjumu >> [2] https://msys2.github.io/ >> [3] https://build.opensuse.org/ >> >> -- >> You received this message because you are subscribed to the Google Groups >> "sage-devel" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to sage-devel+...@googlegroups.com <javascript:>. >> To post to this group, send email to sage-...@googlegroups.com >> <javascript:>. >> Visit this group at http://groups.google.com/group/sage-devel. >> For more options, visit https://groups.google.com/d/optout. >> > > -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel. For more options, visit https://groups.google.com/d/optout.