Вийшов реліз мови програмування Nim 1.6.0: що вдосконалили

Опубліковано реліз мови системного програмування Nim 1.6.0, який готували приблизно рік. Ця мова використовує статичну типізацію і створена з огляду на Pascal, C++, Python і Lisp.

Особливості мови Nim

Відомо, що вихідний код на мові Nim компілюється у виконання на C, C++ або JavaScript. Надалі отриманий C/C++ код компілюється в виконуваний файл за допомогою будь-якого доступного компілятора (clang, gcc, icc, Visual C++), що дозволяє домогтися продуктивності, близької до Сі, якщо не враховувати витрати на виконання збирача сміття.

За аналогією з Python у Nim як роздільники блоків застосовуються відступи. Також підтримуються засоби метапрограмування і можливості для створення предметно-орієнтованих мов (DSL). Код проєкту поставляється під ліцензією MIT.

Основні зміни в новому випуску

Насамперед, додано клас iterable[T] з реалізацією типу для ітераторів.

template sum [T] (a: iterable [T]): T =

var result: T

for ai in a: result + = ai

result

assert sum (iota (3)) == 0 + 1 + 2 # або 'iota (3) .sum'

Також додана експериментальна підтримка анотацій «.effectsOf» для вибіркового застосування ефектів.

when defined (nimHasEffectsOf):

{.Experimental: "strictEffects".}

else:

{.Pragma: effectsOf.}

proc mysort (s: seq; cmp: proc (a, b: T): int) {.effectsOf: cmp.}

А ще — запропоновано новий синтаксис імпорту «import foo {.all.}», що дозволяє імпортувати не тільки публічні, але й приватні символи. Для доступу до приватних полів об’єктів додані модулі std/importutils і API privateAccess.

from system {.all.} as system2 import nil

echo system2.ThisIsSystem

import os {.all.}

echo weirdTarget

Крім того, додана експериментальна підтримка операторів, що починаються з точки, які можна використовувати для реалізації динамічних полів.

import std / json

template '.?' (a: JsonNode, b: untyped {ident}): JsonNode =

a [astToStr (b)]

let j =% * { "a1": { "a2": 10}}

assert j.?a1.?a2.getInt == 10

Своєю чергою в аргументах блоку дозволено вказівку додаткових параметрів.

template fn (a = 1, b = 2, body1, body2) = discard

fn (a = 1):

bar1

do:

bar2

До того ж, реалізована підтримка литералів, які визначаються користувачем (наприклад, «-128’bignum’»).

func ` 'big` * (num: cstring): JsBigInt {.importjs:" BigInt (#) ".}

assert 0xffffffffffffffff'big == (1'big shl 64'big) - 1'big

Що ще змінили

У компіляторі реалізована команда «—eval: cmd» для безпосереднього запуску команд на мові Nim із командного рядка, наприклад, ’nim —eval: "echo 1«’.

До інших зміни можна віднести такі:

  • надано підтримку створення власних розширень для бекенд nimscript;
  • значно розширені повідомлення про помилки, в яких забезпечено показ пов’язаного з помилкою контексту. Реалізовані налаштовувані попередження компілятора;
  • значно покращено роботу складальників сміття «—gc: arc» і «—gc: orc»;
  • у всіх бекендах поліпшена точність і продуктивність коду для парсингу цілих чисел і чисел із плаваючою комою;
  • покращена сумісність бекендів JS, VM і nimscript із модулями, які раніше працювали тільки з бекендом C (наприклад, модуль std/prelude). Налагоджено тестування модулів stdlib із бекендами C, JS і VM;
  • додано підтримку чіпа Apple Silicon/M1, 32-розрядних систем RISC-V, armv8l і CROSSOS;
  • додано модулі std/jsbigints, std/tempfiles і std/sysrand. Внесено значні поліпшення в модулі system, math, random, json, jsonutils, os, typetraits, wrapnils, lists і hashes.


Раніше на DOU вийшла стаття про цю мову програмування — «Nim: идеальный язык программирования».

Також велося її активне обговорення на Форумі.


Крім того, нещодавно ми розповідали про особливості новоствореної мови програмування Ć.

👍НравитсяПонравилось1
В избранноеВ избранном0
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Мова прикольна, писав на ній 2 роки але тулзи дуже туго розвиваються і навіть підсвітка синтаксису в вс код не завжди працює.

Дебаг між іншим теж не працює і документація по рантайму або неповна або бреше. Андреас Румпф, Домінік Пічета та Юрій Глухов — це люди, яким я навряд чи пробачу ту кількість нервів, яку я витратив під час пошуку проблем в коді на нім.

Враження за більш ніж рік використання дуже погані. Найгірша мова, якою мені доводилося писати код. Неймовірно радий, що це скінчилося.

Подписаться на комментарии