Вопрос: Что мешает Майкрософт компилировать Windows XP с включенной опцией контроля выхода за границы массивов?
AVC>Ответ: Неадкватность языков и компиляторов, использованных в написании операционной системы (C и C++).
Мне кажется, что эта цитата доказывает степень адекватности того самого представителя науки, который школе
Всё-таки C разработали именно дл янаписания операционки. Трудно найти более подходящие языки для этой области
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
DB>Вот так думает каждый здравомыслящий человек, но увы, переменная i не имеет знака, следовательно значение -1 для нее автоматически преобразуется в 4 млрд... и цикл продолжается.
Я, кстати, согласен что в STL много косяков всяких. Сам язык намного лучше этой библиотеки.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[11]: Почему настоящие программисты избегают C++
Здравствуйте, d Bratik, Вы писали:
N>>int a = 2113929216; N>>int b = 2113929210;
DB>Решение состоит в том, что система должна генерировать исключение (exception) при переполнении. Отсутствие этой возможности я забыл добавить в качестве 7-го пункта в списке ошибок проектирования языка.
Такая возможность в C++ есть. Роди себе класс "целое с проверкой переполнения" и будет тебе счастье.
Проблема в том, что этого не очень поддерживает железо. А всё + на переполнение проверять всё-таки жалко.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[11]: Почему настоящие программисты избегают C++
Здравствуйте, Kubera, Вы писали:
K>ИМХО, твой пример со средним арифметическим неудачный. Что же касается знаковых индексов в векторе, то они нецелесообразны по двум причинам: K>1. дополнительная ошибочная ситуация с отрицательным индексом
Так это же хорошо! Типа лишняя проверка. Но вообще отоличие формальное, так как что отрицательный индекс, что большой положительный -- всё равно мимо массива Просто ошибки переполнения легче assert'ами ловить при знаковой арифметике.
K>2. размер массива уменьшается в два раза (по сравнение с таким же знаковым типом)
Да? И это где же стока памяти-то взять, под массив-то?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, d Bratik, Вы писали:
DB>>Вот так думает каждый здравомыслящий человек, но увы, переменная i не имеет знака, следовательно значение -1 для нее автоматически преобразуется в 4 млрд... и цикл продолжается.
E>Я, кстати, согласен что в STL много косяков всяких.
Например? Хоть один... Я знаю, причём реальные, а вы?
То что size_type беззнаковый, так в этом нет ничего удивительного — название типа внимательно прочитайте: тип размера... как много типов вы знаете, имеющих отрицательный размер? Кстати этот самый size_type — как правило всего лишь синоним типа size_t, который к stl не имеет никакого отношения, а по сути является для массивов в стиле C тем же самым, что и size_type для контейнеров stl...
Вот вы же не сокрушаетесть, что sizeof возвращает именно беззнаковый size_t... так почему же вам не нравится тип size_type, возвращаемый vector::size?
Компьютер сделает всё, что вы ему скажете, но это может сильно отличаться от того, что вы имели в виду.
Здравствуйте, AlexBS, Вы писали:
AE>>8. За жесткие ограничения на место описания переменных функции — между названием функции и началом блока ABS>+ и допуск совпадения имен переменных и типов. т.е конструкция ABS>var ABS> Word : Integer; ABS>вполне допустима. но, понятно, что работать с такой переменной будет крайне сложно
Привычка писать на с++ довела до:
Var
hDC: HDC;
потом дошло что написал какую-то чушь для паскаля ...
Простите, что я вставляю свои пять копеек, я всего 2 года как знаком вообще с понятием "программирование", я не смогу поспорить с вами о многих заморочках и тонкостях, но я подумал, что было бы, если бы я начал учиться на Делфи.
На самом деле, Делфи я в глаза никогда не видел, но слышал. Слышал, что чтобы заполнить комбобокс данными из базы, нужно ткнуть пальцем в базу, ткнуть в список, и он зальется сам. При этом чуствуешь себя идиотом, потому что не знаешь, что происходит внутри. Особенно, если что то не работает. Примерно я прочуствовал это, когда взялся за C# и положил на диалог DataGrid. Но я просто догадывался, что происходит, потому что делал то же самое на плюсах. А если бы я видел и работал только с Делфи? Смог бы я когда-нибудь решить нестандартную задачу?
Иногда складывается впечатление, что шарп — просто огромная оболочка над API. Я долго смеялся, когда через Рефлектор увидел, что MessageBox.Show () импортирует апишную функцию. Неужели им сложно было переписать ее с возможностью добавлением чекбокса, который часто необходим?
DB>Подозреваю, что Вы никогда не создавали на C++ развитого GUI. Все программисты на С++ как чумы избегают решения этой задачи. Они говорят, что это им скушно и неинтересно. Однако именно создание пользовательского интерфейса является наиболее важной, сложной и действительно интересной проблемой при создании системы. Именно пользовательский интерфейс определяет используемые алгоритмы и структуры даннных, а не наоборот. И именно для решение этой самой насущной задачи меньше всего подходит С++.
Может, с годами и опытом проходит желание создать свой контрол, написанный с нуля или почти с нуля (наследуемся от CWnd) ?
А что легче, быстрее, понятнее etc — написать, например, всплывающую панель, как в VS .NET (или любой другой нестандартный контрол) — написать на С++ или на Делфи? Я совсем недавно сделал свое дерево, у которого единственное сходство со стандартным в том, что это дерево. Я получал удовольствие от того, что понимаю до конца, что написано, и что могу манипулировать данными и вообще языком, как мне захочется.
C>>Исходя из своего опыта: у настоящих программистов другие проблемы.
DB>Интересно, какие же?
черт, даже я понимаю, какие...
ps
где-то на РСДН я видел пост, примерно процитирую:
С++ — это как шлюха. Можешь делать с ней, что хочешь, что если что-то подцепишь, то это твоя вина. ты имеешь ее, она тебя, вы квиты и довольны
C# — как жена. Шаг влево, шаг вправо — расстрел. На тебя одевают огромный презерватив, и перед каждой, простите, фрикцией, ты думаешь, а позволят? Но зато когда узнАешь ее эрогенную зону — позволено все. И ты спокоен и удовлетворен
и добавлю от себя:
C++ Builder — как 18-летняя девочка. Она готова на классику, и только. Жесткие рамки для фантазии. Что-то подцепишь — все равно твоя вина — она тебе не поможет выкрутиться, даже морально, а еще тебя обвинит. Чтобы развести ее на что-то кроме миссионерской, ты гробишь кучу времени, нервов и сил. Легче послать и трахнуть шлюху. Или расслабиться с женой... после того, как накувыркался со шлюхой
Re[13]: Почему настоящие программисты избегают C++
Здравствуйте, ansi, Вы писали:
AVC>>А вот для Си/Си++ это невозможно: там передается не массив, а указатель. Что не одно и то же. A>Дык и тут тоже передается указатель и длина массива (в неявном виде). А Си++ такое и не надо. Проверки нужны только в отладочной версии, всё.
И откуда же, позвольте полюбопытствовать, возьмутся проверки в отладочном коде?
Или проверки и в отладочном коде не нужны?
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
N>положим захотелось нам искать среднее двух чисел и написали мы функцию: N>int kaka (int a, int b){return (a+b)/2;}
N>и всё вроде тип-топ, но вот тут сунули нам два числа (вполне корректных):
N>int a = 2113929216; N>int b = 2113929210;
Функциб kak можно переписать так:
int kaka(int a, int b){return ((a/2) + (b/2));}
Математика однако рулит не хуже Си с плюсами...и без плюсов тоже
Здравствуйте, Amidlokos, Вы писали: A>Уважаемый язвительный Верхний Ряд Клавиатуры!
Не обижай qwertyuiop! Он "верхинй ряд клавиатуры без квадратных скобок"
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[17]: Почему настоящие программисты избегают C++
Здравствуйте, Amidlokos, Вы писали: A>Уважаемый язвительный Верхний Ряд Клавиатуры! Во-первых, inline-код выполняется всё равно дольше одной операции сравнения. Во-вторых, на оптимизатор надейся, а сам не плошай. Может, я и правда так плохо знаю возможности современного оптимизатора, но я не стал бы давать гарантию, что он осознает необходимость вызвать size() один раз, особенно с учётом обращения где-то в цикле к тому же vec. Более того — оптимизаторов много. И более того — я бы не стал за счёт оптимизатора отвыкать думать.
А на читабельность всем уже и наплевать?
Я не очень понимаю для решения каких именно задач заточен STL.
Мне так кажется, что никаких. Такой классный универсальный всемогутер. Зато типа красивый.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[18]: Почему настоящие программисты избегают C++
Erop wrote:
> А на читабельность всем уже и наплевать? > Я не очень понимаю для решения каких именно задач заточен STL. > Мне так кажется, что никаких. Такой классный универсальный всемогутер. > Зато типа красивый.
Для любых Контейнеры в STL сделаны очень гибко, их можно использовать
почти под что угодно. А если сюда добавить еще и boost...
Здравствуйте, Cyberax, Вы писали: >> А на читабельность всем уже и наплевать? >> Я не очень понимаю для решения каких именно задач заточен STL. >> Мне так кажется, что никаких. Такой классный универсальный всемогутер. >> Зато типа красивый.
C>Для любых Контейнеры в STL сделаны очень гибко, их можно использовать C>почти под что угодно. А если сюда добавить еще и boost...
Для любых это тоже самое, что ни заточен ни для каких (КМК, разумеется)
Вот мне например, в моих задачах, тоже не хватает проверок на выход за границы массива.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, AlexBS, Вы писали:
ABS>На последок хотелось бы заметить про идиотский var в описаниях функций, где он зачастую просто мешает!
ABS>Например, ReadProcessMemory ABS>
ABS>Ну нахрена мне всегда(!!) заводить бесполезную переменную для параметра var lpNumberOfBytesRead: DWORD, когда она в 99% случаях просто ненужна! ABS>А таких функций уйма!
Здравствуйте, p_kolya, Вы писали:
N>>положим захотелось нам искать среднее двух чисел и написали мы функцию: N>>int kaka (int a, int b){return (a+b)/2;}
N>>и всё вроде тип-топ, но вот тут сунули нам два числа (вполне корректных):
N>>int a = 2113929216; N>>int b = 2113929210; _>Функциб kak можно переписать так: _>int kaka(int a, int b){return ((a/2) + (b/2));}
_>Математика однако рулит не хуже Си с плюсами...и без плюсов тоже
Посчитаем по Вашей формуле среднее арифметическое , скажем, двух троек.
Получим:
(3/2) + (3/2) = 1 + 1 = 2.
Да, математика рулит, однако... Вон куда она Вас зарулила.
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Хоар
Re[12]: Почему настоящие программисты избегают C++
Здравствуйте, Amidlokos, Вы писали: A>Математика в данном случае и правда рулит. Только при вычислении надо скастовать во float.
Это ты знатно придумал. Сможешь оценить просад производительности, не заглядывая в Intel Optimization Guide?
... << RSDN@Home 1.1.4 beta 5 rev. 395>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.