Выпуск 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