Thu, 26 May 2005 19:29:53 +0400 Alex Mogilnikov wrote to Dimmy Timchenko:
[...]
DT>> Видишь, здесь ты применил правило именования, а в критикуемом случае - DT>> нет. :)
AM> :) Даже *x++ уже дает возможность понять, что x - это указатель.
Если операторы не перегружены. А если перегружены? Надо все смотреть - и что такое "х", и что за операторы.
AM>>> и f(&var) гораздо нагляднее...
DT>> Видимо, кто к чему привык.
AM> А как узнать, изменится ли var после вызова f(var)? Hадо прыгнуть к AM> прототипу f и посмотреть, не является ли ее аргумент ссылкой, и если AM> является то есть ли там const. И если нет, действительно ли ее меняют, или AM> этот const просто забыли (как часто и бывает). :)
Да, в С++ все намного сложнее, вариантов гораздо больше, больше гибкости и мощи - больше и ответственности, это естественно.
Что касается ссылок указателей. Когда надо "работать с адресом объекта", т.е. когда прямое копирование накладно, почти во всех случаях, когда не требуется адресная арифметика, ссылки предпочтительнее. Они имеют более простой и понятный синтаксис при использовании, они не порождают ошибок, связанных с инициализацией (неинициализированные указатели - источник множества подлых глюков) - попробуй создать неинициализированную ссылку. А в ряде случаев - таких как перегрузка операторов, без ссылок вообще не обойтись.
Т.ч. зря ты на них наехал. В реальности проблем они не порождают. А когда копаешься в коде (особенно в чужом), всегда нужно все смотреть. Хороший редактор - с приличными средствами навигации по проекту - очень тут помогает: прыгнуть к определению и обратно - пара секунд, делается нажатием соответствующих хоткеев. Да хоть по всей цепочке определений и обратно.
Didn't find your answer? Ask the community — no account required.
A
Alex Mogilnikov
Привет Harry!
27 May 05 09:06, Harry Zhurov писал Alex Mogilnikov:
HZ> Что касается ссылок указателей. Когда надо "работать с адресом HZ> объекта", т.е. когда прямое копирование накладно, почти во всех HZ> случаях, когда не требуется адресная арифметика, ссылки HZ> предпочтительнее. Они имеют более простой и понятный синтаксис при HZ> использовании,
Цена упрощения синтаксиса - невозможность определить, выполняется ли операция над копией, или над оригиналом. Поэтому я считаю, что синтаксис со звездой точнее отображает суть операции.
HZ> они не порождают ошибок, связанных с инициализацией HZ> (неинициализированные указатели - источник множества подлых глюков) - HZ> попробуй создать неинициализированную ссылку.
В случае аргумента функции такая ошибка маловероятна - это же надо специально написать, например, f(NULL). :)
С другой стороны, там, где можно забыть инициализировать указатель (или забыть проверить успешность инициализации), наверняка указываемый объект создается динамически. Hапример что-то типа
char *cp = malloc(blablabla);
Как в такой ситуации заменить указатель ссылкой, я не представляю...
HZ> А в ряде случаев - таких HZ> как перегрузка операторов, без ссылок вообще не обойтись.
Вот здесь им самое место, вряд ли кто будет спорить. Уж точно не я. :)
HZ> Т.ч. зря ты на них наехал.
Я наехал не на них, а на их неуместное применение, желание натолкать ссылки во все щели. :)
HZ> А когда копаешься в коде (особенно в чужом), всегда нужно все HZ> смотреть.
Если ссылками являются аргументы двух-трех функций, я это могу спокойно удержать в голове. Когда аргументы-ссылки имеются в сигнатурах 60% функций, приходится к определению объекта прыгать на каждой второй строчке кода. Обидно. :) То же касается и побочных эффектов при вызове функций.
Всего наилучшего, [Team PCAD 2000] Алексей М.
... Если ты коп, почему я весь взмок?
A
Alex Mogilnikov
Привет Dimmy!
27 May 05 08:59, Dimmy Timchenko писал Alex Mogilnikov:
AM>> Hу так ясный пень, что объект меняют. Я говорю о том, что AM>> неизвестно, меняется объект вызывающей функции, ссылка на который AM>> нам передана при вызове
DT> Как-то ты нечётко выражаешься. :) Где неизвестно? Если ты вызываешь, DT> например функцию Truncate(MyString), то очевидно, что именно ты хочешь DT> сделать и с чем.
Попробую приблизительно воспроизвести типичный пример.
int pos; int len; // какой-то код char *rr = GetDomainRecord(domain, pos, len); // и так далее
char * GetDomainRecord(const char* DomainName, int &CurrentPos, int BytesLeft,) { // всякий код while(BytesLeft > 0) { // еще код CurrentPos++; // Здесь не очевидно, что модифицируется // объект pos вызывающей функции. BytesLeft -= n; // А здесь работаем с копией. } }
AM>> :) Даже *x++ уже дает возможность понять, что x - это указатель.
DT> Hу-у, зачем же так-то? ;) А если ты напишешь просто x++, что это даст DT> понять?
Да, если я знаю, что в сигнатуре функции нет аргументов-ссылок.
AM>> А как узнать, изменится ли var после вызова f(var)?
DT> А как ты узнаешь, изменится ли она, если вызов будет выглядеть как DT> f(&var)? :)
Зато я буду знать, что если нет "&", var не изменится. :)
Всего наилучшего, [Team PCAD 2000] Алексей М. ... Смотрю куда глаза глядят...
A
Alex Mogilnikov
Привет Dimmy!
27 May 05 17:47, Alex Mogilnikov писал Dimmy Timchenko:
DT>> Hу-у, зачем же так-то? ;) А если ты напишешь просто x++, что это DT>> даст понять?
AM> Да, если я знаю, что в сигнатуре функции нет аргументов-ссылок.
Блин. Пишу и разговариваю с коллегами одновременно. :) Я хотел сказать, что если не было объявлено ссылок, отсутствие звезды говорит об обращении к копии объекта-аргумента.
Всего наилучшего, [Team PCAD 2000] Алексей М. ... Западно-уральское региональное общество добровольных учредителей.
D
Dimmy Timchenko
Hello Harry.
Fri May 27 2005 09:06, Harry Zhurov wrote to Alex Mogilnikov:
HZ> Да, в С++ все намного сложнее, вариантов гораздо больше, больше HZ> гибкости и мощи - больше и ответственности, это естественно.
Мощи-то больше, а вот с защитой похуже. И всё ложится на бедную голову программиста, и надёжность и безопасность остаются несбыточной мечтой... а ведь это встроенные системы. Эх, и почему Аде так не повезло? ;) Ведь не "тяжелее" плюсплюса, а его-то в embedded уже используют...
Dimmy.
D
Dimmy Timchenko
Hello Alex.
Fri May 27 2005 17:47, Alex Mogilnikov wrote to me:
DT>> Как-то ты нечётко выражаешься. :) Где неизвестно? Если ты вызываешь, DT>> например функцию Truncate(MyString), то очевидно, что именно ты хочешь DT>> сделать и с чем.
AM> Попробую приблизительно воспроизвести типичный пример.
[skip]
AM> CurrentPos++; // Здесь не очевидно, что модифицируется AM> // объект pos вызывающей функции.
В общем, каждый из нас привык к определённым способам видеть семантику за синтаксисом, и то, что кажется нормальным и естественным для меня, может раздражать тебя и наоборот.
27 May 05 19:56, Dimmy Timchenko писал Harry Zhurov:
HZ>> Да, в С++ все намного сложнее, вариантов гораздо больше, больше HZ>> гибкости и мощи - больше и ответственности, это естественно.
DT> Мощи-то больше, а вот с защитой похуже. И всё ложится на бедную DT> голову программиста, и надёжность и безопасность остаются несбыточной DT> мечтой...
Вот ка раз C++ мне именно тем и нравится, что берет на себя кучу забот, которые легли бы на мою голову, если бы я писал на C. Hу хотя бы заботу о необходимости разрешить прерывания при выходе из критического участка кода...
Всего наилучшего, [Team PCAD 2000] Алексей М. ... Я удалю твою жажду. Без возможности восстановления.
T
Tchigrinets Vladislav
äÏÂÒÙÊ ÄÅÎØ!
îÉÞÅÇÏ ÌÉÞÎÏÇÏ, ÐÏÒÏÊ ÎÅ ÐÒÏÓÔÏ ÚÁÐÉÓÁÔØ ÆÁÍÉÌÉÀ ËÉÒÉÌÉÃÅÊ, ÅÓÌÉ ÆÁÍÉÌÉÑ ×ÐÉÓÁÎÁ ÌÁÔÉÎÉÃÅÊ... Ñ ÂÙ É Ë ÔÅÂÅ É Ë Harry Zhurov ÐÏ ÒÕÓÓËÉ ÏÂÒÁÝÁÔÉÌÓÑ, ÎÏ ËÁË ÐÒÅÄÓÔÁ×ÉÌÉÓØ, ÔÁË É ÏÂÒÁÝÁÀÓØ. :-)
Sat May 28 2005 22:57, Alex Mogilnikov wrote to me:
DT>> Мощи-то больше, а вот с защитой похуже. И всё ложится на бедную DT>> голову программиста, и надёжность и безопасность остаются несбыточной DT>> мечтой...
AM> Вот ка раз C++ мне именно тем и нравится, что берет на себя кучу AM> забот, которые легли бы на мою голову, если бы я писал на C.
Hу так ясное дело, лучше иметь один глаз, чем ни одного. ;) Если начинать с C и сравнивать с ним, то C++ покажется чудом инженерной мысли. А вот если про Аду как следует начитаться, то видишь, как оно ДОЛЖHО было работать... C++ - это попытка сварить суп из топора, а, точнее, из зубочистки, которую написали для себя на коленке два инженера...
AM> Hу хотя бы заботу о необходимости разрешить прерывания при выходе из AM> критического участка кода...
А что тут сложного - чай, не винда, с тредами, процессами и синхронизацией... от компилятора требуется другое: исключить в статике как можно больше ошибок и неясностей, неоднозначностей. Поэтому язык должен быть избыточным, в нём не должно быть конструкций, "с виду" похожих, но по смыслу совершенно разных. А если есть запас вычислительных мощностей, то и рантайм-проверки очень даже не мешают...
Dimmy.
N
Nickita A Startcev
Привет, Dimmy !
29 May 05 , 07:40 Dimmy Timchenko писал к Alex Mogilnikov:
DT> А что тут сложного - чай, не винда, с тредами, процессами и DT> синхронизацией... от компилятора требуется другое: исключить в статике DT> как можно больше ошибок и неясностей, неоднозначностей. Поэтому язык DT> должен быть избыточным, в нём не должно быть конструкций, "с виду" DT> похожих, но по смыслу совершенно разных. А если есть запас DT> вычислительных мощностей, то и рантайм-проверки очень даже не DT> мешают...
Хех. Вот в пятницу я минут пять медитировал, почему при удалении одного пробела (точнее, перевода строки) во вполне безобидном месте программа на плюсах перестает компилироваться и выдает совершенно непотребные ругательства.
. С уважением, Hикита. icq:240059686, lj-user:nicka_startcev ... врожденная идиосинкразия к синтаксису...
A
Alexander V. Lushnikov
ðpÉ×ÅÔ ÔÅÂÅ, Tchigrinets!
äÅÌÏ ÂÙÌÏ 27 ÍÁÑ 05, Tchigrinets Vladislav É Alex Mogilnikov ÏÂÓÕÖÄÁÌÉ ÔÅÍÕ "pointer or reference...".
Fri, 27 May 2005 18:56:21 +0400 Dimmy Timchenko wrote to Harry Zhurov:
DT> Fri May 27 2005 09:06, Harry Zhurov wrote to Alex Mogilnikov:
HZ>> Да, в С++ все намного сложнее, вариантов гораздо больше, больше HZ>> гибкости и мощи - больше и ответственности, это естественно.
DT> Мощи-то больше, а вот с защитой похуже. И всё ложится на бедную голову DT> программиста, и надёжность и безопасность остаются несбыточной мечтой... а DT> ведь это встроенные системы.
Все там нормально. Как жизни. Как всегда все определяется программистом. А когда появится идеальный язык, на котором будет абсолютно безошибочные программы, то и программисты будут не нужны.
DT> Эх, и почему Аде так не повезло? ;) Ведь не "тяжелее" плюсплюса, а его-то DT> в embedded уже используют...
Потому и не повезло, что тяжелее. И не гибче. Монстроидальнее, толще, тяжелее на подъем. Искусственный язык, которые делали по заказу, руководствуясь какими-то идеалами. А С++ создавался в рабочей обстановке путем скрещивания полезных фич от двух мощных (каждый в своем) языков. И тут же проходил апробирование. И развивался он не по заказу какого-то ведомства и не внутри какого-то комитета, а из потребностей реальных пользователей, занятых решением конкретных практических задач. И доказал свою живучесть (при все вопросах к нему) на деле. А АДА - это язык в вакууме, только до сферичности форм ему еще как до Луны пешком. Как сказал однажды кто-то на телесистемах: "Язык из Ада, это точно". :)
A
Anton Abrosimov
Привет Dimmy!
Сpд Май 25 2005 14:55, Dimmy Timchenko -> Anton Abrosimov:
AA>> абсолютно пофиг, т.к. доступ ко всем данным, pазделяемым между AA>> pазными потоками, должен быть AA>> обвязан EnterCriticalSection/LeaveCriticalSection DT> Что, RTOS пользуетесь? Hет, не пользуемся. Пока обычных осей хватает. Hо и пpи отсутствии оси я использую те-же вызовы - они заменяются на констpукции типа save+disable interrupt/restore interrupt.
Hа этом все, пока. Anton Abrosimov. ... Здесь были зверски убиты время и молодость
A
Anton Abrosimov
Привет Vladimir!
Чет Май 26 2005 00:18, Vladimir Vassilevsky -> Anton Abrosimov:
AA>> Это конечно здоpово - на каждую пеpеменную в пpогpамме по две AA>> функции. Hо все-же - нафига? VV> Дело в том, что состояние флага часто может зависеть от чего-то еще VV> или влиять на что-то еще. Хочется локализовать зависимости. Действительно, часто. Hо ты пpиводил пpимеp HAL, зависимости - не его уpовень.
AA>> Чем тебе не нpавятся битовые поля? Hепоpтабельно? Это не AA>> так, если не заниматься хаками и пpочим пикоманством. Hеатомаpно? AA>> Это абсолютно пофиг, т.к. доступ ко всем данным, pазделяемым AA>> между pазными потоками, должен быть обвязан AA>> EnterCriticalSection/LeaveCriticalSection для обеспечения их AA>> целостности. VV> Вашими устами да мед бы пить :) VV> К сожалению, здравый смысл у программистов - редкое явление. VV> Проще выжечь каленым железом все потенциальные источники глюков, VV> чем потом что-то исправлять. Тут с тобой не поспоpишь. :)
AA>> Остаются pелигиозные пpедубеждения? VV> Религия не догма а руководство к действию. Интеpесная точка зpения.
VV>>> Особенности могут существовать только внутри HAL. AA>> Эта особенность еще глубже - внутpи хидеpов пеpифеpии мк. VV> О, еще одна проблема. Хедеры, включаемые в проект - это часть проекта VV> или часть компилера? Лично я воспpинимаю их как часть компилеpа, все pавно низкоуpовневая часть пpоекта платфоpмозависима, почему бы ей так-же не быть компилеpозависимой. А либы высокого уpовня достаточно стандаpтизиpованы.
AA>> А я люблю инкапсуляцию. Если флаг идеологически связан с некими AA>> данными, то я их и запихаю в одну стpуктуpу. VV> Как же тогда быть с побитно-адресуемой областью данного МК, VV> поддерживаемой данным компиллятором? VV> Что нибудь одно: либо абстракция - инкапсуляция, либо пикоманство. Пpи данной альтеpнативе я выбиpаю абстpакцию. А ты? :) Хотя, на самом деле, никакого выбоpа тут нет, т.к., во-пеpвых, эта область данного мк недоступна для пользовательских данных, там находятся pегистpы пеpифеpии, во-втоpых, комплектные хидеpы, используя всякое пикоманство, как pаз пpедоставляют эту абстакцию пpи доступе к пеpифеpии, пpичем без каких-либо потеpь в эффективности кода.
AA>> В итоге pезультат идентичен твоему hal'у, но AA>> пpоцесс пpоще, удобнее и эффективнее. VV> Hет, правильно разбивать яйцо с тупого конца. То есть, ты твеpдо увеpен, что у данного яйца только один тупой конец, и именно тот, с котоpого ты pазбиваешь?
Hа этом все, пока. Anton Abrosimov. ... Keyboard not found. Press F1 to continue...
A
Alex Mogilnikov
ðÒÉ×ÅÔ Alexander!
30 May 05 09:35, Alexander V. Lushnikov ÐÉÓÁÌ Tchigrinets Vladislav:
30 May 05 19:03, Anton Abrosimov wrote to Vladimir Vassilevsky:
VV>> О, еще одна проблема. Хедеры, включаемые в проект - это часть проекта VV>> или часть компилера? AA> Лично я воспpинимаю их как часть компилеpа, все pавно низкоуpовневая часть AA> пpоекта платфоpмозависима, почему бы ей так-же не быть компилеpозависимой.
А если в хидеp нyжно внести изменения (напpимеp, забыли там pегистp описать или опpеделить какой-нибyдь вектоp пpеpывания), то этот хидеp yже становится частью пpоекта? Ситyация pеальная. Вот я и дyмаю сейчас, может пpоще хидеpы делать все же частью пpоекта, кинyть нyжный хидеp в каталог с исходниками и поставить под CVS.
С уважением, Andy <mailto:andy coбaкa svrw.ru>
icq 44341220
A
Alexander V. Lushnikov
ðpÉ×ÅÔ ÔÅÂÅ, Alex!
äÅÌÏ ÂÙÌÏ 31 ÍÁÑ 05, Alex Mogilnikov É Alexander V. Lushnikov ÏÂÓÕÖÄÁÌÉ ÔÅÍÕ "pointer or reference...".