ΠΠ±ΡΠ°Π²Π΅Π½ Π΅ Ruby 3.1.0, Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅Π½ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠ°Π½ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΈ ΡΠ°Π·ΠΈΠΊ ΠΊΠΎΡ Π΅ ΠΌΠ½ΠΎΠ³Ρ Π΅ΡΠΈΠΊΠ°ΡΠ΅Π½ Π²ΠΎ ΡΠ°Π·Π²ΠΎΡΠΎΡ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ ΠΈ Π³ΠΈ Π²ΠΊΠ»ΡΡΡΠ²Π° Π½Π°ΡΠ΄ΠΎΠ±ΡΠΈΡΠ΅ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° Perl, Java, Python, Smalltalk, Eiffel, Ada ΠΈ Lisp. ΠΠΎΠ΄ΠΎΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠΎΡ Π΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½ΡΠΈΡΠ΅ BSD (β2-ΠΊΠ»Π°ΡΠ·ΡΠ»Π° BSDLβ) ΠΈ βRubyβ, ΡΡΠΎ ΡΠ΅ ΠΎΠ΄Π½Π΅ΡΡΠ²Π° Π½Π° Π½Π°ΡΠ½ΠΎΠ²Π°ΡΠ° Π²Π΅ΡΠ·ΠΈΡΠ° Π½Π° Π»ΠΈΡΠ΅Π½ΡΠ°ΡΠ° GPL ΠΈ Π΅ ΡΠ΅Π»ΠΎΡΠ½ΠΎ ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½Π° ΡΠΎ GPLv3.
ΠΠ»Π°Π²Π½ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°ΡΠ°:
- ΠΠΎΠ΄Π°Π΄Π΅Π½ Π΅ Π½ΠΎΠ² Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π΅Π½ ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅Ρ Π·Π° JIT Π²ΠΎ ΠΏΡΠΎΡΠ΅Ρ, YJIT, ΡΠΎΠ·Π΄Π°Π΄Π΅Π½ ΠΎΠ΄ ΡΠ°Π·Π²ΠΈΠ²Π°ΡΠΈΡΠ΅ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°ΡΠ° Π·Π° Π΅-ΡΡΠ³ΠΎΠ²ΠΈΡΠ° Shopify ΠΊΠ°ΠΊΠΎ Π΄Π΅Π» ΠΎΠ΄ ΠΈΠ½ΠΈΡΠΈΡΠ°ΡΠΈΠ²Π°ΡΠ° Π·Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ Ruby ΠΊΠΎΠΈ ΡΠ° ΠΊΠΎΡΠΈΡΡΠ°Ρ ΡΠ°ΠΌΠΊΠ°ΡΠ° Rails ΠΈ ΠΏΠΎΠ²ΠΈΠΊΡΠ²Π°Π°Ρ ΠΌΠ½ΠΎΠ³Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΈ. ΠΠ»ΡΡΠ½Π°ΡΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΎΠ΄ ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅Π½ΠΈΠΎΡ ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅Ρ MJIT JIT, ΠΊΠΎΡ ΡΠ΅ Π·Π°ΡΠ½ΠΎΠ²Π° Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠ΅Π»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΈ ΠΈ ΠΊΠΎΡΠΈΡΡΠΈ Π½Π°Π΄Π²ΠΎΡΠ΅ΡΠ΅Π½ ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅Ρ Π²ΠΎ ΡΠ°Π·ΠΈΠΊΠΎΡ C, Π΅ ΡΠΎΠ° ΡΡΠΎ YJIT ΠΊΠΎΡΠΈΡΡΠΈ Lazy Basic Block Versioning (LBBV) ΠΈ ΡΠΎΠ΄ΡΠΆΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½ JIT ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅Ρ. Π‘ΠΎ LBBV, JIT ΠΏΡΠ²ΠΎ Π³ΠΎ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ° ΡΠ°ΠΌΠΎ ΠΏΠΎΡΠ΅ΡΠΎΠΊΠΎΡ Π½Π° ΠΌΠ΅ΡΠΎΠ΄ΠΎΡ, Π° ΠΎΡΡΠ°ΡΠΎΠΊΠΎΡ Π³ΠΎ ΠΊΠΎΠΌΠΏΠ°ΡΠ»ΠΈΡΠ° Π½Π΅ΠΊΠΎΠ΅ Π²ΡΠ΅ΠΌΠ΅ ΠΏΠΎΠ΄ΠΎΡΠ½Π°, ΠΎΡΠΊΠ°ΠΊΠΎ ΡΠ΅ ΡΠ΅ ΡΡΠ²ΡΠ΄Π°Ρ ΡΠΈΠΏΠΎΠ²ΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ ΠΊΠΎΠΈ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ ΠΏΡΠΈ ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ΡΠΎ. ΠΡΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° YJIT, Π·Π°Π±Π΅Π»Π΅ΠΆΠ°Π½ΠΎ Π΅ Π·Π³ΠΎΠ»Π΅ΠΌΡΠ²Π°ΡΠ΅ Π½Π° ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈΡΠ΅ Π·Π° 22% ΠΏΡΠΈ ΠΈΠ·Π²Π΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° ΡΠ΅ΡΡΠΎΡ Π½Π° railsbench ΠΈ Π·Π³ΠΎΠ»Π΅ΠΌΡΠ²Π°ΡΠ΅ ΠΎΠ΄ 39% Π²ΠΎ ΡΠ΅ΡΡΠΎΡ Π·Π° ΡΠ΅Π½Π΄Π΅ΡΠΈΡΠ°ΡΠ΅ ΡΠ΅ΡΠ½ΠΎΡΡ. YJIT ΠΌΠΎΠΌΠ΅Π½ΡΠ°Π»Π½ΠΎ Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΡΠ»ΠΈΡΠ½ΠΈ Π½Π° unix Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈ ΡΠΎ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ° x86-64 ΠΈ Π΅ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ (Π·Π° Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅, Π½Π°Π²Π΅Π΄Π΅ΡΠ΅ Π³ΠΎ Π·Π½Π°ΠΌΠ΅ΡΠΎ β--yjitβ Π²ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°ΡΠ° Π»ΠΈΠ½ΠΈΡΠ°).
- ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈ Π½Π° ΡΡΠ°ΡΠΈΠΎΡ ΠΊΠΎΠΌΠΏΠ°ΡΠ»Π΅Ρ MJIT JIT. ΠΠ° ΠΏΡΠΎΠ΅ΠΊΡΠΈ ΠΊΠΎΠΈ ΠΊΠΎΡΠΈΡΡΠ°Ρ Rails, ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π°ΡΠ° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½Π° Π³ΠΎΠ»Π΅ΠΌΠΈΠ½Π° Π½Π° ΠΊΠ΅ΡΠΎΡ (--jit-max-cache) Π΅ Π·Π³ΠΎΠ»Π΅ΠΌΠ΅Π½Π° ΠΎΠ΄ 100 Π½Π° 10000 ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ. ΠΡΠ΅ΡΡΠ°Π½Π° Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈ JIT Π·Π° ΠΌΠ΅ΡΠΎΠ΄ΠΈ ΡΠΎ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΠ΄ 1000 ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ. ΠΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π½Π° Zeitwerk of Rails, JIT ΠΊΠΎΠ΄ΠΎΡ Π²Π΅ΡΠ΅ Π½Π΅ ΡΠ΅ ΠΎΡΡΡΠ»Π° ΠΊΠΎΠ³Π° TracePoint Π΅ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ Π·Π° Π½Π°ΡΡΠ°Π½ΠΈ ΠΎΠ΄ ΠΊΠ»Π°ΡΠ°ΡΠ°.
- ΠΠΊΠ»ΡΡΡΠ²Π° ΡΠ΅Π»ΠΎΡΠ½ΠΎ ΠΏΡΠ΅Π½Π°ΠΏΠΈΡΠ°Π½ Π΄Π΅Π±Π°Π³Π΅Ρ Π·Π° Π΄Π΅Π±Π°Π³ΠΈΡΠ°ΡΠ΅. ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΊΠΎΠ΄ΠΎΡ REPL, Π½ΡΠ΄ΠΈ Π½Π°ΠΏΡΠ΅Π΄Π½ΠΈ ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° ΡΠ»Π΅Π΄Π΅ΡΠ΅, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ½ΠΈΠΌΠ° ΠΈ ΡΠ΅ΠΏΡΠΎΠ΄ΡΡΠΈΡΠ° ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΈ ΠΎΠ΄ ΠΊΠΎΠ΄ΠΎΡ. ΠΡΠ΅ΡΡ
ΠΎΠ΄Π½ΠΎ ΠΏΠΎΠ½ΡΠ΄Π΅Π½ΠΈΠΎΡ Π΄Π΅Π±Π°Π³Π΅Ρ lib/debug.rb Π΅ ΠΎΡΡΡΡΠ°Π½Π΅Ρ ΠΎΠ΄ ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠ°.
- ΠΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½ΠΎ Π²ΠΈΠ·ΡΠ΅Π»Π½ΠΎ ΠΈΡΡΠ°ΠΊΠ½ΡΠ²Π°ΡΠ΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π²ΠΎ ΠΈΠ·Π²Π΅ΡΡΠ°ΠΈΡΠ΅ Π·Π° ΡΠ»Π΅Π΄Π΅ΡΠ΅ Π½Π° ΠΏΠΎΠ²ΡΠ°ΡΠ΅Π½ ΠΏΠΎΠ²ΠΈΠΊ. ΠΠ·Π½Π°ΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Π³ΡΠ΅ΡΠΊΠ°ΡΠ° Π΅ ΠΎΠ±Π΅Π·Π±Π΅Π΄Π΅Π½ΠΎ ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈΠΎΡ ΠΈ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΎ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ gem ΠΏΠ°ΠΊΠ΅Ρ error_highlight. ΠΠ° Π΄Π° Π³ΠΎ ΠΎΠ½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠΈΡΠ΅ ΠΎΠ·Π½Π°ΡΡΠ²Π°ΡΠ΅ΡΠΎ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΊΠ°ΡΠ° β--disable-error_highlightβ. $ ruby ββΒ· test.rb test.rb:1:in " ": Π½Π΅Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ ΠΌΠ΅ΡΠΎΠ΄ "time" Π·Π° 1:Integer (NoMethodError) 1.time {} ^^^^^ ΠΠ°Π»ΠΈ ΡΠ°ΠΊΠ°ΡΠ΅ Π΄Π° ΠΊΠ°ΠΆΠ΅Ρ? Π²ΡΠ΅ΠΌΠΈΡΠ°
- Π¨ΠΊΠΎΠ»ΠΊΠ°ΡΠ° ΠΎΠ΄ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΈ ΠΏΡΠ΅ΡΠΌΠ΅ΡΠΊΠΈ IRB (REPL, Read-Eval-Print-Loop) ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° Π°Π²ΡΠΎΠΌΠ°ΡΡΠΊΠΎ ΠΏΠΎΠΏΠΎΠ»Π½ΡΠ²Π°ΡΠ΅ Π½Π° Π²Π½Π΅ΡΠ΅Π½ΠΈΠΎΡ ΠΊΠΎΠ΄ (ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΠΏΠΈΡΡΠ²Π°ΡΠ΅, ΡΠ΅ ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π° Π½Π°Π²Π΅ΡΡΡΠ²Π°ΡΠ΅ ΡΠΎ ΠΎΠΏΡΠΈΠΈ Π·Π° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΡΠ²Π°ΡΠ΅ Π½Π° Π²Π½Π΅ΡΡΠ²Π°ΡΠ΅, ΠΌΠ΅ΡΡ ΠΊΠΎΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠ΅ Π΄Π²ΠΈΠΆΠΈΡΠ΅ ΡΠΎ Tab ΠΈΠ»ΠΈ Shift+ ΠΠΎΠΏΡΠ΅ Tab). ΠΡΠΊΠ°ΠΊΠΎ ΡΠ΅ ΡΠ° ΠΈΠ·Π±Π΅ΡΠ΅ΡΠ΅ ΠΎΠΏΡΠΈΡΠ°ΡΠ° Π·Π° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΡΠ²Π°ΡΠ΅, Π²ΠΎ Π±Π»ΠΈΠ·ΠΈΠ½Π° ΡΠ΅ ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π° Π΄ΠΈΡΠ°Π»ΠΎΠ³-ΠΊΡΡΠΈΡΠ° ΡΡΠΎ ΡΠ° ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°ΡΠ° ΠΏΠΎΠ²ΡΠ·Π°Π½Π° ΡΠΎ ΠΈΠ·Π±ΡΠ°Π½Π°ΡΠ° ΡΡΠ°Π²ΠΊΠ°. ΠΡΠ°ΡΠ΅Π½ΠΊΠ°ΡΠ° Π½Π° ΡΠ°ΡΡΠ°ΡΡΡΠ°ΡΠ° Alt+d ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ ΡΠ΅Π»ΠΎΡΠ½Π°ΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ°.
- ΠΠ°Π·ΠΈΡΠ½Π°ΡΠ° ΡΠΈΠ½ΡΠ°ΠΊΡΠ° ΡΠ΅Π³Π° Π΄ΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈΡΠ΅ Π²ΠΎ Ρ Π°Ρ-Π±ΡΠΊΠ²Π°Π»ΠΈΡΠ΅ ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈΡΠ΅ Π·Π° ΠΊΠ»ΡΡΠ½ΠΈ Π·Π±ΠΎΡΠΎΠ²ΠΈ Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΡΠΊΠΎΠΊΠ½Π°Ρ ΠΏΡΠΈ ΠΏΠΎΠ²ΠΈΠΊΡΠ²Π°ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π°ΠΌΠ΅ΡΡΠΎ ΠΈΠ·ΡΠ°Π·ΠΎΡ β{x: x, y: y}β ΡΠ΅Π³Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°Π²Π΅Π΄Π΅ΡΠ΅ β{x:, y:}β, Π° Π½Π°ΠΌΠ΅ΡΡΠΎ βfoo(x: x, y: y)β - foo( x:, y: )β.
- Π‘ΡΠ°Π±ΠΈΠ»ΠΈΠ·ΠΈΡΠ°Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° ΡΠΎΠ²ΠΏΠ°ΡΠ°ΡΠ΅ Π½Π° ΡΠ΅ΠΌΠ° ΡΠΎ Π΅Π΄Π½Π° Π»ΠΈΠ½ΠΈΡΠ° (ary => [x, y, z]), ΠΊΠΎΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ Π½Π΅ ΡΠ΅ ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈ ΠΊΠ°ΠΊΠΎ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½ΠΈ.
- ΠΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΡ β^β Π²ΠΎ ΡΠΎΠ²ΠΏΠ°ΡΠ°ΡΠ° ΡΠΎ ΡΠ°Π±Π»ΠΎΠ½ΠΈ ΡΠ΅Π³Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠΎΠ΄ΡΠΆΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ: Prime.each_cons(2).lazy.find_all{_1 Π²ΠΎ [n, ^(n + 2)]}.take(3).to_a #= > ? [[3, 5], [5, 7], [11, 13]]
- ΠΠΎ ΡΠΎΠ²ΠΏΠ°ΡΠ°ΡΠ°ΡΠ° ΡΠΎ ΡΠ°Π±Π»ΠΎΠ½ΠΈ ΡΠΎ Π΅Π΄Π½Π° Π»ΠΈΠ½ΠΈΡΠ°, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π³ΠΈ ΠΈΡΠΏΡΡΡΠΈΡΠ΅ Π·Π°Π³ΡΠ°Π΄ΠΈΡΠ΅: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
- ΠΠ°Π·ΠΈΠΊΠΎΡ Π·Π° ΠΏΡΠΈΠ±Π΅Π»Π΅ΡΠΊΠΈ ΠΎΠ΄ ΡΠΈΠΏΠΎΡ RBS, ΠΊΠΎΡ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΡΠ° ΠΎΠ΄ΡΠ΅Π΄ΠΈΡΠ΅ ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ΠΈ ΠΊΠΎΡΠΈΡΡΠ΅Π½ΠΈΡΠ΅ ΡΠΈΠΏΠΎΠ²ΠΈ, Π΄ΠΎΠ΄Π°Π΄Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° ΠΎΠ΄ΡΠ΅Π΄ΡΠ²Π°ΡΠ΅ Π½Π° Π³ΠΎΡΠ½Π°ΡΠ° Π³ΡΠ°Π½ΠΈΡΠ° Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° ΡΠΈΠΏΠΎΡ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΎ ΡΠΈΠΌΠ±ΠΎΠ»ΠΎΡ β<β, Π΄ΠΎΠ΄Π°Π΄Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΈ Π½Π° Π³Π΅Π½Π΅ΡΠΈΡΠΊΠΈ ΡΠΈΠΏΠΎΠ²ΠΈ, ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° Π·Π±ΠΈΡΠΊΠΈ Π·Π° ΡΠΏΡΠ°Π²ΡΠ²Π°ΡΠ΅ ΡΠΎ ΡΠΊΠ°ΠΏΠΎΡΠ΅Π½ΠΈ ΠΊΠ°ΠΌΠ΅ΡΠ°, ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈ ΠΏΠ΅ΡΡΠΎΡΠΌΠ°Π½ΡΠΈ ΠΈ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½ΠΈ ΠΌΠ½ΠΎΠ³Ρ Π½ΠΎΠ²ΠΈ ΠΏΠΎΡΠΏΠΈΡΠΈ Π·Π° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΠΈ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
- ΠΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½ΠΈ ΡΠ°Π·Π²ΠΎΡΠ½ΠΈ ΡΡΠ΅Π΄ΠΈΠ½ΠΈ Π΅ Π΄ΠΎΠ΄Π°Π΄Π΅Π½Π° Π²ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΡ Π½Π° ΡΡΠ°ΡΠΈΡΠΊΠΈ ΡΠΈΠΏ TypePro, ΠΊΠΎΡ Π³Π΅Π½Π΅ΡΠΈΡΠ° RBS ΠΏΡΠΈΠ±Π΅Π»Π΅ΡΠΊΠΈ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΠΊΠΎΠ΄ Π±Π΅Π· Π΅ΠΊΡΠΏΠ»ΠΈΡΠΈΡΠ½ΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° ΡΠΈΠΏΠΎΡ (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ Π΅ Π΄ΠΎΠ΄Π°ΡΠΎΠΊ Π·Π° ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°ΡΠ΅ Π½Π° TypePro ΡΠΎ ΡΡΠ΅Π΄ΡΠ²Π°ΡΠΎΡ VSCode).
- Π Π΅Π΄ΠΎΡΠ»Π΅Π΄ΠΎΡ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΠΎΠ²Π΅ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Π΅ ΠΏΡΠΎΠΌΠ΅Π½Π΅Ρ. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈΡΠ΅ Π½Π° ΠΈΠ·ΡΠ°Π·ΠΎΡ βfoo[0], bar[0] = baz, quxβ ΡΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠ²Π°Π° ΠΏΠΎ ΡΠ΅Π΄ΠΎΡΠ»Π΅Π΄ baz, qux, foo, bar, Π½ΠΎ ΡΠ΅Π³Π° foo, bar, baz, qux.
- ΠΠΎΠ΄Π°Π΄Π΅Π½Π° Π΅ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΊΠ° Π·Π° ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π±Π° Π½Π° ΠΌΠ΅ΠΌΠΎΡΠΈΡΠ° Π·Π° ΡΡΡΠΈΠ½Π³ΠΎΠ²ΠΈ ΡΠΎ ΠΏΠΎΠΌΠΎΡ Π½Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΡ VWA (Variable Width Allocation).
- ΠΠΆΡΡΠΈΡΠ°Π½ΠΈ Π²Π΅ΡΠ·ΠΈΠΈ Π½Π° Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΠΌΠΎΠ΄ΡΠ»ΠΈ ΡΠΎ ΡΠΊΠ°ΠΏΠΎΡΠ΅Π½ΠΈ ΠΊΠ°ΠΌΠ΅ΡΠ° ΠΈ ΠΎΠ½ΠΈΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈ Π²ΠΎ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°. ΠΠ°ΠΊΠ΅ΡΠΈΡΠ΅ net-ftp, net-imap, net-pop, net-smtp, matrix, prime ΠΈ debug ΡΠ΅ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ.
ΠΠ·Π²ΠΎΡ: opennet.ru