Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 11.05.04 06:06
Оценка: -1 :)
Здравствуйте, SWW, Вы писали:


ДГ>>Это из той же оперы, что i+1 и i++. Запись удобная, но чревата ошибками по забывчивости: i — число или указатель.


SWW>Просветите меня, темного, в чем проблема-то, никак не пойму? Я много всякой гадости читал про С, а вот гадость про оператор ++ первый раз слышу. Во-первых, хоть я и много всяких ошибок делал — но забыть, какого типа переменная — это уж выходит за всякие рамки. А во-вторых — поблема-то когда возникает: когда i число или когда указатель?


Про тип переменной забыть трудно, а вот про размер объекта, на который она ссылается, можно. Хоть это и ламерская ошибка, но довольно распространенная. Пишешь i++, а указатель на 20 байт сдвигается. Может, это просто дурацкий пример той гадости, о которой я тут уже высказывался: слишком большая семантическая нагрузка на операторы (делающая семантику языковых конструкций сильно контекстно зависимой и потому далекой от интуитивной понятности) и слишком фривольное обращение с типами данных и памятью.
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[9]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дарней Россия  
Дата: 11.05.04 06:14
Оценка:
Здравствуйте, Дм.Григорьев, Вы писали:

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

ДГ>Которая, кстати, сама освобождается, так что они как бы и не нужны.

точно. то, что их оставили — это просчет разработчиков языка

Д>> Про что многие привыкшие к безопасности программеры забывают и за это потом получают по балде.

ДГ>Ну я себя к таким не относил, по крайней мере в части данного глюка... Я в целом про язык: приучает к дисциплине.

К дисциплине приучает С++. А Ява просто принудительно не дает косячить
Видел я программы, которые писали явисты на С++ — страшное зрелище....

Д>> Вот еще вспомнилось: объявление исключений в заголовках функций. Просто заставляет задумываться о корректной обработке всего, что неохота помещать в заголовок, тогда как на C++ можно было бы просто махнуть рукой и сказать: ну такого вылететь точно не может.


в С++ эти объявления тоже есть, только мало кем используются
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Sinclair Россия https://github.com/evilguest/
Дата: 11.05.04 06:27
Оценка: 1 (1)
Здравствуйте, Дарней, Вы писали:
Д>И если уж заговорили про Вирта — за with ему надо бы отрубить руки по самые уши. Вот это точно пример очень плохого двусмысленного кода.
Кстати да. Вариант из VB гораздо прозрачнее.
... << RSDN@Home 1.1.3 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[10]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 11.05.04 06:29
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>К дисциплине приучает С++. А Ява просто принудительно не дает косячить

Д>Видел я программы, которые писали явисты на С++ — страшное зрелище....

Я думаю, что без понимания идеологии программирования зеленый C++шник может написть не хуже. Ни один язык не научит писать хорошо структурированные программы. Но принудительный подход Явы мне больше по душе: прежде чем человек, пишуший на C++, приучится к дисциплине (еще не факт, что это вообще произойдет), он имеет шанс взорвать не один десяток космических ракет (конечно я утрирую, но идея, я думаю, понятна).

А про программы явистов на C++ — к идеологии другого языка всегда трудно привыкать. Поди напиши что-нибудь серьезное на прологе после нескольких лет C++санья. Спецы по прологу тоже плеваться будут. А если те программы структурно кривые, значит такие программисты.
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: SWW Россия  
Дата: 11.05.04 07:04
Оценка: 1 (1) +2 :)
ДГ>>>Это из той же оперы, что i+1 и i++. Запись удобная, но чревата ошибками по забывчивости: i — число или указатель.

SWW>>Просветите меня, темного, в чем проблема-то, никак не пойму? Я много всякой гадости читал про С, а вот гадость про оператор ++ первый раз слышу. Во-первых, хоть я и много всяких ошибок делал — но забыть, какого типа переменная — это уж выходит за всякие рамки. А во-вторых — поблема-то когда возникает: когда i число или когда указатель?


ДГ>Про тип переменной забыть трудно, а вот про размер объекта, на который она ссылается, можно. Хоть это и ламерская ошибка, но довольно распространенная. Пишешь i++, а указатель на 20 байт сдвигается. Может, это просто дурацкий пример той гадости, о которой я тут уже высказывался: слишком большая семантическая нагрузка на операторы (делающая семантику языковых конструкций сильно контекстно зависимой и потому далекой от интуитивной понятности) и слишком фривольное обращение с типами данных и памятью.


Может я чего-то не понимаю, но по-моему это ерунда какая-то... Да, указатель сдвигается на размер структуры, а если написать i += 10 то на десять размеров структуры — по-моему вполне очевидное поведение: благодая этому указатель всегда указывает на структуру, а не на ее середину. А ты считаешь, было бы удобнее если бы указатель при инкременте сдвигался на один байт? Извини, но это просто глупо.
Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 11.05.04 07:19
Оценка: +1 -1
Здравствуйте, SWW, Вы писали:

SWW> Может я чего-то не понимаю, но по-моему это ерунда какая-то... Да, указатель сдвигается на размер структуры, а если написать i += 10 то на десять размеров структуры — по-моему вполне очевидное поведение: благодая этому указатель всегда указывает на структуру, а не на ее середину. А ты считаешь, было бы удобнее если бы указатель при инкременте сдвигался на один байт? Извини, но это просто глупо.


Да нет же! Не надо на указывать на середину! Я пытаюсь протолкнуть идею, что операции над числами и указателями должны отличаться внешне, чтобы увеличить интуитивную понятность кода и избавиться от тех (совершаемых на автопилоте) ошибок, при которых как раз указатели и вылетают за границы данных или указывают на середину структуры.
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дарней Россия  
Дата: 11.05.04 07:29
Оценка: +1
Здравствуйте, Дм.Григорьев, Вы писали:

ДГ>Ругать и обсуждать — разные вещи. А в языке действительно масса проблем. Если ты считаешь, что это не так, значит ты просто мало писал на нем и не пробовал другие языки. Попробуй поработать на Java: имхо он гораздо лучше чем C++ (сама идеология языка, сырые библиотеки не в счет), на столько же, насколько C++ лучше старого паскаля.


Ява? не смешите мои тапочки
Из-за отсутствия шаблонов, нормальной альтернативы деструкторам и проблем с ковариантностью Ява никогда не станет для меня достойным языком... C# выглядит намного лучше, хотя 2.0 я пока руками не трогал
Это как раз идеологические проблемы, знаете ли

ДГ>Лично я думаю, что время C/C++ как языка для прикладных задач подходит к концу. Он будет жить еще долго просто за счет *nix-ов и прочих многолетних наработок, но за время его существования программирование проделало очень большой путь, и синтез этого опыта требует принципиально новых технологий — на данный момент .NET


он как раз совсем не принципиально новый — он просто вбирает в себя лучшие наработки, на данный момент времени

ДГ> потом наверняка войдут в обиход математически доказываемые системы, про которые упоминалось в статье-разборе полетов mission-critical глюков.


очень узкая ниша — это максимум
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 11.05.04 07:38
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>Из-за отсутствия шаблонов, нормальной альтернативы деструкторам и проблем с ковариантностью Ява никогда не станет для меня достойным языком... C# выглядит намного лучше, хотя 2.0 я пока руками не трогал

Д>Это как раз идеологические проблемы, знаете ли

Шаблоны скоро будут (может, уже есть). Про остальное спорить не буду — в реальных задачах не пригождалось. C# вообще не видел, но и не говорил я про него.

ДГ>>Лично я думаю, что время C/C++ как языка для прикладных задач подходит к концу. Он будет жить еще долго просто за счет *nix-ов и прочих многолетних наработок, но за время его существования программирование проделало очень большой путь, и синтез этого опыта требует принципиально новых технологий — на данный момент .NET


Д>он как раз совсем не принципиально новый — он просто вбирает в себя лучшие наработки, на данный момент времени


Новый. Попробуй воткни в старый C++ garbage collection — если и получится, то сложность языка зашкалит.

ДГ>> потом наверняка войдут в обиход математически доказываемые системы, про которые упоминалось в статье-разборе полетов mission-critical глюков.

Д>очень узкая ниша — это максимум

На ближайшее будущее — да. Но это самая важная ниша — в ней от глюков люди гибнут.
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[11]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дарней Россия  
Дата: 11.05.04 07:38
Оценка: +1
Здравствуйте, Дм.Григорьев, Вы писали:

ДГ>Здравствуйте, Дарней, Вы писали:


Д>>К дисциплине приучает С++. А Ява просто принудительно не дает косячить

Д>>Видел я программы, которые писали явисты на С++ — страшное зрелище....

ДГ>Я думаю, что без понимания идеологии программирования зеленый C++шник может написть не хуже. Ни один язык не научит писать хорошо структурированные программы. Но принудительный подход Явы мне больше по душе: прежде чем человек, пишуший на C++, приучится к дисциплине (еще не факт, что это вообще произойдет), он имеет шанс взорвать не один десяток космических ракет (конечно я утрирую, но идея, я думаю, понятна).


ДГ>А про программы явистов на C++ — к идеологии другого языка всегда трудно привыкать. Поди напиши что-нибудь серьезное на прологе после нескольких лет C++санья. Спецы по прологу тоже плеваться будут. А если те программы структурно кривые, значит такие программисты.


короче говоря, это выливается в очередной C++ vs Java
смысла в таких спорах все равно нет. Каждую задачу надо решать наиболее подходящим средством, только и всего.
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[8]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: SWW Россия  
Дата: 11.05.04 07:40
Оценка: +1 :)
ДГ>Да нет же! Не надо на указывать на середину! Я пытаюсь протолкнуть идею, что операции над числами и указателями должны отличаться внешне, чтобы увеличить интуитивную понятность кода и избавиться от тех (совершаемых на автопилоте) ошибок, при которых как раз указатели и вылетают за границы данных или указывают на середину структуры.

Интуитивная понятность — понятие субъективное (извини за каламбур). Мне, например, интуитивно понятно, что ++ сдвигает указатель на размер структуры. И то, что выглядит она как и операция над числами, не вызывает никаких проблем. Я вполне допускаю, что начинающему это может показаться неочевидным, но после пары примеров он также согласится, что сделано это правильно. В отличие от, например, приоритета операций &,| и ==,!= к чему я не могу привыкнуть до сих пор (но, к счастью, VC7.1 выдает предупреждения).

Что же касается выхода указатель за границы данных (или индекса за пределы массива, что одно и то же), то эта проблема не имеет ничего общего и инкреметтом указателя и ее решение гораздо сложнее чем принято считать.
Re[9]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 11.05.04 07:44
Оценка: +1
Здравствуйте, SWW, Вы писали:


SWW>Интуитивная понятность — понятие субъективное (извини за каламбур). Мне, например, интуитивно понятно, что ++ сдвигает указатель на размер структуры. И то, что выглядит она как и операция над числами, не вызывает никаких проблем. Я вполне допускаю, что начинающему это может показаться неочевидным, но после пары примеров он также согласится, что сделано это правильно.



Тебе часто приходится разбираться в чужих исодниках?
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дарней Россия  
Дата: 11.05.04 07:46
Оценка: +1
Здравствуйте, Дм.Григорьев, Вы писали:

ДГ>Шаблоны скоро будут (может, уже есть). Про остальное спорить не буду — в реальных задачах не пригождалось. C# вообще не видел, но и не говорил я про него.


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

ДГ>Новый. Попробуй воткни в старый C++ garbage collection — если и получится, то сложность языка зашкалит.


запросто.... только это не помешает никому накосячить, если ему сильно захочется — вот в чем проблема

ДГ>На ближайшее будущее — да. Но это самая важная ниша — в ней от глюков люди гибнут.


не хочу показаться злодеем, но и дальше будут. Только из-за багов в математической модели
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 11.05.04 07:52
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>а это как раз идеологические проблемы, из-за которых кодеры пихают код для закрытия сокетного соединения в финалайзер и потом сильно удивляются, что количество соединений на серваке зашкаливает


Согласен.

ДГ>>Попробуй воткни в старый C++ garbage collection — если и получится, то сложность языка зашкалит.

Д>запросто.... только это не помешает никому накосячить, если ему сильно захочется — вот в чем проблема

Ну эта проблема нерешаемая. Человеческий фактор. Потому мне кажется, что будущее за доказываемыми системами. Хотя доказывать для случаев предельной загрузки ресурсов... брр...

ДГ>>На ближайшее будущее — да. Но это самая важная ниша — в ней от глюков люди гибнут.

Д>не хочу показаться злодеем, но и дальше будут. Только из-за багов в математической модели

... М-да. Фактически выходит, что имеет смысл описывать модель только крупных блоков, рассматриваемых как черный ящик, иначе сложность модели превысит сложность реализующего ее кода. Воздержусь-ка я лучше от прогнозов.
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: LaptevVV Россия  
Дата: 11.05.04 08:02
Оценка:
Здравствуйте, Vadim B, Вы писали:

VB>Ну, вообще говоря, на том фортране (70-х годов) первое не было оператором цикла. Надо было написать что-нибудь типа

VB>
VB>do 10 i=1,100
VB>

VB>где 10 — метка последнего оператора цикла.
Да, конечно! Спасибо! Я забыл, что там должна быть метка поставлена.
VB>Но сути сообщения это, конечно, не меняет .
Именно!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[4]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Romkin  
Дата: 11.05.04 08:09
Оценка:
Здравствуйте, VladD2, Вы писали:

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


K_O>>

K_O>>Взрыв 4 июня 1996 г. ракеты Ариан-5, стоившей пол-миллиарда долларов, имел причиной программную ошибку, которую компилятор Оберона/Компонентного Паскаля просто не пропустил бы.


VD>А вот интересно как можно определить от чего взарвалась ракета если ее бортовой компьютер был уничтожен взрывом?


http://www.osp.ru/os/1998/06/21.htm#part_1

Была же ссылка
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 11.05.04 08:13
Оценка:
Здравствуйте, Дм.Григорьев, Вы писали:

ДГ>Попробуй воткни в старый C++ garbage collection — если и получится, то сложность языка зашкалит.


http://www.rsdn.ru/article/cpp/GCcpp.xml
Автор(ы): Михаил Чащин
Дата: 18.11.2002
Re[7]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дм.Григорьев  
Дата: 11.05.04 08:25
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

ДГ>>Попробуй воткни в старый C++ garbage collection — если и получится, то сложность языка зашкалит.

OE>http://www.rsdn.ru/article/cpp/GCcpp.xml
Автор(ы): Михаил Чащин
Дата: 18.11.2002


М-да. С "зашкалит" я погорячился. "__gc" это прикольно, но все равно изврат: ползаешь по коду и вспоминаешь, какие объекты у тебя __gc, а какие надо вручную убивать. Надеюсь, мое исходное утверждение о невозможности до бесконечности наращивать и усложнять существующие технологии возражений не встретит.
http://dimgel.ru/lib.web — thin, stateless, strictly typed Scala web framework.
Re[8]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: Дарней Россия  
Дата: 11.05.04 08:33
Оценка:
Здравствуйте, Дм.Григорьев, Вы писали:

ДГ>М-да. С "зашкалит" я погорячился. "__gc" это прикольно, но все равно изврат: ползаешь по коду и вспоминаешь, какие объекты у тебя __gc, а какие надо вручную убивать. Надеюсь, мое исходное утверждение о невозможности до бесконечности наращивать и усложнять существующие технологии возражений не встретит.


да, такое есть. На старичок С++ уже слишком много всего навешали, и не всегда хорошо это сделали.
Впрочем, умирать он все равно не собирается
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[5]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 11.05.04 08:48
Оценка:
SWW wrote:

> Просветите меня, темного, в чем проблема-то, никак не пойму? Я много

> всякой гадости читал про С, а вот гадость про оператор ++ первый раз
> слышу. Во-первых, хоть я и много всяких ошибок делал — но забыть, какого
> типа переменная — это уж выходит за всякие рамки. А во-вторых — поблема-то
> когда возникает: когда i число или когда указатель?
В редакторе vim тип переменной быстро вспоминается. Жмешь gd и ты прыгаешь к
определению переменной, Ctrl+o — возвращаешься туда, где был. Доли секунды


--
Bitte ein Bit
Posted via RSDN NNTP Server 1.9 alpha
Re[6]: Читать всем!!!! ОБЯЗАТЕЛЬНО!!!!
От: alnsn Великобритания http://nasonov.blogspot.com
Дата: 11.05.04 08:52
Оценка:
Дм.Григорьев wrote:

> Про тип переменной забыть трудно, а вот про размер объекта, на который она

> ссылается, можно. Хоть это и ламерская ошибка, но довольно
> распространенная. Пишешь i++, а указатель на 20 байт сдвигается.
Прежде всего, указатель сдвигается к следующему элементу, а уже потом
(не поймите это буквально) на 20 байт. Редко соль именно в том, 20 это байт
или не 20. sizeof рулит
--
Bitte ein Bit
Posted via RSDN NNTP Server 1.9 alpha
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.