On Thursday, October 8, 2015, David Joyner <wdjoy...@gmail.com> wrote:

> On Thu, Oct 8, 2015 at 2:58 PM, William Stein <wst...@gmail.com
> <javascript:;>> wrote:
> >
> >
> > On Thursday, October 8, 2015, David Joyner <wdjoy...@gmail.com
> <javascript:;>> wrote:
> >>
> >> Before this thread drops off the radar, I have a question. How hard
> >> would it be to rebuild (not port) Sage starting with windows Python,
> >> then adding windows GAP, windows SIngular, networkxx, and
> >> SymPy+friends, of which GAP+Singular communicate with the Sage
> >> terminal via pexpect? Call it WinSage 1.0:-)
> >
> >
> > Just curious - what do you mean by "the sage terminal"?
> >
>
> I was referring to some sort of cygwin command line (since I hardly
> ever use anything else), but if people prefer an ipython notebook-like
> interface then that's fine too.


This whole thread is about creating such a thing - in any way at all that
actually *works*  - in the first place.

There is no usable sage command line for Windows.  Native or not.



> > Also to stop people jumping on pexpect which doesn't at all make sense or
> > work natively on Windows, replace that by "some sort of IPC".
> >
> >
> >
> >>
> >>
> >> I don't even use windows so really this is a totally naive question.
> >>
> >>
> >> On Thu, Oct 8, 2015 at 7:01 AM, Bill Hart <goodwillh...@googlemail.com
> <javascript:;>>
> >> wrote:
> >> >
> >> >
> >> > 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 <javascript:;>.
> >> > To post to this group, send email to sage-devel@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 <javascript:;>.
> >> To post to this group, send email to sage-devel@googlegroups.com
> <javascript:;>.
> >> Visit this group at http://groups.google.com/group/sage-devel.
> >> For more options, visit https://groups.google.com/d/optout.
> >
> >
> >
> > --
> > Sent from my massive iPhone 6 plus.
> >
> > --
> > 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 <javascript:;>.
> > To post to this group, send email to sage-devel@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 <javascript:;>.
> To post to this group, send email to sage-devel@googlegroups.com
> <javascript:;>.
> Visit this group at http://groups.google.com/group/sage-devel.
> For more options, visit https://groups.google.com/d/optout.
>


-- 
Sent from my massive iPhone 6 plus.

-- 
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.

Reply via email to