Pull to refresh

Comments 22

Ребят сильно вдохновил «Пайтон», судя по всему.
Они этого и не отрицают:
The language borrows heavily from (in order of impact): Modula 3, Delphi, Ada, C++, Python, Lisp, Oberon.
А как у него с производительностью? Чисто по синтаксису кажется, что на нем было бы удобно всякие расчеты записывать.
Если кратко — производительность сопоставима с С/С++/Rust/Go.
Производительность С/С++/Rust не сопоставима с производительностью Go, последняя сопоставима с таковой у Java/C#.
Ок, оставим C/C++/Rust. Я вписал Go так как он там где-то рядом, если сравнивать с производительностью CPython (ветка началась с него, вот я с ним и сравнивал).
Отличный перевод! Спасибо за проделанную работу!

Мне вот интересно, кто-нибудь уже успел опробовать Nim в реальных задачах? Я, несмотря на свой начальный интерес к языку, так и не нашёл времени и подходящей задачи, так как проект достаточно молод и не хотелось бы совсем всё писать с самого начала.
Пожалуйста. :-) Завтра планирую вторую часть закончить.

Язык довольно интересный, но вот версия 0.12 меня немного смущает. Вон, Rust и Go перевалили уже за 1.0, а Nim что-то не спешит.
На момент старта функции переменная result всегда уже объявлена, так что попытка объявить её снова, например, с помощью var result, приведёт к затенению её обычной переменной с тем же именем. Переменная result всегда инициализируется значением по умолчанию для своего типа. Поэтому ссылочные типы данных будут иметь значение nil, так что их при необходимости придётся инициализировать вручную.
Адище.
  1. Неявная переменная. Получается, ради возврата я должен присвоить в неё, и не могу вернуть оттуда, где у меня уже лежит результат.
  2. Значение по-умолчанию для неявной переменной в случае указательного типа — nil. Получается, если я забыл сделать возврат, я возвращаю nil. Привет, «NoneType has no 'foo' method»!
  3. Мало этого, ещё и маскирование добавили в коктейль. Т.е. если я объявил переменную, а потом сделал return result, что вернётся — моя или неявная?
  1. Как я понял, можно написать return "Вася", а можно — result = "Вася", итог один и тот же.
  2. Это да, оригинальное решение. Думаю, автор языка понадеялся на то, что сложно будет одновременно забыть сделать возврат и проинициализировать то, что собирался возвращать.
  3. Если был явный возврат, то должна вернуться ваша переменная. Если явного возврата нет — возвращается изначальный result, т.е. значение по умолчанию для типа. Фичу явно скопипастили с Паскаля. :-)
Как я понял, можно написать return «Вася», а можно — result = «Вася», итог один и тот же.
В чём смысл этой конструкции тогда?
Полагаю, стремление угодить паскалистам, рубистам, питонщикам и сишникам одновременно. :-) Типа, пишите кто как привык.
Нужно было
proc countup(a, b: int): resultA, resultB int =
  resultA = a + b
  resultB = a * b

Чтобы еще matlab угодить
Этот синтаксис кстати очень неплохой, в отличие от имени «result» по умолчанию. Потому что здесь имена возвращаемых значений объявляются пользователем явно и могут использоваться при расчетах как обычные переменные.
Так уже сделано, почти такое же:

proc test():tuple[x: string, y: int] =
  result.x = "XXX"
  result.y = 42

var (a, b) = test()
echo a
echo b

Ещё в Гоу так можно, чем я нередко пользуюсь.
Спасибо! Всегда интересно пообсуждать языки программирования. Вот несколько вещей, которые на мой взгляд являются недостатками.
1. Синтаксис нечувствительный к регистру (все кроме первых символов), да еще и игнорирующий подчеркивания. Якобы для удобства интеграции с другими языками, а как по мне так наоборот неудобства и путаница.
2. Экспериментальная «фича» (т.е. ее нужно включать явно) — nim-lang.org/docs/manual.html#syntax-strong-spaces — приоритет пользовательских операторов зависит от количества пробелов перед ним.
3. Странный набор операторов для беззнаковых чисел: a +% b, a -% b и т.д.
4. Сама по себе концепция «пользовательских операторов» очень сомнительная и явно не добавляет читаемости.
Подозреваю, что писать на этом языке будет довольно приятно: как хочешь, так и веселись. А вот читать то, что накатали другие, будет не так приятно. :-)
Нечувствительность к регистру и возвращение результата через переменную result — это то, что досталось от Delphi/Pascal. Хоть я и любил Delphi и Pascal в своё время, сейчас же мне кажется, что это не самые лучшие вещи, которые стоило брать в новый язык. Nim в плане философии для меня близок к Ruby — в языке есть 100500 (изощрённых) способов выстрелить себе и тому, кто будет поддерживать написанный код, в ногу.
Sign up to leave a comment.

Articles