Выпуск языка программирования 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 прочитано 316 раз