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