- PVSM.RU - https://www.pvsm.ru -

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

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

Американский разработчик Дрю ДеВолт [4] (Drew DeVault) известен как создатель и исполнительный директор платформы для хостинга [5] проектов SourceHut [6], которую Фонд сохранения свободы ПО [7] выбрал как альтернативу майкрософтовскому сервису GitHub [8] (наряду с CodeBerg [9]) в рамках кампании Give Up GitHub [10] по уходу свободных проектов с этого коммерческого хостинга [5], задача которого — генерировать продажи Copilot.

ДеВолт также известен как автор нового языка системного программирования Hare, который похож на С, только лучше и проще его.

Дрю ДеВолт — автор языка Hare и платформы кодохостинга SourceHut - 2Дрю ДеВолт — один из ценных и опытных системных программистов опенсорсного движения, автор более десятка полезных инструментов и системных утилит.

О его личной жизни известно мало. Живёт в Филадельфии, выступает на компьютерных конференциях по всему миру, страдает от выгорания [11] — довольно типичная история для разработчиков и мейнтейнеров опенсорсных проектов.

▍ Основные проекты

  • sway [12] — оконный менеджер для X11/Wayland,
  • wlroots [13] — библиотека композитора для Wayland,
  • sr.ht [14] — набор опенсорсных программ для управления разработкой ПО, включая платформу хостинга [5] кода SourceHut [6],
  • scdoc [15] — генератор манов, т. е. страниц справочного руководства,
  • aerc [3] — консольный почтовый клиент,
  • chopsui [16] — набор инструментов для реализации UI,
  • TrueCraft [17] — реализация клиента MineCraft,
  • KnightOS [18] — операционная система для программируемых калькуляторов,
  • Patchy [19] — менеджер торрентов,
  • Redict [20] — свободный форк Redis. Интересно, что автор решил захостить его на платформе Codeberg [21], которая составляет конкуренцию его SourceHut,
  • Парольный менеджер Himitsu [22]: «простое ядро, на котором можно построить расширяемую экосистему интеграций для работы с любыми секретами»,

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

  • QBE [23] — бэкенд компилятора, цель которого — обеспечить 70% производительности промышленных компиляторов при 10% кода (в частности, здесь 14 000 строк кода на С99). «Ограничение по размеру позволяет QBE сосредоточиться на главном и не вступать на бесконечный путь убывающей отдачи», — сказано на официальном сайте. По сути, является альтернативой LLVM [24].
    Дрю ДеВолт — автор языка Hare и платформы кодохостинга SourceHut - 4

    Компилятор cproc [25] на базе QBE по производительности не уступает [26] полноценным «большим» компиляторам:

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

Вдобавок, Дрю ДеВолт внёс существенный вклад во многие другие проекты, включая mrsh [27], Alpine Linux [28], git [29].

В качестве основной рабочей станции использует обычный Core i7-3770K на 3,5 ГГц с 16 ГБ RAM и 4 ТБ дисков (информация за 2019 год [30], с тех пор почти наверняка сделал апгрейд хотя бы RAM), конфигурация с четырьмя мониторами, один 4К, один вертикальный, два ноутбука ThinkPad X200, в доме установлены несколько Raspberry Pi (DNS, файл-дроппер (вероятно, торренты — прим. авт.)). Основная операционка, естественно, Alpine Linux [28], оконный менеджер — sway [12], его собственный проект. Приятно создавать рабочие инструменты и затачивать их именно так, как удобно лично тебе. За свои принципы, выбор инструментов, платформы хостинга [5] кода, языка программирования и старые глупые комментарии по некоторым вопросам в сфере свободного ПО (говорят [31], он оставлял комментарии вроде "github sucks, go migrate to sourcehut" на разных форумах после незначительных сбоев GitHub, в то время как SourceHub однажды упал на целую неделю из-за его тривиальной архитектурной ошибки) до сих пор получает тонну хейта и даже DDoS-атаки [32].

Для SourceHut поднята гораздо более интересная инфраструктура: шесть выделенных серверов в двух локациях, в сумме 96 ядер, полтерабайта RAM и 60 ТБ дисков.

В качестве браузера Дрю ДеВолт использует заточенный на клавиатуру qutebrowser [33] с минимальным GUI. Крайне удобная штука:

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

Любит текстовый редактор vim [34], IRC-клиент WeeChat [35], почтовый клиент mutt [36], консоль fish [37] (пока его собственная консоль mrsh не будет дописана)

▍ Низкоуровневый язык Hare

В апреле 2022 года Дрю ДеВолт представил [38] новый язык системного программирования Hare [39] (переводится как «Заяц», возможно, назван по некоей анималистической традиции с «Питоном»). Язык похож на С, только лучше и проще.

Дрю ДеВолт — автор языка Hare и платформы кодохостинга SourceHut - 7
"Hello world!" на языке Hare [40]

ДеВолт говорит, что Hare предназначен для быстрого написания стабильного и надёжного кода. Что касается «безопасности» в работе с памятью и проч., то здесь есть несколько преимуществ по сравнению с С, среди них ДеВолт называет [41] «проверяемый доступ к фрагментам и массивам, исчерпывающий switch и match, типы нулевых указателей, меньше неопределённого поведения, отсутствие строгих алиасов (псевдонимов) для указателей, меньше агрессивных оптимизаций и так далее. В коде на Hare вероятность таких ошибок гораздо ниже, чем на C». Ранее в блоге он перечислял и другие преимущества перед С [42].

Основные характеристики языка: статическая типизация, ручное управление памятью и высокая скорость выполнения, плюс несколько интересных [43] функций [44] и улучшений по сравнению с С. Создатели предлагают использовать 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 [23], который обеспечивает хорошую производительность при небольшом объёме.

У стандартной библиотеки [45] небольшой, фиксированный объём, но она поддерживает множество вариантов использования без всяких зависимостей. Состав библиотеки:

  • Набор криптографических инструментов.
  • Поддержка сетей.
  • Всеобъемлющие операции с датой/временем.
  • Абстракции ввода-вывода и файловой системы.
  • Примитивы Unix, такие как poll, fnmatch и glob.
  • Расширенные регулярные выражения POSIX.
  • Парсер и программа проверки типов Hare.

«Стандартная библиотека Hare — это новый старт для системного программирования без унаследованных проблем POSIX и libc, — пишет [38] Дрю — Программы Hare не связываются с libc по умолчанию».

К моменту официального анонса в 2022 году разработка Hare продолжалась два с половиной года, за это время на нём были написаны микроядро Helios [46] для систем x86_64 и парольный менеджер Himitsu [22].

Некоторые независимые специалисты по системным языкам указывали на ряд недостатков [47] в Hare, то же время ставя его в ряд с другими интересными альтернативами С, такими как Rust, Zig и Myrddin. Правда, с момента написания того критического обзора Hare серьёзно доработан.

Спустя два с половиной года после официального анонса Hare не получил серьёзного распространения. Но что такое два года для системного языка? Всё ещё впереди. Последняя версия 0.24.2 [48] вышла в июле, разработка в самом разгаре.

На самом деле низкоуровневые языки вроде С незаменимы для написания системных и высокопроизводительных, оптимизированных приложений, таких ОС и видеоигры. И кроме C/С++ у нас мало других инструментов такого типа, поэтому разработку в этой области можно приветствовать. Hare пытается улучшить C, оставаясь при этом очень простым языком, с гораздо лучшей обработкой ошибок, поддержкой массивов и слайсов, богатой стандартной библиотекой минимального размера, более краткими и мощными значениями возврата функций (через tagged unions), улучшенной безопасностью памяти и другими улучшениями, упомянутыми выше [42].

Пример типа tagged union [44] в 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 и т. д.), словно у всех проектов один и тот же фатальный недостаток [49]. Не говоря уже о резких высказываниях и комментариях [50], которые он не стесняется высказывать в своём блоге и других местах.

Впрочем, благодаря таким непримиримым энтузиастам и двигается вперёд индустрия СПО.

P. S. Интересно, что впервые в серии «Выдающиеся программисты 21 века» представлен разработчик, о котором нет статьи в Википедии.

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

Автор: alizar

Источник [74]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/vim/404626

Ссылки в тексте:

[1] Image: https://habr.com/ru/companies/ruvds/articles/863866/

[2] объясняет: https://www.reddit.com/r/programming/comments/1atsobm/drew_devaults_entirely_emailbased_open_source/

[3] консольный почтовый клиент: https://git.sr.ht/%7Esircmpwn/aerc

[4] Дрю ДеВолт: https://drewdevault.com/

[5] хостинга: https://www.reg.ru/?rlink=reflink-717

[6] SourceHut: https://sr.ht/

[7] Фонд сохранения свободы ПО: https://sfconservancy.org/

[8] GitHub: https://github.com/

[9] CodeBerg: https://codeberg.org/

[10] Give Up GitHub: https://sfconservancy.org/GiveUpGitHub/

[11] страдает от выгорания: https://drewdevault.com/2023/05/01/2023-05-01-Burnout.html

[12] sway: https://swaywm.org/

[13] wlroots: https://github.com/swaywm/wlroots

[14] sr.ht: https://meta.sr.ht/

[15] scdoc: https://git.sr.ht/%7Esircmpwn/scdoc

[16] chopsui: https://www.pvsm.ruhttp://web.archive.org/web/20200916173159/https://github.com/ddevault/chopsui

[17] TrueCraft: https://github.com/ddevault/TrueCraft

[18] KnightOS: https://knightos.org/

[19] Patchy: https://web.archive.org/web/20150901083030/http://www.drewdevault.com/Patchy/

[20] Redict: https://redict.io/

[21] решил захостить его на платформе Codeberg: https://redict.io/posts/2024-03-22-redict-is-an-independent-fork/

[22] Himitsu: https://sr.ht/~sircmpwn/himitsu/

[23] QBE: https://c9x.me/compile/

[24] LLVM: https://llvm.org/

[25] cproc: https://sr.ht/~mcf/cproc/

[26] не уступает: https://archive.fosdem.org/2022/schedule/event/lg_qbe/attachments/slides/4878/export/events/attachments/lg_qbe/slides/4878/qbe.pdf

[27] mrsh: https://github.com/chaos/mrsh

[28] Alpine Linux: https://www.alpinelinux.org/

[29] git: https://git-scm.com/

[30] за 2019 год: https://usesthis.com/interviews/drew.devault/

[31] говорят: https://www.reddit.com/r/linux/comments/1bxwcfh/comment/kyfqbcd/

[32] тонну хейта и даже DDoS-атаки: https://drewdevault.com/2022/05/30/bleh.html

[33] qutebrowser: https://qutebrowser.org/

[34] vim: https://www.vim.org/

[35] WeeChat: https://weechat.org/

[36] mutt: http://www.mutt.org/

[37] fish: https://fishshell.com/

[38] представил: https://harelang.org/blog/2022-04-25-announcing-hare/

[39] Hare: https://harelang.org/

[40] Hare: https://harelang.org/tutorials/introduction/#breaking-down-hello-world

[41] называет: https://news.ycombinator.com/item?id=31151974

[42] другие преимущества перед С: https://harelang.org/blog/2021-02-09-hare-advances-on-c/

[43] интересных: https://harelang.org/tutorials/introduction/#using-yield

[44] функций: https://harelang.org/tutorials/introduction/#tagged-unions-in-depth

[45] стандартной библиотеки: https://docs.harelang.org/

[46] микроядро Helios: https://sr.ht/~sircmpwn/helios/

[47] указывали на ряд недостатков: https://tilde.team/~kiedtl/blog/hare/

[48] 0.24.2: https://harelang.org/blog/2024-07-13-hare-0.24.2-release/

[49] фатальный недостаток: http://lurklurk.com/%D0%A4%D0%B0%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BD%D0%B5%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D1%82%D0%BE%D0%BA

[50] резких высказываниях и комментариях: https://techrights.org/o/2023/06/30/generalisations-by-drew-devault/

[51] Джастин Танни: https://habr.com/ru/company/ruvds/blog/682150/

[52] Джей Фриман (saurik): https://habr.com/ru/company/ruvds/blog/688716/

[53] Михал Залевски: https://habr.com/ru/company/ruvds/blog/695386/

[54] 1: https://habr.com/ru/company/ruvds/blog/701556/

[55] 2: https://habr.com/ru/company/ruvds/blog/721150/

[56] Марк Руссинович: https://habr.com/ru/company/ruvds/blog/710268/

[57] Юрки Алакуйяла: https://habr.com/ru/company/ruvds/blog/713648/

[58] Андрей Карпаты: https://habr.com/ru/companies/ruvds/articles/728056/

[59] Даниэль Стенберг, автор curl: https://habr.com/ru/companies/ruvds/articles/733002/

[60] Колин Персиваль, автор tarsnap: https://habr.com/ru/companies/ruvds/articles/739392/

[61] Джефф Дин: https://habr.com/ru/companies/ruvds/articles/752206/

[62] antirez, автор СУБД Redis: https://habr.com/ru/companies/ruvds/articles/758112/

[63] Оскар Толедо: потомственный волшебник: https://habr.com/ru/companies/ruvds/articles/765074/

[64] Ральф Меркл: криптограф, крионик и теоретик молекулярной инженерии: https://habr.com/ru/companies/ruvds/articles/770556/

[65] Чем сейчас занимается Фабрис Беллар: https://habr.com/ru/companies/ruvds/articles/781922/

[66] Мигель де Икаса и его мечта — Linux на десктопах: https://habr.com/ru/companies/ruvds/articles/787860/

[67] Давид Хейнемейер Ханссон (DHH): автор Ruby on Rails: https://habr.com/ru/companies/ruvds/articles/795275/

[68] Карсон Гросс, создатель HTMX: https://habr.com/ru/companies/ruvds/articles/814193/

[69] Клеман Лефевр, создатель Linux Mint: https://habr.com/ru/companies/ruvds/articles/817327/

[70] Андреас Клинг, его операционная система SerenityOS и браузер Ladybird: https://habr.com/ru/companies/ruvds/articles/823778/

[71] Джеффри Сновер и создание PowerShell: https://habr.com/ru/companies/ruvds/articles/832744/

[72] Реймонд Хилл и его блокировщик uBlock Origin: https://habr.com/ru/companies/ruvds/articles/845576/

[73] Ричард Столлман, автор GCC и Emacs: https://habr.com/ru/companies/ruvds/articles/857666/

[74] Источник: https://habr.com/ru/companies/ruvds/articles/863866/?utm_campaign=863866&utm_source=habrahabr&utm_medium=rss