Дрю ДеВолт — автор языка Hare и платформы кодохостинга SourceHut

от автора

Дрю ДеВолт объясняет, что веб-интерфейс Github.com требует множества лишних действий. Гораздо эффективнее использовать консольный почтовый клиент, отправляя тот же пулл-реквест одной командой из консоли

Американский разработчик Дрю ДеВолт (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 века» представлен разработчик, о котором нет статьи в Википедии.

© 2024 ООО «МТ ФИНАНС»

Telegram-канал со скидками, розыгрышами призов и новостями IT 💻


ссылка на оригинал статьи https://habr.com/ru/articles/863866/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *