Discussion about this post

User's avatar
Dan Stromberg's avatar

I've toyed with this as well: https://stromberg.dnsalias.org/~strombrg/cpythons/

It's something that builds x.y versions of CPython from 0.9 to 3.13, automatically.

Given that, and optionally some Pypy's or MicroPythons, you can use https://stromberg.dnsalias.org/~strombrg/pythons/ to run a single python command or python script on each of your Python interpreters, and present their output.

It allows one to empirically answer a question like "In what version of Python was 'yield' added?". This is usually pretty useful, but it's worth keeping in mind that sometimes "implementation detail" later turns into "supported feature", like ordered dicts.

It works well for me on Linux. I tried it on MacOS, and found that Apple doesn't support 32 bit binaries anymore. That's not great for this kind of history, because some of the older Python's prefer to be 32 bit. I've never even tried to run it on Windows, though it might work on WSL, Cygwin or Msys.

Expand full comment
yakimka's avatar

I also compiled version 1.0 (as well as 0.9 and other 1.x branches). You can find my results at https://github.com/yakimka/ancient_python

Version 1.0.1, like 0.9.1, supports classes, but you should not include parentheses `()` in the class definition.

```

Python 1.0.1 (Jan 9 2024)

Copyright 1991-1994 Stichting Mathematisch Centrum, Amsterdam

>>> class Foo:

... pass

...

>>> Foo

<class Foo at 650460>

```

However, in version 0.9.1, it works the opposite way—you must include `()`; otherwise, it won’t work. Additionally, `import os` might not work unless you run `make libinstall`.

I even ported some modern code to Python 1.6 and 1.0 just for fun 😊. You can check it out here: https://gist.github.com/yakimka/2b0bb1581553bbf625aeef2fc8c5fa6d

Expand full comment
6 more comments...

No posts