Новая вСрсия языка программирования Nim 0.20

Бостоялся Ρ€Π΅Π»ΠΈΠ· языка систСмного программирования Nim 0.20.0. Π―Π·Ρ‹ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ создан с оглядкой Π½Π° Pascal, C++, Python ΠΈ Lisp. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π½Π° языкС Nim компилируСтся Π² прСдставлСниС Π½Π° C, C++ ΠΈΠ»ΠΈ JavaScript. Π’ дальнСйшСм ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ C/C++ ΠΊΠΎΠ΄ компилируСтся Π² исполняСмый Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ любого доступного компилятора (clang, gcc, icc, Visual C++), Ρ‡Ρ‚ΠΎ позволяСт Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π±Π»ΠΈΠ·ΠΊΠΎΠΉ ΠΊ Π‘ΠΈ, Ссли Π½Π΅ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ сборщика мусора. По Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с Python Π² Nim Π² качСствС Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ Π±Π»ΠΎΠΊΠΎΠ² ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ отступы. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ срСдства мСтапрограммирования ΠΈ возмоТности для создания ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языков (DSL). Код ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° поставляСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MIT.

Выпуск Nim 0.20 ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ Π² Ρ€Π΅Π»ΠΈΠ·Ρ‹ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ вСрсии 1.0, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉ нСсколько Π½Π°Ρ€ΡƒΡˆΠ°ΡŽΡ‰ΠΈΡ… ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для формирования ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠΈ, которая зафиксируСт состояниС языка. ВСрсия 1.0 прСподносится ΠΊΠ°ΠΊ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ выпуск с Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ сроком ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ сохранСниС ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости Π² стабилизированной части языка. ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π² компиляторС Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ доступСн ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π·Π²ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π½ΠΎΠ²Ρ‹Π΅ возмоТности, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°Ρ€ΡƒΡˆΠ°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ.

Из ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π² Nim 0.20 ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ:

  • «Not» Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ всСгда являСтся ΡƒΠ½Π°Ρ€Π½Ρ‹ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ, Ρ‚.Π΅. выраТСния Π²ΠΈΠ΄Π° «assert(not a)» Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ нСдопустимы ΠΈ допускаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ «assert not a»;
  • Π’ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ТСсткиС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ прСобразования Ρ†Π΅Π»Ρ‹Ρ… ΠΈ вСщСствСнных чисСл Π½Π° этапС компиляции, Ρ‚.Π΅. Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ «const b = uint16(-1)» Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ ошибки, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ -1 Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ Π² Ρ†Π΅Π»Ρ‹ΠΉ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ;
  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½Π° распаковка ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ΠΉ для констант ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ².
    НапримСр, сСйчас ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ присвоСния Π²ΠΈΠ΄Π° ‘const (d, e) = (7, «eight»)’ ΠΈ «for (x, y) in f»;

  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½Π° инициализация ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ…ΡΡˆΠ΅ΠΉ ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†. НапримСр, послС объявлСния «var s: HashSet[int]» ΠΌΠΎΠΆΠ½ΠΎ сразу Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ «s.incl(5)», Ρ‡Ρ‚ΠΎ Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎ ΠΊ ошибкС;
  • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ошибок для ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, связанных с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ «case» ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ индСкса массива;
  • Π—Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ измСнСния Π΄Π»ΠΈΠ½Ρ‹ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² процСссС ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru