Π‘ΠΎΡΡΠΎΡΠ»ΡΡ ΡΠ΅Π»ΠΈΠ· Ruby 3.1.0, Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΎΡΠ»ΠΈΡΠ°ΡΡΠ΅Π³ΠΎΡΡ Π²ΡΡΠΎΠΊΠΎΠΉ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΈ Π²ΠΎΠ±ΡΠ°Π²ΡΠ΅Π³ΠΎ Π² ΡΠ΅Π±Ρ Π»ΡΡΡΠΈΠ΅ ΡΠ΅ΡΡΡ Perl, Java, Python, Smalltalk, Eiffel, Ada ΠΈ Lisp. ΠΠΎΠ΄ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΡΠΌΠΈ BSD («2-clause BSDL») ΠΈ «Ruby», ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΡΠ»Π°Π΅ΡΡΡ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π»ΠΈΡΠ΅Π½Π·ΠΈΠΈ GPL ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠ° Ρ GPLv3.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ:
- ΠΠΎΠ±Π°Π²Π»Π΅Π½ Π½ΠΎΠ²ΡΠΉ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΠΉ Π²Π½ΡΡΡΠΈΠΏΡΠΎΡΠ΅ΡΡΠ½ΡΠΉ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ YJIT, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΠΎΠΉ ΠΊΠΎΠΌΠΌΠ΅ΡΡΠΈΠΈ Shopify Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΈΠ½ΠΈΡΠΈΠ°ΡΠΈΠ²Ρ ΠΏΠΎ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Ruby-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Rails ΠΈ Π²ΡΠ·ΡΠ²Π°ΡΡΠΈΡ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². ΠΠ»ΡΡΠ΅Π²ΡΠΌ ΠΎΡΠ»ΠΈΡΠΈΠ΅ΠΌ ΠΎΡ ΡΠ°Π½Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° MJIT, Π±Π°Π·ΠΈΡΡΡΡΠ΅Π³ΠΎΡΡ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠ΅Π»ΠΈΠΊΠΎΠΌ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π³ΠΎ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘ΠΈ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ YJIT ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ Π²Π΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²ΡΡ Π±Π»ΠΎΠΊΠΎΠ² (LBBV — Lazy Basic Block Versioning) ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ LBBV, JIT Π²Π½Π°ΡΠ°Π»Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π½Π°ΡΠ°Π»ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°, Π° ΠΎΡΡΠ°Π²ΡΡΡΡΡ ΡΠ°ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅Ρ ΡΠ΅ΡΠ΅Π· Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΡΠΈΠΏΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ YJIT Π·Π°ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ΅ΡΡΠ° railsbench Π½Π° 22%, Π° ΡΠ΅ΡΡΠ° liquid-render Π½Π° 39%. YJIT ΠΏΠΎΠΊΠ° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ unix-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΠ‘ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Ρ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠΎΠΉ x86-64 ΠΈ ΠΎΡΠΊΠ»ΡΡΡΠ½ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ (Π΄Π»Ρ Π°ΠΊΡΠΈΠ²Π°ΡΠΈΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΠΎΠΊΠ΅ ΡΠ»Π°Π³ «—yjit»).
- ΠΠΎΠ²ΡΡΠ΅Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΡΠ°ΡΠΎΠ³ΠΎ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° MJIT. ΠΠ»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ Rails, ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΡΡΠ° (—jit-max-cache) ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ ΡΠΎ 100 Π΄ΠΎ 10000 ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ. ΠΡΠ΅ΠΊΡΠ°ΡΠ΅Π½ΠΎ Π½Π΅ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ JIT Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², Π²ΠΊΠ»ΡΡΠ°ΡΡΠΈΡ Π±ΠΎΠ»Π΅Π΅ 1000 ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ. ΠΠ»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ Zeitwerk of Rails ΡΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π² JIT ΠΊΠΎΠ΄ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ Π΄Π»Ρ ΡΠΎΠ±ΡΡΠΈΠΉ ΠΊΠ»Π°ΡΡΠ° Π²ΠΊΠ»ΡΡΡΠ½ TracePoint.
- Π ΡΠΎΡΡΠ°Π² Π²ΠΊΠ»ΡΡΡΠ½ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°Π½Π½ΡΠΉ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ debug.gem, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ΄Π°Π»ΡΠ½Π½ΡΡ ΠΎΡΠ»Π°Π΄ΠΊΡ, Π½Π΅ Π·Π°ΠΌΠ΅Π΄Π»ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΡ ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠΌΠΈ ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΠΌΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°ΠΌΠΈ (VSCode ΠΈ Chrome), ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ
ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΡΠΎΡΠ΅ΡΡΠ½ΡΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° REPL, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΠΎΡΡΡΠ²ΠΊΠΈ ΠΊΠΎΠ΄Π°. Π Π°Π½Π΅Π΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π²ΡΠΈΠΉΡΡ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊ lib/debug.rb ΡΠ΄Π°Π»ΡΠ½ ΠΈΠ· Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΏΠΎΡΡΠ°Π²ΠΊΠΈ.
- Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π½Π°Π³Π»ΡΠ΄Π½ΠΎΠ΅ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ Π² ΠΎΡΡΡΡΠ°Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ Π²ΡΠ·ΠΎΠ²ΠΎΠ². ΠΠΎΠΌΠ΅ΡΠΊΠ° ΠΎΡΠΈΠ±ΠΎΠΊ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈ Π²ΠΊΠ»ΡΡΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ gem-ΠΏΠ°ΠΊΠ΅ΡΠ° error_highlight. ΠΠ»Ρ ΠΎΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΠΌΠ΅ΡΠΊΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΡ «—disable-error_highlight». $ ruby test.rb test.rb:1:in «<main>»: undefined method «time» for 1:Integer (NoMethodError) 1.time {} ^^^^^ Did you mean? times
- Π ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ΅ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΡ
Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ 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 in [n, ^(n + 2)]}.take(3).to_a #=>? [[3, 5], [5, 7], [11, 13]]
- Π ΠΎΠ΄Π½ΠΎΡΡΡΠΎΡΠ½ΡΡ ΡΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡΡ Ρ ΠΎΠ±ΡΠ°Π·ΡΠΎΠΌ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ Π½Π΅ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΊΠΎΠ±ΠΊΠΈ: [0, 1] => _, x {y: 2} => y: x #=> 1 y #=> 2
- Π ΡΠ·ΡΠΊ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΡΠΈΠΏΠΎΠ² RBS, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΡΡΡΠΊΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΠΈΠΏΠΎΠ², Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π²Π΅ΡΡ Π½Π΅ΠΉ Π³ΡΠ°Π½ΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΈΠΏΠ° ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π° «<«, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΎΠ² ΠΎΠ±ΠΎΠ±ΡΡΠ½Π½ΡΡ ΡΠΈΠΏΠΎΠ², ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ gem-Π°ΠΌΠΈ, ΠΏΠΎΠ²ΡΡΠ΅Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΎΠ²ΡΡ ΡΠΈΠ³Π½Π°ΡΡΡ Π΄Π»Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ.
- Π ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΡΠΈΠΏΠΎΠ² TypePro, Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΠΈΠΉ RBS-Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π°Π½Π°Π»ΠΈΠ·Π° ΠΊΠΎΠ΄Π° Π±Π΅Π· ΡΠ²Π½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠΈΠΏΠ°Ρ , Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΠ΅Π΄ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ TypePro Ρ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠΎΠΌ VSCode).
- ΠΠ·ΠΌΠ΅Π½ΡΠ½ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°Π½ΡΡΠ΅ ΡΠΎΡΡΠ°Π²Π½ΡΠ΅ ΡΠ°ΡΡΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ «foo[0], bar[0] = baz, qux» ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π»ΠΈΡΡ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ baz, qux, foo, bar, Π° ΡΠ΅ΠΏΠ΅ΡΡ foo, bar, baz, qux.
- ΠΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ Π΄Π»Ρ ΡΡΡΠΎΠΊ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° VWA (Variable Width Allocation).
- ΠΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ Π²Π΅ΡΡΠΈΠΈ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΠΈ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ gem-ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. ΠΡΡΡΠΎΠ΅Π½Ρ ΠΏΠ°ΠΊΠ΅ΡΡ net-ftp, net-imap, net-pop, net-smtp, matrix, prime ΠΈ debug.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru