Python and the need for speed
bc at freeuk.com
Wed Apr 19 11:57:20 EDT 2017
On 19/04/2017 15:35, Chris Angelico wrote:
> On Wed, Apr 19, 2017 at 11:46 PM, bartc <bc at freeuk.com> wrote:
>>> You'd be surprised how easy it is to be non-OS-neutral.
I misread that as 'easy to be OS-neutral'. If I turn it around, you're
saying it is easy to be OS-specific. But we know that! And that is the
>> It's not so simple. By OS-neutral I mean code that doesn't depend on special
>> features of either OS (Ie. Windows and Linux). Not conditional code that
>> does either Windows stuff or Linux stuff.
> Which means, therefore, that you either can't have any file system
> facilities, or must transparently expose them to the application. You
> also will have a lot of trouble making cross-platform subprocess
> functionality. Even sockets, which are notionally the same on all
> platforms, have a lot of little differences.
> To be truly OS-neutral, you basically have to be either nerfed to
> nothing, or so thin you're doing nothing.
Enough works in that 'pcc' project, in terms of file i/o, that it can
still run plenty of useful programs, such as compilers. (See from line
3357 of pcc64.c for example; a list of functions that are patched in to
the host rather linked to an external msvcrt or libc.so shared library.)
In this project, the only OS-specifics it really needs are:
Windows: use LoadLibrary/GetProcAddr, and msvcrt.dll
Linux: use dlopen/dlsym, and libc.so.6
which wouldn't be hard to arrange.
Any other specifics are in the domain of the user programs (different
libraries for screen i/o for example).
However, getting it to choose between one of those two pairs of
functions is trivial, compared with the dependencies of a a typical open
(I've just downloaded CPython sources from your github link, and the
first thing I see is an 18,000 line 'configure' script (somewhat bigger
than my entire C compiler).
This doesn't run on Windows, not without importing most of Linux via
cygwin or MSYS. But the sources do now appear to support a Windows build:
Step 1: Download Visual Studio Express 2015
Last time I looked, it seemed to be a 5GB to 11GB download (GB not MB!).
Nevertheless I start the process to get a better idea. It says:
"Visual Studio requires .NET Framework 4.6 or higher."
Here where I start to think it might be easier to download all the Linux
stuff after all! As, with my track record, I could download tons of
stuff, and it still won't work.
FWIW, my mcc64.c file compiles to a 0.2MB executable which is capable of
compiling that pcc64.c interpreter (I think it does it in 50msec for
good measure; Tiny C will also do it instantly). /That/ is how simple
things should be, and can be.
Cue a million excuses for why things have to be the way they are...)
More information about the Python-list