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