Выпуск языка программирования Hare 0.26
Дрю ДеВолт (Drew DeVault), автор пользовательского окружения Sway, почтового клиента Aerc и платформы совместной разработки SourceHut, опубликовал выпуск языка программирования Hare 0.26.0. Hare преподносится как язык системного программирования, близкий к языку Си, но проще, чем Си. Исходный код компилятора и инструментария распространяются под лицензией GPLv3, а код стандартной библиотеки под лицензией MPL (Mozilla Public License).
Язык оптимизирован для решения низкоуровневых задач, таких как разработка операционных систем, компиляторов, сетевых приложений и системных утилит, для которых требуется достижение максимальной производительности и полный контроль над выполнением. В языке применяется ручное управление памятью и статическая система типов, при которой каждой переменной явно должен быть присвоен определённый тип.
Для выполнения приложения поставляется минимальный runtime, а для разработки распространяется стандартная библиотека функций, предоставляющая доступ к базовым интерфейсам операционной системы, а также предлагающая функции для работы с типовыми алгоритмами, протоколами и форматами, включая средства для использования регулярных выражений и шифрования. Для разработки графических приложений развивается инструментарий hare-wayland, а также привязки для доступа к возможностям GTK, Vulkan, OpenGL, SDL3 и libui.
В новой версии:
- Добавлена конструкция цикла «for (…){…} else {…}» и возможность использования цикла как выражения для присвоения значения переменной «item = for (…){…}». Значение, которое будет присвоено переменной, может быть возвращено при прерывании цикла выражением «break значение» или через указание «yield значение_по_умолчанию» в прикреплённом к циклу блоке «else{…}», который вызывается, если цикл не был прерван через break.
const item = for (let sample .. items) { if (item.key == key) { break item; }; } else { yield -1; }; Добавлена возможность использования присвоения значению »_» для игнорирования обработки ошибок (в случае возникновения ошибки не возникнет assertion).
_ = os::remove("/some/file");- Добавлена возможность использования значения »_» для создания неименованных полей в структурах. Подобные поля могут применяться для добавочного заполнения.
export type my_struct = struct @packed { x: u32, // offset: 0 _: u8, // offset: 4 y: u64, // offset: 5 }; - Реализована возможность явного оставления переменных и полей в структурах в неинициализированном состоянии, через присвоения им значения »@undefined». Ранее язык требовал чтобы все локальные и глобальные переменные были инициализированы во время создания. Оставление без инициализации может потребоваться, когда переменная должна быть инициализирована не во время объявления, а позднее, например, когда в функцию передаётся указатель на переменную, которую эта функция должна инициализировать.
let x: my_object = @undefined;
Добавлена поддержка операционной системы Dragonfly BSD. Ранее поддерживались Linux, FreeBSD, NetBSD и OpenBSD.
Источник: http://www.opennet.ru/opennews/art.shtml? num=64794
OpenNet прочитано 293 раза
