Дрю ДеВолт (Drew DeVault), автор пользовательского окружения Sway, почтового клиента Aerc и платформы совместной разработки SourceHut, опубликовал выпуск языка программирования Hare 0.24.2 (номер версии образован как 0.YY.Q, где YY – две последние цифры года, а Q – номер квартала). Hare преподносится как язык системного программирования, близкий к языку Си, но проще, чем Си. Исходный код компилятора и инструментария распространяются под лицензией GPLv3, а код стандартной библиотеки под лицензией MPL (Mozilla Public License).
Язык оптимизирован для решения низкоуровневых задач, таких как разработка операционных систем, компиляторов, сетевых приложений и системных утилит, для которых требуется достижение максимальной производительности и полный контроль над выполнением. В языке применяется ручное управление памятью и статическая система типов, при которой каждой переменной явно должен быть присвоен определённый тип.
Для выполнения приложения поставляется минимальный runtime, а для разработки распространяется стандартная библиотека функций, предоставляющая доступ к базовым интерфейсам операционной системы, а также предлагающая функции для работы с типовыми алгоритмами, протоколами и форматами, включая средства для использования регулярных выражений и шифрования. Для разработки графических приложений развивается инструментарий hare-wayland, а также привязки для доступа к возможностям GTK, Vulkan, OpenGL, SDL2 и libui.
В новой версии:
- Добавлена поддержка операционной системы NetBSD (в дополнение к ранее поддерживаемым OpenBSD, FreeBSD и Linux).
- Добавлен синтаксис для определения циклов “for-each“, упрощающих перебор элементов массивов и срезов. let items = [1, 2, 3, 4, 5]; for (let item .. items) { fmt::println(item)!; };
- Предоставлена возможность определения необязательных параметров функций, значение по умолчанию которых задаётся во время определения функции. fn example(x: int, y: int = 34) void = { // … }; example(12); //эквивалентно вызову example(12, 34);
- Повышена производительность модуля bufio и связанных с ним API, использующих буферизированный ввод/вывод, таких как unix::resolvconf, unix::hosts и unix::passwd.
- В модуле “regex::” в регулярных выражениях предоставлена возможность использование шаблонов вида “(ha|py|sh)” для перечисления нескольких вариантов выбора.
- Добавлена поддержка разделяемой памяти (shm_open) и механизма memfd, позволяющего идентифицировать область памяти через передаваемый между процессами файловый дескриптор. Разделяемая память, которая может использоваться для межпроцессного и внутрипроцессного взаимодействия, например, уже задействована в реализации клиента и сервера Wayland hare-wayland.
- Добавлены криптографические функции crypto::ec, crypto::ecdh и crypto::ecdsa.