Дрю ДеВолт объясняет, что веб-интерфейс Github.com требует множества лишних действий. Гораздо эффективнее использовать консольный почтовый клиент, отправляя тот же пулл-реквест одной командой из консоли
Американский разработчик Дрю ДеВолт (Drew DeVault) известен как создатель и исполнительный директор платформы для хостинга проектов SourceHut, которую Фонд сохранения свободы ПО выбрал как альтернативу майкрософтовскому сервису GitHub (наряду с CodeBerg) в рамках кампании Give Up GitHub по уходу свободных проектов с этого коммерческого хостинга, задача которого — генерировать продажи Copilot.
ДеВолт также известен как автор нового языка системного программирования Hare, который похож на С, только лучше и проще его.
Дрю ДеВолт — один из ценных и опытных системных программистов опенсорсного движения, автор более десятка полезных инструментов и системных утилит.
О его личной жизни известно мало. Живёт в Филадельфии, выступает на компьютерных конференциях по всему миру, страдает от выгорания — довольно типичная история для разработчиков и мейнтейнеров опенсорсных проектов.
Парольный менеджер 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, в то время как SourceHub однажды упал на целую неделю из-за его тривиальной архитектурной ошибки) до сих пор получает тонну хейта и даже DDoS-атаки.
Для SourceHut поднята гораздо более интересная инфраструктура: шесть выделенных серверов в двух локациях, в сумме 96 ядер, полтерабайта RAM и 60 ТБ дисков.
В качестве браузера Дрю ДеВолт использует заточенный на клавиатуру qutebrowser с минимальным GUI. Крайне удобная штука:
Любит текстовый редактор vim, IRC-клиент WeeChat, почтовый клиент mutt, консоль fish (пока его собственная консоль mrsh не будет дописана)
▍ Низкоуровневый язык Hare
В апреле 2022 года Дрю ДеВолт представил новый язык системного программирования 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 века» представлен разработчик, о котором нет статьи в Википедии.
Выдающиеся программисты 21 века. Предыдущие статьи