Π”Ρ€ΡŽ Π”Π΅Π’ΠΎΠ»Ρ‚ прСдстави Π΅Π·ΠΈΠΊΠ° Π·Π° систСмно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ 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, систСма Π·Π° трасировка Π½Π° Π»ΡŠΡ‡ΠΈ 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"); }; };

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

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