Drew DeVault przedstawił język systemowy programowania Hare

Drew DeVault, autor środowiska użytkownika Sway, klienta pocztowego Aerc i platformy współpracy SourceHut, zaprezentował język programowania Hare, nad którym pracował razem ze swoją drużyną przez ostatnie dwa i pół roku. Hare jest przedstawiany jako język programowania bliski językowi C, ale prostszy niż C. Kluczowymi zasadami projektowania Hare jest uproszczenie i pełne zaufanie do działań programisty (wykonywanie dokładnie tego, co zostało określone, bez działań własnych i niejawnego zachowania), przy dostępności narzędzi wspomagających identyfikację typowych błędów i problemów.

Kod źródłowy kompilatora i narzędzi jest rozpowszechniany na licencji GPLv3, a kod standardowej biblioteki na licencji MPL (Mozilla Public License). W pierwszym publicznym wydaniu obiecano wsparcie dla systemów operacyjnych Linux i FreeBSD na platformach x86_64, aarch64 i riscv64, a także samodzielne użycie do uruchamiania na sprzęcie bez systemu operacyjnego. W planach przewidziano wsparcie dla systemów operacyjnych NetBSD, OpenBSD, Illumos, Haiku i Plan 9 oraz platform ppc64le, i686 i arm32.

W języku zastosowano ręczne zarządzanie pamięcią oraz statyczny system typów, w którym każdej zmiennej musi być jawnie przypisany określony typ. Do wykonania aplikacji dołączony jest minimalny runtime. Język jest zoptymalizowany do rozwiązywania niskopoziomowych zadań, takich jak tworzenie systemów operacyjnych, kompilatorów, aplikacji sieciowych i narzędzi systemowych, które wymagają maksymalnej wydajności i pełnej kontroli nad wykonaniem.

Dla programistów przygotowano standardową bibliotekę funkcji, która zapewnia dostęp do podstawowych interfejsów systemu operacyjnego, typowych algorytmów oraz realizacji protokołów i formatów. Biblioteka obejmuje takie obszary jak wejście/wyjście, operacje na plikach, wyrażenia regularne, szyfrowanie, interakcję sieciową, operacje w czasie i datach, dostęp do typowych prymitywów Unix (na przykład poll, fnmatch i glob), parsowanie i weryfikację typów. Osobno dostarczane są powiązania dla dostępu do możliwości OpenGL, SDL2 i libui.

Przykłady projektów napisanych w języku Hare to mikrojądro Helios, menedżer haseł Himitsu, system raytracing, program do szyfrowania box, demon bittorrent btqd, scheduled (odpowiednik systemu cron), toothbrush (klient i dla protokołu finger). W przyszłych planach zauważono stabilizację specyfikacji języka i standardowej biblioteki, realizację wsparcia dla brakujących platform i architektur oraz dodanie funkcji biblioteki wspierających TLS 1.2 i 1.3. serwer Przykład kodu w języku 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], «lista jest nieposortowana»); }; };

Premiera GNUnet Messenger 0.7 i libgnunetchat 0.1 do tworzenia zdecentralizowanych czatów.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster