ΠΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ Π΅ ΡΠ΅Π»ΠΈΠ·ΡΡ Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Nim 2.2.6. ΠΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° ΠΈΠ·Π»Π΅Π·Π΅ ΡΠ΅ΡΡ ΠΌΠ΅ΡΠ΅ΡΠ° ΡΠ»Π΅Π΄ Π²Π΅ΡΡΠΈΡ 2.2.4 ΠΈ Π²ΠΊΠ»ΡΡΠ²Π° 141 ΠΊΠΎΠΌΠΈΡ Ρ ΠΊΠΎΡΠ΅ΠΊΡΠΈΠΈ Π½Π° Π³ΡΠ΅ΡΠΊΠΈ ΠΈ ΠΏΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°. Nim Π΅ ΡΡΠ°ΡΠΈΡΠ½ΠΎ ΡΠΈΠΏΠΈΠ·ΠΈΡΠ°Π½ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌ Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ, Π²Π΄ΡΡ Π½ΠΎΠ²Π΅Π½ ΠΎΡ Python, ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Π½Π° Π½ΠΈΠ²ΠΎ Lisp. ΠΠ·ΠΈΠΊΡΡ ΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ° Π² C, C++ ΠΈ JavaScript, ΠΎΡΠΈΠ³ΡΡΡΠ²Π°ΠΉΠΊΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π½Π° Π½ΠΈΠ²ΠΎ C ΠΏΡΠΈ ΠΈΠ·ΡΠ°Π·ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π½Π° Π²ΠΈΡΠΎΠΊΠΎΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½ΠΈ Π΅Π·ΠΈΡΠΈ. ΠΠΎΠ΄ΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ ΠΏΠΎΠ΄ MIT Π»ΠΈΡΠ΅Π½Π·.
ΠΠ»ΡΡΠΎΠ²ΠΈΡΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ Π½Π° Nim Π²ΠΊΠ»ΡΡΠ²Π°Ρ ΠΌΠΎΡΠ½Π° ΡΠΈΡΡΠ΅ΠΌΠ° ΠΎΡ ΠΌΠ°ΠΊΡΠΎΡΠΈ, ΡΠ°Π±ΠΎΡΠ΅ΡΠΈ Π½Π° AST ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ°, ΡΠ°Π·Π²ΠΈΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π° ΠΎΠ±ΠΎΠ±ΡΠ΅Π½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΈ, ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ (multiple dispatch), Π΄Π΅ΡΠ΅ΡΠΌΠΈΠ½ΠΈΡΠ°Π½ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° Ρ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ (ARC/ORC, refc, ΠΌΠ°ΡΠΊΠΈΡΠ°Π½Π΅-ΠΈ-ΡΠΈΡΡΠ΅Π½Π΅), Π²Π³ΡΠ°Π΄Π΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° async/await Π·Π° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ ΠΈ FFI Π·Π° Π»Π΅ΡΠ½Π° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ C/C++/JavaScript. Nim ΡΠ΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΎΠ½ΠΈΡΠ° ΠΊΠ°ΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠ΅Π½ Π΅Π·ΠΈΠΊ, ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΡ Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ Π΄ΠΎ ΡΠ΅Π±-ΡΡΡΠ²ΡΡΠΈ, Ρ Π°ΠΊΡΠ΅Π½Ρ Π²ΡΡΡ Ρ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΠ°, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡΠ° Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΈ ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎΡΠΎ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ°.
ΠΠ»ΡΡΠΎΠ²ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ:
- ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° move-ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ°ΡΠ° Π·Π° ΠΏΠΎΠ»Π΅ΡΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ. ΠΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ Π½Π°ΡΡΠΈ Π΄Π° ΡΠ°Π·ΠΏΠΎΠ·Π½Π°Π²Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΠΏΡΠΈΠ»Π°Π³Π°Π½Π΅ Π½Π° move-ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΈ Π²ΡΡΡΠ°Π½Π΅ Π½Π° ΠΏΠΎΠ»Π΅ΡΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ. ΠΡΠ΅Π΄ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ ΠΎΡ Π²ΠΈΠ΄Π° βreturn obj.fieldβ Π²ΠΎΠ΄Π΅Ρ
Π° Π΄ΠΎ ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ, ΡΠ΅Π³Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ ΠΊΠΎΡΠ΅ΠΊΡΠ½ΠΎ ΠΏΡΠΈΠ»Π°Π³Π° ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ²Π°Π½Π΅: proc getField(obj: MyObject): string = return obj.field # Π‘Π΅Π³Π° move Π²ΠΌΠ΅ΡΡΠΎ copy
Π’ΠΎΠ²Π° Π΅ ΠΎΡΠΎΠ±Π΅Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ Π·Π° ΡΠ΅ΠΆΠΊΠΈ ΡΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ (ΡΡΡΠΈΠ½Π³ΠΎΠ²Π΅, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡΠΈ, ΠΎΠ±Π΅ΠΊΡΠΈ Ρ ΡΠ΅ΡΡΡΡΠΈ), ΠΊΡΠ΄Π΅ΡΠΎ ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°Π½Π΅ΡΠΎ Π½Π° Π½Π΅Π½ΡΠΆΠ½ΠΎ ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅ Π΄Π°Π²Π° Π·Π½Π°ΡΠΈΡΠ΅Π»Π΅Π½ ΡΡΡΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π±Π΅Π· ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΠΊΠΎΠ΄Π°.
- ΠΡΠ»Π½Π° ΠΏΡΠ΅ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° closure-ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΈΡΠ΅ Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΡΡ Π·Π° ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΡ Π½Π° Π·Π°ΠΌΡΡΠΈ-ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΈ Π΅ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΏΡΠ΅Π½Π°ΠΏΠΈΡΠ°Π½, ΠΊΠΎΠ΅ΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ ΡΡΠ°Π±ΠΈΠ»Π½ΠΎΡΡΡΠ° Π½Π° Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΠΈΡ ΠΊΠΎΠ΄ Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΠΎΡΠΈΠ³ΠΈΡΠ°Π½ΠΈ ΡΠ° ΠΊΡΠΈΡΠΈΡΠ½ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ SIGSEGV ΠΏΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° try/except Π½Π΅ Π½Π° Π³ΠΎΡΠ½ΠΎ Π½ΠΈΠ²ΠΎ: iterator problematicIterator(): int {.closure.} = for i in 0..10: try: if i == 5: raise newException(ValueError, Β«testΒ») yield i except ValueError: discard # ΠΠΎ-ΡΠ°Π½ΠΎ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΡΠ΅ SIGSEGV
Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° Π΅ ΡΠ΅ΡΠ΅Π½ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡΡ Ρ Π½Π΅ΠΊΠΎΡΠ΅ΠΊΡΠ½ΠΎ ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² finally-Π±Π»ΠΎΠΊΠΎΠ²Π΅ Π²ΡΡΡΠ΅ Π² closure-ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΈΡΠ΅.
- ΠΠΎΠΏΡΠ°Π²ΠΊΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°
- ΠΡΡΡΡΠ°Π½Π΅Π½ Π΅ ΠΎΡΠ½ΠΎΠ²Π΅Π½ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π² ΡΠ±ΠΎΡΡΠΈΠΊΠ° Π½Π° Π±ΠΎΠΊΠ»ΡΠΊ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΡΠΈΠΊΠ»ΠΈΡΠ½ΠΈ ΡΡΡΡΠΊΡΡΡΠΈ ΠΎΡ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ ΠΈΠ·Ρ ΠΎΠ΄ Π½Π° Π³ΡΠ΅ΡΠΊΠ° "ΠΠ΅Π·Π°ΠΊΠΎΠ½Π΅Π½ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΏΠ°ΠΌΠ΅Ρ". ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠ΅ ΠΎΡ ΡΠ°ΠΌΠΎΡΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°Π½Π΅ Π½Π° Π΅Π·ΠΈΠΊΠ° ΠΈ ΡΠ΅ ΠΏΡΠΎΡΠ²ΡΠ²Π°ΡΠ΅ ΠΏΡΠΈ ΡΠ»ΠΎΠΆΠ½ΠΈ Π³ΡΠ°ΡΠΎΠ²Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ Ρ Π²Π·Π°ΠΈΠΌΠ½ΠΈ ΠΏΡΠ΅ΠΏΡΠ°ΡΠΊΠΈ.
- ΠΠΎΡΠΈΠ³ΠΈΡΠ°Π½ Π΅ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈΡΡ ΡΠ΅Π΄ Π½Π° ΡΠ½ΠΈΡΠΎΠΆΠ°Π²Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡΠΈ, ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Π²Π΅ΡΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄Π΅Π½Π° ΠΏΠ°ΠΌΠ΅Ρ: type Resource = object data: ptr Data Container = object resource: Resource other: OtherResource # Π‘Π΅Π³Π° Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠΈΡΠ΅ ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ Π² ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈΡ ΡΠ΅Π΄: # ΠΏΡΡΠ²ΠΎ other, ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° resource
- Π‘Π±ΠΎΡΡΠΈΠΊΡΡ ORC ΠΏΠΎΠ³ΡΠ΅ΡΠ½ΠΎ Π΅ ΠΎΡΠ±Π΅Π»ΡΠ·Π²Π°Π» ΠΎΠ±ΠΊΡΡΠΆΠ΅Π½ΠΈΡΡΠ° Π½Π° Π½ΡΠΊΠΎΠΈ Π·Π°ΡΠ²Π°ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠ°ΡΠΎ ΡΠΈΠΊΠ»ΠΈΡΠ½ΠΈ, ΠΊΠΎΠ΅ΡΠΎ Π΅ Π²ΠΎΠ΄Π΅Π»ΠΎ Π΄ΠΎ Π·Π°Π±Π°Π²ΡΠ½Π΅ Π½Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ ΠΈΠ»ΠΈ ΡΡΠ΅ΡΠΊΠΈ. Π‘Π΅Π³Π° Π°Π½Π°Π»ΠΈΠ·ΡΡ Π½Π° ΡΠΈΠΊΠ»ΠΈ ΡΠ°Π±ΠΎΡΠΈ ΠΊΠΎΡΠ΅ΠΊΡΠ½ΠΎ.
- ΠΡΡΡΡΠ°Π½Π΅Π½Π° Π΅ ΡΡΠ΅ΡΠΊΠ° Π½Π° ΡΠΎΠΊΠ΅ΡΠΈ Π² asyncnet ΠΏΡΠΈ Π³ΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈ ΡΡΠ³Π»Π°ΡΡΠ²Π°Π½Π΅ Π½Π° TLS-ΡΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅: proc handleClient() {.async.} = var socket = await server.accept() try: await socket.setupSSL() # ΠΡΠΈ Π³ΡΠ΅ΡΠΊΠ° ΡΡΠΊ ΡΠΎΠΊΠ΅ΡΡΡ ΡΠ΅Π³Π° ΡΠ΅ Π·Π°ΡΠ²Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ except SSLError: discard # Π‘ΠΎΠΊΠ΅ΡΡΡ Π²Π΅ΡΠ΅ Π½Π΅ ΠΈΠ·ΡΠΈΡΠ°
- ΠΡΠΈΡΠΈΡΠ½ΠΈ ΠΏΠΎΠΏΡΠ°Π²ΠΊΠΈ Π² ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ°.
- ΠΡΡΡΡΠ°Π½Π΅Π½Π° Π΅ ΡΠ΅Π³ΡΠ΅ΡΠΈΡ, ΠΏΡΠΈ ΠΊΠΎΡΡΠΎ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ°Π½ΠΈ Π² ΠΏΡΠΎΡΠ΅Π΄ΡΡΠΈ Ρ static-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ, ΡΠ΅ ΠΏΡΠ΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π»ΠΈ ΠΏΡΠΈ Π²ΡΡΠΊΠΎ ΠΏΠΎΠ²ΠΈΠΊΠ²Π°Π½Π΅: proc test[N: static int]() = var global {.global.}: array[N, int] global[0] += 1 echo global[0] test[5]() # ΠΠ·Π²Π΅ΠΆΠ΄Π°ΡΠ΅: 1 test[5]() # Π’ΡΡΠ±Π²Π°ΡΠ΅: 2, Π½ΠΎ ΠΈΠ·Π²Π΅Π΄Π΅: 1 (Π±Π΅ΡΠ΅ ΠΏΡΠ΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΎ)
- ΠΠΎΡΠΈΠ³ΠΈΡΠ°Π½Π° Π΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΊΠΎΠ΄ Π·Π° Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π² ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΡΠΎ Π΅ Π²ΠΎΠ΄ΠΈΠ»Π° Π΄ΠΎ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.
- Π Π΅ΡΠ΅Π½ Π΅ Π΄ΡΠ΅Π²Π΅Π½ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π΅Π½ C-ΠΊΠΎΠ΄ ΠΏΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΈ Π·Π° Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π² ΠΊΠΎΠ½Π²Π΅ΡΡΠΎΡΠΈ: converter toInt(x: MyType): int = let global {.global.} = MyType() # ΠΠ΅Π½Π΅ΡΠΈΡΠ°ΡΠ΅ Π½Π΅Π²Π°Π»ΠΈΠ΄Π΅Π½ C-ΠΊΠΎΠ΄ result = global.value
- ΠΡΡΡΡΠ°Π½Π΅Π½ Π΅ ΡΡΠΈΠ² Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° ΠΏΡΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΡ ΡΠΈΠΏ Defect ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° doAssert Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΈ.
- ΠΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΡΠΈΠΏΠΎΠ²Π΅
- ΠΠΎΡΠΈΠ³ΠΈΡΠ°Π½Π° Π΅ Π½Π΅Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° Π²ΡΡΡΠ°Π½Π΅ Π½Π° lent-ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΎΡ case/if ΠΈΠ·ΡΠ°Π·ΠΈ: proc getBest(a, b: string): lent string = if a.len > b.len: return a # ΠΠΎ-ΡΠ°Π½ΠΎ: Π³ΡΠ΅ΡΠΊΠ° ΠΏΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ else: return b
- ΠΡΡΡΡΠ°Π½Π΅Π½ Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡΡ Ρ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎΡΠΎ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ lent-ΠΏΠΎΠ»Ρ Π² ΠΎΠ±ΠΎΠ±ΡΠ΅Π½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅: type Wrapper[T] = object data: lent T proc process[T](w: Wrapper[T]) = echo w.data # Π‘ΡΠΎΠΉΠ½ΠΎΡΡΡΠ° ΡΠ΅Π³Π° ΡΠ΅ Π·Π°ΠΏΠ°Π·Π²Π° ΠΊΠΎΡΠ΅ΠΊΡΠ½ΠΎ
- ΠΡΠ·ΡΡΠ°Π½ΠΎΠ²Π΅Π½Π° Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°ΡΠ° Π·Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°ΡΠ° result Π·Π° ΡΠΈΠΏΠΎΠ²Π΅ Ρ requiresInit, ΠΊΠΎΡΡΠΎ Π±Π΅ΡΠ΅ Π½Π°ΡΡΡΠ΅Π½Π° Π² Π²Π΅ΡΡΠΈΡ 2.2: type MustInit {.requiresInit.} = object value: int proc test(): MustInit = discard # Π‘Π΅Π³Π° ΠΊΠΎΡΠ΅ΠΊΡΠ½ΠΎ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΠ° Π·Π° Π½Π΅ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½ result
- ΠΠΎΠΏΡΠ°Π²Π΅Π½ΠΎ Π΅ ΠΈΠ³Π½ΠΎΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π½Π΅ΠΊΠΎΠΏΠΈΡΡΠ΅ΠΌΠΎΡΡ (Β».noCopyΒ«) Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΡΠΈΠΏ: type Base {.noCopy.} = object Derived = object of Base var a: Derived var b = a # Π‘Π΅Π³Π° Π΅ ΠΊΠΎΡΠ΅ΠΊΡΠ½ΠΎ Π·Π°Π±ΡΠ°Π½Π΅Π½ΠΎ
- ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°
- Π£ΡΠΊΠΎΡΡΠ²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° Β«@Β» Π·Π° ΡΡΠΈΠ²ΠΈΠ°Π»Π½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅: ΠΎΡΡΡΡΠ°Π½Π΅Π½Π° Π΅ ΠΊΡΠΈΡΠΈΡΠ½Π° Π΄Π΅Π³ΡΠ°Π΄Π°ΡΠΈΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° ΠΏΡΠΈ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎΡΡΠΈ ΠΎΡ ΠΌΠ°ΡΠΈΠ²ΠΈ Ρ ΠΏΡΠΎΡΡΠΈ ΡΠΈΠΏΠΎΠ²Π΅: let arr = [1, 2, 3, 4, 5] let s = @arr # ΠΠ΅ΡΠ΅ ΠΈΠ·ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π±Π°Π²Π½ΠΎ, ΡΠ΅Π³Π° Π΅ ΠΎΠΏΡΠΈΠΌΠ°Π»Π½ΠΎ
- ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° vmgen.sameConstant: Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΡΠΊΠΎΡΠ΅Π½Π° Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΡΠ° ΡΡΠ΅Π· ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ Π½Π° ΡΡΠ°Π²Π½Π΅Π½ΠΈΡΡΠ° Π½Π° ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ Π² Π²ΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠ° ΠΈ ΡΡΠΊΡΠ°ΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈΡΠ΅ ΠΏΠΎ Π·Π°Π΄Π΅Π»ΡΠ½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ.
- Π Π°Π·ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° ΠΎΡ cast Π² Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΎ ΠΈΠ·ΡΠ°Π·ΡΠ²Π°Π½Π΅ Π²Π΅ΡΠ΅ Π½Π΅ ΠΏΡΠ΅Π΄ΠΈΠ·Π²ΠΈΠΊΠ²Π° Π½Π΅Π½ΡΠΆΠ½ΠΎ ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅: let data = cast[ptr MyType](address)[] # Π‘Π΅Π³Π° Π±Π΅Π· ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅
- Π‘ΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ Π·Π° backend ΠΏΠΎΠΏΡΠ°Π²ΠΊΠΈ
- JavaScript
- =destroy Π·Π° Π½Π΅-var ΡΠΈΠΏΠΎΠ²Π΅: ΠΏΠΎΠΏΡΠ°Π²Π΅Π½Π° Π΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡΡΠ° Π½Π° Π΄Π΅ΡΡΡΡΠΊΡΠΎΡΠΈ, ΠΊΠΎΡΡΠΎ ΠΏΠΎ-ΡΠ°Π½ΠΎ Π²ΠΎΠ΄Π΅ΡΠ΅ Π΄ΠΎ Π³ΡΠ΅ΡΠΊΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ.
- cast[char] Π·Π° ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ > 255: ΡΠ΅Π³Π° ΠΊΠΎΡΠ΅ΠΊΡΠ½ΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΎΡΡΡΠ·Π²Π°Π½Π΅, ΠΊΠ°ΠΊΡΠΎ Π² C-backend.
- ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈ Π² varargs: ΠΎΡΡΡΡΠ°Π½Π΅Π½Π° Π΅ Π³ΡΠ΅ΡΠΊΠ°ΡΠ° Β«Π²ΡΡΡΠ΅ΡΠ½Π° Π³ΡΠ΅ΡΠΊΠ°Β» ΠΏΡΠΈ ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈ Π² varargs.
- C++: ΠΡΠ·ΡΡΠ°Π½ΠΎΠ²Π΅Π½Π° Π΅ L-ΡΡΠΎΠΉΠ½ΠΎΡΡ Π·Π° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΈ ΡΠΈΠΏΠΎΠ²Π΅, ΠΊΠΎΡΡΠΎ Π±Π΅ΡΠ΅ Π½Π°ΡΡΡΠ΅Π½Π° Π² ΡΠ΅Π³ΡΠ΅ΡΠΈΡΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π²Π΅ΡΡΠΈΠΈΡΠ΅ 2.2.2 ΠΈ 2.2.4: # nim cpp var x: CppCompatibleType takeRef(x) # ΠΡΠ½ΠΎΠ²ΠΎ ΡΠ°Π±ΠΎΡΠΈ ΠΊΠ°ΡΠΎ lvalue
- C (refc)
- pthread Π½Π° Π½ΡΠΊΠΎΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠΈ: ΠΏΠΎΠΏΡΠ°Π²Π΅Π½Π° Π΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡΡΠ° Π½Π° ΠΊΠΎΠ΄ Π·Π° pthread_mutex_t Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° .abi;
- ΠΠ±ΠΎΠ±ΡΠ΅Π½ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ Ρ GC-ΠΏΠ°ΠΌΠ΅Ρ: ΠΎΡΡΡΡΠ°Π½Π΅Π½Π° Π΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡΡΠ° Π½Π° Π½Π΅ΠΊΠΎΡΠ΅ΠΊΡΠ΅Π½ C-ΠΊΠΎΠ΄ Π·Π° generic ΡΠΈΠΏΠΎΠ²Π΅, ΡΡΠ΄ΡΡΠΆΠ°ΡΠΈ ΡΠΏΡΠ°Π²Π»ΡΠ²Π°Π½Π° ΠΏΠ°ΠΌΠ΅Ρ;
- JavaScript
- ΠΠΈΡΡΡΠ°Π»Π½Π° ΠΌΠ°ΡΠΈΠ½Π°
- ΠΠ»ΠΎΠ±Π°Π»Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈ ΠΏΡΠΈΡΠ²ΠΎΡΠ²Π°Π½ΠΈΡ: ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠΏΡΠ°Π²ΠΊΠΈ Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π² Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ.
- Case-ΠΎΠ±Π΅ΠΊΡΠΈ ΠΎΡ compileTime proc: ΠΏΠΎΠΏΡΠ°Π²Π΅Π½ΠΎ Π΅ ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° Π²Π°ΡΠΈΠ°Π½ΡΠ½ΠΈ ΠΎΠ±Π΅ΠΊΡΠΈ ΠΊΠ°ΡΠΎ ΡΡΠ°ΡΠΈΡΠ½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ.
- repr Π·Π° Π΄ΡΠ»Π³ΠΈ Π½ΠΈΠ·ΠΎΠ²Π΅ ΠΏΠΎΠ΄ refc: ΠΎΡΡΡΡΠ°Π½Π΅Π½ Π΅ RangeDefect ΠΏΡΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° repr.
- ΠΠΎΠΏΡΠ°Π²ΠΊΠΈ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°
- Π strutils.formatSize Π΅ ΠΏΠΎΠΏΡΠ°Π²Π΅Π½Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ, Π±Π»ΠΈΠ·ΠΊΠΈ Π΄ΠΎ int64.high: echo formatSize(9223372036854775807) # Π‘Π΅Π³Π° ΠΊΠΎΡΠ΅ΠΊΡΠ΅Π½ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ
- Π deques Π΅ Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²Π΅Π½Π° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡΠ° Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠ° items ΠΌΠ΅ΠΆΠ΄Ρ Π²Π΅ΡΡΠΈΠΈΡΠ΅ 2.0.16 ΠΈ 2.2.0.
- Π lists.SinglyLinkedList.remove Π΅ ΠΎΡΡΡΡΠ°Π½Π΅Π½ AssertionDefect ΠΏΡΠΈ ΠΏΡΠ΅ΠΌΠ°Ρ Π²Π°Π½Π΅ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½ΡΠΈ ΠΎΡ Π΅Π΄Π½ΠΎΡΠ²ΡΡΠ·Π°Π½ ΡΠΏΠΈΡΡΠΊ.
- Π tables.withValue Π΅ ΠΏΠΎΠΏΡΠ°Π²Π΅Π½ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ΡΠΎ Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π² ΠΌΠ°ΠΊΡΠΎΡΠ° withValue Π·Π° Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ.
- ΠΡΠΎΠ³ΡΠ°ΠΌΠΈ ΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π° Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ
- Π Β«{.push raises: [].}Β» Π΅ ΠΏΠΎΠΏΡΠ°Π²Π΅Π½ΠΎ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎΡΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΠ°Π½Π΅ Π½Π° Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡΠ΅ ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π° Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ Π·Π° push-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ Ρ raises.
- ΠΡΡΡΡΠ°Π½Π΅Π½ Π΅ Π΅ΡΠ΅ΠΊΡΡΡ ΠΎΡ βΠΈΠ·ΡΠΈΡΠ°Π½Π΅β Π½Π° Π΄Π΅Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡ ΠΈΠ·Π²ΡΠ½ pragma Π±Π»ΠΎΠΊΠΎΠ²Π΅ΡΠ΅: {.push warning[UnusedImport]: off.} import module1 {.pop.} import module2 # ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΡΡΠ° ΡΠ΅Π³Π° ΡΠ° ΠΊΠΎΡΠ΅ΠΊΡΠ½ΠΎ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ΠΈ.
- ΠΡΡΠ³ΠΈ Π²Π°ΠΆΠ½ΠΈ ΠΊΠΎΡΠ΅ΠΊΡΠΈΠΈ
- Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ cstring: Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ ΡΠ° Π»ΠΈΠΏΡΠ²Π°ΡΠΈΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ Β«<Β» ΠΈ Β«cmpΒ» Π·Π° cstring.
- ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈ float: Π²ΠΊΠ»ΡΡΠ΅Π½Π° Π΅ ΠΊΠΎΡΠ΅ΠΊΡΠ½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΈΡΠ΅ Π·Π° ΡΠΈΡΠ»Π° Ρ ΠΏΠ»Π°Π²Π°ΡΠ° ΡΠΎΡΠΊΠ°.
- filterIt ΠΈ rvalue: ΠΏΠΎΠΏΡΠ°Π²Π΅Π½ΠΎ Π΅ Π³ΡΠ΅ΡΠ½ΠΎΡΠΎ Π²ΡΡΡΠ°Π½Π΅ Π½Π° rvalue Π²ΠΌΠ΅ΡΡΠΎ lvalue.
- ΠΡΡΡΡΠ°Π½Π΅Π½ Π΅ FieldDefect ΠΏΡΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° Π΅ΡΠ°ΠΏΠ° Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ.
- hasCustomPragma ΡΠ»Π΅Π΄ ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅ Π½Π° typedesc: Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²Π΅Π½Π° Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° ΡΠ»Π΅Π΄ ΠΊΠΎΠΏΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΈ Π½Π° ΡΠΈΠΏΠΎΠ²Π΅.
- nim doc ΠΈ ΡΠ°ΡΡΠ½ΠΈ ΠΏΠΎΠ»Π΅ΡΠ°: ΠΏΠΎΠΏΡΠ°Π²Π΅Π½ΠΎ Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈ ΠΎΡ ΡΠ°ΡΡΠ½ΠΈ ΠΏΠΎΠ»Π΅ΡΠ° Π·Π° ΠΏΡΠ±Π»ΠΈΡΠ½ΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
