Re[8]: Range Operators для C++
От: omgOnoz  
Дата: 26.07.13 15:54
Оценка: +1 -2
Ай сколько кирпичей, какой вы правильный

Возможно эта библиотека не станет популярной, но может для решения специфических задач пригодиться.
Надо сначала узнать, чем автор руководствовался.
Re: Range Operators для C++
От: Константин Россия  
Дата: 26.07.13 16:50
Оценка: 7 (2) +11
Здравствуйте, kaa.python, Вы писали:

KP>Попалась на глаза довольно интересная (правда пока что глючная) библиотечка для C++, позволяющая делать, например, так:


KP>
KP>int main() {
KP>    vector<int> vec {1,2,3};
KP>    vec - 2;
KP>

KP>[code]

Что мог бы делать этот код:
1. Первая мысль: создать новый вектор, вычесть из каждого элемента 2, и выкинуть результат:
vec — 2; => {-1,0,1}
2. Потом подумал, что наверное это отсечь два последних элемента, и выкинуть результат:
vec — 2; => {1}
3. Потом почитал коменты, и понял, что это удаление двойки, и перезапись vec :
vec — 2; => vec={1,3}
4. Не могу понять, почему это не удалить двойку и выкинуть результат:
vec — 2; => {1,3}

P.S. за модифицирующий оператор минус я бы предложил бы [CENSORED]
Re: Range Operators для C++
От: Константин Россия  
Дата: 26.07.13 17:00
Оценка: :))
Здравствуйте, kaa.python, Вы писали:

KP>Попалась на глаза довольно интересная (правда пока что глючная) библиотечка для C++, позволяющая делать, например, так:


Автор стебётся, библиотека прекрасно поднимает настроение:
++pair                  //  pair.first
pair++                  //  pair.second

stack++                 //  stack.top()
stack--                 //  stack.pop()

rg / value              // да-да-да, и так тоже можно 
rg % value              // 
rg / rg                 // это не равно 1 :)


Слабо догадаться, что делают последние 3 строчки?
Re[2]: Range Operators для C++
От: omgOnoz  
Дата: 26.07.13 17:06
Оценка:
К>rg / value // да-да-да, и так тоже можно
К>rg % value //
К>rg / rg // это не равно 1
К>[/ccode]

К>Слабо догадаться, что делают последние 3 строчки?


Без доки — вообще-то абсолютно все за гранью понимания. Так что без маны никуда.
Re[2]: Range Operators для C++
От: omgOnoz  
Дата: 26.07.13 17:13
Оценка:
А про перегруженные операторы С++ (и Ц подобные языки) уже давно обогнал(и) всех своей очевидностью.
Особенно запись оператора присваивания любого математика в ступор введет.
Re[3]: Range Operators для C++
От: Evgeny.Panasyuk Россия  
Дата: 26.07.13 17:17
Оценка:
Здравствуйте, omgOnoz, Вы писали:

O>А про перегруженные операторы С++ (и Ц подобные языки) уже давно обогнал(и) всех своей очевидностью.

O>Особенно запись оператора присваивания любого математика в ступор введет.

По поводу присваивания согласен — значок должен был быть другой. Но как это относится к выделенному?
Re[8]: Range Operators для C++
От: wander  
Дата: 26.07.13 17:20
Оценка:
Здравствуйте, Abyx:

В целем с тобой согласен, но такая манера писать в контейнеры довольно давно существует в Qt.
Re[4]: Range Operators для C++
От: omgOnoz  
Дата: 26.07.13 17:27
Оценка:
EP>По поводу присваивания согласен — значок должен был быть другой. Но как это относится к выделенному?
Да их могут использовать, как угодно, это не как не контролируется языком.
Re[8]: Range Operators для C++
От: rusted Беларусь  
Дата: 26.07.13 17:41
Оценка:
Здравствуйте, Abyx, Вы писали:

A>потом когда в IO library стали использовать <<, это тоже было нормально. variadic templates не было, и это был единственный нормальный способ писать в поток. cout.write(1).write(2); как-то не смотрится.

A>люди повозмущались (что за cout shift-left 1), но в конце концов привыкли.

Кстати, почему тогда запятую (operator,) для этого не выбрали? Помню читал где-то обоснование, поиском нашлось только вот это: http://stackoverflow.com/questions/4854248/why-are-bitwise-shifts-and-used-for-cout-and-cin Но там про запятую ничего нет.
Re[9]: Range Operators для C++
От: Abyx Россия  
Дата: 26.07.13 17:51
Оценка: -1
Здравствуйте, rusted, Вы писали:

R>Здравствуйте, Abyx, Вы писали:


A>>потом когда в IO library стали использовать <<, это тоже было нормально. variadic templates не было, и это был единственный нормальный способ писать в поток. cout.write(1).write(2); как-то не смотрится.

A>>люди повозмущались (что за cout shift-left 1), но в конце концов привыкли.

R>Кстати, почему тогда запятую (operator,) для этого не выбрали?


потому что с одним оператором проще чем с двумя.
реализация стандартной библиотеки проще, реализация пользовательских операторов проще.
In Zen We Trust
Re: Range Operators для C++
От: __kot2  
Дата: 26.07.13 18:22
Оценка: +2
Здравствуйте, kaa.python, Вы писали:
KP> vec — 2;
KP> vec << 4;
здесь нарушена логика полностью
во-первых запись должна быть вида
vec -= 2
vec <<= 4

раз она как-то меняет вектор, а не просто возвращает результат
во-вторых увидев запись vec << 4 я бы предположил, что к каждому элементу вектора будет применена операция << 4 и возвращен вектор таких значений
vec — 2 логично понимать что 2 будет преобразовано к вектору и будет отнята двойка от всех элементов вектора

бред, короче говоря
Re[8]: Range Operators для C++
От: Шахтер Интернет  
Дата: 26.07.13 18:37
Оценка: +3
Здравствуйте, Abyx, Вы писали:

A>Здравствуйте, kaa.python, Вы писали:


KP>>Здравствуйте, Abyx, Вы писали:


A>>>п*ц. я понимаю что автор кода идиот, но как же печально, что находятся люди которым нравится писать угловые скобочки и прочие закорючки вместо нормальных человеческих слов.

A>>>кулхацкеры млин.

KP>>А ты понимаешь, что бывает мнение отличное от твоего? И то что в ряде языков, подобный синтаксис считается нормальным, а не проявленим "кулхацкерства млин".


A>конечно бывает.

A>есть идиоты, и да, у них тоже есть какие-то мнение.

A>я надеюсь что ты понимаешь что мнения бывают правильные и неправильные.


А ещё бывают субьективные оценочные суждения, про которые нельзя сказать, правильно или нет. Ну типа "мне нравятся брюнетки".
Не надо пытаться свои вкусовые предпочтения навязывать людям. Это занятие контрпродуктивное.
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[2]: Range Operators для C++
От: omgOnoz  
Дата: 26.07.13 18:50
Оценка:
Другой поток мыслей:
Рассмотрим
KP> vec << 4;
как стримовую операцию. Т.е. в конец стрима мы добавляем значение 4
Re[3]: Range Operators для C++
От: __kot2  
Дата: 26.07.13 20:07
Оценка: +1
Здравствуйте, omgOnoz, Вы писали:
O>Другой поток мыслей:
O>Рассмотрим
KP>> vec << 4;
O>как стримовую операцию. Т.е. в конец стрима мы добавляем значение 4
а где тут стрим?
Re[4]: Range Operators для C++
От: omgOnoz  
Дата: 26.07.13 20:37
Оценка:
__>а где тут стрим?
В уме
Re[10]: Range Operators для C++
От: rusted Беларусь  
Дата: 27.07.13 06:50
Оценка:
Здравствуйте, Abyx, Вы писали:

A>Здравствуйте, rusted, Вы писали:


R>>Здравствуйте, Abyx, Вы писали:


A>>>потом когда в IO library стали использовать <<, это тоже было нормально. variadic templates не было, и это был единственный нормальный способ писать в поток. cout.write(1).write(2); как-то не смотрится.

A>>>люди повозмущались (что за cout shift-left 1), но в конце концов привыкли.

R>>Кстати, почему тогда запятую (operator,) для этого не выбрали?


A>потому что с одним оператором проще чем с двумя.

A>реализация стандартной библиотеки проще, реализация пользовательских операторов проще.

Не понятно чем и что проще. И так же два оператора и так:
istream& operator>>(istream&,T&);
ostream& operator<<(ostream&,T const&);

vs
istream& operator,(istream&,T&);
ostream& operator,(ostream&,T const&);


Заодно и проблем с приоритетом операторов не было бы.
Re[2]: Range Operators для C++
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 27.07.13 07:49
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>1. Тут ведь всегда проход по всем элементам (ибо упорядоченность видимо не предполагается)? Слишком много для такой краткой нотации — в итоге на ровном месте будет плодится неэффективность — которую ты даже не заметишь
Автор: kaa.python
Дата: 17.07.13
.


Мы говорим об идее, или о реализации? Реализация может быть сколь угодно корявой, идея — нет.
Re[2]: Range Operators для C++
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 27.07.13 07:51
Оценка:
Здравствуйте, __kot2, Вы писали:

__>здесь нарушена логика полностью

__>во-первых запись должна быть вида
__>vec -= 2
__>vec <<= 4

И получим Scala. Но, нельзя, не знаю даже, жаль или нет.

__>бред, короче говоря


Повторюсь — речь идет не о реализации, а об идее.
Re[3]: Range Operators для C++
От: Evgeny.Panasyuk Россия  
Дата: 27.07.13 08:31
Оценка:
Здравствуйте, kaa.python, Вы писали:

EP>>1. Тут ведь всегда проход по всем элементам (ибо упорядоченность видимо не предполагается)? Слишком много для такой краткой нотации — в итоге на ровном месте будет плодится неэффективность — которую ты даже не заметишь
Автор: kaa.python
Дата: 17.07.13
.

KP>Мы говорим об идее, или о реализации? Реализация может быть сколь угодно корявой, идея — нет.

Я думал об реализации.
Ок, если об идеи — то в чём именно тут основная фишка по твоему мнению?
1. Некий DSL для часто используемых операций? Да — это бывает полезно, но только в чём тут новизна?
2. Или использование ad-hoc адаптации ко всему а-ля "using namespace std::rel_ops;"/Boost.Assign? Такая идея мне не нравится — предпочитаю ADL. (хотя Boost.Assign использую в юнит-тестах).
3. Навешивание мутирующих и дорогих операций на "чистый" operator- ? Нет уж, спасибо. Было бы хоть немного интересно если бы например "v1 — 1 — 2" представлял view оригинального range'а, а-ля boost::adaptors::filtered, оптимизированный на основе разбора expression tree — то есть не два chained filtered, а один. (и то, я бы operator- тут не использовал и выбрал бы ADL, а не ad-hoc).
Re[3]: Range Operators для C++
От: __kot2  
Дата: 27.07.13 09:05
Оценка:
Здравствуйте, kaa.python, Вы писали:
KP>И получим Scala. Но, нельзя, не знаю даже, жаль или нет.
__>>бред, короче говоря
KP>Повторюсь — речь идет не о реализации, а об идее.
функциональные языки берут отличную концепцию неизменяемых обьектов, но наталкиваются на проблемы с коллекциями. очень накладно иметь неизменяемые коллекции. единственный доступный воркэраунд вокруг этого — отложенные вычисления и развитый синтаксис обработки коллекций. это не для удобства сделано. это сделано потому, что по другому все тормозить будет невероятно. современные компиляторы я думаю, могут подобрать структуры для коллекций на основе анализа использования ее. будет ли подбор удачный? за какое время будут выполняться операции? как говорил Гомер Симпсон: науке это неизвестно.
когда нам нужно гарантированное время мы берем С++. если мы попытаемся работать с коллекциями без отложенных вычислений все будет тормозить. попробуйте, например, с помощью этой мощной библиотеки quicksort написать.
в принципе, если нам нужно посчитать опердень, при этом параллельно запутав синтаксисом и странными багами всех остальных программистов, то эта библиотека сгодится.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.