Sway ์ฌ์ฉ์ ํ๊ฒฝ, Aerc ์ด๋ฉ์ผ ํด๋ผ์ด์ธํธ, SourceHut ํ์ ๊ฐ๋ฐ ํ๋ซํผ์ ๊ฐ๋ฐ์์ธ Drew DeVault๊ฐ Hare ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ๊ณต๊ฐํ์ต๋๋ค. ๊ทธ๋ ํ๊ณผ ํจ๊ป ์ง๋ 2๋ ๋ฐ ๋์ ์ด๋ฅผ ๊ฐ๋ฐํด ์์ต๋๋ค. ํค์ด๋ C ์ธ์ด์ ์ ์ฌํ์ง๋ง C๋ณด๋ค ๊ฐ๋จํ ์์คํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ์ ๊ณต๋ฉ๋๋ค. ํค์ด์ ์ฃผ์ ์ค๊ณ ์์น์๋ ๋จ์ํ์ ์ค์ ์ ๋๊ณ ํ๋ก๊ทธ๋๋จธ์ ์์ ์ ๋ํ ์์ ํ ์ ๋ขฐ(์๊ธฐ ์ฃผ๋์ ์ด๊ฑฐ๋ ์๋ฌต์ ์ธ ํ๋ ์์ด ์ง์ ๋ ์์ ์ ์ ํํ ์ํ)๋ฅผ ์ ๊ณตํ๋ฉฐ, ์ผ๋ฐ์ ์ธ ์ค๋ฅ์ ๋ฌธ์ ๋ฅผ ์๋ณํ๊ธฐ ์ํ ๋ณด์กฐ ๋๊ตฌ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ํฌํจ๋ฉ๋๋ค.
์ปดํ์ผ๋ฌ ๋ฐ ํด์ฒด์ธ ์์ค ์ฝ๋๋ GPLv3 ๋ผ์ด์ ์ค์ ๋ฐ๋ผ, ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๋ MPL(Mozilla Public License) ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค. ์ฒซ ๋ฒ์งธ ๊ณต๊ฐ ๋ฆด๋ฆฌ์ค์์๋ ์ด์ ์ฒด์ ์ง์์ด ๋ฐํ๋์์ต๋๋ค. Linux ๋ํ x86_64, aarch64 ๋ฐ riscv64 ํ๋ซํผ์ FreeBSD์ ๋ฒ ์ด๋ฉํ ์ด์์ ์ํ ๋ ๋ฆฝ ์คํํ ๊ตฌํ์ ์ ๊ณตํฉ๋๋ค. ํฅํ NetBSD, OpenBSD, Illumos, Haiku ๋ฐ Plan 9 ์ด์ ์ฒด์ ์ ppc64le, i686 ๋ฐ arm32 ํ๋ซํผ ์ง์์ ๊ณํํ๊ณ ์์ต๋๋ค.
์ธ์ด๋ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๊ฐ ๋ณ์์ ํน์ ์ ํ์ ๋ช ์์ ์ผ๋ก ํ ๋นํด์ผ ํ๋ ์ ์ ์ ํ ์์คํ ์ ์ฌ์ฉํฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ ค๋ฉด ์ต์ ๋ฐํ์์ด ์ฒจ๋ถ๋ฉ๋๋ค. ์ด ์ธ์ด๋ ์ต๋ ์ฑ๋ฅ๊ณผ ์ ์ฒด ์คํ ์ ์ด๊ฐ ํ์ํ ์ด์ ์ฒด์ , ์ปดํ์ผ๋ฌ, ๋คํธ์ํฌ ์์ฉ ํ๋ก๊ทธ๋จ ๋ฐ ์์คํ ์ ํธ๋ฆฌํฐ ๊ฐ๋ฐ๊ณผ ๊ฐ์ ๋ฎ์ ์์ค์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ์ต์ ํ๋์ด ์์ต๋๋ค.
๊ฐ๋ฐ์๋ฅผ ์ํ ํ์ค ๊ธฐ๋ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค๋น๋์ด ์ด์ ์ฒด์ ์ ๊ธฐ๋ณธ ์ธํฐํ์ด์ค, ํ์ค ์๊ณ ๋ฆฌ์ฆ, ํ๋กํ ์ฝ ๋ฐ ํ์ ๊ตฌํ์ ๋ํ ์ก์ธ์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ๋ ฅ/์ถ๋ ฅ, ํ์ผ ์กฐ์, ์ ๊ท์, ์ํธํ, ๋คํธ์ํน, ์๊ฐ ๋ฐ ๋ ์ง ์์ , ์ผ๋ฐ์ ์ธ Unix ๊ธฐ๋ณธ ์์(์: poll, fnmatch ๋ฐ glob)์ ๋ํ ์ก์ธ์ค, ๊ตฌ๋ฌธ ๋ถ์ ๋ฐ ์ ํ ๊ฒ์ฌ์ ๊ฐ์ ์์ญ์ ๋ค๋ฃน๋๋ค. OpenGL, SDL2 ๋ฐ libui ๊ธฐ๋ฅ์ ์ก์ธ์คํ๊ธฐ ์ํ ๋ฐ์ธ๋ฉ์ ๋ณ๋๋ก ์ ๊ณต๋ฉ๋๋ค.
Hare ์ธ์ด๋ก ์์ฑ๋ ํ๋ก์ ํธ์ ์๋ก๋ Helios ๋ง์ดํฌ๋ก์ปค๋, Himitsu ์ํธ ๊ด๋ฆฌ์, ๋ ์ดํธ๋ ์ด์ฑ ์์คํ , Box ์ํธํ ํ๋ก๊ทธ๋จ, btqd ๋นํธํ ๋ ํธ ๋ฐ๋ชฌ, scheduled(cron๊ณผ ์ ์ฌํ ์์คํ ), toothbrush(ํด๋ผ์ด์ธํธ ๋ฐ ์๋ฒ (ํ๊ฑฐ ํ๋กํ ์ฝ์ ๊ฒฝ์ฐ). ํฅํ ๊ณํ์๋ ์ธ์ด ์ฌ์ ๋ฐ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ ํ, ๋๋ฝ๋ ํ๋ซํผ ๋ฐ ์ํคํ ์ฒ ์ง์ ๊ตฌํ, TLS 1.2 ๋ฐ 1.3์ ์ง์ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์ ์ถ๊ฐ ๋ฑ์ด ํฌํจ๋ฉ๋๋ค.
Hare ์ธ์ด์ ์์ ์ฝ๋: crypto::sha256์ ์ฌ์ฉํฉ๋๋ค. ์ธ์ฝ๋ฉ::hex๋ฅผ ์ฌ์ฉํ์ธ์. fmt๋ฅผ ์ฌ์ฉํ์ธ์. ํด์๋ฅผ ์ฌ์ฉํ์ธ์. io๋ฅผ ์ฌ์ฉํ์ธ์; os๋ฅผ ์ฌ์ฉํ์ธ์; export fn main() void = { const hash = sha256::sha256(); const ํ์ผ = os::open("main.ha")!; io::close(ํ์ผ)์ ์ง์ฐํฉ๋๋ค. io::copy(&hash, ํ์ผ)!; ํฉ๊ณ๋ฅผ ๊ตฌํด๋ณด์: [sha256::SIZE]u8 = [0...]; ํด์::ํฉ๊ณ(&ํด์, ํฉ); hex::encode(os::stdout, sum)!; fmt::println()!; const greetings = [ "์๋
ํ์ธ์, ์ธ์!", "ํ๋ผ ๋ฌธ๋!", "์ ํฌ๋ฅผ ์ค๋นํ์ธ์!", "์๋
ํ์ธ์, ์ธ์!", "์ธ์์ ์ค์ ๊ฒ์ ํ์ํฉ๋๋ค!", ]; (i = 0z; i < len(์ธ์ฌ๋ง); i += 1) { fmt::println(์ธ์ฌ๋ง[i])!; }; x๋ฅผ *int = alloc(42)๋ก ์ง์ ํฉ๋๋ค. fmt::printfln(" x: {}", x)!; fmt::printfln("*x: {}", *x)!; ๋ฌด๋ฃ(x); const ํ์ผ = os::open(os::args[1])!; io::close(ํ์ผ)์ ์ง์ฐํ์ธ์!; ๋ฒํผ๋ฅผ ํ ๋นํฉ๋๋ค: *[65535]u8 = alloc([0...]); ๋ฒํผ ํด์ ์ง์ฐ const n = io::read(ํ์ผ, ๋ฒํผ)! ํฌ๊ธฐ๋ก; io::write(os::stdout, ๋ฒํผ[..n])!; }; fn ์ ๋ ฌ(ํญ๋ชฉ: []int) void = { ... }; @test fn sort() void = { ํญ๋ชฉ์ [5, 4, 3, 2, 1]๋ก ์ค์ ํฉ๋๋ค. ์ ๋ ฌ(ํญ๋ชฉ); for (let i = 1z; i < len(items); i += 1) { assert(items[i - 1] <= items[i], "๋ชฉ๋ก์ด ์ ๋ ฌ๋์ง ์์์ต๋๋ค"); }; };
์ถ์ฒ : opennet.ru
