Writing a C compiler in 500 lines of Python (2023)
Краткий обзор компилятора C на 500 строк Python
Автор бросил себе вызов — написать компилятор C за 500 строк Python. Получилось трудно, но рабочий результат.
Архитектура
- Однопроходный: парсинг и генерация кода идут одновременно. AST не строится, экономим строки.
- Цель — WebAssembly: выбор странный (goto нет, стек-VM), но интересный. Пришлось реализовать собственный стек в памяти, т.к. стек WASM нельзя адресовать.
Что вырезали
switch,do/while,goto,break/continue,enum,union,typedef,const/volatile,static,inline,sizeof,float,double,long,long long,void *, массивы, указатели на функции, структуры в структурах, varargs, макросы,#include, стандартную библиотеку.
Лексер
Регулярки разбивают исходник на токены: ключевые слова, идентификаторы, числа, операторы, строки и символы.
Парсер
Рекурсивный спуск. Пример префиксного ~:
elif lexer.try_next("~"):
meta = load_result(prefix())
emit("i32.const 0xffffffff")
emit("i32.xor")
mask_to_sizeof(meta.type)
return meta
Семантика типов
Поддержаны int, char, short, int *, char *, struct. Все сводится к 32-битным целым. Структуры выравниваются по 4 байта.
Управление памятью
- Локальные переменные кладутся в стек.
- Глобальные — в секцию
data. malloc/freeнет, но можно вызвать внешнююmallocиз JS.
Циклы for
Из-за отсутствия goto пришлось генерировать вложенные блоки WebAssembly и использовать br_if для break/continue.
Функции
- Поддерживаются
intаргументы и возвращаемые значения. - Вызовы через
call. - Рекурсия работает.
Сборка и запуск
python compiler.py input.c > output.wat
wat2wasm output.wat -o output.wasm
node run.js output.wasm
Итог
500 строк Python компилируют подмножество C в WASM. Код читаемый, эксперимент удался.
Комментарии (74)
- Пользователь удивился, что даже GCC и Clang не реализуют весь стандарт C.
- Обсуждали, что однопроходный компилятор проще, но без оптимизаций, и что C изначально проектировался именно под такой подход.
- Упомянули книгу «Writing a C Compiler» Норы Сандлер как хорошее руководство.
- Кто-то сравнил компиляторы с лингвистикой, другие отметили, что C несёт 50-летний технический долг.
- Шутили о написании Python-компилятора на C за 500 строк и о том, что без импортов это будет «обёртка», а не компилятор.
Nuclear: Desktop music player focused on streaming from free sources 🔥 Горячее 💬 Длинная дискуссия
nuclear — свободный музыкальный стриминговый плеер, который сам находит бесплатные треки.
Основное
- Лицензия: GPLv3
- Язык: TypeScript/Electron
- Платформы: Windows, macOS, Linux
Возможности
- Поиск и воспроизведение из YouTube, SoundCloud, Bandcamp, Jamendo
- Плейлисты, очередь, «любимые» треки
- Last.fm-скробблинг, Libre.fm
- Тёмная/светлая темы, плагины, Discord Rich Presence
Установка
- Скачать релиз с GitHub
- Через AUR:
yay -S nuclear-player-bin - Snap:
sudo snap install nuclear
Сборка из исходников
git clone https://github.com/nukeop/nuclear.git
cd nuclear
npm install
npm run build
npm start
Сообщество
Комментарии (247)
- Пользователи жалуются на постоянные баги, ошибки JavaScript и невозможность воспроизвести треки.
- Критика Electron: 300 МБ ОЗУ при запуске, хотя разработчики обещают переход на Tauri.
- Spotify-поиск сломан с мая, автор не собирается чинить; поддержки авторизации в YouTube Music нет.
- Несколько человек считают UI перегруженным и неинтуитивным; инструкции под Mac вызывают недоумение.
- В отзывах на сайте даже негативные комментарии («фак всем музыкантам») оставлены без цензуры, что вызывает споры.
Understanding Transformers Using a Minimal Example 🔥 Горячее
Принцип работы Transformer на мини-модели
Автор: Robert Timm
Лицензия: MIT, код и данные — github.com/rti/gptvis
Идея
Показать, как внутри Transformer токены превращаются в предсказания, используя крошечную модель и наглядные визуализации.
Упрощения
- Данные: 94 слова об 4 фруктах и их вкусах.
Примеры:lemon tastes sour,i like spicy so i like chili.
Валидация:i like spicy so i like chili(проверка, что связь «spicy-chili» выучена, а не запомнена). - Токенизация: 19 слов-токенов без BPE.
Список:is, the, orange, chili, sour, of, taste, apple, sweet, juicy, a, spicy, so, like, tastes, i, lemon, UNKNOWN, PADDING. - Архитектура: декодер-only, 2 слоя × 2 головы, эмбеддинги 20-D, ≈10 000 параметров, tied embeddings (как у Gemma).
Обучение
10 000 шагов → низкий loss; при подсказке «i like spicy so i like» модель выдаёт «chili».
Визуализация
Каждый 20-D вектор кодируется пятью цветными «коробками» (4 числа на коробку).
Эмбеддинги вкусов (juicy, sour, sweet, spicy) получают уникальные, но похожие формы, что отражает их семантическую близость.
Комментарии (16)
- Читатели признали визуализацию «пять сложенных коробок» за креатив, но сочли объяснение трансформеров слишком кратким и не добавившим понимания.
- Предложены альтернативы: интерактив от Georgia Tech, Illustrated Transformer, видео 3Blue1Brown и книга Себастьяна Рашки.
- Некоторые рекомендовали разбить материал на длинное практическое занятие вместо 10-минутного чтения.
A Random Walk in 10 Dimensions (2021)
Случайное блуждание в 10 измерениях
Представьте точку, скачущую в 10-мерном пространстве: каждый шаг — равновероятный сдвиг по любой из координат. В одномерном случае расстояние от начала растёт как √n, где n — число шагов. В d измерениях это правило превращается в √(n·d): «объём» доступного пространства растёт, но каждая координата всё ещё дрожит независимо.
Интуиция подсказывает, что в 10D точка должна «улететь» далеко, однако симуляция показывает иное: медианное расстояние после 1000 шагов — всего ≈10 единиц. Почему? Плотность вероятности в высоких размерностях концентрируется в тонкой оболочке гиперсферы; случайные векторы почти ортогональны, и их длины редко бывают экстремальными.
Этот эффект лежит в основе многих задач: от статистической механики до машинного обучения, где «проклятие размерности» заставляет методы искать структуру в разреженных данных.
Комментарии (16)
- В высоких размерностях случайное блуждание почти вся «растягивается» вдоль первых двух главных компонент (>80 % дисперсии), что противоречит интуиции.
- Уточнили модель шага: выбирается одно из 10 измерений (вер. 1/10), затем направление ±1 (вер. ½), т.е. 20 возможных переходов.
- Ошиблись в расчёте «горных пиков» в 10-D решётке: правильная вероятность ≈ 2 %, а не 18 %.
- Обсудили, почему такие эффекты делают глубокое обучение возможным: случайные блуждания по ландшафту потерь помогают вместе с градиентным спуском.
- Упомянули связанные методы (SGD, Hamiltonian MCMC) и классическую теорему Пойа: в 1-2-D блуждание возвращается, в ≥3-D может «потеряться навсегда».
Claude Code: Now in Beta in Zed 🔥 Горячее 💬 Длинная дискуссия
Claude Code в Zed — бета уже доступна
Пользователи давно просили интеграцию Claude Code, и теперь она встроена в панель ассистента Zed.
Плюсы
- Без терминала — всё внутри редактора.
- ACP-протокол — агенты работают через открытый стандарт Anthropic.
- Любые агенты — подключайте собственные или сторонние модели, не ограничиваясь Claude.
Попробуйте прямо сейчас.
Комментарии (398)
- Пользователи хвалят скорость и архитектуру Zed, но жалуются на «сырую» интеграцию Claude Code: нет /compact, Plan Mode, нормального управления контекстом и поддержки подписки вместо API-ключей.
- Критика UI/UX: шрифты, отсутствие undo для удаления файлов, слабый Git-интерфейс, нет вертикальных вкладок, неудобные настройки.
- Автодополнение и AI-фичи уступают Cursor и Copilot; многие поэтому остаются на VS Code/JetBrains.
- Нет Windows-версии, SSH-удалёнки и запуска агентов на сервере, что блокирует командную работу.
- VC-финансирование вызывает опасения, что приоритет отдан «AI ради AI», а не зрелости продукта.
A queasy selling of the family heirlooms
Продать наследство
Стерлинг и серебро мамы — вещи, что я унаследовала как священный долг. Ирландская прабабка отработала билет в Америку горничной, подсмотрела у богачей «правильный» быт и передала дальше. В каждом поколении вкус превышал деньги, покупали редко, но с жертвой.
Я не хочу полировать приборы и достаю фарфор только тогда, когда гости в панике. Розовый Lenox, купленный мамой с надеждой на блеск, никому не нужен: ни друзьям, ни интернету. После смерти отца «паттерн» жизни разбился. Я выбрала крепкую посуду и жизнь попроще.
Тридцать лет сервиз пылится в буфете, а кофейный набор чернеет в подвале. Я постарела, и мои планы «чаще принимать гостей» тускнеют вместе с серебром. Решила: расплавлю, выручу деньги на живые дела.
В ломбард «Midwest Money» — приличное место, где прошлое превращают в кэш без вопросов — я чувствую себя вором. Под скользит к центу тяжёлый «дип-чиллер» (ИИ не знает слова, которому мама дала душу). За всё серебро — 28 долларов, за коробочку стерлинга — тысяча.
Ценность оказалась капризной: в мамино время она казалась вечной.
Комментарии (74)
- Наследуемые «ценные» вещи (фарфор, серебро, антиквариат) почти ничего не стоят на рынке, но требуют массы времени, денег и нервов на вывоз/хранение/продажу.
- Родители собирали коллекции как символ «достатка» и воспоминаний; для детей это просто груз, особенно если жильё меньше и денег на содержание нет.
- Популярный выход: снять видео с историями, оставить 1-2 памятных предмета, остальное — продать, пожертвовать или выбросить, пока родители живы (шведское «death cleaning»).
- Аренда складов превращается в многолетнюю дыру в бюджете: $5 000/год за 10×10 футов, внутри — масс-маркет-коллекции, которые никто не хочет.
- Главное правило: не быть рабом вещей; если предмет не приносит радости или пользы — избавляться без угрызений.
Show HN: Writing Arabic in English
Как я сделал фонетическую арабскую клавиатуру
Фонетическая раскладка — это когда английские клавиши отображаются на арабские звуки.
Проблемы: арабский пишут справа налево, буквы сочетаются в слове, 11 букв не имеют англогодных пар и ещё есть «хамза» и диакритики.
- RTL:
direction: rtl;— готово. - Скрипт: браузер сам стыкует буквы (Safari требует ZWJ).
- Прямые пары (17 букв):
b→ ب,t→ ت,s/c→ س и т. д. - «Эмфатические» (5): произносятся в глотке, похожи на базовые, но «сильнее». Назначил заглавные:
H→ ح,S→ ص,D→ ض,T→ ط,Z→ ظ. - «Уникальные» (6): добавляем точки к уже назначенным.
sh→ ش (с + 3 точки),th→ ث (т + 3 точки),dh→ ذ (д + 1 точка),kh→ خ (ḥ + 1 точка),3→ ع,gh→ غ (ع + 1 точка).
Код: две таблицы — обычная и шифт; по нажатию выбираем нужную и отдаём UTF-символ.
Комментарии (15)
- Обсуждение крутится вокруг новой «арабской QWERTY»-раскладки, которая привязивает арабские буквы к латинским по принципу транслитерации (ع → e рядом с 3, ش → shift+S и т.д.).
- Пользователи сравнивают проект с уже существующими решениями: Yamli (2005), Buckwalter, SATTS, старым Windows-переводчиком и даже пиньинь-вводом для китайского.
- Главный аргумент «за» — не нужны наклейки на клавиатуре: запоминаешь английскую букву и сразу получаешь арабскую.
- Некоторые ждали именно «чат-транслит»-режима (3=ع, 7=ح, 2=ء), но авторы делают упор на полноценную клавиатуру, а не на транслитерацию текста.
- В итоге идею признают полезной для изучающих язык и для быстрого набора без смены раскладки, но отмечают, что подобные инструменты существуют уже два десятилетия.
Airbus B612 Cockpit Font
Eclipse B612
Репозиторий polarsys/b612 на GitHub — открытый проект фонда Eclipse.
- Назначение: инструментарий для анализа и визуализации критических систем (аэрокосмос, автомобили, медицина).
- Технологии: Java, EMF, GEF, Sirius.
- Лицензия: EPL-2.0.
Ключевые возможности
- Моделирование требований, архитектуры, безопасности.
- Проверка соответствия стандартам (DO-178C, ISO 26262).
- Интеграция с Jenkins, Git, Capella.
Быстрый старт
git clone https://github.com/polarsys/b612.git
cd b612 && mvn clean install
Комментарии (84)
- Шрифт B612 создан для авиационных дисплеев: максимально читаем, с «light-traps» для борьбы со свечением экранов.
- Есть пропорциональный и моноширинный варианты; часть пользователей ставит его на Kindle, Obsidian, matplotlib.
- Название — от астероида Б-612 из «Маленького принца».
- Критика: 0 и O почти не различаются, финальный сигма (ς) смещён вниз, скобки () похожи на [].
- Реальные авиа-тележки ATLAS 30×40 см покупают как рабочие столики; цена 500–1000 $ за б/у.
Eels are fish
Угры: рыбы, но не совсем
Оказывается, угри — это рыбы. Обидно: казалось, они третий, тайный класс между рыбой и змеёй. На деле угри — страннейшие рыбы, и тайны в них глубже ярлыка.
Где берутся угри?
Тысячелетиями не знали. Аристотель — из грязи, японцы — из лунных червей. Научная охота началась в XIX веке: эволюция, скальпели, тщетные поиски половых органов.
Фрейд и угри
В 1876-м в Триесте молодой зоолог четыре месяца вскрывал угрей в поисках яичек. Не нашёл. Это был Зигмунд Фрейд. Кто знает, может, психоанализ родился из этой неудачи.
Саргассово море
Взрослых угрей при размножении никто не видел. Предполагают, что они метятся лишь в одном месте — Саргассовом море, посреди Бермудского треугольника.
Жизненный цикл
- Лептоцефал — прозрачная личинка, дрейфует годами.
- Стеклянный угорь — доходит до Европы, ползёт вверх по рекам.
- Элвер — пигмент, аппетит.
- Жёлтый угорь — десятилетия в пресной воде.
- Серебряный угорь — чёрно-хромированный финальный облик, глаза увеличиваются, чтобы увидеть глубину, куда он уйдёт навсегда, чтобы метнуться и умереть.
Так что угри — не просто рыбы, а живые загадки, которые всё ещё обгоняют наше понимание.
Комментарии (135)
- Кроссворды и NYT подтолкнули многих к «угревой» rabbit-hole: откуда берутся европейские угри (около Багам), почему они рыбы и как они могут «пешком» колонизировать озёра.
- Пользователи делились фактами: угри когда-то служили деньгами, в Португалии их едят как деликатес, а в Средиземноморье они на грани исчезновения.
- Рекомендованы книги «The Book of Eels» и «The Gospel of the Eels», видео Хэнка Грина и песня A Capella Science.
- Обсуждались налоговые документы ЕС по угрям, легенды о «создании» угрей и даже вопрос «есть ли вообще рыбы».
Building the most accurate DIY CNC lathe in the world [video]
-
О YouTube
О нас • Пресс-центр • Авторское право • Связаться • Авторам • Реклама • Разработчикам -
Правила
Условия • Конфиденциальность • Политика и безопасность • Как работает YouTube -
Другое
Тест новых функций • NFL Sunday Ticket
© 2025 Google LLC
Комментарии (60)
- Участники обсудили, что токарный станок считается базовым инструментом, способным «самовоспроизводиться» (в рамках книг Gingery).
- Рекомендовали каналы Cylo’s Garage (сверхточный алмазный станок для оптики), Kasra Mehraky (5-осевой субмикронный станок) и Not An Engineer (DIY фреза).
- Подчеркнули влияние Дэна Гелбарта и Робина Ренцетти как источников вдохновения для проектов высокой точности.
- Упомянули, что проект Cylo временно приостановлен, но уже есть чертежи и первые тесты.
- Отметили, что промышленные решения такого уровня существуют десятилетиями, но повторить их в гараже — огромное достижение.