Цифровые раскопки: заводим Python 1.0.1
- установлен какой-нибудь дистрибутив Линукс
- make
- компилятор для make
make 4.3
gcc 10.2.1
На другом дистрибутиве и с более старыми/новыми версиями компилятора и make тоже должно работать.
Для пользователей macOS инструкция для линукс должна сработать.
Для этого Вам нужен make для Windows, он есть в составе MinGW
Для начала идем на официальный сайт и скачиваем архив с исходным кодом.
Загрузка исходников
В 1994 году никакого Гитхаба еще не было в помине, поэтому скачиваем с legacy HTTP сервера :-).
Для этого переходим по ссылке и выбираем 1.0.1.
После загрузки и распаковки открываем терминал в папке с питоном.
Сборка Python
Для сборки сначала необходимо запустить скрипт configure для конфигурации, а затем собрать проект при помочь make.
configure должен отработать нормально, после него надо запустить make.
make выплевывает слишком много информации по умолчанию, поэтому рекомендую использовать флаг s:
make -s
Нам показали ошибки, предупреждения и дали подсказку, что произошел конфликт между названиями функций — getline из файла Objects/fileobject.c уже определена в stdio.h
Чтож, переименовываем! Открываем ваш любимый редактор и заменяем getline на скажем Py_getline. В этом же файле указана функция filegetline, поэтому если Вы заменили getline на Py_getline во всем файле, то эту функцию Вам надо переименовать обратно: она используется вне это файла и поэтому переименовывать ее не стоит.
После переименования функции можно снова попробовать запустить сборку командой
make -s
О, теперь ошибки нет)
Правда осталась куча предупреждений, но и без из фикса можно запустить наш древний питон.
Для этого надо ввести в терминал (открытый в той же папке, т.е в корневой папке с исходниками)
./python
Должен открыться питоновский REPL.
В python 1.0.1 не было огромного количества привычных нам функций, нет даже help и exit.
Если Вы вдруг захотели установить древний питон, то рекомендую воспользоваться командой
make install
Ее надо запустить от суперпользователя (например с помощью команды sudo). Но!
При этом ваш прежний питон будет недоступен, в случае если он вызывался по команде python, а не например python2/3.
Что дальше?
Дальше было бы неплохо исправить предупреждения, потому что некоторых из них могут вести к некорректной работе.Я создал репозиторий на Github, в котором первый коммит это оригинальный Python 1.0.1, а в 2 изменения, которые позволяют скомпилировать Python 1.0.1 актуальным компилятором (ну т.е те изменения, о которых я рассказывал в этой статье).
Если Вы захотите исправить предупреждения или еще что-то улучшить, то милости прошу сделать Pull Request.
Ну а у меня на этом все.
Счастливого Нового года и Рождества!