Американский разработчик Дрю ДеВолт (Drew DeVault) известен как создатель и исполнительный директор платформы для хостинга проектов SourceHut, которую Фонд сохранения свободы ПО выбрал как альтернативу майкрософтовскому сервису GitHub (наряду с CodeBerg) в рамках кампании Give Up GitHub по уходу свободных проектов с этого коммерческого хостинга, задача которого — генерировать продажи Copilot.
ДеВолт также известен как автор нового языка системного программирования Hare, который похож на С, только лучше и проще его.
Дрю ДеВолт — один из ценных и опытных системных программистов опенсорсного движения, автор более десятка полезных инструментов и системных утилит.
О его личной жизни известно мало. Живёт в Филадельфии, выступает на компьютерных конференциях по всему миру, страдает от выгорания — довольно типичная история для разработчиков и мейнтейнеров опенсорсных проектов.
▍ Основные проекты
- sway — оконный менеджер для X11/Wayland,
- wlroots — библиотека композитора для Wayland,
- sr.ht — набор опенсорсных программ для управления разработкой ПО, включая платформу хостинга кода SourceHut,
- scdoc — генератор манов, т. е. страниц справочного руководства,
- aerc — консольный почтовый клиент,
- chopsui — набор инструментов для реализации UI,
- TrueCraft — реализация клиента MineCraft,
- KnightOS — операционная система для программируемых калькуляторов,
- Patchy — менеджер торрентов,
- Redict — свободный форк Redis. Интересно, что автор решил захостить его на платформе Codeberg, которая составляет конкуренцию его SourceHut,
- Парольный менеджер Himitsu: «простое ядро, на котором можно построить расширяемую экосистему интеграций для работы с любыми секретами»,
- QBE — бэкенд компилятора, цель которого — обеспечить 70% производительности промышленных компиляторов при 10% кода (в частности, здесь 14 000 строк кода на С99). «Ограничение по размеру позволяет QBE сосредоточиться на главном и не вступать на бесконечный путь убывающей отдачи», — сказано на официальном сайте. По сути, является альтернативой LLVM.
Компилятор cproc на базе QBE по производительности не уступает полноценным «большим» компиляторам:
Вдобавок, Дрю ДеВолт внёс существенный вклад во многие другие проекты, включая mrsh, Alpine Linux, git.
В качестве основной рабочей станции использует обычный Core i7-3770K на 3,5 ГГц с 16 ГБ RAM и 4 ТБ дисков (информация за 2019 год, с тех пор почти наверняка сделал апгрейд хотя бы RAM), конфигурация с четырьмя мониторами, один 4К, один вертикальный, два ноутбука ThinkPad X200, в доме установлены несколько Raspberry Pi (DNS, файл-дроппер (вероятно, торренты — прим. авт.)). Основная операционка, естественно, Alpine Linux, оконный менеджер — sway, его собственный проект. Приятно создавать рабочие инструменты и затачивать их именно так, как удобно лично тебе. За свои принципы, выбор инструментов, платформы хостинга кода, языка программирования и старые глупые комментарии по некоторым вопросам в сфере свободного ПО (говорят, он оставлял комментарии вроде «github sucks, go migrate to sourcehut» на разных форумах после незначительных сбоев GitHub, в то время как SourceHut однажды упал на целую неделю из-за его тривиальной архитектурной ошибки) до сих пор получает тонну хейта и даже DDoS-атаки.
Для SourceHut поднята гораздо более интересная инфраструктура: шесть выделенных серверов в двух локациях, в сумме 96 ядер, полтерабайта RAM и 60 ТБ дисков.
В качестве браузера Дрю ДеВолт использует заточенный на клавиатуру qutebrowser с минимальным GUI. Крайне удобная штука:
Любит текстовый редактор vim, IRC-клиент WeeChat, почтовый клиент mutt, консоль fish (пока его собственная консоль mrsh не будет дописана)
▍ Низкоуровневый язык Hare
В апреле 2022 года Дрю ДеВолт представил новый язык системного программирования Hare (переводится как «Заяц», возможно, назван по некоей анималистической традиции с «Питоном»). Язык похож на С, только лучше и проще.
«Hello world!» на языке Hare
ДеВолт говорит, что Hare предназначен для быстрого написания стабильного и надёжного кода. Что касается «безопасности» в работе с памятью и проч., то здесь есть несколько преимуществ по сравнению с С, среди них ДеВолт называет «проверяемый доступ к фрагментам и массивам, исчерпывающий switch и match, типы нулевых указателей, меньше неопределённого поведения, отсутствие строгих алиасов (псевдонимов) для указателей, меньше агрессивных оптимизаций и так далее. В коде на Hare вероятность таких ошибок гораздо ниже, чем на C». Ранее в блоге он перечислял и другие преимущества перед С.
Основные характеристики языка: статическая типизация, ручное управление памятью и высокая скорость выполнения, плюс несколько интересных функций и улучшений по сравнению с С. Создатели предлагают использовать Hare для компиляторов, операционных систем, системных инструментов, сетевого программного обеспечения и других низкоуровневых и высокопроизводительных решений.
Дрю ДеВолт приводит свой любимый пример: программа, которая вычисляет собственный хэш SHA-256:
use crypto::sha256; use encoding::hex; use fmt; use hash; use io; use os; export fn main() void = { const hash = sha256::sha256(); const file = os::open("main.ha")!; defer io::close(file)!; io::copy(&hash, file)!; let sum: [sha256::SIZE]u8 = [0...]; hash::sum(&hash, sum); hex::encode(os::stdout, sum)!; fmt::println()!; };
Hare основан на бэкенде компилятора QBE, который обеспечивает хорошую производительность при небольшом объёме.
У стандартной библиотеки небольшой, фиксированный объём, но она поддерживает множество вариантов использования без всяких зависимостей. Состав библиотеки:
- Набор криптографических инструментов.
- Поддержка сетей.
- Всеобъемлющие операции с датой/временем.
- Абстракции ввода-вывода и файловой системы.
- Примитивы Unix, такие как poll, fnmatch и glob.
- Расширенные регулярные выражения POSIX.
- Парсер и программа проверки типов Hare.
«Стандартная библиотека Hare — это новый старт для системного программирования без унаследованных проблем POSIX и libc, — пишет Дрю — Программы Hare не связываются с libc по умолчанию».
К моменту официального анонса в 2022 году разработка Hare продолжалась два с половиной года, за это время на нём были написаны микроядро Helios для систем x86_64 и парольный менеджер Himitsu.
Некоторые независимые специалисты по системным языкам указывали на ряд недостатков в Hare, то же время ставя его в ряд с другими интересными альтернативами С, такими как Rust, Zig и Myrddin. Правда, с момента написания того критического обзора Hare серьёзно доработан.
Спустя два с половиной года после официального анонса Hare не получил серьёзного распространения. Но что такое два года для системного языка? Всё ещё впереди. Последняя версия 0.24.2 вышла в июле, разработка в самом разгаре.
На самом деле низкоуровневые языки вроде С незаменимы для написания системных и высокопроизводительных, оптимизированных приложений, таких ОС и видеоигры. И кроме C/С++ у нас мало других инструментов такого типа, поэтому разработку в этой области можно приветствовать. Hare пытается улучшить C, оставаясь при этом очень простым языком, с гораздо лучшей обработкой ошибок, поддержкой массивов и слайсов, богатой стандартной библиотекой минимального размера, более краткими и мощными значениями возврата функций (через tagged unions), улучшенной безопасностью памяти и другими улучшениями, упомянутыми выше.
Пример типа tagged union в Hare (см. комментарий к типу signed
):
use bufio; use hare::ast; use hare::lex; use hare::parse; use hare::types; use io; use strings; type signed = (int | i8 | i16 | i32 | i64); // эквивалент: // type signed = (i64 | (i32 | (i16 | (i8 | int | int | int)))); type unsigned = (uint | u8 | u16 | u32 | u64); type integer = (...unsigned | ...signed); type floating = (f32 | f64); type numeric = (...integer | ...floating); type numeric_repr = struct { id: u32, union { _int: int, _i8: i8, _i16: i16, _i32: i32, _i64: i64, // ... }, }; export fn main() void = { const input = bufio::fixed(strings::toutf8("int"), io::mode::READ); const lexer = lex::init(&input, "<string>"); const _type = parse::_type(&lexer)!; defer ast::type_finish(&_type); const store = types::store(types::x86_64, null, null); defer types::store_free(store); const itype = types::lookup(store, &_type) as const *types::_type; const obj: numeric = 1337; const ptr = &obj: *numeric_repr; assert(ptr.id == itype.id); assert(ptr._int == 1337); };
С одной стороны, Дрю ДеВолт всем сердцем предан опенсорсу. С другой стороны, это довольно противоречивая личность. У некоторых может создаться впечатление, что «слишком раздутое эго» человека заставляет создавать собственные варианты, альтернативы и форки известных проектов (GitHub, язык C, Redis, LLVM и т. д.), словно у всех проектов один и тот же фатальный недостаток. Не говоря уже о резких высказываниях и комментариях, которые он не стесняется высказывать в своём блоге и других местах.
Впрочем, благодаря таким непримиримым энтузиастам и двигается вперёд индустрия СПО.
P. S. Интересно, что впервые в серии «Выдающиеся программисты 21 века» представлен разработчик, о котором нет статьи в Википедии.
- Джастин Танни
- Джей Фриман (saurik)
- Михал Залевски
- Джон Кармак: 1, 2
- Марк Руссинович
- Юрки Алакуйяла
- Андрей Карпаты
- Даниэль Стенберг, автор curl
- Колин Персиваль, автор tarsnap
- Джефф Дин
- antirez, автор СУБД Redis
- Оскар Толедо: потомственный волшебник
- Ральф Меркл: криптограф, крионик и теоретик молекулярной инженерии
- Чем сейчас занимается Фабрис Беллар
- Мигель де Икаса и его мечта — Linux на десктопах
- Давид Хейнемейер Ханссон (DHH): автор Ruby on Rails
- Карсон Гросс, создатель HTMX
- Клеман Лефевр, создатель Linux Mint
- Андреас Клинг, его операционная система SerenityOS и браузер Ladybird
- Джеффри Сновер и создание PowerShell
- Реймонд Хилл и его блокировщик uBlock Origin
- Ричард Столлман, автор GCC и Emacs
© 2024 ООО «МТ ФИНАНС»
Telegram-канал со скидками, розыгрышами призов и новостями IT 💻
ссылка на оригинал статьи https://habr.com/ru/articles/863866/
Добавить комментарий