ARM: C++ exceptions
От: Аноним  
Дата: 26.08.07 15:33
Оценка:
Тема использовать или не использовать много раз обсуждалась,
но теперь столкнулся с ней напрямую, и не знаю что делать.

Есть ARM и 64 Мб, надо выбрать использовать или не использовать
исключения, до написания основного кода,

какие бы вы выбрали тесты для этого будь у вас железка и кроскомпилятор
gcc 4.x для этого?
Re: ARM: C++ exceptions
От: Uzumaki Naruto Ниоткуда  
Дата: 26.08.07 17:47
Оценка:
Использовать или не использовать — зависит от типа ARM. Я по жизни не люблю использовать исключения, по этому не стал бы их использовать в данном случае.

Re: ARM: C++ exceptions
От: Шахтер Интернет  
Дата: 26.08.07 19:25
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Тема использовать или не использовать много раз обсуждалась,

А>но теперь столкнулся с ней напрямую, и не знаю что делать.

А>Есть ARM и 64 Мб, надо выбрать использовать или не использовать

А>исключения, до написания основного кода,

А>какие бы вы выбрали тесты для этого будь у вас железка и кроскомпилятор

А>gcc 4.x для этого?

Я использую исключения. Как раз на ARM е c 64 Мб и gcc 4.x.
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[2]: ARM: C++ exceptions
От: Awaken Украина  
Дата: 26.08.07 19:55
Оценка:
UN>Использовать или не использовать — зависит от типа ARM. Я по жизни не люблю использовать исключения, по этому не стал бы их использовать в данном >случае.

нмв неиспользование исключений приводит к коду в стиле "Си с классами". фактически ты лишаешься RAII
Re[3]: ARM: C++ exceptions
От: remark Россия http://www.1024cores.net/
Дата: 26.08.07 20:55
Оценка:
Здравствуйте, Awaken, Вы писали:

UN>>Использовать или не использовать — зависит от типа ARM. Я по жизни не люблю использовать исключения, по этому не стал бы их использовать в данном >случае.


A>нмв неиспользование исключений приводит к коду в стиле "Си с классами". фактически ты лишаешься RAII


А так же конструкторов, операторов и функций с удобной сигнатурой


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[2]: ARM: C++ exceptions
От: Awaken Украина  
Дата: 26.08.07 21:19
Оценка:
Ш>Я использую исключения. Как раз на ARM е c 64 Мб и gcc 4.x.
а что за платформа и приложение?
Re[2]: ARM: C++ exceptions
От: Alexander Pazdnikov  
Дата: 27.08.07 04:13
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>Я использую исключения. Как раз на ARM е c 64 Мб и gcc 4.x.


Идентично.
Re: ARM: C++ exceptions
От: dip_2000 Россия  
Дата: 27.08.07 04:14
Оценка:
Использую исключения. Платформа ARM. Win Mobile 5, 6. В том числе в достаточно критических местах. Проблемм не замечал, хотя и тестов скорости, сравнительных, с ситуацией "без исключений", не проводил. Компилятор родной VS 2005 SP1
Re[3]: ARM: C++ exceptions
От: Erop Россия  
Дата: 27.08.07 09:00
Оценка:
Здравствуйте, Awaken, Вы писали:

A>нмв неиспользование исключений приводит к коду в стиле "Си с классами". фактически ты лишаешься RAII


А зачем?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: ARM: C++ exceptions
От: korzh.pavel Россия  
Дата: 27.08.07 09:20
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Тема использовать или не использовать много раз обсуждалась,

А>но теперь столкнулся с ней напрямую, и не знаю что делать.

А>Есть ARM и 64 Мб, надо выбрать использовать или не использовать

А>исключения, до написания основного кода,

А>какие бы вы выбрали тесты для этого будь у вас железка и кроскомпилятор

А>gcc 4.x для этого?

Может здесь что нибудь найдёшь: Technical Report on C++ Performance
Re[3]: ARM: C++ exceptions
От: Шахтер Интернет  
Дата: 29.08.07 02:45
Оценка:
Здравствуйте, Awaken, Вы писали:

Ш>>Я использую исключения. Как раз на ARM е c 64 Мб и gcc 4.x.

A>а что за платформа и приложение?

Это не приложение. Я делал экспериментальное RT ядро для ixp465. Компилятор -- gcc-4.1.1 с подправленной RTL (в частности, для того чтобы можно было использовать C++ для обработки прерываний).
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[4]: ARM: C++ exceptions
От: alexeiz  
Дата: 29.08.07 06:02
Оценка:
Здравствуйте, Erop, Вы писали:

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


A>>нмв неиспользование исключений приводит к коду в стиле "Си с классами". фактически ты лишаешься RAII


E>А зачем?


В смысле, зачем? Ты считаешь, что RAII — ненужная, бесполезная вещь? Объясни.
Re[5]: ARM: C++ exceptions
От: Erop Россия  
Дата: 29.08.07 06:51
Оценка:
Здравствуйте, alexeiz, Вы писали:

E>>А зачем?

A>В смысле, зачем? Ты считаешь, что RAII — ненужная, бесполезная вещь? Объясни.
Зачем лишаться RAII если не использовать исключения?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[6]: ARM: C++ exceptions
От: alexeiz  
Дата: 29.08.07 07:06
Оценка:
Здравствуйте, Erop, Вы писали:

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


E>>>А зачем?

A>>В смысле, зачем? Ты считаешь, что RAII — ненужная, бесполезная вещь? Объясни.
E>Зачем лишаться RAII если не использовать исключения?

Захват ресурсов происходит в конструкторе (= resource aquisition is initialization). Без исключений ты не можешь проделать это в конструкторе по очевидным причинам.
Re[7]: ARM: C++ exceptions
От: Sergey Россия  
Дата: 29.08.07 08:06
Оценка:
> E>>>А зачем?
> A>>В смысле, зачем? Ты считаешь, что RAII — ненужная, бесполезная вещь? Объясни.
> E>Зачем лишаться RAII если не использовать исключения?
>
> Захват ресурсов происходит в конструкторе (= resource aquisition is initialization). Без исключений ты не можешь проделать это в конструкторе по очевидным причинам.

Да ну. Проверок просто вставлять придется кучу, и все.
Posted via RSDN NNTP Server 2.1 beta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[8]: ARM: C++ exceptions
От: alexeiz  
Дата: 29.08.07 08:43
Оценка:
Здравствуйте, Sergey, Вы писали:

>> E>>>А зачем?

>> A>>В смысле, зачем? Ты считаешь, что RAII — ненужная, бесполезная вещь? Объясни.
>> E>Зачем лишаться RAII если не использовать исключения?
>>
>> Захват ресурсов происходит в конструкторе (= resource aquisition is initialization). Без исключений ты не можешь проделать это в конструкторе по очевидным причинам.

S>Да ну. Проверок просто вставлять придется кучу, и все.


В конструкторе? А иначе это не RAII.
Re[7]: ARM: C++ exceptions
От: Erop Россия  
Дата: 29.08.07 08:55
Оценка:
Здравствуйте, alexeiz, Вы писали:

A>Захват ресурсов происходит в конструкторе (= resource aquisition is initialization). Без исключений ты не можешь проделать это в конструкторе по очевидным причинам.


А что помешает?
Ну будет у CFile метод bool IsOpend() const, и тебе после открытя файла прийдётся проверять получилось ли.
Ну так и без RAII пришлось бы. А вот зарыть файл в деструкторе тебе ничего не помешает...

Хуже с операторами. Прийдётся какие-то невалидные состояния объектов заводить. Ну либо подход, который нравится мне использовать
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[8]: ARM: C++ exceptions
От: alexeiz  
Дата: 29.08.07 09:34
Оценка:
Здравствуйте, Erop, Вы писали:

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


A>>Захват ресурсов происходит в конструкторе (= resource aquisition is initialization). Без исключений ты не можешь проделать это в конструкторе по очевидным причинам.


E>А что помешает?

E>Ну будет у CFile метод bool IsOpend() const, и тебе после открытя файла прийдётся проверять получилось ли.

Ну, и понятно, будет так, что объект может быть сконструирован, но его состояние не определено. Одна из основных целей RAII выброшена в трубу. Ты можешь до сих пор называть это RAII, я уже не могу.

E>Ну так и без RAII пришлось бы. А вот зарыть файл в деструкторе тебе ничего не помешает...


E>Хуже с операторами. Прийдётся какие-то невалидные состояния объектов заводить. Ну либо подход, который нравится мне использовать


Какой это подход?
Re[8]: ARM: C++ exceptions
От: Awaken Украина  
Дата: 29.08.07 09:59
Оценка:
E>Хуже с операторами. Прийдётся какие-то невалидные состояния объектов заводить. Ну либо подход, который нравится мне использовать

поделись секретом
Re[8]: ARM: C++ exceptions
От: Awaken Украина  
Дата: 29.08.07 10:22
Оценка:
>> Захват ресурсов происходит в конструкторе (= resource aquisition is initialization). Без исключений ты не можешь проделать это в >конструкторе по очевидным причинам.
S>Да ну. Проверок просто вставлять придется кучу, и все.

можно конечно извернуться но неудобств гораздо больше
вот например такой случай: объект типа "композит", содержащий внутренние объекты.


class Composite
{
   A a;
   B b:
public:
   Composite(x, y):a(x),b(y) 
};


просто инициализируем и не паримся. если объект А проинициализирован, а B кинул исключение, А будет уничтожен корректно
без RAII:


class Composite
{
   A* a;
   B* b:
public:
   Composite() {} // нельзя проинициализировать A и B здесь
   bool Initialize(x, y)
   {
      a = new A(x);
      if(a == NULL)
         return false;
      b = new B(y);
      if(b == NULL)
      {
          delete b;
          return false
      }
      // если таких как a и b с десяток, код здесь будет полный ахтунг
      // в худшем варианте придется еще делать
      // a = new A(x)
      // rt = a->Initialize(params);
      // if(rt != ERROR) ....
   }
};


можно конечно намутить с временным сохранением успешно созданых объектов
class Composite
{
   A* a;
   B* b;
   // ...
   std::list<boost::any> created;
public:
   Composite() {} // нельзя проинициализировать A и B здесь
   bool Initialize(x, y)
   {
      a = new A();
      ret = a->Initialize(x);
      if(ret == success)
         created.push_back( a );
      else
         goto error_exit;
     
      b = new B();
      ret = b->Initialize(y);
      if(ret == success)
          created.push_back(b);
      else
         goto error_exit;

      // и так много раз 
ok:   return true;
error_exit:
      // удаляем все что в created
      return false;
   }
};


желающие могут поупражнятся без goto лень было
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.