Разработчик писал свою математику, а нашёл одинаковый баг в Rust и musl
Shnatsel реализовывал fused multiply-add, операцию
Разница в один младший бит, около 15 частей на миллион, и только там, где FMA эмулируется программно: старые Intel без AVX2, Hygon, 32-битный ARM. Сам автор честно пишет: важно ли это на практике, он не знает, но называет риск для детерминированных симуляций, которые обязаны давать одинаковые биты на разных машинах.
Проверка занимает три hex-числа и одну строку на C; какие исправления уже влиты, а какие висят на ревью, на сайте.
Shnatsel реализовывал fused multiply-add, операцию
a*b+c с одним округлением, и обнаружил, что на субнормальных числах результат округляется не туда. Проверил стандартную библиотеку Rust: f32::mul_add ошибается так же. Проверил std::simd: то же. Проверил fmaf() в musl, libc, на которой собран Alpine: то же самое. Контрпример к первой версии его собственного патча нашла языковая модель, которую он попросил поискать ошибки.Разница в один младший бит, около 15 частей на миллион, и только там, где FMA эмулируется программно: старые Intel без AVX2, Hygon, 32-битный ARM. Сам автор честно пишет: важно ли это на практике, он не знает, но называет риск для детерминированных симуляций, которые обязаны давать одинаковые биты на разных машинах.
Проверка занимает три hex-числа и одну строку на C; какие исправления уже влиты, а какие висят на ревью, на сайте.
👍22🔥3⚡2❤2👏1😍1💯1🆒1
128 килобайт памяти, в которых каждый бит — отдельное ферритовое колечко
В европейской лаборатории Spacelab, которую возили в отсеке шаттла, стояли три французских миникомпьютера Mitra 125 MS. Память в них на магнитных сердечниках: бит хранится направлением намагниченности крошечного кольца на пересечении проводов, блок из семи плат занимает треть корпуса, а тепло уходит через плотный контакт с боковой панелью без обдува. Кен Ширрифф разобрал модуль до отдельных проводов и объяснил, почему чтение здесь стирает значение и его приходится записывать обратно.
В нашем канале «Сохранёнки программиста» разобрали подробнее.
В европейской лаборатории Spacelab, которую возили в отсеке шаттла, стояли три французских миникомпьютера Mitra 125 MS. Память в них на магнитных сердечниках: бит хранится направлением намагниченности крошечного кольца на пересечении проводов, блок из семи плат занимает треть корпуса, а тепло уходит через плотный контакт с боковой панелью без обдува. Кен Ширрифф разобрал модуль до отдельных проводов и объяснил, почему чтение здесь стирает значение и его приходится записывать обратно.
В нашем канале «Сохранёнки программиста» разобрали подробнее.
👍8🔥3👏2🤝2🤔1🙏1💯1😘1
This media is not supported in your browser
VIEW IN TELEGRAM
Мне всегда было интересно, как именно происходит поиск такси с технической точки зрения. Если вам тоже, то я нашёл видео, где всё подробно объясняется.
👍74🔥19💯6❤🔥5😁3🎉3❤2👏2😢1🤪1🤷1
Forwarded from Точка входа в программирование
Что делать, если ключ от сервиса уехал в публичный репозиторий
Поздний вечер, код наконец заработал,
Первый порыв, стереть строчку и закоммитить заново, не спасает: старый коммит остаётся в истории репозитория, и ключ достают оттуда. Поэтому чистка истории идёт не первым шагом, а после того, как ключ отозван и выпущен новый.
Разбор проходит порядок действий целиком, включая удаление секрета из уже опубликованных коммитов. А чтобы не возвращаться к этому, заведите привычку: перед первым пушем нового проекта убедитесь, что
#основы
Поздний вечер, код наконец заработал,
git add ., коммит, пуш. Через несколько минут расход по API растёт, появляются запросы, которых вы не делали, а счёт больше ожидаемого.Первый порыв, стереть строчку и закоммитить заново, не спасает: старый коммит остаётся в истории репозитория, и ключ достают оттуда. Поэтому чистка истории идёт не первым шагом, а после того, как ключ отозван и выпущен новый.
Разбор проходит порядок действий целиком, включая удаление секрета из уже опубликованных коммитов. А чтобы не возвращаться к этому, заведите привычку: перед первым пушем нового проекта убедитесь, что
.env лежит в .gitignore.#основы
freeCodeCamp.org
How to Fix a Leaked API Key: A Developer’s Guide to Git Security
Imagine this: you're working late, your code finally works, and you're ready to push it to GitHub. You run: git add . git commit -m "Fix API integration" git push A few minutes later, you notice some
👍9❤7🔥5🗿4😢3🍌2🎉1🌭1🙉1💊1🙊1
Forwarded from Веб-страница
Браузер дорос до того, чтобы конвертировать файлы без сервера
Для растущего набора форматов конвертация целиком помещается во вкладку: браузер читает файл, преобразует его и отдаёт обратно, ни разу не обратившись к серверу. Ещё пару лет назад это было уделом десктопных программ.
Отсюда исчезает не только загрузка. Пропадают очередь на обработку, требование завести аккаунт и серверный шаг целиком, а вместе с ними и вопрос, что стало с копией вашего файла.
Автор разбирает механику и честно очерчивает границы: где локальная конвертация выигрывает, а где браузеру не хватает сил и сервер всё-таки нужен. Прочесть стоит до того, как закладывать такой инструмент в план.
Для растущего набора форматов конвертация целиком помещается во вкладку: браузер читает файл, преобразует его и отдаёт обратно, ни разу не обратившись к серверу. Ещё пару лет назад это было уделом десктопных программ.
Отсюда исчезает не только загрузка. Пропадают очередь на обработку, требование завести аккаунт и серверный шаг целиком, а вместе с ними и вопрос, что стало с копией вашего файла.
Автор разбирает механику и честно очерчивает границы: где локальная конвертация выигрывает, а где браузеру не хватает сил и сервер всё-таки нужен. Прочесть стоит до того, как закладывать такой инструмент в план.
DEV Community
How to Convert Files in the Browser Without Uploading Them
Most file-conversion workflows start with a trade-off that is easy to miss: Choose a file from your...
💯12❤4🔥3🎉2⚡1👍1👏1🤔1🤝1
Ускоритель для ИИ молча возвращал неверный угол вместо ошибки
Tenstorrent — компания Джима Келлера, того самого, кто проектировал AMD Zen и первый чип автопилота Tesla. Она делает ускорители для нейросетей на RISC-V, то есть пытается подвинуть NVIDIA. Софт к ним, tt-metal, открытый, и в нём нашлась занятная вещь.
Есть стандарт IEEE 754, ему сорок лет, и он в том числе описывает, что должен вернуть арктангенс от бесконечности. Ответ π/2. Так считает Python, так считает PyTorch, так считает любая видеокарта. Ядро Tenstorrent на том же входе выдавало ровно 0, а на минус нуле вместо π/2 приезжало π.
Молча неверный ответ хуже падения: программа не спотыкается, просто робот едет не туда, а фаза считается мимо. Нашли это чтением, а не перебором. Автор сначала выписал из стандарта таблицу, что должно получаться на бесконечностях и нулях, и только потом полез в код. Правка уместилась в одно сравнение и уже влита.
Если у вас в проде считает что-нибудь не на процессоре, отчёт об аудите стоит взять как чеклист.
Tenstorrent — компания Джима Келлера, того самого, кто проектировал AMD Zen и первый чип автопилота Tesla. Она делает ускорители для нейросетей на RISC-V, то есть пытается подвинуть NVIDIA. Софт к ним, tt-metal, открытый, и в нём нашлась занятная вещь.
Есть стандарт IEEE 754, ему сорок лет, и он в том числе описывает, что должен вернуть арктангенс от бесконечности. Ответ π/2. Так считает Python, так считает PyTorch, так считает любая видеокарта. Ядро Tenstorrent на том же входе выдавало ровно 0, а на минус нуле вместо π/2 приезжало π.
Молча неверный ответ хуже падения: программа не спотыкается, просто робот едет не туда, а фаза считается мимо. Нашли это чтением, а не перебором. Автор сначала выписал из стандарта таблицу, что должно получаться на бесконечностях и нулях, и только потом полез в код. Правка уместилась в одно сравнение и уже влита.
Если у вас в проде считает что-нибудь не на процессоре, отчёт об аудите стоит взять как чеклист.
DEV Community
How I Found an IEEE 754 Violation in an AI Chip Company's Math Kernel
ttnn.atan2(inf, 0) returned 0 instead of pi/2. A field report on finding IEEE 754 special-case violations in hardware math kernels.
💊9👍8❤6👏2🤝2⚡1😁1🎉1🤩1🕊1💯1
Кеш с 99 процентами попаданий работает вдесятеро быстрее, чем с 90
Речь о самом обычном кеше перед базой: приложение держит в памяти ответы на запросы, которые уже задавало, и лезет в базу, только когда ответа нет. Такой кеш оценивают по доле попаданий, и ровно на этой доле все обманываются.
Разница между 90 и 99 процентами читается как «лучше на девять процентов». Считать надо промахи. Их доля падает с десяти процентов до одного, то есть в десять раз, а вся работа базы сидит именно в промахах.
Разработчик проверил это на стенде. Один и тот же запрос 10 000 раз без кеша занял почти две секунды работы базы. С обёрткой на обычном ConcurrentHashMap вышло 0,6 миллисекунды и ровно один поход в базу: ускорение в 3084 раза там, где он предсказывал сотню. Долю попаданий он задавал руками, а время мерил по-настоящему.
Пригодится, когда придётся объяснять, зачем тратить спринт на подъём попаданий с 90 до 99. В таблице замеров выигрыш посчитан для четырёх разных долей.
Речь о самом обычном кеше перед базой: приложение держит в памяти ответы на запросы, которые уже задавало, и лезет в базу, только когда ответа нет. Такой кеш оценивают по доле попаданий, и ровно на этой доле все обманываются.
Разница между 90 и 99 процентами читается как «лучше на девять процентов». Считать надо промахи. Их доля падает с десяти процентов до одного, то есть в десять раз, а вся работа базы сидит именно в промахах.
Разработчик проверил это на стенде. Один и тот же запрос 10 000 раз без кеша занял почти две секунды работы базы. С обёрткой на обычном ConcurrentHashMap вышло 0,6 миллисекунды и ровно один поход в базу: ускорение в 3084 раза там, где он предсказывал сотню. Долю попаданий он задавал руками, а время мерил по-настоящему.
Пригодится, когда придётся объяснять, зачем тратить спринт на подъём попаданий с 90 до 99. В таблице замеров выигрыш посчитан для четырёх разных долей.
DEV Community
Why a 99% Cache Hit Rate Is 10x Faster Than 90% (Not 9%)
I ran the same query 10,000 times: almost 2 seconds of database work for an answer that never...
💊10❤5👏5👍2❤🔥1🎉1🌚1🌭1🤣1😨1🫡1
Разработчик собрал фоторедактор, который ни разу не отправляет фото на сервер
Любая онлайновая удалялка фона работает одинаково: вы загружаете снимок, модель крутится на чужой машине, вы забираете результат. Копия уже ушла, и что с ней дальше, вам не расскажут. В APIC-Web фон, объекты, фильтры, конвертация и сжатие живут прямо в браузере, на Canvas, WebAssembly и локальной модели.
Вырезать фон просто, пока в кадре нет волос. Очевидный путь через ImageSegmenter из MediaPipe с флагом outputCategoryMask отдаёт на пиксель жёсткий ноль или единицу. По волосам получается лесенка, и размытием её не спасти: промежуточные значения округлились и потерялись.
Приём в том, чтобы забрать вероятности до округления. Флаг outputConfidenceMasks отдаёт на пиксель число от нуля до единицы, и дальше край собирается в несколько шагов. Модель та же, край другой.
Грабли: число каналов уверенности у моделей разное, так что проверяйте длину массива вместо confidenceMasks[1]. Оба сложных куска редактора расписаны с кодом.
Любая онлайновая удалялка фона работает одинаково: вы загружаете снимок, модель крутится на чужой машине, вы забираете результат. Копия уже ушла, и что с ней дальше, вам не расскажут. В APIC-Web фон, объекты, фильтры, конвертация и сжатие живут прямо в браузере, на Canvas, WebAssembly и локальной модели.
Вырезать фон просто, пока в кадре нет волос. Очевидный путь через ImageSegmenter из MediaPipe с флагом outputCategoryMask отдаёт на пиксель жёсткий ноль или единицу. По волосам получается лесенка, и размытием её не спасти: промежуточные значения округлились и потерялись.
Приём в том, чтобы забрать вероятности до округления. Флаг outputConfidenceMasks отдаёт на пиксель число от нуля до единицы, и дальше край собирается в несколько шагов. Модель та же, край другой.
Грабли: число каналов уверенности у моделей разное, так что проверяйте длину массива вместо confidenceMasks[1]. Оба сложных куска редактора расписаны с кодом.
🔥9💊6👏3😁2🎉2👍1🤔1🌚1🤝1🦄1
Есть один разработчик, который искренне верит, что отпуск случится сразу после релиза. Проблема в том, что релизы у него не заканчиваются никогда. 😅
Сам он с места не сдвинется, поэтому нужна ваша помощь. В новой мини-игре вам предстоит разгрести бардак, найти билет, собрать чемодан и приодеть программиста для отпуска. Заодно собирайте промо-коды от партнёров!
Играть
Сам он с места не сдвинется, поэтому нужна ваша помощь. В новой мини-игре вам предстоит разгрести бардак, найти билет, собрать чемодан и приодеть программиста для отпуска. Заодно собирайте промо-коды от партнёров!
Играть
❤9😁7👍5👎2🔥2👏2👀2🤝2🤯1🆒1
Forwarded from Точка входа в программирование
Почему шифровать по-новому советуют сейчас, хотя квантового компьютера ещё нет
Криптография, которая сегодня защищает ваши ключи, HTTPS и подписи, опирается на задачи, которые обычные компьютеры не решают за разумное время. Достаточно большой квантовый компьютер часть из них решит. Постквантовая криптография это алгоритмы, устойчивые и к тем и к другим.
Возражение напрашивается: такого компьютера пока нет, значит, можно подождать. Мешает атака «собери сейчас, расшифруй потом»: противник записывает ваш шифрованный трафик сегодня и лежит с ним, пока не появится возможность его вскрыть.
Отсюда правило, которое стоит запомнить в начале пути: если данные должны остаться тайной через десять лет, угроза уже настоящая, а не будущая. Разбор объясняет это без математики.
Криптография, которая сегодня защищает ваши ключи, HTTPS и подписи, опирается на задачи, которые обычные компьютеры не решают за разумное время. Достаточно большой квантовый компьютер часть из них решит. Постквантовая криптография это алгоритмы, устойчивые и к тем и к другим.
Возражение напрашивается: такого компьютера пока нет, значит, можно подождать. Мешает атака «собери сейчас, расшифруй потом»: противник записывает ваш шифрованный трафик сегодня и лежит с ним, пока не появится возможность его вскрыть.
Отсюда правило, которое стоит запомнить в начале пути: если данные должны остаться тайной через десять лет, угроза уже настоящая, а не будущая. Разбор объясняет это без математики.
DEV Community
¿Qué es la criptografía post-cuántica y por qué deberías migrar ya?
Explicación clara de la amenaza cuántica, el ataque 'harvest now, decrypt later', los estándares ML-KEM y ML-DSA del NIST, y por qué la migración empieza hoy.
👍12👏3😁3🌚3🔥2😢2🥰1💯1😴1🎃1🗿1
CUDA готова пустить к себе RISC-V, если платформа дорастёт до серверной
Процессор, который раздаёт видеокарте работу в CUDA, может быть только x86-64 или aarch64. На Hot Chips 2026 Nvidia назвала условия, при которых к ним добавится RISC-V.
Требования серверные: профиль RVA23, спецификации RISC-V для серверного SoC и платформы, поддержка ACPI, через которую система узнаёт у железа, что оно умеет, и когерентность PCIe.
Последний пункт объясняет, почему дешёвой платформой не отделаться. Без когерентности процессор записал данные, а они ещё лежат в его кэше; копирование в память видеокарты идёт мимо процессора, прямо из DRAM, и утаскивает устаревшую версию. Спасают только ручные сбросы кэшей на каждой передаче.
Чего Nvidia хочет от векторных расширений, разбирают в Chips and Cheese.
Процессор, который раздаёт видеокарте работу в CUDA, может быть только x86-64 или aarch64. На Hot Chips 2026 Nvidia назвала условия, при которых к ним добавится RISC-V.
Требования серверные: профиль RVA23, спецификации RISC-V для серверного SoC и платформы, поддержка ACPI, через которую система узнаёт у железа, что оно умеет, и когерентность PCIe.
Последний пункт объясняет, почему дешёвой платформой не отделаться. Без когерентности процессор записал данные, а они ещё лежат в его кэше; копирование в память видеокарты идёт мимо процессора, прямо из DRAM, и утаскивает устаревшую версию. Спасают только ручные сбросы кэшей на каждой передаче.
Чего Nvidia хочет от векторных расширений, разбирают в Chips and Cheese.
❤7🎉3👍2⚡1🔥1👏1😁1🤔1🙏1👻1
Сорок символов на входе уронили сеть Cloudflare на 27 минут
2 июля 2019 года процессор ушёл под 100% на каждом пограничном сервере Cloudflare, принимавшем HTTP и HTTPS. Сайты по миру лежали 27 минут из-за одной регулярки.
Схема известная: вложенные квантификаторы на одном классе символов, структурно вроде (a+)+b. Движку с бэктрекингом подсовывают строку, которая почти совпала, и он перебирает все способы разложить её между плюсами: на 20 символах это полмиллиона попыток, а сорока хватает, чтобы забить ядро.
В разборе есть таблица откатов по длине входа.
#безопасность
2 июля 2019 года процессор ушёл под 100% на каждом пограничном сервере Cloudflare, принимавшем HTTP и HTTPS. Сайты по миру лежали 27 минут из-за одной регулярки.
Схема известная: вложенные квантификаторы на одном классе символов, структурно вроде (a+)+b. Движку с бэктрекингом подсовывают строку, которая почти совпала, и он перебирает все способы разложить её между плюсами: на 20 символах это полмиллиона попыток, а сорока хватает, чтобы забить ядро.
В разборе есть таблица откатов по длине входа.
#безопасность
🔥12❤3👍3👏3🤔2🎉2😁1🙏1😴1🤝1
Первую жертву новой дыры в Magento взломали на самой свежей сборке от Adobe
Sansec выпустила предупреждение досрочно: магазины ломают прямо сейчас. Атаки идут с 4 сентября, дыру назвали StyleSmuggler, она даёт выполнение кода на сервере без логина и ставит постоянный бэкдор.
Цепочку воспроизвели на чистых Magento Open Source 2.4.7, 2.4.8 и 2.4.9. Первая жертва работала на 2.4.6-p15 с июльским и августовским патчами: выше для этой линейки Adobe ничего не выпускала. На 6 сентября у Adobe нет ни CVE, ни фикса, ни обходного пути.
Совет Sansec на время: отключить GraphQL. Хостер Disrex, чинивший два взломанных магазина, уточняет, что классическим витринам и Hyvä он не нужен, а headless и PWA без него не работают. Плановый релиз Adobe сегодня, 8 сентября, будет ли там фикс, неизвестно.
Я бы на месте владельца headless-витрины уже читал логи: детали в разборе The Hacker News.
#безопасность
Sansec выпустила предупреждение досрочно: магазины ломают прямо сейчас. Атаки идут с 4 сентября, дыру назвали StyleSmuggler, она даёт выполнение кода на сервере без логина и ставит постоянный бэкдор.
Цепочку воспроизвели на чистых Magento Open Source 2.4.7, 2.4.8 и 2.4.9. Первая жертва работала на 2.4.6-p15 с июльским и августовским патчами: выше для этой линейки Adobe ничего не выпускала. На 6 сентября у Adobe нет ни CVE, ни фикса, ни обходного пути.
Совет Sansec на время: отключить GraphQL. Хостер Disrex, чинивший два взломанных магазина, уточняет, что классическим витринам и Hyvä он не нужен, а headless и PWA без него не работают. Плановый релиз Adobe сегодня, 8 сентября, будет ли там фикс, неизвестно.
Я бы на месте владельца headless-витрины уже читал логи: детали в разборе The Hacker News.
#безопасность
👍5❤3👏3🔥2😁2☃1👌1😍1🎄1🆒1
Треть патча Linux 7.3-rc1 заняли заголовки регистров AMD
Когда пишут «огромный релиз-кандидат ядра», полезно посмотреть, из чего складывается этот объём. В 7.3-rc1 около трети всего диффа занял дамп заголовков AMD DCN6: аппаратные определения нового поколения графики, выгруженные обычными #define, плюс код под это поколение.
Линус сам говорит: замаскируйте этот кусок, и merge window выглядит рядовым, хотя по числу коммитов rc1 один из крупнейших. Судить о вложенной работе по строкам диффа бессмысленно, заметную часть «роста» дают сгенерированные константы под новое железо.
Ценно, что в том же письме он признался в собственном факапе: посреди merge window затеял обновление системы, словил из-за этого проблему и сам себя назвал балбесом. Письмо и список изменений на Phoronix: там же поддержка AMD Zen 6, ускорение Btrfs и Steam Controller 2026.
#новости
Когда пишут «огромный релиз-кандидат ядра», полезно посмотреть, из чего складывается этот объём. В 7.3-rc1 около трети всего диффа занял дамп заголовков AMD DCN6: аппаратные определения нового поколения графики, выгруженные обычными #define, плюс код под это поколение.
Линус сам говорит: замаскируйте этот кусок, и merge window выглядит рядовым, хотя по числу коммитов rc1 один из крупнейших. Судить о вложенной работе по строкам диффа бессмысленно, заметную часть «роста» дают сгенерированные константы под новое железо.
Ценно, что в том же письме он признался в собственном факапе: посреди merge window затеял обновление системы, словил из-за этого проблему и сам себя назвал балбесом. Письмо и список изменений на Phoronix: там же поддержка AMD Zen 6, ускорение Btrfs и Steam Controller 2026.
#новости
Phoronix
Linux 7.3-rc1 With AMD Zen 6 Additions, Better Btrfs Performance & 2026 Steam Controller
Like clockwork, the Linux 7.3 merge window has concluded after two weeks and the Linux 7.3-rc1 kernel now available for testing.
👍5😁4❤3🎉2🤷♂1🤷♀1💔1👨💻1😇1🤝1🗿1
Одна функция «забыл пароль» оставляет вору живую сессию
Сброс обычно пишут одним вызовом: отправить письмо, поменять хеш, вернуть 200. В разборе на dev.to предлагают считать письмо сообщением очереди, а не событием интерфейса, и разложить сброс на три перехода с записью в аудит.
Заявка создаёт запись с коротким сроком жизни: хеш токена, время истечения, статус pending. Подтверждение в одной транзакции сверяет хеш и срок и переводит запись в consumed ровно один раз. И только потом меняется пароль и запускается отзыв старых сессий. Без третьего шага укравший куку переживает смену пароля.
Ответ на заявку одинаковый для существующего и несуществующего адреса, иначе форма работает как проверялка почты.
Дальше в статье развилка: своя машина состояний на Go или managed-провайдер. Мне ценнее оказались сами инварианты: приложите их к своей реализации и увидите, какого перехода не хватает.
Сброс обычно пишут одним вызовом: отправить письмо, поменять хеш, вернуть 200. В разборе на dev.to предлагают считать письмо сообщением очереди, а не событием интерфейса, и разложить сброс на три перехода с записью в аудит.
Заявка создаёт запись с коротким сроком жизни: хеш токена, время истечения, статус pending. Подтверждение в одной транзакции сверяет хеш и срок и переводит запись в consumed ровно один раз. И только потом меняется пароль и запускается отзыв старых сессий. Без третьего шага укравший куку переживает смену пароля.
Ответ на заявку одинаковый для существующего и несуществующего адреса, иначе форма работает как проверялка почты.
Дальше в статье развилка: своя машина состояний на Go или managed-провайдер. Мне ценнее оказались сами инварианты: приложите их к своей реализации и увидите, какого перехода не хватает.
❤10👍7😁3🥰2🍌2🤓2🎉1🙏1👌1😇1🫡1
Интерпретатор Python уместился в 1024 байта кода на C
Остин Хенли пишет такой код по выходным и ставит жёсткие условия: никаких макро-трюков и подключённых библиотек, а на выходе должен работать fizzbuzz с def, двоеточиями и отступами. Стартовый лимит был 512 байт.
Не влезло. Первая версия дожила до x = 1 + 2 * 3 и if x > y: z = 3, лимит кончился, а получился калькулятор. Потолок поднялся до 1024, а порядок работы поменялся: сначала заставить работать, потом ужимать.
Внутри ничего похожего на CPython: ни токенизации, ни синтаксического дерева, ни байткода. Всё состояние держат несколько глобальных переменных: массив на 999 символов под исходник без пробелов и int vars[256] под таблицу имён, где переменные и функции лежат вперемешку.
Разбор с полным кодом.
#python
Остин Хенли пишет такой код по выходным и ставит жёсткие условия: никаких макро-трюков и подключённых библиотек, а на выходе должен работать fizzbuzz с def, двоеточиями и отступами. Стартовый лимит был 512 байт.
Не влезло. Первая версия дожила до x = 1 + 2 * 3 и if x > y: z = 3, лимит кончился, а получился калькулятор. Потолок поднялся до 1024, а порядок работы поменялся: сначала заставить работать, потом ужимать.
Внутри ничего похожего на CPython: ни токенизации, ни синтаксического дерева, ни байткода. Всё состояние держат несколько глобальных переменных: массив на 999 символов под исходник без пробелов и int vars[256] под таблицу имён, где переменные и функции лежат вперемешку.
Разбор с полным кодом.
#python
👍29🤔6❤5🙉5🔥3🥰3💊3👏2😁2👀2🤷♀1