ΠΡΡ ΠΠ΅ΠΠΎΠ»Ρ (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
