ИзданиС Π½Π° програмиращия Π΅Π·ΠΈΠΊ Nim 2.2.6

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π΅Π½ Π΅ Ρ€Π΅Π»ΠΈΠ·ΡŠΡ‚ Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° систСмно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ 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 Ρ‚ΠΈΠΏΠΎΠ²Π΅, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ΠΈ управлявана ΠΏΠ°ΠΌΠ΅Ρ‚;
  • Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина
    • Π“Π»ΠΎΠ±Π°Π»Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈ присвоявания: мноТСство ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠΈ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° с Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π² Π΅Ρ‚Π°ΠΏΠ° Π½Π° компилация.
    • 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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster