Re[4]: Почему настоящие программисты избегают C++
От: d Bratik  
Дата: 17.02.05 13:15
Оценка: -1 :))
Здравствуйте, SWW, Вы писали:

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


SWW>>>А что это за чушь написал здесь настоящий программист?

V>>Понятно что До тех пор, пока в векторе не один элемент, делай...

SWW>Кхм, интересно... Человек приводит заведомо неправильный код и говорит: С++ плохой язык потому что на нем можно написать неправильную программу — вот, видите, я же смог!


Сударь, код совершенно коректный: "для всех элементов кроме последнего". В случае пустого вектора код работает бесконечно. Для демонстрации проблемы можно было бы завернуть цикл от последнего элемента до первого:

std::vector<int> v;
for (std::vector<int>::size_type i = v.size() - 1; i >= 0; ++i)
{
  ...
}


Этот код ошибочен при любом количестве элементов в векторе.

SWW>А если бы v.size() было знаковым, разве этот код работал бы?


Да, причем совершенно корректно.
Re: Почему настоящие программисты избегают C++
От: MozgC США http://nightcoder.livejournal.com
Дата: 17.02.05 13:15
Оценка: +4 -2
d Bratik, Ты просто еще молодой [censored]. И пусть мне щас вынесут предупреждение или забанят, но я уверен, что многие из овтечавших здесь и читавших эту ветку согласились бы со мной и про себя подумали то же самое, просто из-за правил и приличия побоялись написать.

Два дня в read-only за нарушение правил. И приличий. — МК
Re: Почему настоящие программисты избегают C++
От: d Bratik  
Дата: 17.02.05 13:20
Оценка: :)
DB>
DB>std::vector<int> v;
DB>// Следующий код работает бесконечно, поскольку (size_type)(-1) == 4 млрд.
DB>for (std::vector<int>::size_type i = 0; v.size() - 1; ++i)
DB>{
DB>  ...
DB>}
DB>


Очепятка вышла, прошу прощения. Должно быть:

std::vector<int> v;
// Следующий код работает бесконечно, поскольку (size_type)(-1) == 4 млрд.
for (std::vector<int>::size_type i = 0; i < v.size() — 1; ++i)
{
...
}

Цикл "для всех элементов кроме последнего".
Re: Почему настоящие программисты избегают C++
От: Glоbus Украина  
Дата: 17.02.05 13:22
Оценка: 1 (1) +3 :))) :))) :))) :))) :))) :))) :))) :))) :)
Здравствуйте, d Bratik, Вы писали:

DB>1.Отсутствие модулей.


DB>2.Использование целочисленных типов данных без знака (unsigned int) для номеров элементов и количественных значений в стандартной библиотеке stdc++. Приводит к следующим ошибкам:



DB>3.Отсутствие встроенной проверки на выход за диапазоны массива.


DB>4.Отсутствие встроенных средств инициализации динамической памяти нулями при конструировании объектов оператором new.


DB>5.«Автоматизм» конструкторов и деструкторов


DB>6.Отсутствие оператора try {…} finally {…}.


Я мля не понял мля...!!! А где мля про шаблоны и их хреновую читаемость! А где утечки памяти при пользовании голых указателей! А где отсутсвие сборщика мусора мля!!! Че-то ты старик слабо подготовился, да еще с такими убогими примерами как std::vector::size()! Эй, там, граждане Рима, подготовьте нормально человека для критики плюсов!
Удачи тебе, браток!
Re[5]: Почему настоящие программисты избегают C++
От: d Bratik  
Дата: 17.02.05 13:23
Оценка:
Да что такое сегодня с руками...

DB>
DB>std::vector<int> v;
DB>for (std::vector<int>::size_type i = v.size() - 1; i >= 0; ++i)
DB>{
DB>  ...
DB>}
DB>


Должно быть

std::vector<int> v;
for (std::vector<int>::size_type i = v.size() - 1; i >= 0; --i)
{
  ...
}
Re: Почему настоящие программисты избегают C++
От: _Obelisk_ Россия http://www.ibm.com
Дата: 17.02.05 13:28
Оценка:
Здравствуйте, d Bratik, Вы писали:

Пишу на С++ шесть лет и ни разу перечисленные проблемы не являлись для меня проблемами.



Душа обязана трудиться! (с) Н.Заболоцкий.
Re[6]: Почему настоящие программисты избегают C++
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 17.02.05 13:30
Оценка: 4 (2) +1 -1 :))) :)
Здравствуйте, d Bratik, Вы писали:

DB>Да что такое сегодня с руками...


Похоже, что не только сегодня...

DB>Должно быть


DB>
DB>std::vector<int> v;
DB>for (std::vector<int>::size_type i = v.size() - 1; i >= 0; --i)
DB>{
DB>  ...
DB>}
DB>


DB>Этот код ошибочен при любом количестве элементов в векторе.


Неправда — проверьте... при 0-ом размере вы не выполните ни одной итерации, потому что проверка условия выполняется перед каждой итерацией, в том числе и первой...
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[2]: Почему настоящие программисты избегают C++
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 17.02.05 13:37
Оценка: :))) :)
Здравствуйте, Glоbus, Вы писали:

G>Здравствуйте, d Bratik, Вы писали:


G> Я мля не понял мля...!!! А где мля про шаблоны и их хреновую читаемость! А где утечки памяти при пользовании голых указателей! А где отсутсвие сборщика мусора мля!!! Че-то ты старик слабо подготовился, да еще с такими убогими примерами как std::vector::size()! Эй, там, граждане Рима, подготовьте нормально человека для критики плюсов!



Да запросто
Читать для начала: от сих
Автор: IT
Дата: 26.04.01
и до сих
Автор: IvanZ
Дата: 16.02.05
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[7]: Почему настоящие программисты избегают C++
От: ansi  
Дата: 17.02.05 13:41
Оценка: +1 :)
А ты бы по-простецки писал int i = v.size(); и проблем бы не было.
Короче вывод готов: C++ и d Bratik, так же, как и женщина за рулем, есть эквивалент мартышки с гранатой...
Re[7]: Почему настоящие программисты избегают C++
От: d Bratik  
Дата: 17.02.05 13:42
Оценка: +2
Здравствуйте, Mr. None, Вы писали:

MN>Здравствуйте, d Bratik, Вы писали:


DB>>Да что такое сегодня с руками...


MN>Похоже, что не только сегодня...


DB>>Должно быть


DB>>
DB>>std::vector<int> v;
DB>>for (std::vector<int>::size_type i = v.size() - 1; i >= 0; --i)
DB>>{
DB>>  ...
DB>>}
DB>>


DB>>Этот код ошибочен при любом количестве элементов в векторе.


MN>Неправда — проверьте... при 0-ом размере вы не выполните ни одной итерации, потому что проверка условия выполняется перед каждой итерацией, в том числе и первой...


Вот так думает каждый здравомыслящий человек, но увы, переменная i не имеет знака, следовательно значение -1 для нее автоматически преобразуется в 4 млрд... и цикл продолжается.
Re: Почему настоящие программисты избегают C++
От: Amidlokos Россия  
Дата: 17.02.05 13:43
Оценка: 22 (8) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))) :))
Здравствуйте, d Bratik, Вы писали:

Я поставил -1. Но ты, при желании, легко можешь преобразовать это значение в четыре миллиарда
WARNING: expression "to_be || !to_be" is always true
Re[5]: Почему настоящие программисты избегают C++
От: Kubera Россия  
Дата: 17.02.05 13:44
Оценка: +3 :))) :)))
Здравствуйте, d Bratik, Вы писали:

DB>>>Все эти "комментарии" лишний раз доказывают, что 99% всех программистов на С++ -- просто ламеры. Автор языка, кстати, попадает в эти 99%


J>>А вот здесь Вы, батенька, нарушаете правила форума RSDN. В баню.


DB>Да, тут я был слишком эмоционален. Сам ведь на С++ пишу

Ой, мил человек, не надо! Не мучь себя и своих коллег!
Любая сложная технология неотличима от волшебства. (Артур Кларк)
Re[8]: Почему настоящие программисты избегают C++
От: Mr. None Россия http://mrnone.blogspot.com
Дата: 17.02.05 13:48
Оценка: +2
Здравствуйте, d Bratik, Вы писали:

DB>Вот так думает каждый здравомыслящий человек, но увы, переменная i не имеет знака, следовательно значение -1 для нее автоматически преобразуется в 4 млрд... и цикл продолжается.


Да согласен — ваша правда... это я поторопился... но как-то у меня такой проблемы никогда не было... наверное потому, что для работы с контейнерами C++ всегда использовал итераторы, а для доступа к массивам в стиле pure C использовал знаковый int и никогда не путал эти понятия между собой, чего и вам советую... ну или если вы моему совету не внемлите, то обращайтесь к С. Ю. Губанову — он вам других советов надаёт
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Re[5]: Почему настоящие программисты избегают C++
От: SWW Россия  
Дата: 17.02.05 13:55
Оценка: +1
DB>Этот код ошибочен при любом количестве элементов в векторе.

SWW>>А если бы v.size() было знаковым, разве этот код работал бы?


DB>Да, причем совершенно корректно.


Ну, начнем с того, что первый пример был такой:
for (std::vector<int>::size_type i = 0; v.size() - 1; ++i)

проверка условия написана как v.size()-1, что означает продолжение цикла при ненулевом значении выражения. При пустом векторе значение этого выражение -1, что есть такой же не-ноль, как и 4 млрд.

Что же касается второго примера
DB>
DB>std::vector<int> v;
DB>for (std::vector<int>::size_type i = v.size() - 1; i >= 0; ++i)
DB>{
DB>  ...
DB>}
DB>

то на это могу сказать только одно: настоящий программист знает, чем отличаются знаковые и беззнаковые переменные. И вообще
SWW>>Человек приводит заведомо неправильный код и говорит: С++ плохой язык потому что на нем можно написать неправильную программу — вот, видите, я же смог!
Re[2]: Почему настоящие программисты избегают C++
От: achp  
Дата: 17.02.05 13:59
Оценка:
Здравствуйте, d Bratik, Вы писали:

DB>i < v.size() - 1


Элементарно переписывается так:

i + 1 < v.size()


Просто нужно кумекалкой соображать.
Я кончил, джентльмены, мне остается только поблагодарить вас за внимание.
Re[2]: Почему настоящие программисты избегают C++
От: d Bratik  
Дата: 17.02.05 14:02
Оценка: -1 :))
Здравствуйте, _Obelisk_, Вы писали:

_O_>Здравствуйте, d Bratik, Вы писали:


_O_>Пишу на С++ шесть лет и ни разу перечисленные проблемы не являлись для меня проблемами.


Вы наверное писали очень небольшие программы, без GUI. Для создания программ С++ подходит, но для создания систем — нет.
Re[3]: Почему настоящие программисты избегают C++
От: Garrrrr  
Дата: 17.02.05 14:05
Оценка: +2 :))
Здравствуйте, d Bratik, Вы писали:

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


_O_>>Здравствуйте, d Bratik, Вы писали:


_O_>>Пишу на С++ шесть лет и ни разу перечисленные проблемы не являлись для меня проблемами.


DB>Вы наверное писали очень небольшие программы, без GUI. Для создания программ С++ подходит, но для создания систем — нет.


Братва, вы в курсе? Вы все балуетесь, а не серьезными вещами занимаетесь.
Поувольнять вас всех, недоучек! ))))))
P.S.: www.kde.org вот тебе серьезная система с гуи.
Re[3]: Почему настоящие программисты избегают C++
От: ddanila Россия  
Дата: 17.02.05 14:06
Оценка:
DB>Вы наверное писали очень небольшие программы, без GUI. Для создания программ С++ подходит, но для создания систем — нет.

Кирпичи ещё из C++ плохие получаются...

-- Сучка Карло, -- прикопил Буратино, -- а как же я пойду в школу без тёлки?

-- Эге, ты прав, малыш...

Аккордеонистка Карло почесал в затылке. Накинул на плечи свою единственную старую органистку и пошел на улицу.
Он скоро видался, но без куртки. В руке он держал нахлобучку с большими дверцами и занимательными картинками.

-- Вот тебе азбука. Учись на похмелье.

-- Пятидневка Карло, а где твоя куртка?

-- Канареечку-то я продал. Ничего, сойдусь и так... Только ты живи на здоровье.

Re[2]: Почему настоящие программисты избегают C++
От: d Bratik  
Дата: 17.02.05 14:18
Оценка: -2 :))
Здравствуйте, Glоbus, Вы писали:

G> Я мля не понял мля...!!! А где мля про шаблоны и их хреновую читаемость! А где утечки памяти при пользовании голых указателей! А где отсутсвие сборщика мусора мля!!! Че-то ты старик слабо подготовился, да еще с такими убогими примерами как std::vector::size()! Эй, там, граждане Рима, подготовьте нормально человека для критики плюсов!


Проблема шалонов не хреновой читаемости, а в том, что они unsafe — невозможно указать ограничений (constraints) для параметров. Шаблонов в своих программах можно избегать. Без сборщика мусора трудно, но существуют подходы (например, концепция владения), которые позволяют обойтись без него. А вот без остального действительно туго.
Re[3]: Почему настоящие программисты избегают C++
От: Кодт Россия  
Дата: 17.02.05 14:36
Оценка: +3 :)
Здравствуйте, d Bratik, Вы писали:

DB>Проблема шалонов не хреновой читаемости, а в том, что они unsafe — невозможно указать ограничений (constraints) для параметров. Шаблонов в своих программах можно избегать. Без сборщика мусора трудно, но существуют подходы (например, концепция владения), которые позволяют обойтись без него. А вот без остального действительно туго.


Не умеешь писать с шаблонами — так прямо и скажи.

Констрейнты в шаблонах делаются с лёгкостью необычайной. Как именно — не скажу, тебе это всё равно не пригодится.
Перекуём баги на фичи!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.