Новая версия языка программирования 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