Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
The language borrows heavily from (in order of impact): Modula 3, Delphi, Ada, C++, Python, Lisp, Oberon.
Если кратко — производительность сопоставима с С/С++/Rust/Go.Производительность С/С++/Rust не сопоставима с производительностью Go, последняя сопоставима с таковой у Java/C#.
На момент старта функции переменная result всегда уже объявлена, так что попытка объявить её снова, например, с помощью var result, приведёт к затенению её обычной переменной с тем же именем. Переменная result всегда инициализируется значением по умолчанию для своего типа. Поэтому ссылочные типы данных будут иметь значение nil, так что их при необходимости придётся инициализировать вручную.Адище.
return "Вася", а можно — result = "Вася", итог один и тот же.result, т.е. значение по умолчанию для типа. Фичу явно скопипастили с Паскаля. :-)Как я понял, можно написать return «Вася», а можно — result = «Вася», итог один и тот же.В чём смысл этой конструкции тогда?
proc countup(a, b: int): resultA, resultB int =
resultA = a + b
resultB = a * b
proc test():tuple[x: string, y: int] =
result.x = "XXX"
result.y = 42
var (a, b) = test()
echo a
echo b
result — это то, что досталось от Delphi/Pascal. Хоть я и любил Delphi и Pascal в своё время, сейчас же мне кажется, что это не самые лучшие вещи, которые стоило брать в новый язык. Nim в плане философии для меня близок к Ruby — в языке есть 100500 (изощрённых) способов выстрелить себе и тому, кто будет поддерживать написанный код, в ногу.
Учебное пособие по Nim (часть 1)