Hacker News Digest

Тег: #cargo

Постов: 7

Reverse engineering Codex CLI to get GPT-5-Codex-Mini to draw me a pelican (simonwillison.net)

Разработчик Саймон Уиллисон обратно проанализировал CLI-инструмент Codex, чтобы получить прямой доступ к новой модели GPT-5-Codex-Mini, которая пока доступна только через этот инструмент. OpenAI выпустил более компактную и экономичную версию GPT-5-Codex, но официального API доступа еще не предоставил. Уиллисон использовал сам Codex для модификации исходного кода на Rust, добавив новую подкоманду "codex prompt", позволяющую напрямую отправлять запросы к модели через тот же API, что и оригинальный инструмент.

Процесс включал клонирование репозитория openai/codex, запуск в "опасном режиме" и использование самой модели для написания кода новой функции. После нескольких итераций Уиллисон смог успешно протестировать модель, попросив ее создать SVG-изображение пеликанa, едущего на велосипеде. Несмотря на некоторые проблемы с режимом работы модели, эксперимент показал возможность прямого доступа к новой модели через обратную инженерию официально еще не выпущенного API.

by simonw • 09 ноября 2025 г. в 04:02 • 137 points

ОригиналHN

#rust#openai#gpt-5#codex#reverse-engineering#api#svg#cargo#llm

Комментарии (63)

  • Критика чрезмерной зависимости от LLM для простых задач, таких как установка Rust-проектов (cargo install), которая решается за минуты без ИИ.
  • Подтверждение трудностей новичков с документацией и сборкой проектов в незнакомых системах (Rust/Cargo), требующих активного поиска.
  • Предложение альтернативных тестов для оценки AGI (например, "медведь на уницикле"), так как тест SVG-генерации считается неадекватным показателем интеллекта.
  • Упоминание OpenRouter как поддерживаемой платформы для тестирования множества моделей через Codex.

RustGPT: A pure-Rust transformer LLM built from scratch (github.com) 🔥 Горячее 💬 Длинная дискуссия

RustGPT

Трансформерная языковая модель, полностью написанная на Rust.

by amazonhut • 15 сентября 2025 г. в 09:47 • 357 points

ОригиналHN

#rust#transformers#machine-learning#ndarray#rand#cargo#gpu#backpropagation#github#llm

Комментарии (170)

  • Проект представляет собой реализацию LLM (языковой модели) на Rust "с нуля" как учебный эксперимент для понимания принципов работы.
  • Отмечается читаемость и лаконичность кода по сравнению с большими фреймворками вроде PyTorch/TensorFlow.
  • Обсуждаются технические детали реализации: использование констант из lib.rs, структура трансформерных блоков, применение крейтов ndarray, rand.
  • Поднимаются вопросы о данных для обучения: источник, объём (в проекте используется небольшой встроенный набор), возможности для непрерывного обучения.
  • Упоминаются проблемы и сложности: отладка backpropagation, отсутствие GPU-ускорения, потенциальная неэффективность реализации.
  • Высказываются мнения о экосистеме: преимущества cargo над "dependency hell" в Python, но и риски лёгкого включения зависимостей.
  • Обсуждаются возможные улучшения: добавление численного тестирования градиентов, лицензии, GPU-акселерация, бенчмарки.
  • Проект сравнивают с другими аналогичными реализациями на Rust и Zig, а также с кодом, сгенерированным ИИ.
  • Отмечается впечатляющая скорость генерации первого токена и простота запуска (cargo run).

A critique of package managers (gingerbill.org)

Пакетные менеджеры — зло

Пакетные менеджеры автоматизируют ад зависимостей: скачивают пакет → его зависимости → зависимости зависимостей… и ты в аду. Вручную хотя бы думаешь: «а надо ли?»

Большинство языков не знают, что такое «пакет», поэтому менеджер сам его придумывает. В итоге появляются «менеджеры менеджеров» (npm, yarn, pnpm…).

Языки с толстой стандартной библиотекой (Go, Odin) откладывают ад: 90 % задач решаются без сторонних пакетов.

Каждая зависимость — это долг: баги, security, поддержка. Мы взяли SDL2 — и год убили на чужие баги; проще написать своё, чем обновиться до SDL3.

Доверие к случайному коду из интернета — социальная болезнь программистов.

by gingerBill • 08 сентября 2025 г. в 12:18 • 89 points

ОригиналHN

#npm#yarn#pnpm#cargo#go#odin#sdl2#dependency-management#package-managers#vendor

Комментарии (143)

  • Критика менеджеров пакетов сводится к тому, что они «автоматизируют ад зависимостей», скрывая от разработчика реальные издержки и риски.
  • Автор предлагает вручную копировать и фиксировать нужные версии библиотек, чтобы осознанно контролировать, что именно попадает в проект.
  • Оппоненты считают идею регрессом: ручное управление не масштабируется, тормозит разработку и не решает проблему транзитивных зависимостей.
  • Поддержка Cargo, npm и прочих инструментов признаётся необходимой, но критикуется культура «микро-зависимостей» и отсутствие вендоринга.
  • Компромисс видят в строгом вендоринге (Google), фиксации версий, feature-gates и использовании «batteries-included» стандартных библиотек (Go).

Unexpected productivity boost of Rust (lubeno.dev) 🔥 Горячее 💬 Длинная дискуссия

Rust повышает производительность разработки, несмотря на сложность.
Ключевые факторы:

  • Жёсткий компилятор ловит ошибки до запуска, уменьшая время отладки.
  • Модель владения устраняет гонки и утечки памяти, снижая количество багов.
  • Инструменты: Cargo, Clippy, rustfmt и rust-analyzer ускоряют цикл «написание → проверка → запуск».
  • Сообщество предлагает качественные крейты и быструю помощь.
  • Производительность кода сравнима с C/C++, но без segfault и UB.

В итоге меньше времени тратится на отладку, больше — на новые функции.

by bkolobara • 27 августа 2025 г. в 15:48 • 479 points

ОригиналHN

#rust#cargo#clippy#rustfmt#rust-analyzer#typescript#haskell#ocaml#dom

Комментарии (433)

  • Автор статьи рассказал, как Rust позволяет безболезненно рефакторить большие кодовые базы благодаря строгой типизации и проверкам компилятора.
  • Многие участники согласились, что статическая типизация (Rust, Haskell, OCaml-подобные языки) повышает уверенность при изменениях, особенно в многолюдных проектах.
  • Часть комментаторов считает сравнение с TypeScript «нечестным»: TS компилируется в JS и наследует его недостатки, а приведённый баг с window.location.href — это особенность DOM, а не языка.
  • Некоторые отметили, что Rust тоже не идеален: async/синхронные блокировки, медленная компиляция и «множество способов сделать одно и то же» могут снижать удобство.
  • Общий вывод: преимущество Rust в безопасности и рефакторинге особенно заметно на больших проектах, но язык требует времени на изучение и не всегда лучше «классических» статически типизированных альтернатив.

Show HN: Doxx – Terminal .docx viewer inspired by Glow (github.com)

doxx — утилита для просмотра содержимого .docx прямо в терминале.
Быстро, безопасно, без MS Office.

  • Установка
    cargo install doxx

  • Использование

    • Просмотр: doxx file.docx
    • Извлечение текста: doxx --text file.docx > out.txt
    • Показ метаданных: doxx --meta file.docx
  • Особенности

    • Чистый Rust, нет внешних зависимостей.
    • Поддержка кириллицы, таблиц, списков.
    • Режим «только чтение» — файлы не изменяются.

by w108bmg • 17 августа 2025 г. в 19:52 • 223 points

ОригиналHN

#rust#terminal#docx#tui#cargo#ooxml#cli#github

Комментарии (57)

  • Пользователи высоко оценили скорость и полезность TUI-утилиты для просмотра docx, но почти все согласились: название «doxx» вызывает негативные ассоциации с doxxing и требует смены.
  • Ключевое требование — любые «AI-фичи» должны быть полностью опциональными или вынесены в отдельный проект, иначе инструмент запретят в корпоративных и юридических средах.
  • Популярные пожелания: Docker-образ, бинарники для Windows, поддержка Track Changes/метаданных, отображение картинок через kitty/sixel, а также возможность «cat+grep» без промежуточных конвертаций.
  • Некоторые предложили использовать pandoc, LibreOffice или OOXML-Validator как дополнительные инструменты, а автор подтвердил, что скоро появятся релизы и улучшенная документация.

I made a real-time C/C++/Rust build visualizer (danielchasehooper.com) 🔥 Горячее

Я написал What the Fork — кроссплатформенный визуализатор сборки C/C++ (и не только).
Запуск: wtf make, wtf cargo build, wtf gradle build, wtf -x для Xcode и т.д.

Инструмент показывает все процессы, включая скрытые вызовы ld, и ищет типичные проблемы:

  • отсутствие -j у make,
  • однопоточная компиляция,
  • повторяющиеся cmake/make-шаги,
  • непараллельные CI-сборки.

Как работает
Сборка = дерево команд. Чтобы увидеть всё, ловим системные вызовы fork/exec/exit:

  • macOS — Endpoint Security API,
  • Linux — ptrace,
  • Windows — Event Tracing (самое мерзкое API).

Что уже нашли

  • cargo собирал зависимость одним потоком вместо 10× ускорения.
  • ninja при сборке LLVM держит 12 задач на 10 ядрах — почти идеал.
  • CMake 85 раз подряд вызывает xcode-select, sw_vers, cmake/make → clang, не используя параллелизм.

Инструмент открыт для тестов — попробуйте на своём проекте.

by dhooper • 14 августа 2025 г. в 16:06 • 389 points

ОригиналHN

#c#c++#rust#make#cargo#cmake#ninja#llvm#macos#linux

Комментарии (82)

  • Пользователи восторженно реагируют на новый визуализатор сборки, особенно те, кто застрял на CMake/GCC/Make без clang/ninja и не может понять, почему сборка тормозит.
  • Просят сразу показать GIF-демонстрацию под заголовком статьи и спрашивают, будет ли macOS-версия и открытый код.
  • Некоторые делятся опытом: strace/dtruss, ninjatracing, vcperf, cargo --timings, Instruments и другие инструменты уже решали похожие задачи.
  • Предложения расширить функциональность: добавить flame-графы процессов, поддержку fork(), интеграцию с Bazel Build Event Protocol, оценку «осталось времени» по историческим данным.
  • Отдельные комментарии касаются маркетинга (сменить название), сравнения с VS/Xcode, а также шуток про TEEP/OEE завода и «LLVM, завари кофе».

We shouldn't have needed lockfiles (tonsky.me) 💬 Длинная дискуссия

Представьте, вы пишете проект и вам нужна библиотека — назовем ее libpupa.

Вы находите текущую версию 1.2.3 и добавляете в зависимости: "libpupa": "1.2.3" Автор libpupa 1.2.3 в свою очередь зависел от liblupa версии 0.7.8 и записал это: "liblupa": "0.7.8" То есть libpupa 1.2.3 навсегда зависит от liblupa 0.7.8. Алгоритм разрешения зависимостей простой и детерминированный: берем версии верхнего уровня, затем версии их зависимостей, и так далее. Достаточно указать только верхние уровни — транзитивные получатся одинаковыми всегда. Зачем отдельный lockfile?

Но люди изобрели lockfile из‑за диапазонов версий. Диапазоны делают сборку зависимой от времени: сегодня вы получите liblupa 0.7.8, через 10 минут — 0.7.9. Это определяется не при публикации, а при сборке: вы можете подтянуть версию, которой не существовало на момент выпуска libpupa 1.2.3. Откуда автор libpupa знает, что будущая 0.7.9 не сломает его код? Семантическое версионирование — это лишь намек, не гарантия.

И смешно то, что эти диапазоны все равно «замораживают» в lockfile, и вы не получаете предполагаемой пользы. «Перегенерируй lockfile и обновись» — это ничем не отличается от обновления верхнеуровневых зависимостей. «Lockfile решает конфликты версий?» — нет: библиотека либо работает с новой версией, либо нет; запись «0.7.*» не помогает — все равно нужно выбрать рабочую версию.

«Но раз lockfile существует, значит, нужен!» — не обязательно. Пример: Maven. Экосистема Java 20 лет обходится без lockfile, при этом тянет сотни библиотек — и все детерминировано.

Вывод: lockfile усложняет без достаточных причин. Менеджеры зависимостей могут работать без него.

UPD: В Maven при конфликте транзитивных зависимостей выбирается версия, ближайшая к корню. Это детерминированно и позволяет переопределять версии. Если вышла d 2.1 с патчами безопасности, добавьте ее в корень — она и будет выбрана, не дожидаясь обновлений у всех. Если автоматически брать самую большую версию, вы потеряете возможность переопределения.

by tobr • 06 августа 2025 г. в 15:33 • 133 points

ОригиналHN

#dependency-management#versioning#rust#java#go#scala#maven#cargo

Комментарии (267)

  • Обсуждение крутится вокруг необходимости lock-файлов и версионирования: одни считают, что фиксированные версии и детерминированные алгоритмы достаточно, другие настаивают, что lock-файлы критичны для воспроизводимости и безопасности.
  • Приводят примеры из экосистем Maven/Java, Go (MVS), Cargo/Rust, .NET, Scala: у каждого свои компромиссы; даже при детерминированном резолве сеть/репозитории делают сборки недетерминированными без lock-файлов и хэшей.
  • Аргументы за версии-диапазоны: автоматическое получение патчей безопасности без вмешательства авторов верхнеуровневых библиотек; но это ломается при конфликтующих транзитивных зависимостях и несовместимых API/ABI.
  • Много комментариев о том, что lock-файлы особенно нужны приложениям (прод, стейджинг, аудит), а для библиотек — меньше, но всё равно полезны из-за пересборок и целостности (хэши артефактов).
  • Подчёркивают проблемы разных языков: в компилируемых — типы из разных версий несовместимы; в JS Node могут сосуществовать несколько версий, но это не решает безопасность/детерминизм.
  • Некоторые отмечают, что главная путаница — не в lock-файлах, а в культуре семвера, централизованных репозиториях и UX инструментов; предлагают BOM/snapshot-подходы и периодические обновления с тестами/реновейтом.
  • Отдельная ветка критикует дизайн сайта с анимированными иконками, мешающими чтению.