Войти
ФлеймФорумПрограммирование

Язык программирования nim (6 стр)

Страницы: 1 2 3 4 5 6
#75
17:33, 24 мар. 2018

Кот Зловред
> Однострочный код сложно редактировать в нормальных редакторах кода с
> мультикурсором.

Как раз такое легче мультикурсорить, чем когда оно в столбик

if x1: y1 += 1; z1-= 1; else: do11(); do21(); do31()
if x2: y2 += 1; z2-= 1; else: do12(); do22(); do32()
if x3: y3 += 1; z3-= 1; else: do13(); do23(); do33()


#76
19:10, 24 мар. 2018

Sbtrn. Devil
Всё испортили.

1 frag / 2 deaths
Это называется китайский код и тебе должно быть стыдно.

#77
19:26, 24 мар. 2018

Кот Зловред
При попытке сделать такой код не-китайским чаще всего получается вместо 10 одинаковых строк 20 разных.

#78
19:45, 24 мар. 2018

1 frag / 2 deaths
Я не предлагаю конвертировать китайский код в индусский.

#79
20:22, 24 мар. 2018

Почитал гайд по Nim с официального сайта и скажу свое мнение с дивана.

Я так и не понял, а в чем "вау!" то? Что так возбудило Платова в этом языке, может он под коксом был?
Чем это лучше, скажем, шарпа? Только питоновским синтаксисом и прямой компиляцией в машкод? Я не хейтер питона, мне нравится использовать питон для того, для чего он весьма удобен - прототипирование алгоритмов, особенно в совокупности с интерактивным режимом. Но лишь питоновский синтаксис - это совсем не то, за что Nim можно было бы наградить званием "серебрянной пули".

Сложилось ощущение, что авторы просто поставили себе цель "а давайте сделаем компилируемый статически типизированный питон". И при этом проигнорировали и оставили кучу граблей, от которых пытаются избавиться в современных ЯП.

- null во всей своей красе - nil. Все переменные ref-типа по умолчанию инициализируются nil. Да здравствует паранойя "А вдруг мне передали  nil ???!!!" в каждой функции (или да здравствует нежданный NRE). Что мешало вообще запретить ссылке ссылаться на что либо, кроме существующего объекта? Необходимость указать факт остутствия объекта? Для таких вещей есть алгебраические типы + pattern matching, и более того, в Nim даже есть вариация на тему алгебраических типов (Object variants), но ее не использовали, и вместо реализации pattern-matching обмазали исключением FieldError. Можно бьло бы пусть и не полноценные алгебраические типы, а хотя бы ЯВНО объявляемую nullable-ссылку, которую разадресовывать можно ТОЛЬКО в совокупности с проверкой на nil и никак иначе.

- Неявная переменная result. Вместо того, чтоб предупредить программера, что он ошибся, написав return без аргумента в функции, которая должна возвратить значение, они молча вернут дефолтное значение, которым проинициализируется неявная переменная result. Зашибись (особенно в совокупности с предыдущим)!

- Дофига вычислительных операций (например, над диапазонами или перечислениями), где при любом неосторожном движении будет вылетать исключение. При этом никто не предупреждает программера об этом. Забыл обмазать проверкой - получи исключение, а забыл его перехватить - получи вылет программы. Опять же, что мешало заюзать принудительный pattern-матчинг в случаях, когда подразумевается неявное рассмотрение диапазонов или перечислений как целочисленных значений? (При хранении, копировании, сравнении с константами или даже приведении к строке этого можно и не делать).
Сюда же и OutOfRange при индексации массивов или секвенсов.

- сомнительный вариант синтаксиса обратной индексации через ^. У нормальных людей такое делают через отрицательные индексы, которые ни за что не перепутаешь с положительными. Хотя, может быть это субъективно, и кому-то ^ перед числом будет резко бросаться в глаза.

- бесскобочный вызов методов. Тут тоже, конечно, субъективно, но, ИМХО, это только будет вызывать путаницу в случаях работы с Procedural type

Обидно за потраченное время :(

#80
20:31, 24 мар. 2018

Dmitry_Milk
> У нормальных людей такое делают через отрицательные индексы, которые ни за что
> не перепутаешь с положительными.
Ты пошутил, да? Для рантаймово вычисленного значения особенно.

#81
20:49, 24 мар. 2018

1 frag / 2 deaths
> Ты пошутил, да? Для рантаймово вычисленного значения особенно.

По этому замечанию согласен. Но остальное пока в силе.

#82
21:31, 24 мар. 2018

Dmitry_Milk
> По этому замечанию согласен. Но остальное пока в силе.
Зашибись вообще, то есть a[-1] это одно, а a[zetZero()-1] это другое?

#83
21:55, 24 мар. 2018

Dmitry_Milk
> компилируемый статически типизированный питон
Ну и что тебе не нравится?

#84
23:19, 24 мар. 2018

1 frag / 2 deaths
> Зашибись вообще

"Остальное" - я имел в виду остальные пункты: nil reference, implicit result и места, где следовало бы компилятором принудить программера явно рассматривать альтернативы, а не кидать исключения изнутри (все равно за кулисами перед выкидыванием исключения эта проверка проводится, так что от вынесения этой проверки на явный уровень производительность не ухудшилась бы).

Кот Зловред
> Ну и что тебе не нравится?

Перечисленные мной грабли. А питоноподобный синтаксис - хорошо (по крайней мере для любителей питона), но недостаточно, чтоб заявлять, что Nim это язык мечты.

#85
1:22, 25 мар. 2018

Dmitry_Milk
Макросы, рефлексия, чудеса во время компиляции - вполне себе поводы для радости. Очень жаль, что ты дальше синтаксиса ничего не видишь.

Никому не рекомендую его использовать. Но, как язык, Nim лично мне нравится.

Страницы: 1 2 3 4 5 6
ФлеймФорумПрограммирование

Тема в архиве.