Libghostty is coming 🔥 Горячее 💬 Длинная дискуссия
Разработчик Mitchell Hashimoto анонсировал libghostty — библиотеку для встраивания полнофункционального терминала в любые приложения. Первым компонентом станет libghostty-vt: легковесная библиотека без зависимостей (включая libc) для парсинга терминальных последовательностей и управления состоянием терминала. Она извлечена из ядра Ghostty и предлагает оптимизированную обработку Unicode, поддержку SIMD и совместимость с продвинутыми протоколами вроде Kitty Graphics.
Проблема в том, что многие проекты (редакторы, веб-консоли, хостинги) реализуют эмуляцию терминала с нуля, часто с ошибками и неполной функциональностью. Libghostty-vt устраняет эту избыточность, предоставляя единое корректное и быстрое решение. Библиотека будет портирована на macOS, Linux, Windows, embedded-устройства и WASM, что шире, чем охват самого Ghostty.
Комментарии (239)
- Пользователи высоко оценивают Ghostty за его производительность, минималистичный дизайн и поддержку Zig, но отмечают отсутствие некоторых ключевых функций, таких как поиск (Cmd+F) и проблемы с рендерингом шрифтов.
- Многие выражают восхищение разработчиком Mitchell Hashimoto, его предыдущими проектами (Vagrant) и его подходом к созданию простых и эффективных систем.
- Анонс библиотеки libghostty вызвал интерес для использования в embedded-сценариях (игры, кастомные приложения, веб-терминалы) и как потенциальная замена существующим библиотекам.
- Некоторые пользователи столкнулись с проблемами совместимости, особенно с tmux и графическими протоколами, что мешает им полностью перейти с iTerm2 или других терминалов.
- Обсуждаются технические детали, такие как лицензирование (MIT vs LGPL), поддержка Unicode и сравнение с другими терминалами (Kitty, Alacritty, WezTerm).
In Defense of C++ 💬 Длинная дискуссия
В защиту C++
Почему C++ остаётся мощным и актуальным языком программирования в современном технологическом ландшафте.
Репутация C++
C++ часто критикуют за сложность, крутую кривую обучения и способность позволить разработчикам не просто выстрелить себе в ногу, но и оторвать всю ногу. Но выдерживают ли эти критики проверку?
В этом посте я постараюсь разобрать некоторые распространённые критические замечания и представить сбалансированный взгляд на сильные и слабые стороны языка.
C++ «сложен»
C++ действительно сложный язык с огромным набором возможностей. Для любой задачи есть дюжина способов её решения, каждый со своими компромиссами. Но нужно ли глубокое понимание языка, чтобы выбрать правильный подход?
Не совсем. Преждевременная оптимизация — корень всех зол. В C++ можно писать прекрасный код, не беспокоясь о сложных функциях языка. Можно создавать простой, читаемый и поддерживаемый код без шаблонов, перегрузки операторов и других продвинутых возможностей.
Не стоит зацикливаться на «лучшем» подходе — лучше сосредоточьтесь на написании понятного кода. Если он читаем, всё будет в порядке.
C++ «устарел»
C++ очень стар — он вышел в 1985 году. Но означает ли это, что он устарел?
Ни в коем случае. C++ активно развивается уже более 40 лет. Последняя версия стандарта, C++20, добавила множество новых функций, а C++23 расширил возможности стандартной библиотеки, концепций, диапазонов и сопрограмм, делая язык более мощным и выразительным.
C++ остаётся одним из самых widely используемых языков с огромной экосистемой библиотек и инструментов. Он применяется в играх, высокопроизводительных вычислениях и embedded-системах. Многие популярные приложения написаны на C++.
Язык не устарел — чтобы утверждать обратное, придётся сильно извратить определение «устаревшего».
C++ «небезопасен»
А вот и главный аргумент. Да, я сравню с Rust, поскольку его часто называют «безопасным» языком, который должен заменить C++.
Переписывание кодовых баз C++ на Rust всегда даёт более безопасные результаты.
Многие компании сообщают об улучшении безопасности и уменьшении количества ошибок после перехода на Rust.
Но связано ли это именно с Rust? Отчасти да. Однако главный фактор в том, что любое переписывание существующей кодовой базы даст лучшие результаты, чем оригинал.
При переписывании вы можете переосмыслить архитектуру, исправить ошибки и улучшить качество кода. Вы используете уроки, извлечённые из предыдущей реализации, и исправляете проблемы, которые было сложно решить в старом коде.
Представьте, что вы построили сарай. Он был шатким, вы не знали правильных методов соединения дерева, поэтому были проблемы с структурной целостностью и протекающей крышей. После того как вы научились строить лучше, вы можете перестроить сарай уже без этих проблем. Но это не значит, что дерево — плохой материал. Это значит, что вы стали лучше строить.
Комментарии (261)
- C++ и C полагаются на навыки и дисциплину разработчиков вместо автоматических проверок безопасности, что часто приводит к уязвимостям в больших проектах.
- Сложность C++ считается чрезмерной и архаичной, многие функции языка (шаблоны, перегрузка операторов) сложны для понимания и неизбежны в реальных проектах.
- Безопасность памяти в C++ проблематична даже для опытных разработчиков, в отличие от языков с автоматической проверкой, таких как Rust.
- Идиоматичный C++ сильно отличается от C, и попытки писать на C++ «как на C» противоречат современным практикам и стандартам.
- Переписывание кода с C++ на Rust часто повышает безопасность и удобство сопровождения, но обратный процесс сложнее и рискованнее.
- C++ останется важным языком из-за его распространённости в legacy-системах и критичных к производительности областях.
- Инструменты и экосистема C++ (пакетные менеджеры, форматтеры) часто считаются устаревшими по сравнению с современными языками.
Run Erlang/Elixir on Microcontrollers and Embedded Linux
GRiSP – три стека для запуска Erlang/Elixir на встраиваемых системах:
- GRiSP Metal – BEAM на RTEMS, 16 МБ ОЗУ, реальное время, прямой доступ к железу.
- GRiSP Alloy – BEAM на Buildroot-Linux RT, несколько VM, приоритеты и привязка к ядрам.
- GRiSP Forge – то же, но на Yocto, для долгих жизненных циклов и кастомных BSP.
GRiSP-io – облачная платформа для OTA-обновлений, мониторинга и масштабного управления устройствами.
Преимущества: открытый код, надёжность BEAM, минимальные задержки, масштабируемость от прототипа до флота.
Комментарии (48)
- Участники спорят, считать ли 16 МБ «MCU-классом»: традиционные микроконтроллеры имеют ≤1 МБ, но современные ESP32 и NXP i.MX 6UL уже выходят за эти рамки.
- GRISP — это BEAM-платформа поверх RTEMS для «мягкого» реального времени, в отличие от Nerves (BEAM на минимальном Linux).
- Пользователи отмечают удобство модели акторов и горячей замены кода, но сомневаются в приоритетах процессов и строгих гарантиях latency.
- Для устройств с КБ-объёмом памяти предложили AtomVM; 16 МБ пока выше среднего, но быстро дешевеет.
- На «железе» 90-х Erlang/Elixir запустится, если ОЗУ ≥16 МБ; сама BEAM требовала ещё меньше.
Walkie-Textie Wireless Communicator
- Walkie-Textie – беспроводной текстовый передатчик
- AVR128DA32 Feather – плата на AVR128DA32
- Tiny Time 2 – часы
- LED Probe – светодиодный зонд
- Minimal RP2040 – компактная плата RP2040
2025
- NeoPixel-драйвер на аппаратуре AVR
- Walkie-Textie
- AVR128DA32 Feather
- LED Probe
- Dot-Matrix часы
- TinyCard Game Maker
- Prime Time
2024
- 2-битный компаратор
- PCB дисплея бегущей строки
- Плавный большой текст
- Дисплей бегущей строки
- Sound Lab – примеры звуков
- Sound Lab – аналоговый синтезатор
- Logic Lab 1G
- Secret Maze 2
- Логические вентили через Event System
- RA4M1 Nano
- Silver Dollar Game
2023
- Silver Dollar Game
- Lisp Badge LE
- CAN Bus Monitor
- Logic Lab – ответы
- Logic Lab
- I2S Speaker для QT Py
- Adjustable Load
- Harder Number Maze
- Power Deliverer с монитором тока
- Tiny UPDI-HV программатор
2022
- Number Maze Game
- Minimal GIF Decoder
- Lisp Star
- Графические аналоговые часы
- ATtiny 2-Series
- Power Deliverer
- Заливка четырёхугольников и треугольников
- Чтение с TFT-дисплея
- I2C SD-Card модуль (PCB и модуль)
- Библиотека монохромного дисплея
- Трёхканальный графопостроитель
- Файловое хранилище для Arduino
- TFT Display Backpack
- Tiny TFT Graphics Library 2
- О байтах и выводах
- Tiny I2C для всех AVR
- Minimal RP2040 Board
- Печать на Serial LED Display
- 16 LEDs Kishi Puzzle
- Twinkling Pendant
- Morse Code Pendant
- Управление RGB-лентой одной функцией
- 16 LEDs – новый пазл
2021
- Таймер на Arduino Uno/Zero
- AM передатчик азбуки Морзе
- 16 LEDs Puzzle
- Low-Power LCD часы
- Измерение собственного напряжения питания
- Частотомер 100 МГц
- Pocket Op Amp Lab (PCB, Cookbook, Lab)
- Frequency Divider через CCL
- I2C Detective
- Five LEDs Puzzle (решение и PCB)
2020
- Compact TFT Graphics Library
- Five LEDs Puzzle
- Frequency Probe
- Combination Lock через CCL
- Diffusion Clock
- Smooth Big Text
- Спрайты для Wio Terminal
- Скриншоты с TFT-дисплея
- Спрайты для PyGamer/PyBadge
- Чтение дисплея PyBadge
- Minimal ATmega4809 на макетке
- Big Time
- Four Sample Player
- Mega Tiny Time Watch
2019
- Восьмисимвольный дисплей
- Праздничный конкурс
- UPDI Programmer Stick
- Новый ATtiny Low Power
- Nano Current Meter
- ATtiny под Lisp
- Minimal I2C для новых AVR
- Старт с новыми ATtiny
- Visible Lisp Computer
- Simple DataFlash Board
- Magic 3D Clock
- Tiny TFT Graphics Library
- Illuminated Button Matrix
- Двухзначный термометр
- Minimal ATSAMD21 (2 варианта)
- Tiny Thermocouple Thermometer
- 12 ШИМ-выходов на ATtiny85
- Tiny Function Generator PCB
- ATtiny10 Thermometer (PCB и модуль)
- Lisp Badge
2018
- ATtiny85 Weather Station
- Widget Dashboard
- Tiny MIDI Player
- Colour Graphics Library
- I2C GPS Module (PCB и модуль)
- Tiny Terminal 2
- Tiny Function Plotter
- Simple LCD Character Display
- Alcohol Unit Counter
- Tiny Machine-Code Monitor
- 20-клавишный интерфейс на одном входе
- Programmable Signal Generator
- Minimal Tiny I2C Routines
- ATtiny85 20 МГц внутренний клок
- ATtiny10 POV Pendant
- IR Remote Wand
- IR Remote Control Detective
- Harmonic Function Generator
- Tiny Graphics Library
Комментарии (109)
- Устройство на ATtiny814 с LoRa-клавиатурой жалуются на короткую работу от AAA-батареек, отсутствие повторной отправки и усталость при наборе текста.
- Пользователи сравнивают его с Cybiko, Meshtastic-устройствами (T-Deck, RAK) и GMRS-рациями, обсуждают реальные дальности LoRa: до 100 км в горах и на стратостате.
- Поднимаются идеи «домашней» сотовой сети через OpenBTS/Yate, но она нелегальна; альтернатива — локальный Wi-Fi + Briar/Mumble.
- Для пещерных спасений хотят радио, проходящее 200 м скалы (через низкие частоты).
- Кто-то мечтает встроить LoRa прямо в смартфоны, но считает, что коммерция и регуляторы не позволят.
Show HN: Bolt – A super-fast, statically-typed scripting language written in C
bolt — компактный встраиваемый язык на C:
- высокая скорость, реал-тайм, статическая типизация
- целевые задачи: скрипты в играх, IoT, системы с ограниченными ресурсами
Основное
- репозиторий:
Beariish/bolt - лицензия: MIT
- компилятор ~150 КБ, зависимости отсутствуют
Возможности
- синтаксис C-подобный, сборка мусора без пауз
- FFI к C «из коробки»
- компиляция AOT/JIT, кроссплатформенность (x86, ARM, RISC-V)
Быстрый старт
git clone https://github.com/Beariish/bolt
cd bolt && make
./bolt examples/hello.bt
import std.io;
fn main() {
io.println("Привет, bolt!");
}
Комментарии (82)
- Пользователи одобрили идею быстрого статически типизированного скрипт-языка для встраивания, но сразу спутали «embedded» с «embedded-systems» и отметили отсутствие поддержки ARM/32-бит и отказ от целочисленных типов.
- Критика синтаксиса
import a, b from module: неудобен для автокомплита и повышает риск конфликтов имён; автор готов добавить псевдонимы. - Сомнения в заявленной скорости: несколько человек привели замеры, где Bolt проигрывает LuaJIT и даже обычной Lua 5.4.
- Подняты вопросы о полноте типовой системы (генерики, полиморфизм), отладке, LSP, сборке мусора и долгосрочной поддержке.
- Плюсы: понятный C/Python-подобный синтаксис, удобный Result-тип, потенциальная замена Lua в играх и редакторах.