hoppy — репозиторий Дэвида Бизли с древними версиями питона, начиная с 0.9.1 (1991 год). По сути, это вторая выпушенная версия, и от первой она отличается только багфиксами. На википедии на странице History of Python можно примерно посмотреть, какие фичи когда появлялись. И ещё в официальном репозитории есть огромный файлик HISTORY.

В общем, я уствовил самый древний Python.

['EOFError', 'KeyboardInterrupt', 'MemoryError', 'NameError', 'None', 'RuntimeError', 'SystemError', 'TypeError', 'abs', 'chr', 'dir', 'divmod', 'eval', 'exec', 'float', 'input', 'int', 'len', 'max', 'min', 'open', 'ord', 'range', 'raw_input', 'reload', 'type']```

Обратите внимание на отсутствие функций `str` и `list`. Литералы есть, но приводить типы ещё нельзя, у меня получилось только `float` в `int`. Также ещё нет comprehensions, generators. А ещё filter, map, reduce, они в 1.0 появились благодаря одному лисперу. Зато уже в первой версии есть `else` для `for` и `range` (причём даже с поддержкой отрицательного шага).

А ещё не переживайте из-за отсутствия `print` в списке, он же ключевым словом просто был до 3.0.

Атрибутов у встроенных типов не было by design:

```>>> ''.join([1,2,3])
Unhandled exception: type error: attribute-less object```

Например, для строк был модуль в stdlib:

```>>> import string
>>> string.lower('AAaA!')
'aaaa!'```

Вообще, из знакомого там path (сейчас os.path), calendar, shutil, glob, dis. А ещё там отступы 8 пробелов))))

Ну ладно, а хотите знать, как к строке то приводить?

```>>> a = 1
>>> b = [2,3,4]
>>> `[a] + b`
'[1, 2, 3, 4]'```

А я то всё гадал, почему бэктики не используются нигде. А ещё двойные кавычки не pythonic, вот так то:

```>>> "1"
Parsing error: file <stdin>, line 1:
"1"
 ^
Unhandled exception: run-time error: syntax error```

Исключения были строками:

```>>> SystemError
'system error'```

А помните пост про [lambda calculus](https://t.me/itgram_channel/309)? Так вот, некоторые функции тоже были в stdlib, в модуле lambda:

```def Never(f, x): return x
def Once(f, x): return f(x)
def Twice(f, x): return f(f(x))

def SUCCESSOR(Ntimes, (f, x)): return f(Ntimes(f, x))```


А я всегда говорил, что двоеточия в питоне нужны, чтобы условия, функции и всё такое можно было в одну строчку писать, lambda выражения только в 1.0 появились.

ИЛИ НЕТ???

```# P.S.: Here is a Lambda function in Python.
# It uses 'exec' and expects two strings to describe the arguments
# and the function expression.  Example:
#      lambda('x', 'x+1')
# defines the successor function.

def lambda(args, expr):
       if '\n' in args or '\n' in expr:
               raise RuntimeError, 'lambda: no cheating!'
       stmt = 'def func(' + args + '): return ' + expr + '\n'
       print 'lambda:', stmt,
       exec(stmt)
       return func```


Пробуем:

```>>> from lambda import lambda
>>> lambda('a', 'a+1')(4)
lambda: def func(a): return a+1
5```

Ух, столько всего! Надо доклад делать, в общем.