Π ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ½ΠΈΡ Π΅Π·ΠΈΠΊ Nim 3.0 ΡΠ΅ ΡΠ°Π·Π²ΠΈΠ²Π°Π²Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡ Nimony, ΡΠΈΠΉΡΠΎ ΠΎΡΠ½ΠΎΠ²Π΅Π½ ΠΏΡΠΎΠ΅ΠΊΡΠ΅Π½ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π΅ ΠΏΠΎΡΡΠΈΠ³Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎΡΡ Π½Π° Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π² Π½Π°ΠΉ-Π»ΠΎΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ (Worst Case Execution Time, WCET). Π’ΠΎΠ²Π° ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½Π΅ ΠΏΡΠΎΠΈΠ·ΡΠΈΡΠ° ΠΎΡ ΠΎΡΠΈΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° ΠΊΡΠΌ ΡΠΈΡΡΠ΅ΠΌΠΈ Ρ ΠΆΠ΅ΡΡΠΊΠΈ ΡΠ΅Π°Π»Π½ΠΈ Π²ΡΠ΅ΠΌΠ΅Π²ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, ΠΊΡΠ΄Π΅ΡΠΎ Π½Π΅Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠ°Π½ΠΎΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΅ Π½Π΅ΠΏΡΠΈΠ΅ΠΌΠ»ΠΈΠ²ΠΎ. Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° Π½Π° Nimony ΠΈΠ·ΠΊΠ»ΡΡΠ²Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° JIT ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠΈ ΠΈ ΡΠ±ΠΎΡΠ½ΠΈΡΠΈ Π½Π° Π±ΠΎΠΊΠ»ΡΠΊ Ρ ΡΡΠ°ΡΠΈΡΠΎΠ²ΠΊΠ°, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ΅Ρ Π½ΠΈΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π²ΡΠ²Π΅ΠΆΠ΄Π°Ρ Π½Π΅ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΈ Π·Π°Π±Π°Π²ΡΠ½ΠΈΡ.
ΠΠ° ΠΏΠΎΡΡΠΈΠ³Π°Π½Π΅ Π½Π° ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΠΎΡΡ, ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΠΈΡΠ΅ ΡΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ (ΡΠ΅Π»ΠΈ ΡΠΈΡΠ»Π°, ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ) Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΡΠ΅ ΠΎΡΡΠ°Π·ΡΠ²Π°Ρ Π½Π° ΠΌΠ°ΡΠΈΠ½Π½ΠΈ Π΄ΡΠΌΠΈ ΠΈ Π±Π°ΠΉΡΠΎΠ²Π΅ Π½Π° ΡΡΠΎΡΠ²Π΅ΡΠ½Π°ΡΠ° Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ°. ΠΠΎΠΌΠΏΠΎΠ·ΠΈΡΠ½ΠΈΡΠ΅ ΡΠΈΠΏΠΎΠ²Π΅ (ΡΡΡΡΠΊΡΡΡΠΈ, ΠΎΠ±Π΅ΠΊΡΠΈ) ΡΠ΅ ΡΠΎΡΠΌΠΈΡΠ°Ρ Π±Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΡΠ²Π΅Π½Π° Π°Π΄ΡΠ΅ΡΠ°ΡΠΈΡ, ΡΠ°Π·ΠΏΠΎΠ»Π°Π³Π°ΡΠΈ ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π² ΡΡΠ΅ΠΊΠ° ΠΈΠ»ΠΈ Π²ΡΡΡΠ΅ Π² Π΄ΡΡΠ³ΠΈ ΡΡΡΡΠΊΡΡΡΠΈ Π΄Π°Π½Π½ΠΈ. Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠ° ΡΠ°Π·Ρ ΠΎΠ΄ΠΈΡΠ΅ ΠΈ ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΠΏΠΎ-ΠΏΡΠΎΠ·ΡΠ°ΡΠ½ΠΎ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ ΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ΠΈΡ ΠΌΠ°ΡΠΈΠ½Π΅Π½ ΠΊΠΎΠ΄.
Π ΠΎΠ±Π»Π°ΡΡΡΠ° Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° (MM), Nimony ΡΠ΅ ΠΎΡΠΊΠ»ΠΎΠ½ΡΠ²Π° ΠΎΡ ΡΠ°Π·Π½ΠΎΠΎΠ±ΡΠ°Π·ΠΈΠ΅ΡΠΎ ΠΎΡ ΠΎΠΏΡΠΈΠΈ, Π½Π°Π»ΠΈΡΠ½ΠΈ Π² Nim 2.0, ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΠΉΠΊΠΈ Π΅Π΄ΠΈΠ½Π΅Π½ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΠΈΡΠ°Π½ ΡΠ΅ΠΆΠΈΠΌ: "mm:atomicArc". Π’ΠΎΠ·ΠΈ ΡΠ΅ΠΆΠΈΠΌ ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π°Π²Π° Π½Π° Π±ΡΠΎΠ΅Π½Π΅ Π½Π° ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Π°ΡΠΎΠΌΠ°ΡΠ½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈ ΡΡΡ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ° Π½Π° ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ²Π°Π½Π΅ (move semantics) ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠΈ ΠΏΡΠΈ ΡΠ½ΠΈΡΠΎΠΆΠ°Π²Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠ°, ΠΊΠΎΠ΅ΡΠΎ ΡΠ±Π»ΠΈΠΆΠ°Π²Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Ρ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈΡΠ΅, ΠΏΡΠΈΠ΅ΡΠΈ Π² Rust ΠΈ ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π΅Π½ C++.
ΠΠ»ΡΡΠΎΠ²ΠΎΡΠΎ Π½ΠΎΠ²ΠΎΠ²ΡΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΅ ΡΠ²Π½ΠΎ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅ Π½Π° Π°ΡΠΈΠΊΠ»ΠΈΡΠ½ΠΈ ΠΈ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π½ΠΎ ΡΠΈΠΊΠ»ΠΈΡΠ½ΠΈ. ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅ ΡΠ΅ ΡΡΠΈΡΠ°Ρ Π·Π° Π°ΡΠΈΠΊΠ»ΠΈΡΠ½ΠΈ (.acyclic), ΠΊΠΎΠ΅ΡΠΎ Π΅ Π½ΠΎΠ²ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅. ΠΠ° ΡΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ, Π΅ΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΈΡΠ΅ ΠΎΡ ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠΎΡΠΌΠΈΡΠ°Ρ ΡΠΈΠΊΠ»ΠΈΡΠ½ΠΈ ΠΏΡΠ΅ΠΏΡΠ°ΡΠΊΠΈ, Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠ° ΡΠ²Π½Π° Π°Π½ΠΎΡΠ°ΡΠΈΡ Ρ ΠΏΡΠ°Π³ΠΌΠ° .cyclic. ΠΡΠ±Π΅Π»ΡΠ·Π²Π° ΡΠ΅, ΡΠ΅ ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π° Π½ΠΎΠ² Π°Π»Π³ΠΎΡΠΈΡΡΠΌ Π·Π° ΡΡΠ±ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠΈΠΊΠ»ΠΈΡΠ½ΠΈ ΠΏΡΠ΅ΠΏΡΠ°ΡΠΊΠΈ, Π½ΠΎ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΡΠ° ΠΌΡ Π·Π° ΠΈΠ½Π΄ΡΡΡΡΠΈΠ°Π»Π½Π° ΡΠΏΠΎΡΡΠ΅Π±Π° ΠΊΡΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π΅ Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΠ°Π½Π°. ΠΡΠ΅Π΄ΠΈΠΌΡΡΠ²ΠΎΡΠΎ Π½Π° MM Π½Π° Π±Π°Π·Π°ΡΠ° Π½Π° Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠΈ Π΅ Π½Π΅Π³ΠΎΠ²Π°ΡΠ° ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡΡΠ΅ΠΌΠΎΡΡ: ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ΅ΡΡΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°Π½Π΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΉΠ»ΠΎΠ²ΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈ, ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈ ΡΠΎΠΊΠ΅ΡΠΈ, ΠΊΠ°Π½Π°Π»ΠΈ), ΡΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ° Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½ΠΎ ΡΡΠ΅Π· Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠΈΡΠ΅ Π½Π° ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ ΡΠΈΠΏΠΎΠ²Π΅.
ΠΠΎΠ΄Ρ ΠΎΠ΄ΡΡ ΠΊΡΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π² Nimony ΠΏΡΠ΅ΡΡΡΠΏΡ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ. ΠΠ²ΡΠΎΡΡΡ Π½Π° Nim ΠΈΠ·ΡΠ°Π·ΡΠ²Π° Π½Π΅Π΄ΠΎΠ²ΠΎΠ»ΡΡΠ²ΠΎ ΠΎΡ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΈ Π·Π° ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈ ΡΡΡ Π½ΠΎΡΠΎ Π΅ΠΌΡΠ»ΠΈΡΠ°Π½Π΅ ΡΡΠ΅Π· Π°Π»Π³Π΅Π±ΡΠΈΡΠ½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ (sum types). ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ²Π° ΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡΡΠ° Π·Π° ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° Π³ΡΠ΅ΡΠΊΠ°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π² ΡΠ°ΠΌΠΈΡ ΠΎΠ±Π΅ΠΊΡ Ρ Π΄Π°Π½Π½ΠΈ. ΠΠ°ΡΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΡΠ΅ Π΄Π°Π²Π°Ρ: ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π² Π²Ρ ΠΎΠ΄Π½ΠΎ-ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈ ΠΏΠΎΡΠΎΡΠΈ ΡΡΠ΅Π· ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ ΡΡΡΡΠΎΡΠ½ΠΈΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° NaN Π·Π° ΡΠΈΡΠ»Π° Ρ ΠΏΠ»Π°Π²Π°ΡΠ° Π·Π°ΠΏΠ΅ΡΠ°Ρ ΠΈΠ»ΠΈ low(int) Π·Π° Π½Π΅Π²Π°Π»ΠΈΠ΄Π½ΠΈ ΡΠ΅Π»ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ. Π ΡΠ»ΡΡΠ°ΠΈΡΠ΅, ΠΊΠΎΠ³Π°ΡΠΎ ΠΎΠ±Π΅ΠΊΡΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΠ° ΡΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° Π³ΡΠ΅ΡΠΊΠ°ΡΠ°, ΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΏΠΎΡΠΎΠΊΠΎ-Π»ΠΎΠΊΠ°Π»Π½Π° (thread-local) ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π·Π° ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅.
ΠΡΠ΅ ΠΏΠ°ΠΊ, ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΈΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π·Π° ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π° Nim ΠΎΡΡΠ°Π²Π°, Π½ΠΎ Ρ Π΅Π΄Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ ΡΡΠΎΡΠ½Π΅Π½ΠΈΠ΅: Π²ΡΡΠΊΠ° ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°, ΠΊΠΎΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΡΠ΅Π³Π° ΡΡΡΠ±Π²Π° Π·Π°Π΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΎ Π΄Π° Π±ΡΠ΄Π΅ Π°Π½ΠΎΡΠΈΡΠ°Π½Π° Ρpragma {.raises.}. Π’ΠΎΠ²Π° ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½Π΅ Π΅ Π½Π°ΡΠΎΡΠ΅Π½ΠΎ ΠΊΡΠΌ ΡΠ²Π½ΠΎΡΠΎ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»Π½ΠΈ Π½Π΅Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΠΏΡΠ΅Ρ ΠΎΠ΄ΠΈ Π½Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅.
ΠΠ°ΡΠΎ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π° ΠΈΠ»ΠΈ Π΄ΠΎΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ Π²ΡΠ²Π΅ΠΆΠ΄Π° Π½ΠΎΠ² ΠΈΠ·Π±ΠΈΡΠ°Π΅ΠΌ ΡΠΈΠΏ ErrorCode. Π’ΠΎΠ·ΠΈ ΡΠΈΠΏ Π΅ ΡΠΈΠΏΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ΅Π½ ΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΈΠ·ΡΠ΅ΡΠΏΠ°ΡΠ΅Π»Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π²ΡΠΈΡΠΊΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠΈ (Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π½Π° case Π·Π° enum). ErrorCode Π΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠ°Π½ Ρ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΡΠ° Π·Π° ΠΎΡΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈ ΠΊΠΎΠ΄ΠΎΠ²Π΅ Π·Π° Π³ΡΠ΅ΡΠΊΠΈ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΈ, ΠΊΠ°ΡΠΎ POSIX errno, ΠΊΠΎΠ΄ΠΎΠ²Π΅ Π·Π° Π³ΡΠ΅ΡΠΊΠΈ Π½Π° Windows API ΠΈ ΡΡΠ°ΡΡΡΠΈ HTTP. Π¦Π΅Π»ΡΠ° Π΅ Π΄Π° ΡΠ΅ ΡΠ½ΠΈΡΠΈΡΠΈΡΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° Π³ΡΠ΅ΡΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ Π΄Π° ΡΠ΅ ΠΎΡΠΈΠ³ΡΡΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΠΏΡΡΠΊΠ° ΡΡΠ°Π½ΡΠ»Π°ΡΠΈΡ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, "Π΄ΠΈΡΠΊΡΡ Π΅ ΠΏΡΠ»Π΅Π½") Π² ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π°ΡΠΈ ΠΊΠΎΠ΄ΠΎΠ²Π΅ Π½Π° ΡΡΠ°ΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, HTTP 507) Π±Π΅Π· Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½ΠΈΡ. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ErrorCode ΡΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π±Π΅Π· Π·Π°Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ Π² ΠΊΡΠΏΡΠΈΠ½Π°ΡΠ°, ΠΊΠΎΠ΅ΡΠΎ Π΅ ΠΊΡΠΈΡΠΈΡΠ½ΠΎ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠΈΡΡΠ°ΡΠΈΠΈ Ρ Π½Π΅Π΄ΠΎΡΡΠΈΠ³ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ (OOM).
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΡΠΈΡΡΠ°ΡΠΈΠΈ Ρ ΠΈΠ·ΡΠ΅ΡΠΏΠ²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° (Out of Memory, OOM) Π² Nimony Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° Ρ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΠΎΡ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π°ΡΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° Π½Π° Π°Π²Π°ΡΠΈΠΉΠ½ΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° ("die on OOM"). ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ²Π° ΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ ΡΠ°Π±ΠΎΡΠ°. ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΈΡΠ΅ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ ΠΏΠΎ Π·Π°Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΡΡ Π·Π°ΡΠ²ΠΊΠ°ΡΠ°, ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ ΠΏΡΠ΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ oomHandler. ΠΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π·Π°ΠΏΠΈΡΠ²Π° ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° Π½Π΅ΡΡΠΏΠ΅ΡΠ½Π°ΡΠ° Π·Π°ΡΠ²ΠΊΠ° Π² ΠΏΠΎΡΠΎΠΊΠΎΠ²ΠΎ Π»ΠΎΠΊΠ°Π»Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ. Π‘ΡΡΡΠΎΡΠ½ΠΈΠ΅ΡΠΎ Π½Π° Π½Π΅Π΄ΠΎΡΡΠΈΠ³ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ Π·Π° ΡΠ΅ΠΊΡΡΠΈΡ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½ΠΎ ΡΡΠ΅Π· ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° threadOutOfMem().
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° oomHandler, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π° Π»ΠΎΠ³Π²Π°Π½Π΅ ΠΈΠ»ΠΈ Π°Π²Π°ΡΠΈΠΉΠ½ΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ, Π°ΠΊΠΎ ΡΠ°ΠΊΠΎΠ²Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΅ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π½ΠΎ. ΠΠ°ΠΆΠ΅Π½ Π°ΡΠΏΠ΅ΠΊΡ Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ Π·Π° ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ½ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ (ref object), ΠΊΠΎΠΈΡΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π·Π°Π²ΡΡΡΠ°Ρ Ρ Π½Π΅ΡΡΠΏΠ΅Ρ ΠΏΠΎΡΠ°Π΄ΠΈ OOM. Π Nimony ΡΠ΅Π·ΡΠ»ΡΠ°ΡΡΡ ΠΎΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ΅Π· new ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΈ) ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ nil, Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ ΠΏΡΠΈΠ½ΡΠΆΠ΄Π°Π²Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ Ρ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ ΠΎΠΏΡΠΈΠΎΠ½Π°Π»Π½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ (Option), ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΡΠ²Π° Π³ΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ ΡΠ°Π·ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½Π΅ Π½Π° Π½ΡΠ»Π΅Π² ΡΠΊΠ°Π·Π°ΡΠ΅Π». Π ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π½Π° ΠΏΡΠΎΡΠ΅Π΄ΡΡΠΈ, Π°Π½ΠΎΡΠΈΡΠ°Π½ΠΈ {.raises.}, Π²ΡΡΠ½Π°ΡΠ°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ nil ΠΌΠΎΠΆΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π° Π² ErrorCode.OutOfMemError.
ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡΡ Π½Π° ΠΎΠ±ΠΎΠ±ΡΠ΅Π½ΠΎΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ (generics) Π² Nimony Π΅ ΡΡΡΠ²ΡΡΡΠ΅Π½ΡΡΠ²Π°Π½ Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ Nim 2.0. ΠΡΠ½ΠΎΠ²Π½ΠΎΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π΅, ΡΠ΅ ΠΏΡΠ»Π½Π°ΡΠ° ΡΠΈΠΏΠΎΠ²Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΎΠ±ΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ΄ ΡΠ΅Π³Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π½Π° Π΅ΡΠ°ΠΏΠ° Π½Π° Π½Π΅Π³ΠΎΠ²ΠΎΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅, Π° Π½Π΅ ΡΠ°ΠΌΠΎ ΠΏΡΠΈ ΠΈΠ½ΡΡΠ°Π½ΡΠΈΡΠ°Π½Π΅ΡΠΎ ΠΌΡ Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅. ΠΡΠ°ΠΊΠ²Π° ΡΠ΅ ΡΠΎΠ²Π° Π΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ Π½Π° ΠΏΠΎ-ΡΠ°Π½Π΅Π½ Π΅ΡΠ°ΠΏ ΠΎΡ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ°, Π΄Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈ ΠΏΠΎ-ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ²Π½ΠΈ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π·Π° Π³ΡΠ΅ΡΠΊΠΈ ΠΈ Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° ΠΎΡ ΡΡΡΠ°Π½Π° Π½Π° ΡΡΠ΅Π΄ΡΡΠ²Π°ΡΠ° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° (IDE), ΠΏΠΎ-ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎΡΠΎ Π΄ΠΎΠΏΡΠ»Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ΄Π°.
ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈΡΠ΅ (concepts), ΠΊΠΎΠΈΡΠΎ Π²Π΅ΡΠ΅ ΠΏΡΠΈΡΡΡΡΠ²Π°Ρ Π² Nim, Π·Π°ΠΏΠ°Π·Π²Π°Ρ ΡΠ²ΠΎΡΡΠ° ΡΠΎΠ»Ρ ΠΊΠ°ΡΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΡΠΌ Π·Π° ΡΡΠ°ΡΠΈΡΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡΠ° ΠΊΡΠΌ ΡΠΈΠΏΠΎΠ²Π΅ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΠΎΠ±ΠΎΠ±ΡΠ΅Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ ΡΠΈΠΏΠΎΠ²Π΅. Π’Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ ΡΠΎΡΠΌΠ°Π»Π½ΠΎ Π΄Π° ΡΠ΅ ΡΡΠΎΡΠ½ΠΈ Π½Π° ΠΊΠ°ΠΊΠ²ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΡΠ³ΠΎΠ²Π°ΡΡ ΡΠΈΠΏΡΡ, Π·Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ Π² ΡΠΎΠ·ΠΈ ΠΎΠ±ΠΎΠ±ΡΠ΅Π½ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ.
Nimony ΡΠ΅ ΡΡΡΠ΅ΠΌΠΈ ΠΊΡΠΌ ΡΠ½ΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π½Π° ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠ΅ Π½Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΠΏΠΎΠ΄ Π΅Π΄ΠΈΠ½Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ spawn. Π Π΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π΄Π°Π»ΠΈ Π·Π°Π΄Π°ΡΠ°ΡΠ°, ΡΡΠ°ΡΡΠΈΡΠ°Π½Π° ΡΡΠ΅Π· spawn, ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Π² ΡΡΡΠΈΡ ΠΏΠΎΡΠΎΠΊ (Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ) ΠΈΠ»ΠΈ Π² ΠΎΡΠ΄Π΅Π»Π΅Π½ ΠΏΠΎΡΠΎΠΊ ΠΎΡ ΠΏΡΠ» (ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎ), ΡΠ΅ Π²Π·Π΅ΠΌΠ° ΠΎΡ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ. Π’ΠΎΠ²Π° ΠΏΠΎΡΡΠ°Π²Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Π½ΠΈΡ Π·Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈΡΠ΅, ΠΏΡΠ΅Π΄Π°Π²Π°Π½ΠΈ Π½Π° spawn: ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΈ Π·Π° ΠΏΠΎΡΠΎΠΊΠ°.
ΠΡΡΡΠ΅ΡΠ½Π°ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΌΠΎΠ΄Π΅Π»Π° Π½Π° ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠΈΡ ΡΠ΅ Π±ΡΠ΄Π΅ ΠΎΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ΅Π½ΠΈΡ (continuations), Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π² ΡΡΠΈΠ» Π½Π° ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ΅Π½ΠΈΡ (Continuation-Passing Style, CPS). ΠΠ°Π±Π΅Π»ΡΠ·Π²Π° ΡΠ΅, ΡΠ΅ ΡΠ°ΠΌΠ°ΡΠ° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ spawn Π½Π΅ Π΅ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° ΠΊΠ°ΡΠΎ Π²Π³ΡΠ°Π΄Π΅Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π½Π° Π΅Π·ΠΈΠΊΠ°, Π° ΠΊΠ°ΡΠΎ ΠΏΠ»ΡΠ³ΠΈΠ½ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ°.
ΠΠ°ΡΠ°Π»Π΅Π»ΠΈΠ·ΠΌΡΡ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π° ΠΊΠ°ΡΠΎ ΠΏΠΎ-ΠΏΡΠΎΡΡΠ° Π·Π°Π΄Π°ΡΠ° Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΡΠ°. ΠΠ° Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΡΡΠΎ ΠΏΠ°ΡΠ°Π»Π΅Π»Π΅Π½ ΠΊΠΎΠ΄, Π½Π°ΡΠΎΡΠ΅Π½ ΠΊΡΠΌ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΌΠ°ΡΠΈΠ²ΠΈ ΠΎΡ Π΄Π°Π½Π½ΠΈ), Nimony ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ, ΠΊΠ°ΡΠΎ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΈ ΡΠΈΠΊΠ»ΠΈ for, ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π²Π°Π½ΠΈ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° Β«||Β». Π’ΠΎΠ²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡ ΠΎΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΡΠΎΠΊΠ° (flow vars), ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ ΡΠ΄ΠΎΠ±Π½ΠΎ Π·Π° Π·Π°Π΄Π°ΡΠΈ Π² Π½Π°ΡΡΠ½ΠΈ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Π·Π° GPU.
Π‘ΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Nim, ΠΈΠ·Π²Π΅ΡΡΠ½Π° ΡΡΡ ΡΠ²ΠΎΠΈΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΠΈ, Π² Nimony Π΅Π²ΠΎΠ»ΡΠΈΡΠ° ΠΊΡΠΌ ΠΏΠ»ΡΠ³ΠΈΠ½ΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° (compiler plugins). ΠΠ»ΡΠ³ΠΈΠ½ΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π°Ρ ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ° Π² Π½Π°ΡΠΈΠ²Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° Π½Π° ΠΏΠΎ-ΠΊΡΡΠ½ΠΈ Π΅ΡΠ°ΠΏΠΈ ΠΎΡ ΡΠ°Π±ΠΎΡΠ°ΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ°, ΡΠ»Π΅Π΄ Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ΡΠ΅. Π’ΠΎΠ²Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π½Π° ΠΏΠ»ΡΠ³ΠΈΠ½ΠΈΡΠ΅ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΡΠ»Π°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΠΈΠΏΠΎΠ²Π΅ΡΠ΅ ΠΈ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ°ΡΠ° Π½Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈΡ ΠΊΠΎΠ΄.
ΠΠ±Π΅ΡΠ°Π²Π°Ρ ΡΠ΅ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈ ΠΈ ΠΏΠΎ-ΡΠ΄ΠΎΠ±Π½ΠΈ API Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΠ»ΡΠ³ΠΈΠ½ΠΈ. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠ΅ΠΆΠ΄ΠΈΠ½Π΅Π½ ΡΠΎΡΠΌΠ°Ρ NIF (Nim Intermediate Format) ΡΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ»Π΅ΡΠ½ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π½Π° ΠΊΠΎΠ΄Π°. ΠΠ»ΡΠ³ΠΈΠ½ΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ°Π»Π½ΠΎ ΠΈ ΠΏΠ°ΡΠ°Π»Π΅Π»Π½ΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π΄ΠΎΠΏΡΠΈΠ½Π°ΡΡ Π·Π° ΠΏΠΎΠ²ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ°.
ΠΠΈΠ΄ΠΎΠ²Π΅ ΠΏΠ»ΡΠ³ΠΈΠ½ΠΈ:
- ΠΠ»ΡΠ³ΠΈΠ½ΠΈ Π·Π° ΡΠ°Π±Π»ΠΎΠ½ΠΈ (Template Plugins): ΠΡΠΈΠ²ΡΡΠ·Π²Π°Ρ ΡΠ΅ ΠΊΡΠΌ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΈ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°Ρ ΠΊΠΎΠ΄, ΡΠ²ΡΡΠ·Π°Π½ Ρ ΡΠ΅Ρ Π½ΠΈΡΠ΅ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½ΠΈΡ.
- ΠΠΎΠ΄ΡΠ»Π½ΠΈ ΠΏΠ»ΡΠ³ΠΈΠ½ΠΈ (Module Plugins): ΠΠΎΠ»ΡΡΠ°Π²Π°Ρ AST (Abstract Syntax Tree) Π½Π° ΡΠ΅Π»ΠΈΡ ΠΌΠΎΠ΄ΡΠ» ΠΈ ΡΡΡΠ±Π²Π° Π΄Π° Π²ΡΡΠ½Π°Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½ΠΎ Π΄ΡΡΠ²ΠΎ. ΠΠΎΠ½ΡΡΡΡΠΊΡΠΈΡΡΠ° spawn Π΅ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ ΡΡΠ΅Π· ΠΌΠΎΠ΄ΡΠ»Π΅Π½ ΠΏΠ»ΡΠ³ΠΈΠ½.
- ΠΠ»ΡΠ³ΠΈΠ½ΠΈ Π·Π° ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΈ: ΠΠΎΠ΄ΠΎΠ±Π½ΠΈ ΡΠ° Π½Π° ΠΏΠ»ΡΠ³ΠΈΠ½ΠΈΡΠ΅ Π·Π° ΡΠ°Π±Π»ΠΎΠ½ΠΈ, Π½ΠΎ ΡΠ΅ ΠΏΡΠΈΠ»Π°Π³Π°Ρ ΠΊΡΠΌ ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΈ.
- ΠΠ»ΡΠ³ΠΈΠ½ΠΈ Π·Π° Π½ΠΎΠΌΠΈΠ½Π°Π»Π½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅: ΠΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ, Π·Π°ΠΌΠ΅Π½ΡΠΉΠΊΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° βΠΌΠ°ΠΊΡΠΎΡΠΈ Π·Π° ΠΏΡΠ΅ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΠΌΠΈΠ½ΠΈβ (term rewriting macros) ΠΎΡ Nim. Π’ΠΎΠ²Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ, ΠΊΠ°ΡΠΎ ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°Π½Π΅ Π½Π° Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ ΠΏΡΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΌΠ°ΡΡΠΈΡΠ½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
ΠΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° Π½Π° Nimony Π΅ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄Π΅Π½ ΡΠ°ΠΉΡ, Π½Π°ΠΏΡΠ»Π½ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ ΠΎΡ ΠΠ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½ ΠΎΡ Π°Π²ΡΠΎΡΠ° Π½Π° Nim Π·Π° Π΄ΠΎΡΡΠΎΠ²Π΅ΡΠ½ΠΎΡΡ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
