- PVSM.RU - https://www.pvsm.ru -
Американский разработчик Дрю ДеВолт [4] (Drew DeVault) известен как создатель и исполнительный директор платформы для
ДеВолт также известен как автор нового языка системного программирования Hare, который похож на С, только лучше и проще его.
Дрю ДеВолт — один из ценных и опытных системных программистов опенсорсного движения, автор более десятка полезных инструментов и системных утилит.
О его личной жизни известно мало. Живёт в Филадельфии, выступает на компьютерных конференциях по всему миру, страдает от выгорания [11] — довольно типичная история для разработчиков и мейнтейнеров опенсорсных проектов.
Компилятор cproc [25] на базе QBE по производительности не уступает [26] полноценным «большим» компиляторам:
Вдобавок, Дрю ДеВолт внёс существенный вклад во многие другие проекты, включая 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], его собственный проект. Приятно создавать рабочие инструменты и затачивать их именно так, как удобно лично тебе. За свои принципы, выбор инструментов, платформы
Для SourceHut поднята гораздо более интересная инфраструктура: шесть выделенных серверов в двух локациях, в сумме 96 ядер, полтерабайта RAM и 60 ТБ дисков.
В качестве браузера Дрю ДеВолт использует заточенный на клавиатуру qutebrowser [33] с минимальным GUI. Крайне удобная штука:
Любит текстовый редактор vim [34], IRC-клиент WeeChat [35], почтовый клиент mutt [36], консоль fish [37] (пока его собственная консоль mrsh не будет дописана)
В апреле 2022 года Дрю ДеВолт представил [38] новый язык системного программирования Hare [39] (переводится как «Заяц», возможно, назван по некоей анималистической традиции с «Питоном»). Язык похож на С, только лучше и проще.
"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] небольшой, фиксированный объём, но она поддерживает множество вариантов использования без всяких зависимостей. Состав библиотеки:
«Стандартная библиотека 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);
};
Впрочем, благодаря таким непримиримым энтузиастам и двигается вперёд индустрия СПО.
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
Нажмите здесь для печати.