Найти в Дзене
102 тыс подписчиков

Интерпретатор Python в 1024 байтах


CPython, чтобы выполнить программу, токенизирует исходник, строит синтаксическое дерево, прогоняет анализ и оптимизации, генерирует байткод и только потом его интерпретирует. А тут работающий интерпретатор подмножества Python занимает ровно 1024 байта кода на C, без макросов и внешних библиотек. И это не игрушка на пару операций, он гоняет FizzBuzz с def, отступами, if, циклами while и for, вызовами функций и рекурсией.

Первая попытка в 512 байт провалилась, дальше в ход пошёл код-гольфинг с односимвольными именами, трюками C89 и ASCII вместо символов. Но самое любопытное даже не в ужимании, а в том, как этот парсер вообще исполняет циклы и рекурсию, не имея ни синтаксического дерева, ни байткода.
Интерпретатор Python в 1024 байтах  CPython, чтобы выполнить программу, токенизирует исходник, строит синтаксическое дерево, прогоняет анализ и оптимизации, генерирует байткод и только потом его...
Около минуты