Π”Ρ€ΡŽ Π”Π΅Π’ΠΎΠ»Ρ‚ прСдстави Π΅Π·ΠΈΠΊΠ° Π·Π° систСмно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Hare

Π”Ρ€ΡŽ Π”Π΅Π’ΠΎΠ»Ρ‚ (Drew DeVault), Π°Π²Ρ‚ΠΎΡ€ Π½Π° потрСбитСлската срСда Sway, ΠΈΠΌΠ΅ΠΉΠ» ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° Aerc ΠΈ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π·Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚Π½ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅ SourceHut, прСдстави Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Hare, ΠΏΠΎ ΠΊΠΎΠΉΡ‚ΠΎ Ρ‚ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΈ с Π΅ΠΊΠΈΠΏΠ° си ΠΏΡ€Π΅Π· послСднитС Π΄Π²Π΅ Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΈ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°. Hare сС прСдставя ΠΊΠ°Ρ‚ΠΎ Π΅Π·ΠΈΠΊ Π·Π° систСмно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, близък Π΄ΠΎ Π΅Π·ΠΈΠΊΠ° C, Π½ΠΎ ΠΏΠΎ-прост ΠΎΡ‚ Π½Π΅Π³ΠΎ. Π•Π΄ΠΈΠ½ ΠΎΡ‚ основнитС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈ Π½Π° Π΄ΠΈΠ·Π°ΠΉΠ½Π° Π½Π° 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, систСма Π·Π° трасировка Π½Π° Π»ΡŠΡ‡ΠΈ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π·Π° ΠΊΡ€ΠΈΠΏΡ‚ΠΈΡ€Π°Π½Π΅ 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], Β«ΡΠΏΠΈΡΡŠΠΊΡŠΡ‚ Π½Π΅ Π΅ сортиран»); }; };

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС със Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS ΠΈ VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster