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

Дрю ДеВолт (Drew DeVault), автор пользовательского окружения Sway, почтового клиента Aerc и платформы совместной разработки SourceHut, представил язык программирования Hare, над которым он вместе со своей командой работал последние два с половиной года. Hare преподносится как язык системного программирования, близкий к языку Си, но проще, чем Си. Из ключевых принципов проектирования Hare заявлена ориентация на упрощение и полное доверие к действиям программиста (выполнять именно то, что указано, без самодеятельности и неявного поведения), при наличии вспомогательных инструментов для выявления типовых ошибок и проблем.

Исходные тексты компилятора и инструментария распространяются под лицензией GPLv3, а код стандартной библиотеки под лицензией MPL (Mozilla Public License). В первом публичном выпуске заявлена поддержка операционных систем Linux и FreeBSD на платформах x86_64, aarch64 и riscv64, а также самодостаточное использование для запуска поверх оборудования без операционной системы. В планах упоминается поддержка операционных систем NetBSD, OpenBSD, Illumos, Haiku и Plan 9 и платформ ppc64le, i686 и arm32.

В языке применяется ручное управление памятью и статическая система типов, при которой каждой переменной явно должен быть присвоен определённый тип. Для выполнения приложения прикрепляется минимальный runtime. Язык оптимизирован для решения низкоуровневых задач, таких как разработка операционных систем, компиляторов, сетевых приложений и системных утилит, для которых требуется достижение максимальной производительности и полный контроль за выполнением.

Для разработчиков подготовлена стандартная библиотека функций, предоставляющая доступ к базовым интерфейсам операционной системы, типовые алгоритмы и реализации протоколов и форматов. Библиотека охватывает такие области как ввод/вывод, работа с файлами, регулярные выражения, шифрование, сетевое взаимодействие, операции со временем и датами, доступ к типовым Unix-примитивам (например, poll, fnmatch и glob), парсинг и проверка типов. Отдельно предоставляются привязки для доступа к возможностям OpenGL, SDL2 и libui.

В качестве примеров проектов, написанных на языке Hare, упоминаются микроядро Helios, менеджер паролей Himitsu, система трассировки лучей raytracing, программа для шифрования box, bittorrent-демон btqd, scheduled (аналог системы cron), toothbrush (клиент и сервер для протокола finger). Из планов на будущее отмечается стабилизация спецификации языка и состава стандартной библиотеки, реализация поддержки недостающих платформ и архитектур, добавление библиотечных функций для поддержки TLS 1.2 и 1.3.

Пример кода на языке Hare:

   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()!;




	const greetings = [
		"Hello, world!",
		"¡Hola Mundo!",
		"Γειά σου Κόσμε!",
		"Привет, мир!",
		"こんにちは世界!",
	];
	for (let i = 0z; i ‹ len(greetings); i += 1) {
		fmt::println(greetings[i])!;
	};




	let x: *int = alloc(42);
	fmt::printfln(" x: {}", x)!;
	fmt::printfln("*x: {}", *x)!;
	free(x);

	const file = os::open(os::args[1])!;
	defer io::close(file)!;

	let buffer: *[65535]u8 = alloc([0...]);
	defer free(buffer);

	const n = io::read(file, buffer)! as size;
	io::write(os::stdout, buffer[..n])!;

   };

   fn sort(items: []int) void = {
      ...
   };

   @test fn sort() void = {
	let items = [5, 4, 3, 2, 1];
	sort(items);
	for (let i = 1z; i ‹ len(items); i += 1) {
		assert(items[i - 1] ‹= items[i], "list is unsorted");
	};
   };



    

Источник: http://www.opennet.ru/opennews/art.shtml?num=57081

©  OpenNet