Запись значения по опpеделенному адpесу IAR C

May 12, 2005 166 Replies

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 просто забыли (как часто и бывает). :)

Да, в С++ все намного сложнее, вариантов гораздо больше, больше гибкости и мощи - больше и ответственности, это естественно.

Что касается ссылок указателей. Когда надо "работать с адресом объекта", т.е. когда прямое копирование накладно, почти во всех случаях, когда не требуется адресная арифметика, ссылки предпочтительнее. Они имеют более простой и понятный синтаксис при использовании, они не порождают ошибок, связанных с инициализацией (неинициализированные указатели - источник множества подлых глюков) - попробуй создать неинициализированную ссылку. А в ряде случаев - таких как перегрузка операторов, без ссылок вообще не обойтись.

Т.ч. зря ты на них наехал. В реальности проблем они не порождают. А когда копаешься в коде (особенно в чужом), всегда нужно все смотреть. Хороший редактор - с приличными средствами навигации по проекту - очень тут помогает: прыгнуть к определению и обратно - пара секунд, делается нажатием соответствующих хоткеев. Да хоть по всей цепочке определений и обратно.

Привет 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] Алексей М.

... Если ты коп, почему я весь взмок?

Привет 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] Алексей М. ... Смотрю куда глаза глядят...

Привет Dimmy!

27 May 05 17:47, Alex Mogilnikov писал Dimmy Timchenko:

DT>> Hу-у, зачем же так-то? ;) А если ты напишешь просто x++, что это DT>> даст понять?

AM> Да, если я знаю, что в сигнатуре функции нет аргументов-ссылок.

Блин. Пишу и разговариваю с коллегами одновременно. :) Я хотел сказать, что если не было объявлено ссылок, отсутствие звезды говорит об обращении к копии объекта-аргумента.

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Западно-уральское региональное общество добровольных учредителей.

Hello Harry.

Fri May 27 2005 09:06, Harry Zhurov wrote to Alex Mogilnikov:

HZ> Да, в С++ все намного сложнее, вариантов гораздо больше, больше HZ> гибкости и мощи - больше и ответственности, это естественно.

Мощи-то больше, а вот с защитой похуже. И всё ложится на бедную голову программиста, и надёжность и безопасность остаются несбыточной мечтой... а ведь это встроенные системы. Эх, и почему Аде так не повезло? ;) Ведь не "тяжелее" плюсплюса, а его-то в embedded уже используют...

Dimmy.

Hello Alex.

Fri May 27 2005 17:47, Alex Mogilnikov wrote to me:

DT>> Как-то ты нечётко выражаешься. :) Где неизвестно? Если ты вызываешь, DT>> например функцию Truncate(MyString), то очевидно, что именно ты хочешь DT>> сделать и с чем.

AM> Попробую приблизительно воспроизвести типичный пример.

[skip]

AM> CurrentPos++; // Здесь не очевидно, что модифицируется AM> // объект pos вызывающей функции.

В общем, каждый из нас привык к определённым способам видеть семантику за синтаксисом, и то, что кажется нормальным и естественным для меня, может раздражать тебя и наоборот.

Dimmy.

äÏÂÒÙÊ ÄÅÎØ!
<skipped> îÁ ÍÏÊ ×ÚÇÌÑÄ ×ÏÐÒÏÓ ÓÔÁÌ ÐÒÉÏÂÒÅÔÁÔØ ÉÄÅÏÌÏÇÉÞÅÓËÉÊ ÏÔÔÅÎÏË. Alex Mogilnikov, ×ÅÒÏÑÔÎÏ, × ÏÓÎÏ×ÎÏÍ ÐÉÛÅÔ ÎÁ óÉ É ÓÉÌÁ ÐÒÉ×ÙÞËÉ ÐÒÉ×ÏÄÉÔ Ë ÎÅÐÒÉÑÔÉÀ ÓÓÙÌÏË, × ÔÏ ÖÅ ×ÒÅÍÑ Harry Zhurov ÏÔ×ÅÞÁÅÔ Ó ÔÏÞËÉ ÚÒÅÎÉÑ ÐÒÏÇÒÁÍÍÉÓÔÁ óÉ++. éÓÐÏÌØÚÏ×ÁÎÉÅ ÕËÁÚÁÔÅÌÅÊ, ËÁË ÐÒÁ×ÉÌÏ, × óÉ++ Ó×ÑÚÁÎÏ Ó ÎÁÓÌÅÄÏ×ÁÎÉÅÍ É ÐÏÌÉÍÏÒÆÉÚÍÏÍ, ËÏÇÄÁ ÕËÁÚÁÔÅÌØ ÎÁ ÂÁÚÏ×ÙÊ ËÌÁÓÓ, ÕËÁÚÙ×ÁÅÔ ÎÁ ÏÂßÅËÔ-ÎÁÓÌÅÄÎÉË É ×ÙÚÙ×ÁÅÔ ÅÇÏ ÐÅÒÅÇÒÕÖÅÎÎÙÅ ×ÉÒÔÕÁÌØÎÙÅ ÆÕÎËÃÉÉ. îÏ × Embedded C++ ÎÁÓÌÅÄÏ×ÁÎÉÅ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ (ÐÏ ËÒÁÊÎÅÊ ÍÅÒÅ × ÔÏÊ ÓÐÅÃÉÆÉËÁÃÉÉ, ËÏÔÏÒÕÀ ÍÎÅ ÄÏ×ÅÌÏÓØ ÞÉÔÁÔØ), ÐÏ-ÜÔÏÍÕ × ÄÁÎÎÏÍ ËÏÎÔÅËÓÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ ÕËÁÚÁÔÅÌØ ÎÅ ÐÒÉÈÏÄÉÔÓÑ. îÉËÕÄÁ ÎÅ ÄÅÔØÓÑ É ÏÔ ÉÓÐÏÌØÚÏ×ÁÎÉÑ × óÉ++ óÉ-ÛÎÏÇÏ ËÏÄÁ, × ËÏÔÏÒÏÍ ÎÅÔ ÐÏÎÑÔÉÑ ÓÓÙÌËÉ, Á ÉÓÐÏÌØÚÏ×ÁÔØ óÉ ËÏÄ ÐÒÉÈÏÄÉÔÓÑ, ÎÁÐÒÉÍÅÒ ÒÁÂÏÔÁ Ó ÆÁÊÌÏ×ÙÍÉ ÐÏÔÏËÁÍÉ, ËÏÔÏÒÙÅ ÐÒÉÎÉÍÁÀÔ ÉÍÑ ÆÁÊÌÁ ÎÅ ËÁË std::string, a ËÁË char*, ÉÍÅÅÍ ÆÕÎËÃÉÀ c_str(). ÷ óÉ++ ÄÌÑ ÎÁ×ÉÇÁÃÉÉ ÐÏ ËÏÎÔÅÊÎÅÒÁÍ ÉÓÐÏÌØÚÕÀÔÓÑ ÉÔÅÒÁÔÏÒÙ, ÓÏÏÔ×ÅÔÓÔ×ÅÎÎÏ × óÉ - ÕËÁÚÁÔÅÌÉ. ðÒÉ×ÅÄÕ "óÏ×ÅÔÙ", ×ÙÓËÁÚÁÎÎÙÅ × ËÎÉÇÅ Stroustrup rus edition: ó83 "ñÚÙË ÐÒÏÇÒÁÍÍÉÒÏ×ÁÎÉÑ ó++" óÐÅÃÉÁÌØÎÏÅ ÉÚÄÁÎÉÅ: çÌÁ×Á 5 "õËÁÚÁÔÅÌÉ, ÍÁÓÓÉ×Ù É ÓÔÒÕËÔÕÒÙ" ÐÐ. 5.5 "óÓÙÌËÉ", ÓÔÒ 137 .. 140, ÐÐ. 5.8 "óÏ×ÅÔÙ", ÓÔÒ 144:
  1. éÚÂÅÇÁÊÔÅ ÎÅÔÒÉ×ÉÁÌØÎÏÊ ÁÒÉÆÍÅÔÉËÉ ÕËÁÚÁÔÅÌÅÊ; Ð. 5.3.
<skipped>
  1. óÔÁÒÁÊÔÅÓØ ËÁË ÍÏÖÎÏ ÒÅÖÅ ÐÏÌØÚÏ×ÁÔØÓÑ _ÐÒÏÓÔÙÍÉ_ ÓÓÙÌËÁÍÉ × ËÁÞÅÓÔ×Å ÁÒÇÕÍÅÎÔÏ× ÆÕÎËÃÉÊ; Ð. 5.5. [ÏÔ ÓÅÂÑ ÓËÁÖÕ: ÒÁÎÏ ÔÁÎÃÅ×ÁÔØ ÖÉÇÕ ÐÏ ÐÏ×ÏÄÕ ÄÁÎÎÏÇÏ ÐÕÎËÔÁ, ÌÕÞÛÅ ÐÒÏÞÔÉÔÅ ×Ð. 5.5. ÐÏÞÅÍÕ, Á ÔÁËÖÅ Ï ÔÏÍ, ËÁË ÉÈ ÉÓÐÏÌØÚÏ×ÁÔØ, ÓÍ. ÔÁË ÖÅ ÓÏ×ÅÔÙ ÎÉÖÅ].
  2. ðÏÌØÚÕÊÔÅÓØ void* ÔÏÌØËÏ × ËÏÄÅ ÎÉÚËÏÇÏ ÕÒÏ×ÎÑ; Ð. 5.6. [ÎÏ ÜÔÏ ÓÅÊÞÁÓ ÎÅ ÓÏ×ÓÅÍ × ÔÅÍÕ, ÐÏÓËÏÌØËÕ ËÁÓÁÅÔÓÑ ÐÒÉ×ÅÄÅÎÉÑ ÔÉÐÏ×]
ôÅÐÅÒØ Ï ÆÕÎËÃÉÑÈ. çÌÁ×Á 7. ÔÁË É ÎÁÚÙ×ÁÅÔÓÑ "æÕÎËÃÉÉ", × ÎÅÊ ÐÏÄÐÕÎËÔ 7.2 "ðÅÒÅÄÁÞÁ ÁÒÇÕÍÅÎÔÏ×" ÓÔÒÁÎÉÃÙ Ó 187 ÐÏ 189 ÏÞÅÎØ ÐÏÕÞÉÔÅÌØÎÏ :-)), ÎÏ ÐÒÉ×ÅÄÕ ÐÏÓÌÅÄÎÉÊ ÐÏÄÐÕÎËÔ 7.9 "óÏ×ÅÔÙ" ÓÏ ÓÔÒÁÎÉÃÙ 205:
  1. ïÔÎÏÓÉÔÅÓØ Ó ÐÏÄÏÚÒÅÎÉÅÍ Ë ÎÅËÏÎÓÔÁÎÔÎÙÍ ÁÒÇÕÍÅÎÔÁÍ; ÅÓÌÉ ×Ù ÈÏÔÉÔÅ, ÞÔÏÂÙ ÆÕÎËÃÉÑ ÍÏÄÉÆÉÃÉÒÏ×ÁÌÁ Ó×ÏÉ ÁÒÇÕÍÅÎÔÙ, ÐÏÌØÚÕÊÔÅÓØ ×ÍÅÓÔÏ ÜÔÏÇÏ ÕËÁÚÁÔÅÌÑÍÉ É ×ÏÚ×ÒÁÝÁÅÍÙÍ ÚÎÁÞÅÎÉÅÍ; Ð. 5.5
  2. åÓÌÉ ÎÅÏÂÈÏÄÉÍÏ ÍÉÎÉÍÉÚÉÒÏ×ÁÔØ ÚÁÔÒÁÔÙ ÎÁ ËÏÐÉÒÏ×ÁÎÉÅ ÁÒÇÕÍÅÎÔÏ×, ÐÏÌØÚÕÊÔÅÓØ ËÏÎÓÔÁÎÔÎÙÍÉ ÓÓÙÌËÁÍÉ × ËÁÞÅÓÔ×Å ÁÒÇÕÍÅÎÔÏ×; Ð.5.5 [ÏÐÑÔØ ÏÔ ÓÅÂÑ ÓËÁÖÕ: × Ð.5.5 ÏÂßÑÓÎÑÅÔÓÑ ÔÁËÖÅ ËÁË "ÕÍÎÙÊ" ËÏÍÐÉÌÑÔÏÒ ÍÏÖÅÔ ÏÐÔÉÍÉÚÉÒÏ×ÁÔØ ÒÁÂÏÔÕ Ó ËÏÎÓÔÁÎÔÎÙÍÉ ÓÓÙÌËÁÍÉ].
  3. éÓÐÏÌØÚÕÊÔÅ ÍÏÄÉÆÉËÁÔÏÒ const ÒÅÇÕÌÑÒÎÏ É ÐÏÓÌÅÄÏ×ÁÔÅÌØÎÏ; Ð. 7.2.
ÏÓÔÁÌØÎÏÅ ÔÏÖÅ ÉÎÔÅÒÅÓÎÏ, ÎÏ <skipped>, ÞÉÔÁÊÔÅ ÏÒÉÇÉÎÁÌ :-)) ðÏ ÐÏ×ÏÄÕ ÐÒÉÍÅÒÁ, ÐÒÉ×ÅÄÅÎÎÏÇÏ Alex Mogilnikov, ÃÉÔÉÒÕÀ 8< ===========================>8 AM>ðÏÐÒÏÂÕÀ ÐÒÉÂÌÉÚÉÔÅÌØÎÏ ×ÏÓÐÒÏÉÚ×ÅÓÔÉ ÔÉÐÉÞÎÙÊ ÐÒÉÍÅÒ.

int pos; int len; // ËÁËÏÊ-ÔÏ ËÏÄ char *rr = GetDomainRecord(domain, pos, len); // É ÔÁË ÄÁÌÅÅ

char * GetDomainRecord(const char* DomainName, int &CurrentPos, int BytesLeft,) { // ×ÓÑËÉÊ ËÏÄ while(BytesLeft > 0)

8< ===========================>8 åÓÌÉ DomainName, CurrentPos É BytesLeft ÎÅ ÍÅÎÑÀÔÓÑ ×ÎÕÔÒÉ ÆÕÎËÃÉÉ, ÔÏ ÓÌÅÄÕÅÔ ÎÁÐÉÓÁÔØ ÔÁË:

char * GetDomainRecord(const char* const DomainName, const int CurrentPos, const int BytesLeft)

ÐÒÉÞÅÍ, ÐÅÒÅÄÁ×ÁÔØ ÐÏ ÓÓÙÌËÅ CurrentPos ÎÅÔ ÎÅÏÂÈÏÄÉÍÏÓÔÉ, ÅÓÌÉ ÜÔÏ ÐÒÏÓÔÏ const int, Á ÎÅ "ÂÏÌØÛÏÊ ÏÂßÅËÔ". éÓÐÏÌØÚÏ×ÁÎÉÅ ÎÅËÏÎÓÔÁÎÔÎÏÊ int &CurrentPos ÐÏÄÒÁÚÕÍÅ×ÁÅÔ ÍÏÄÉÆÉËÁÃÉÀ ÐÅÒÅÄÁ×ÁÅÍÏÇÏ ÏÂßÅËÔÁ-ÁÒÇÕÍÅÎÔÁ.
åÓÌÉ ËÏÄ ÎÁÐÉÓÁÎ ÎÅÇÒÁÍÏÔÎÙÍ (ÉÌÉ ÎÅÁËËÕÒÁÔÎÙÍ) ÐÒÏÇÒÁÍÍÉÓÔÏÍ, ÔÏ ÔÁËÏÊ ËÏÄ ÂÕÄÅÔ ×ÓÅÇÄÁ ÔÑÖÅÌÏ ÞÉÔÁÔØ, ÎÅÚÁ×ÉÓÉÍÏ ÏÔ ÔÏÇÏ, ÓÓÙÌËÉ ÏÎ ÉÓÐÏÌØÚÕÅÔ ÉÌÉ ÕËÁÚÁÔÅÌÉ. ïÞÅÎØ ÈÏÒÏÛÏ, ËÏÇÄÁ ËÁÖÄÁÑ ÆÕÎËÃÉÑ ÐÒÅÄ×ÁÒÑÅÔÓÑ ËÏÍÍÅÎÔÁÒÉÑÍ ÐÏ ÐÏ×ÏÄÕ ÅÅ ÒÁÂÏÔÙ, ×ÏÚ×ÒÁÝÁÅÍÙÈ ÏÂßÅËÔÏ× É ÉÓÐÏÌØÚÕÅÍÙÈ ÁÒÇÕÍÅÎÔÏ×. ó Õ×ÁÖÅÎÉÅÍ þÉÇÒÉÎÅà ÷ÌÁÄÉÓÌÁ×.
ðÒÉ×ÅÔ Tchigrinets!

27 May 05 20:48, Tchigrinets Vladislav ÐÉÓÁÌ Alex Mogilnikov:

TV> HÁ ÍÏÊ ×ÚÇÌÑÄ ×ÏÐÒÏÓ ÓÔÁÌ ÐÒÉÏÂÒÅÔÁÔØ ÉÄÅÏÌÏÇÉÞÅÓËÉÊ ÏÔÔÅÎÏË.

äÙË, ÎÅ ÎÁÞÁÌ, Á Ó ÓÁÍÏÇÏ ÎÁÞÁÌÁ ÉÍÅÌ. éÂÏ ÎÁÞÉÎÁÌÓÑ ÓÏ ÓÔÏ×Á "ÎÅÎÁ×ÉÖÕ". :)

TV> Alex Mogilnikov,

á ÞÅÇÏ ÔÙ ËÏ ÍÎÅ × 3-Í ÌÉÃÅ ÏÂÒÁÝÁÅÛØÓÑ?

TV> ×ÅÒÏÑÔÎÏ, × ÏÓÎÏ×ÎÏÍ ÐÉÛÅÔ ÎÁ óÉ

ðÏÓÌÅÄÎÅÅ ×ÒÅÍÑ - ×-ÏÓÎÏ×ÎÏÍ ÎÁ C++.

TV> É ÓÉÌÁ ÐÒÉ×ÙÞËÉ ÐÒÉ×ÏÄÉÔ Ë ÎÅÐÒÉÑÔÉÀ ÓÓÙÌÏË, × ÔÏ ÖÅ ×ÒÅÍÑ Harry TV> Zhurov ÏÔ×ÅÞÁÅÔ Ó ÔÏÞËÉ ÚÒÅÎÉÑ TV> ÐÒÏÇÒÁÍÍÉÓÔÁ óÉ++. éÓÐÏÌØÚÏ×ÁÎÉÅ ÕËÁÚÁÔÅÌÅÊ, ËÁË ÐÒÁ×ÉÌÏ, × óÉ++ TV> Ó×ÑÚÁÎÏ Ó ÎÁÓÌÅÄÏ×ÁÎÉÅÍ É ÐÏÌÉÍÏÒÆÉÚÍÏÍ, ËÏÇÄÁ ÕËÁÚÁÔÅÌØ ÎÁ ÂÁÚÏ×ÙÊ TV> ËÌÁÓÓ, ÕËÁÚÙ×ÁÅÔ ÎÁ ÏÂßÅËÔ-ÎÁÓÌÅÄÎÉË É ×ÙÚÙ×ÁÅÔ ÅÇÏ ÐÅÒÅÇÒÕÖÅÎÎÙÅ TV> ×ÉÒÔÕÁÌØÎÙÅ ÆÕÎËÃÉÉ. HÏ × Embedded C++ ÎÁÓÌÅÄÏ×ÁÎÉÅ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ

HÅ ÚÎÁÀ ÔÁËÏÇÏ ÑÚÙËÁ.

TV> åÓÌÉ ËÏÄ ÎÁÐÉÓÁÎ ÎÅÇÒÁÍÏÔÎÙÍ (ÉÌÉ ÎÅÁËËÕÒÁÔÎÙÍ) ÐÒÏÇÒÁÍÍÉÓÔÏÍ, ÔÏ TV> ÔÁËÏÊ ËÏÄ ÂÕÄÅÔ ×ÓÅÇÄÁ ÔÑÖÅÌÏ ÞÉÔÁÔØ, ÎÅÚÁ×ÉÓÉÍÏ ÏÔ ÔÏÇÏ, ÓÓÙÌËÉ ÏÎ TV> ÉÓÐÏÌØÚÕÅÔ ÉÌÉ ÕËÁÚÁÔÅÌÉ.

÷ÏÚÍÏÖÎÏ. HÏ × ËÏÄÅ, ÞÔÏ ÍÎÅ ÐÒÉÈÏÄÉÌÏÓØ ÐÒÉÎÉÍÁÔØ, ÎÅÐÒÉÑÔÎÏÓÔÉ ÍÎÅ ÄÏÓÔÁ×ÌÑÌÉ ÉÍÅÎÎÏ ÓÓÙÌËÉ. ðÏÜÔÏÍÕ Ñ ÐÅÒÅÓÔÁÌ ÌÀÂÉÔØ ÉÍÅÎÎÏ ÉÈ... ÷ÓÅÇÏ ÎÁÉÌÕÞÛÅÇÏ, [Team PCAD 2000] áÌÅËÓÅÊ í. ... ðÏÓÅÔÉÔÅÌÉ ÄÏÌÖÎÙ ÏÂÝÁÔØÓÑ ÐÏ ÓÅÔÉ.

Привет Dimmy!

27 May 05 19:56, Dimmy Timchenko писал Harry Zhurov:

HZ>> Да, в С++ все намного сложнее, вариантов гораздо больше, больше HZ>> гибкости и мощи - больше и ответственности, это естественно.

DT> Мощи-то больше, а вот с защитой похуже. И всё ложится на бедную DT> голову программиста, и надёжность и безопасность остаются несбыточной DT> мечтой...

Вот ка раз C++ мне именно тем и нравится, что берет на себя кучу забот, которые легли бы на мою голову, если бы я писал на C. Hу хотя бы заботу о необходимости разрешить прерывания при выходе из критического участка кода...

Всего наилучшего, [Team PCAD 2000] Алексей М. ... Я удалю твою жажду. Без возможности восстановления.

äÏÂÒÙÊ ÄÅÎØ!
îÉÞÅÇÏ ÌÉÞÎÏÇÏ, ÐÏÒÏÊ ÎÅ ÐÒÏÓÔÏ ÚÁÐÉÓÁÔØ ÆÁÍÉÌÉÀ ËÉÒÉÌÉÃÅÊ, ÅÓÌÉ ÆÁÍÉÌÉÑ ×ÐÉÓÁÎÁ ÌÁÔÉÎÉÃÅÊ... Ñ ÂÙ É Ë ÔÅÂÅ É Ë Harry Zhurov ÐÏ ÒÕÓÓËÉ ÏÂÒÁÝÁÔÉÌÓÑ, ÎÏ ËÁË ÐÒÅÄÓÔÁ×ÉÌÉÓØ, ÔÁË É ÏÂÒÁÝÁÀÓØ. :-)

formatting link

ÐÒÁ×ÉÌØÎÏÅ ÉÈ ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÄÏÌÖÎÏ ÐÒÉÎÏÓÉÔØ ÓËÏÒÅÅ ÐÏÌØÚÕ, ÞÅÍ ÐÒÏÂÌÅÍÙ, ÉÎÁÞÅ ÂÙ ÉÈ ÎÅ ××ÏÄÉÌÉ × ÑÚÙË ó++, ÚÁÞÅÍ ÍÎÏÖÉÔØ ÓÕÝÎÏÓÔÉ ÂÅÚ ÎÅÏÂÈÏÄÉÍÏÓÔÉ... ó Õ×ÁÖÅÎÉÅÍ, þÉÇÒÉÎÅà ÷ÌÁÄÉÓÌÁ×

Hello Alex.

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.

Привет, Dimmy !

29 May 05 , 07:40 Dimmy Timchenko писал к Alex Mogilnikov:

DT> А что тут сложного - чай, не винда, с тредами, процессами и DT> синхронизацией... от компилятора требуется другое: исключить в статике DT> как можно больше ошибок и неясностей, неоднозначностей. Поэтому язык DT> должен быть избыточным, в нём не должно быть конструкций, "с виду" DT> похожих, но по смыслу совершенно разных. А если есть запас DT> вычислительных мощностей, то и рантайм-проверки очень даже не DT> мешают...

Хех. Вот в пятницу я минут пять медитировал, почему при удалении одного пробела (точнее, перевода строки) во вполне безобидном месте программа на плюсах перестает компилироваться и выдает совершенно непотребные ругательства.

. С уважением, Hикита. icq:240059686, lj-user:nicka_startcev ... врожденная идиосинкразия к синтаксису...

ðpÉ×ÅÔ ÔÅÂÅ, Tchigrinets! äÅÌÏ ÂÙÌÏ 27 ÍÁÑ 05, Tchigrinets Vladislav É Alex Mogilnikov ÏÂÓÕÖÄÁÌÉ ÔÅÍÕ "pointer or reference...".

TV> ËÏÎÔÅËÓÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ ÕËÁÚÁÔÅÌØ ÎÅ ÐpÉÈÏÄÉÔÓÑ. HÉËÕÄÁ ÎÅ ÄÅÔØÓÑ É ÏÔ TV> ÉÓÐÏÌØÚÏ×ÁÎÉÑ × óÉ++ óÉ-ÛÎÏÇÏ ËÏÄÁ, × ËÏÔÏpÏÍ ÎÅÔ ÐÏÎÑÔÉÑ ÓÓÙÌËÉ, Á ÉÅ? á ÞÔÏ ÅÓÔØ &somewhat? óÉÑ ËÏÎÓÔpÕËÃÉÑ ×ÐÏÌÎÅ ÔÁË ÓÉÛÎÁÑ.

õÄÁÞÉ! áÌÅËÓÁÎÄp ìÕÛÎÉËÏ×.

Fri, 27 May 2005 16:48:34 +0000 (UTC) Tchigrinets Vladislav wrote to Alex Mogilnikov:

[...]

TV> éÓÐÏÌØÚÏ×ÁÎÉÅ ÕËÁÚÁÔÅÌÅÊ, ËÁË ÐÒÁ×ÉÌÏ, × óÉ++ Ó×ÑÚÁÎÏ Ó ÎÁÓÌÅÄÏ×ÁÎÉÅÍ É TV> ÐÏÌÉÍÏÒÆÉÚÍÏÍ,

îÉÞÅÇÏ ÐÏÄÏÂÎÏÇÏ! ÷ ó++ ÕËÁÚÁÔÅÌØ ÉÓÐÏÌØÚÕÅÔÓÑ ÔÏÞÎÏ ÔÁË ÖÅ, ËÁË É × ó, ÔÏÌØËÏ × ÓÉÌÕ ÎÏ×ÙÈ ÑÚÙËÏ×ÙÈ ÓÒÅÄÓÔ× ÉÍÅÅÔ ÂÏÌÅÅ ÒÁÓÛÉÒÅÎÎÕÀ ÆÕÎËÃÉÏÎÁÌØÎÏÓÔØ - ÎÁÓÌÅÄÏ×ÁÎÉÅ É ÐÏÌÉÍÏÒÆÉÚÍ, Á ÔÁËÖÅ ÐÅÒÅÇÒÕÚËÁ ÏÐÅÒÁÔÏÒÁ.

TV> îÏ × Embedded C++ ÎÁÓÌÅÄÏ×ÁÎÉÅ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ (ÐÏ ËÒÁÊÎÅÊ ÍÅÒÅ × ÔÏÊ TV> ÓÐÅÃÉÆÉËÁÃÉÉ, ËÏÔÏÒÕÀ ÍÎÅ ÄÏ×ÅÌÏÓØ ÞÉÔÁÔØ), ÐÏ-ÜÔÏÍÕ × ÄÁÎÎÏÍ ËÏÎÔÅËÓÔÅ TV> ÉÓÐÏÌØÚÏ×ÁÔØ ÕËÁÚÁÔÅÌØ ÎÅ ÐÒÉÈÏÄÉÔÓÑ.

÷ Embedded C++ ÎÁÓÌÅÄÏ×ÁÎÉÅ (É ÐÏÌÉÍÏÒÆÉÚÍ, ËÓÔÁÔÉ, ÔÏÖÅ) ÐÒÅËÒÁÓÎÏ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ. ó ÓÁÍÏÇÏ ÎÁÞÁÌÁ. ÷ Embedded C++ ÉÓÈÏÄÎÏ ÎÅ ÂÙÌÏ 6 ×ÅÝÅÊ: ÛÁÂÌÏÎÏ×, ÐÒÏÓÔÒÁÎÓÔ× ÉÍÅÎ, ÍÎÏÖÅÓÔ×ÅÎÎÏÇÏ ÎÁÓÌÅÄÏ×ÁÎÉÑ, ÉÎÆÏÒÍÁÃÉÉ Ï ÔÉÐÅ ÎÁ ÒÁÎÔÁÊÍÅ, ÎÏ×ÏÇÏ ÓÉÎÔÁËÓÉÓÁ ËÁÓÔÏ× É ÉÓËÌÀÞÅÎÉÊ. ÷ÓÅ ÏÓÔÁÌØÎÏÅ ÂÙÌÏ É ÅÓÔØ. âÏÌÅÅ ÔÏÇÏ, ÓÅÊÞÁÓ ÕÖÅ ÐÏÌÎÏ ÒÅÁÌÉÚÁÃÉÊ, ÇÄÅ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ ÛÁÂÌÏÎÙ, ÐÒÏÓÔÒÁÎÓÔ×Á ÉÍÅÎ É ÎÏ×ÙÊ ÓÉÎÔÁËÓÉÓ ËÁÓÔÏ×. ô.Å. ÐÏ ÂÏÌØÛÏÍÕ ÓÞÅÔÕ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ ÉÓËÌÀÞÅÎÉÑ É RTTI. õ IAR'Á ÜÔÏ ÎÁÚÙ×ÁÅÔÓÑ Extended åó++. îÅËÏÔÏÒÙÅ ÄÒÕÇÉÅ ÆÉÒÍÙ ×ÏÏÂÝÅ ÎÅ ÚÁÍÏÒÁÞÉ×ÁÌÉÓØ ÎÁ ÜÔÉ ÅÍÂÅÄÄÅÄ ÎÁÚ×ÁÎÉÑ/ÓÐÅÃÉÆÉËÁÃÉÉ, Á ÐÒÑÍÏ ÎÁÚÙ×ÁÌÉ/ÎÁÚÙ×ÁÀÔ Ó×ÏÉ ËÏÍÐÉÌÑÔÏÒÙ ó++, ÈÏÔÑ ÔÁÍ ÔÏÖÅ ÐÒÑÍÏ ÂÙÌÏ ÓËÁÚÁÎÏ, ÞÔÏ ÉÓËÌÀÞÅÎÉÑ É RTTI ÎÅ ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ × ×ÉÄÕ ÂÏÌØÛÉÈ ÎÁËÌÁÄÎÙÈ ÒÁÓÈÏÄÏ× É, ËÁË ÓÌÅÄÓÔ×ÉÅ, ÏÔÓÕÔÓÔ×ÉÑ ÐÒÁËÔÉÞÅÓËÏÇÏ ÓÍÙÓÌÁ.

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 уже используют...

Потому и не повезло, что тяжелее. И не гибче. Монстроидальнее, толще, тяжелее на подъем. Искусственный язык, которые делали по заказу, руководствуясь какими-то идеалами. А С++ создавался в рабочей обстановке путем скрещивания полезных фич от двух мощных (каждый в своем) языков. И тут же проходил апробирование. И развивался он не по заказу какого-то ведомства и не внутри какого-то комитета, а из потребностей реальных пользователей, занятых решением конкретных практических задач. И доказал свою живучесть (при все вопросах к нему) на деле. А АДА - это язык в вакууме, только до сферичности форм ему еще как до Луны пешком. Как сказал однажды кто-то на телесистемах: "Язык из Ада, это точно". :)

Привет 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. ... Здесь были зверски убиты время и молодость

Привет 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...

ðÒÉ×ÅÔ Alexander!

30 May 05 09:35, Alexander V. Lushnikov ÐÉÓÁÌ Tchigrinets Vladislav:

TV>> ËÏÎÔÅËÓÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ ÕËÁÚÁÔÅÌØ ÎÅ ÐpÉÈÏÄÉÔÓÑ. HÉËÕÄÁ ÎÅ ÄÅÔØÓÑ É TV>> ÏÔ ÉÓÐÏÌØÚÏ×ÁÎÉÑ × óÉ++ óÉ-ÛÎÏÇÏ ËÏÄÁ, × ËÏÔÏpÏÍ ÎÅÔ ÐÏÎÑÔÉÑ TV>> ÓÓÙÌËÉ, Á AL> ÉÅ? á ÞÔÏ ÅÓÔØ &somewhat? óÉÑ ËÏÎÓÔpÕËÃÉÑ ×ÐÏÌÎÅ ÔÁË ÓÉÛÎÁÑ.

üÔÏ "address-of" ÏÐÅÒÁÔÏÒ. ÷ÓÅÇÏ ÎÁÉÌÕÞÛÅÇÏ, [Team PCAD 2000] áÌÅËÓÅÊ í. ... úÁÐÁÄÎÏ-ÕÒÁÌØÓËÏÅ ÒÅÇÉÏÎÁÌØÎÏÅ ÏÂÝÅÓÔ×Ï ÄÏÂÒÏ×ÏÌØÎÙÈ ÕÞÒÅÄÉÔÅÌÅÊ.

Hello Anton.

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

ðpÉ×ÅÔ ÔÅÂÅ, Alex! äÅÌÏ ÂÙÌÏ 31 ÍÁÑ 05, Alex Mogilnikov É Alexander V. Lushnikov ÏÂÓÕÖÄÁÌÉ ÔÅÍÕ "pointer or reference...".

TV>>> ÏÔ ÉÓÐÏÌØÚÏ×ÁÎÉÑ × óÉ++ óÉ-ÛÎÏÇÏ ËÏÄÁ, × ËÏÔÏpÏÍ ÎÅÔ ÐÏÎÑÔÉÑ TV>>> ÓÓÙÌËÉ, Á AL>> ÉÅ? á ÞÔÏ ÅÓÔØ &somewhat? óÉÑ ËÏÎÓÔpÕËÃÉÑ ×ÐÏÌÎÅ ÔÁË ÓÉÛÎÁÑ.

AM> üÔÏ "address-of" ÏÐÅpÁÔÏp.

Á ÓÓÙÌËÁ, ÐÏ Ô×ÏÅÍÕ, ÜÔÏ ÎÅ ÁÄpÅÓ ÏÂßÅËÔÁ, ÄÁ? õÄÁÞÉ! áÌÅËÓÁÎÄp ìÕÛÎÉËÏ×.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required