ΠΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ ΡΠ΅Π»ΠΈΠ· ΡΠ·ΡΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ 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-ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ² Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ. ΠΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π°ΠΌΡΠΊΠ°Π½ΠΈΠΉ-ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ² ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°Π½, ΡΡΠΎ ΠΊΠ°ΡΠ΄ΠΈΠ½Π°Π»ΡΠ½ΠΎ ΡΠ»ΡΡΡΠΈΠ»ΠΎ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΡ async-ΠΊΠΎΠ΄Π° Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ. ΠΡΠΏΡΠ°Π²Π»Π΅Π½Ρ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π²ΠΊΠ»ΡΡΠ°Ρ 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-ΠΈΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ².
- ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΌΡΡΡΡ
- Π£ΡΡΡΠ°Π½Π΅Π½Π° ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠ±ΠΎΡΡΠΈΠΊΠ΅ ΠΌΡΡΠΎΡΠ° ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΡΡΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΠ°Ρ ΠΌΠΎΠ³Π»Π° ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ ΠΊ Π²ΡΠ²ΠΎΠ΄Ρ ΠΎΡΠΈΠ±ΠΊΠΈ Β«Illegal storage accessΒ». ΠΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π»Π° Ρ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ·ΡΠΊΠ° ΠΈ ΠΏΡΠΎΡΠ²Π»ΡΠ»Π°ΡΡ ΠΏΡΠΈ ΡΠ»ΠΎΠΆΠ½ΡΡ Π³ΡΠ°ΡΠ°Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Ρ Π²Π·Π°ΠΈΠΌΠ½ΡΠΌΠΈ ΡΡΡΠ»ΠΊΠ°ΠΌΠΈ.
- ΠΡΠΏΡΠ°Π²Π»Π΅Π½ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠ½ΠΈΡΡΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠ³ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ ΠΊ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΊ ΡΠΆΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄ΡΠ½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ: 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() # ΠΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ΅ Π·Π΄Π΅ΡΡ socket ΡΠ΅ΠΏΠ΅ΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ Π·Π°ΠΊΡΡΠ²Π°Π΅ΡΡΡ 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: ΡΡΡΡΠ°Π½ΡΠ½ Π²ΡΠ²ΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ Β«internal errorΒ» ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΎΠ² Π² varargs.
- C++: ΠΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° L-valueness Π΄Π»Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΡ ΡΠΈΠΏΠΎΠ² ΡΡΠΎ Π±ΡΠ»ΠΎ ΡΠ»ΠΎΠΌΠ°Π½ΠΎ Π² ΡΠ΅Π³ΡΠ΅ΡΡΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π²Π΅ΡΡΠΈΡΠΌΠΈ 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: ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° Π²Π°ΡΠΈΠ°Π½ΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠ°ΠΊ static-ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ².
- 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
