เบเบฒเบ™เบ›เปˆเบญเบเป‚เบ›เปเบเบกเบžเบฒเบชเบฒ Ruby 3.2

Ruby 3.2.0 เป„เบ”เป‰เบ–เบทเบเบ›เปˆเบญเบเบญเบญเบเบกเบฒ, เป€เบ›เบฑเบ™เบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเบ—เบตเปˆเป€เบ™เบฑเป‰เบ™เบงเบฑเบ”เบ–เบธเปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบชเบนเบ‡เปƒเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเป‚เบ›เบผเปเบเบผเบกเปเบฅเบฐเบฅเบงเบกเป€เบญเบปเบฒเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบ‚เบญเบ‡ Perl, Java, Python, Smalltalk, Eiffel, Ada เปเบฅเบฐ Lisp. เบฅเบฐเบซเบฑเบ”เป‚เบ„เบ‡เบเบฒเบ™เปเบกเปˆเบ™เปเบˆเบเบขเบฒเบเบžเบฒเบเปƒเบ•เป‰เปƒเบšเบญเบฐเบ™เบธเบเบฒเบ” BSD ("2-clause BSDL") เปเบฅเบฐ "Ruby", เป€เบŠเบดเปˆเบ‡เบซเบกเบฒเบเป€เบ–เบดเบ‡เบชเบฐเบšเบฑเบšเบซเบฅเป‰เบฒเบชเบธเบ”เบ‚เบญเบ‡เปƒเบšเบญเบฐเบ™เบธเบเบฒเบ” GPL เปเบฅเบฐเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบš GPLv3.

เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบ•เบปเป‰เบ™เบ•เป:

  • เป€เบžเบตเปˆเบกเบžเบญเบ”เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบ‚เบญเบ‡เบ•เบปเบงเปเบ› Cruby, เป€เบŠเบดเปˆเบ‡เบฅเบงเบšเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบฅเบฐเบซเบฑเบ”เบฅเบฐเบ”เบฑเบšเบเบฒเบ‡เบ‚เบญเบ‡ WebAssembly เบชเปเบฒเบฅเบฑเบšเปเบฅเปˆเบ™เบขเบนเปˆเปƒเบ™เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเบซเบผเบทเบžเบฒเบเปƒเบ•เป‰เบเบฒเบ™เปเบฅเปˆเบ™เปเบšเบš standalone เป€เบŠเบฑเปˆเบ™ wasmtime. เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเป‚เบ”เบเบเบปเบ‡เบเบฑเบšเบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปเบฅเปˆเบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบ, WASI (WebAssembly System Interface) API เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰. เปƒเบ™เบšเบฑเบ™เบ”เบฒเบชเบดเปˆเบ‡เบญเบทเปˆเบ™เป†, เป€เบ„เบทเปˆเบญเบ‡เบซเปเปˆ VFS เปเบกเปˆเบ™เบชเบฐเบซเบ™เบญเบ‡เปƒเบซเป‰เบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เบ‚เบญเบ‡ WASI, เป€เบŠเบดเปˆเบ‡เบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบซเบธเป‰เบกเบซเปเปˆเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ Ruby เบ—เบฑเบ‡เบซเบกเบปเบ”เป€เบ‚เบปเป‰เบฒเปƒเบ™เบเบฒเบ™เบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เป„เบŸเบฅเปŒ wasm เบ”เบฝเบง. เปเบฅเปˆเบ™เบขเบนเปˆเปƒเบ™เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบเบฒเบ™เบเบถเบเบญเบปเบšเบฎเบปเบกเปเบฅเบฐเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เป€เบงเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™ TryRuby. เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ‚เบญเบ‡เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™, เบžเบญเบ”เป„เบ”เป‰เบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เบœเปˆเบฒเบ™เบŠเบธเบ”เบ—เบปเบ”เบชเบญเบšเบžเบทเป‰เบ™เบ–เบฒเบ™เปเบฅเบฐ bootstrap, เป€เบŠเบดเปˆเบ‡เบšเปเปˆเป„เบ”เป‰เปƒเบŠเป‰ Thread API. เบžเบญเบ”เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบเบฑเบ‡เบšเปเปˆเบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™เป€เบชเบฑเป‰เบ™เป„เบ, เบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™, เบซเบผเบทเบเบฒเบ™เป€เบเบฑเบšเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญ.
  • เบเบฒเบ™เบฅเบงเบšเบฅเบงเบก JIT เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ YJIT, เบชเป‰เบฒเบ‡เป‚เบ”เบเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ‚เบญเบ‡เปเบžเบฅเบฐเบ•เบฐเบŸเบญเบกเบเบฒเบ™เบ„เป‰เบฒ e-commerce Shopify เป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบฅเบดเป€เบฅเบตเปˆเบกเบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡เป‚เบ›เบฅเปเบเบฅเบก Ruby เบ—เบตเปˆเปƒเบŠเป‰เบเบญเบšเบ‚เบญเบ‡ Rails เปเบฅเบฐเป‚เบ—เบซเบฒเบซเบผเบฒเบเบงเบดเบ—เบตเบเบฒเบ™, เป„เบ”เป‰เบ–เบทเบเบ›เบฐเบเบฒเบ”เบงเปˆเบฒเบกเบตเบ„เบงเบฒเบกเบซเบกเบฑเป‰เบ™เบ„เบปเบ‡เปเบฅเบฐเบเบฝเบกเบžเป‰เบญเบกเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™. เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบเบฒเบ™โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹. เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบ—เบตเปˆ เบชเบณ เบ„เบฑเบ™เบˆเบฒเบเป€เบ„เบทเปˆเบญเบ‡เบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™ MJIT JIT เบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™เป€เบกเบทเปˆเบญเบเปˆเบญเบ™, เป€เบŠเบดเปˆเบ‡เบญเบตเบ‡เปƒเบชเปˆเบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ—เบฑเบ‡ เปเบปเบ” เปเบฅเบฐเปƒเบŠเป‰เบ•เบปเบงเบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™เบžเบฒเบเบ™เบญเบเปƒเบ™เบžเบฒเบชเบฒ C, เปเบกเปˆเบ™เบงเปˆเบฒ YJIT เปƒเบŠเป‰ Lazy Basic Block Versioning (LBBV) เปเบฅเบฐเบกเบตเบ•เบปเบงเบชเบฑเบ‡เบฅเบงเบก JIT เบ›เบฐเบชเบปเบกเบ›เบฐเบชเบฒเบ™. เบ”เป‰เบงเบ LBBV, JIT เบ—เปเบฒเบญเบดเบ”เบฅเบงเบšเบฅเบงเบกเบžเบฝเบ‡เปเบ•เปˆเบˆเบธเบ”เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เบงเบดเบ—เบตเบเบฒเบ™, เปเบฅเบฐเบฅเบงเบšเบฅเบงเบกเบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญเปƒเบ™เป€เบงเบฅเบฒเบ•เปเปˆเบกเบฒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบ•เบปเบงเปเบ›เปเบฅเบฐเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบตเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบ–เบทเบเบเปเบฒเบ™เบปเบ”เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”. YJIT เบกเบตเปƒเบซเป‰เบชเปเบฒเบฅเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒ x86-64 เปเบฅเบฐ arm64/aarch64 เปƒเบ™ Linux, MacOS, BSD เปเบฅเบฐเปเบžเบฅเบฐเบ•เบฐเบŸเบญเบก UNIX เบญเบทเปˆเบ™เป†.

    เบšเปเปˆเป€เบซเบกเบทเบญเบ™เบเบฑเบš Ruby, เบฅเบฐเบซเบฑเบ” YJIT เบ–เบทเบเบ‚เบฝเบ™เป€เบ›เบฑเบ™เบžเบฒเบชเบฒ Rust เปเบฅเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™ compiler rustc 1.58.0+ เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฅเบงเบšเบฅเบงเบก, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡ YJIT เบ–เบทเบเบ›เบดเบ”เปƒเบŠเป‰เบ‡เบฒเบ™เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบฅเบฐเป€เบ›เบฑเบ™เบ—เบฒเบ‡เป€เบฅเบทเบญเบ. เป€เบกเบทเปˆเบญเบ™เปเบฒเปƒเบŠเป‰ YJIT, เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™ 41% เป„เบ”เป‰เบ–เบทเบเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปเบฅเปˆเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš yjit-bench เป€เบกเบทเปˆเบญเบ—เบฝเบšเบเบฑเบšเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบ•เบตเบ„เบงเบฒเบกเบซเบกเบฒเบ.

    เบเบฒเบ™เบ›เปˆเบญเบเป‚เบ›เปเบเบกเบžเบฒเบชเบฒ Ruby 3.2

  • เป„เบ”เป‰เป€เบžเบตเปˆเบกเบเบฒเบ™เบ›เบปเบเบ›เป‰เบญเบ‡เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบ•เปเปˆเบเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเป€เบชเบ”เบเบฒเบ™เป‚เบˆเบกเบ•เบตเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ‚เปเป‰เบกเบนเบ™เบžเบฒเบเบ™เบญเบเปƒเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบœเบปเบ™เบ›เบปเบเบเบฐเบ•เบดเบ—เบตเปˆเบšเปเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปเบฅเบฐเปƒเบŠเป‰เป€เบงเบฅเบฒเบซเบผเบฒเบ (ReDoS). เบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆ, เป€เบŠเบดเปˆเบ‡เปƒเบŠเป‰เป€เบ•เบฑเบเบ™เบดเบเบเบฒเบ™เบˆเบทเปˆเบˆเปเบฒ, เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบ. เบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบงเบฅเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบ '/^a*b?a*$/ =~ โ€œaโ€ * 50000 + โ€œxโ€' เบซเบผเบธเบ”เบฅเบปเบ‡เบˆเบฒเบ 10 เบซเบฒ 0.003 เบงเบดเบ™เบฒเบ—เบต. เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปเบกเปˆเบ™เบเบฒเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบ‚เบญเบ‡เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ, เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบ—เบตเปˆเบชเบนเบ‡เบเบงเปˆเบฒเบ›เบฐเบกเบฒเบ™ 10 เป€เบ—เบปเปˆเบฒเบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™. เบกเบฒเบ”เบ•เบฐเบเบฒเบ™เบ„เบงเบฒเบกเบ›เบญเบ”เป„เบžเบ—เบตเบชเบญเบ‡เปเบกเปˆเบ™เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒเบซเบกเบปเบ”เป€เบงเบฅเบฒ (เบ•เบปเบงเบขเปˆเบฒเบ‡, "Regexp.timeout = 1.0") เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบญเบญเบเป€เบ›เบฑเบ™เบ›เบปเบเบเบฐเบ•เบดเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบ›เบธเบ‡เปเบ•เปˆเบ‡.
  • เป‚เบซเบกเบ” syntax_suggest เบ–เบทเบเบฅเบงเบกเป€เบ‚เบปเป‰เบฒ, เป€เบŠเบดเปˆเบ‡เบŠเปˆเบงเบเบงเบดเบ™เบดเบ”เป„เบชเบชเบฒเป€เบซเบ”เบ‚เบญเบ‡เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบชเบฐเปเบ”เบ‡ "เบชเบดเป‰เบ™เบชเบธเบ”" เบ—เบตเปˆเบ‚เบฒเบ”เบซเบฒเบเป„เบ›เบซเบผเบทเป€เบžเบตเปˆเบกเป€เบ•เบตเบก. 'เบชเบดเป‰เบ™เบชเบธเบ”' เบ—เบตเปˆเบšเปเปˆเบเบปเบ‡เบเบฑเบ™, เบšเปเปˆเบกเบตเบ„เปเบฒเบชเปเบฒเบ„เบฑเบ™ ('do', `def`, `if`, เปเบฅเบฐเบญเบทเปˆเบ™เป†)? 1 class Dog > 2 defbark > 3 end 4 end
  • เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบซเบกเบฒเบเบญเบฒเบเบดเบงเป€เบกเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบ›เบฐเป€เบžเบ”เปเบฅเบฐเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เป‚เบซเบกเบ”เบชเบฐเปเบ”เบ‡เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”, เบ•เบปเบงเบขเปˆเบฒเบ‡: test.rb:2:in `+': nil เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ–เบทเบเบšเบตเบšเบšเบฑเบ‡เบ„เบฑเบšเป€เบ›เบฑเบ™ Integer (TypeError) sum = ary. [0] + ary [1] ^^^^^^
  • เป€เบžเบตเปˆเบก syntax เปƒเปเปˆ เบชเบณเบฅเบฑเบšเบเบฒเบ™เบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบŠเบธเบ”เบญเบฒเบเบดเบงเป€เบกเบฑเบ™เป„เบ›เบซเบฒเบงเบดเบ—เบตเบญเบทเปˆเบ™: def foo(*) bar(*) end def baz(**) quux(**) end
  • Ruby_vm/mjit/compiler เบ–เบทเบเบชเบฐเป€เปœเบต - เป€เบ›เบฑเบ™เบ•เบปเบงเปเบ›เบ‚เบญเบ‡ MJIT JIT compiler เป€เบเบปเปˆเบฒ, เบ‚เบฝเบ™เปƒเบซเบกเปˆเปƒเบ™เบžเบฒเบชเบฒ Ruby. เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบงเปˆเบฒ MJIT เปเบฅเปˆเบ™เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปเบเบเบ•เปˆเบฒเบ‡เบซเบฒเบเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเปเบฅเปˆเบ™เบขเบนเปˆเปƒเบ™เบเบฐเบ—เบนเป‰เบžเบฐเบ™เบฑเบเบ‡เบฒเบ™ MJIT.
  • เปƒเบ™ Bundler 2.4, เบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบเบฒเบ™เป€เบžเบดเปˆเบ‡เบžเบฒเบญเบฒเป„เบชเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบเบงเบ”เบˆเบฑเบšเป€เบงเบตเบŠเบฑเบ™ PubGrub, เบเบฑเบ‡เปƒเบŠเป‰เปƒเบ™เบ•เบปเบงเบˆเบฑเบ”เบเบฒเบ™เบŠเบธเบ” pub เบชเปเบฒเบฅเบฑเบšเบžเบฒเบชเบฒ Dart. Molinillo algorithm เบ—เบตเปˆเปƒเบŠเป‰เปƒเบ™เป€เบกเบทเปˆเบญเบเปˆเบญเบ™เบเบฑเบ‡เบชเบทเบšเบ•เปเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™ RubyGems, เปเบ•เปˆเบเบฑเบ‡เบˆเบฐเบ–เบทเบเปเบ—เบ™เบ—เบตเปˆเบ”เป‰เบงเบ PubGrub เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”.
  • เบชเบฐเบšเบฑเบšเบ›เบฑเบšเบ›เบธเบ‡เบ‚เบญเบ‡เป‚เบกเบ”เบนเบ™เปเบเป‰เบงเบ›เบฐเป€เบชเบตเบ”เบ—เบตเปˆเบกเบตเปƒเบ™เบ•เบปเบงเปเบฅเบฐเบ—เบตเปˆเบฅเบงเบกเบขเบนเปˆเปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: opennet.ru

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™