Comments 22
Ребят сильно вдохновил «Пайтон», судя по всему.
0
Они этого и не отрицают:
The language borrows heavily from (in order of impact): Modula 3, Delphi, Ada, C++, Python, Lisp, Oberon.
+1
А как у него с производительностью? Чисто по синтаксису кажется, что на нем было бы удобно всякие расчеты записывать.
0
Если кратко — производительность сопоставима с С/С++/Rust/Go.
Вот есть Benchmark'и: github.com/logicchains/LPATHBench/blob/master/writeup.md
А вот есть статья на хабре сравнивающая Nim vs Rust: habrahabr.ru/post/259993
Вот есть Benchmark'и: github.com/logicchains/LPATHBench/blob/master/writeup.md
А вот есть статья на хабре сравнивающая Nim vs Rust: habrahabr.ru/post/259993
0
Если кратко — производительность сопоставима с С/С++/Rust/Go.Производительность С/С++/Rust не сопоставима с производительностью Go, последняя сопоставима с таковой у Java/C#.
+1
Отличный перевод! Спасибо за проделанную работу!
Мне вот интересно, кто-нибудь уже успел опробовать Nim в реальных задачах? Я, несмотря на свой начальный интерес к языку, так и не нашёл времени и подходящей задачи, так как проект достаточно молод и не хотелось бы совсем всё писать с самого начала.
Мне вот интересно, кто-нибудь уже успел опробовать Nim в реальных задачах? Я, несмотря на свой начальный интерес к языку, так и не нашёл времени и подходящей задачи, так как проект достаточно молод и не хотелось бы совсем всё писать с самого начала.
0
На момент старта функции переменная result всегда уже объявлена, так что попытка объявить её снова, например, с помощью var result, приведёт к затенению её обычной переменной с тем же именем. Переменная result всегда инициализируется значением по умолчанию для своего типа. Поэтому ссылочные типы данных будут иметь значение nil, так что их при необходимости придётся инициализировать вручную.Адище.
+5
Можно подробнее?
0
- Неявная переменная. Получается, ради возврата я должен присвоить в неё, и не могу вернуть оттуда, где у меня уже лежит результат.
- Значение по-умолчанию для неявной переменной в случае указательного типа — nil. Получается, если я забыл сделать возврат, я возвращаю nil. Привет, «NoneType has no 'foo' method»!
- Мало этого, ещё и маскирование добавили в коктейль. Т.е. если я объявил переменную, а потом сделал return result, что вернётся — моя или неявная?
+6
- Как я понял, можно написать
return "Вася"
, а можно —result = "Вася"
, итог один и тот же. - Это да, оригинальное решение. Думаю, автор языка понадеялся на то, что сложно будет одновременно забыть сделать возврат и проинициализировать то, что собирался возвращать.
- Если был явный возврат, то должна вернуться ваша переменная. Если явного возврата нет — возвращается изначальный
result
, т.е. значение по умолчанию для типа. Фичу явно скопипастили с Паскаля. :-)
0
Как я понял, можно написать return «Вася», а можно — result = «Вася», итог один и тот же.В чём смысл этой конструкции тогда?
0
Полагаю, стремление угодить паскалистам, рубистам, питонщикам и сишникам одновременно. :-) Типа, пишите кто как привык.
+1
Нужно было
Чтобы еще matlab угодить
proc countup(a, b: int): resultA, resultB int =
resultA = a + b
resultB = a * b
Чтобы еще matlab угодить
+2
Этот синтаксис кстати очень неплохой, в отличие от имени «result» по умолчанию. Потому что здесь имена возвращаемых значений объявляются пользователем явно и могут использоваться при расчетах как обычные переменные.
+2
Так уже сделано, почти такое же:
proc test():tuple[x: string, y: int] =
result.x = "XXX"
result.y = 42
var (a, b) = test()
echo a
echo b
0
Ещё в Гоу так можно, чем я нередко пользуюсь.
0
del
0
Спасибо! Всегда интересно пообсуждать языки программирования. Вот несколько вещей, которые на мой взгляд являются недостатками.
1. Синтаксис нечувствительный к регистру (все кроме первых символов), да еще и игнорирующий подчеркивания. Якобы для удобства интеграции с другими языками, а как по мне так наоборот неудобства и путаница.
2. Экспериментальная «фича» (т.е. ее нужно включать явно) — nim-lang.org/docs/manual.html#syntax-strong-spaces — приоритет пользовательских операторов зависит от количества пробелов перед ним.
3. Странный набор операторов для беззнаковых чисел: a +% b, a -% b и т.д.
4. Сама по себе концепция «пользовательских операторов» очень сомнительная и явно не добавляет читаемости.
1. Синтаксис нечувствительный к регистру (все кроме первых символов), да еще и игнорирующий подчеркивания. Якобы для удобства интеграции с другими языками, а как по мне так наоборот неудобства и путаница.
2. Экспериментальная «фича» (т.е. ее нужно включать явно) — nim-lang.org/docs/manual.html#syntax-strong-spaces — приоритет пользовательских операторов зависит от количества пробелов перед ним.
3. Странный набор операторов для беззнаковых чисел: a +% b, a -% b и т.д.
4. Сама по себе концепция «пользовательских операторов» очень сомнительная и явно не добавляет читаемости.
+3
Подозреваю, что писать на этом языке будет довольно приятно: как хочешь, так и веселись. А вот читать то, что накатали другие, будет не так приятно. :-)
+2
Нечувствительность к регистру и возвращение результата через переменную
result
— это то, что досталось от Delphi/Pascal. Хоть я и любил Delphi и Pascal в своё время, сейчас же мне кажется, что это не самые лучшие вещи, которые стоило брать в новый язык. Nim в плане философии для меня близок к Ruby — в языке есть 100500 (изощрённых) способов выстрелить себе и тому, кто будет поддерживать написанный код, в ногу.+2
Sign up to leave a comment.
Учебное пособие по Nim (часть 1)