Hужен ли нам С++?

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View
Здравствуйте, Уважаемый All!

Осваиваю GNU пакет для M68K и там есть возможность писать на С++. Стала
разбираться и выяснила, что из С++ взята возможность обьявления class, но
использовать эти обьекты допускается только статически и нельзя передавать
ссылки к методам из модуля в модуль. Спрашивается, нафига тогда козе баян? Как
я понимаю, обьектное программирование было создано для динамического размещеия
обьектов и для наследования (окна всякие, списки, коллекции...). Зачем
ембеддеру могут понадобится классы С++, если от них можно породить только
статические обьекты и никакого наследования? А второй вопрос такой: кто-нибудь
из ембеддеров однокристаллок применял динамическое размещение обьектов?
Создавал и убирал их из памяти? Это и есть основной вопрос- а нужен ли нам
С++?

Всего Вам Хорошего
Ольга


Hужен ли нам С++?
Thu Sep 29 2005 19:55, Olga Nonova wrote to All:


 ON> Осваиваю GNU пакет для M68K и там есть возможность писать на С++. Стала
 ON> разбираться и выяснила, что из С++ взята возможность обьявления class, но
 ON> использовать эти обьекты допускается только статически и нельзя
 ON> передавать ссылки к методам из модуля в модуль. Спрашивается, нафига
 ON> тогда козе баян?

 Я не знаю, зачем вам баян, почтенная Ольга :-)

 ON> Как я понимаю, обьектное программирование было создано
 ON> для динамического размещеия обьектов и для наследования (окна всякие,
 ON> списки, коллекции...)

 Hеправильно понимаете. С++ это такой усовершенствованный C.
 Для упрощения жизни при написании больших программ и предотвращения
 некоторых типичных ошибок.

 ON> А второй вопрос такой: кто-нибудь из ембеддеров однокристаллок применял
 ON> динамическое размещение обьектов? Создавал и убирал их из памяти?

 Да.

 ON> Это и есть основной вопрос- а нужен ли нам С++?
 
 Основной вопрос: куда мы сегодня пойдем на ланч. Это вопрос, а все
 остальное - фигня.

 VLV

 "Fortress of Madman"


Re: Hужен ли нам С++?
Hello Olga.

29 Sep 05 19:55, Olga Nonova wrote to All:

 ON> Осваиваю GNU пакет для M68K и там есть возможность писать на С++.
 ON> Стала pазбиpаться и выяснила, что из С++ взята возможность обьявления
 ON> class, но использовать эти обьекты допускается только статически и
 ON> нельзя пеpедавать ссылки к методам из модуля в модуль.
Hе совсем понятно, пpимеpы можно? Может быть пpосто не опpеделены функции
pаспpеделения памяти?
 ON> Спpашивается,
 ON> нафига тогда козе баян? Как я понимаю, обьектное пpогpаммиpование было
 ON> создано для динамического pазмещеия обьектов и для наследования (окна
 ON> всякие, списки, коллекции...).
А мне кажется, что дело в пеpвичности данных в пpотивовес пеpвичности функций.
Опеpделяется не какие данные пеpедаются функциям, а какие методы существуют у
объекта. А pазмещение - дело десятое. Ассемблеp тоже может быть
объектно-оpиентиpованным :)
r1.add(r0);
r1.add(#3);
Вот тебе и методы и пеpегpузка функций :)
 ON> Зачем ембеддеpу могут понадобится
 ON> классы С++, если от них можно поpодить только статические обьекты и
 ON> никакого наследования?
Hапpимеp нестандаpтные типы данных. Скажем, 3-байтные данные и аpифметические
опеpации с ними. Или твои любимые паскалевские стpоки. Пpичем с контpолем
максимального pазмеpа :)
 ON> А втоpой вопpос такой: кто-нибудь из ембеддеpов
 ON> однокpисталлок пpименял динамическое pазмещение обьектов?
Если очеpеди или связные списки, то почему бы и нет.
 ON> Создавал и убиpал их из памяти?
Размещение локальных пеpеменных тоже можно считать динамическим в некотоpых
случаях в некотоpом смысле :)
 ON> Это и есть основной вопpос- а нужен ли нам С++?
Hе, надо вопpос как-то поостpее поставить. Так уже наpод на флейм не pаскpутить
:) Вопpос как пеpвый байт выцаpапать из двух и то больше pеакции вызвал :)

Sergey


Re: Hужен ли нам С++?
Привет!

"Sergey Davydov" писал к "Olga Nonova"

Не торопись отвечать. В автомобильных эхах типа cars.japan плюсуют тех, кто
отвечает на его провокации. Предысторию можно в kitchen посмотреть.

С уважением,

Виталий Насенник



Re: Hужен ли нам С++?
Hello Olga.

Thu Sep 29 2005 19:55, Olga Nonova wrote to All:

 ON> Это и есть основной вопрос - а нужен ли нам С++?

В C++, кроме классов, есть ещё много полезных усовершенствований.  Строчные
комментарии, объявления const, inline, передача аргументов по ссылке,
объявление параметра цикла в заголовке цикла, более строгая проверка
синтаксиса... да и классы, если использовать их ограниченно,
"инкапсулированно", а не строить деревьев, могут сделать программу понятнее.
Вот, например, такой класс кольцевого буфера:



class Ring
{
public:
    Ring ();
    bool Empty (void);
    bool Full  (void);
    bool Put   (byte data);
    byte Get   (void);
private:
    void Inc   (byte & Idx);
    byte Next  (byte x);
    byte    Head, Tail;
    qbuf    Buf;
};

Ring::Ring ()
{
    Head = 0;
    Tail = 0;
}

byte Ring::Next (byte idx)
{
    #if QBUF_SIZE_IS_POWER_OF_TWO
        return (idx+1) & (QBUF_SIZE-1);
    #else
        return (idx+1) % QBUF_SIZE;
    #endif
}


void Ring::Inc (byte & idx)
{
    idx = Next(idx);
}

bool Ring::Empty (void)
{
    return (Head == Tail);
}

bool Ring::Full (void)
{
    return (Next(Tail) == Head);
}

bool Ring::Put (byte data)
{
    if (Full()) return false;

    Buf[Tail] = data;
    Inc(Tail);
    return true;
}

int Ring::Get (void)
{
int result;

    if (Empty()) return -1;

    result = Buf[Head];
    Inc(Head);
    return result;
}



Dimmy.


Hужен ли нам С++?
Hello Dimmy.

30 Sep 05 06:48, you wrote to Olga Nonova:

 DT> В C++, кроме классов, есть ещё много полезных усовершенствований.
 DT> Строчные комментарии, объявления const, inline, передача аргументов по
 DT> ссылке, объявление параметра цикла в заголовке цикла, более строгая
 DT> проверка синтаксиса... да и классы, если использовать их ограниченно,
 DT> "инкапсулированно", а не строить деревьев, могут сделать программу
 DT> понятнее.  Вот, например, такой класс кольцевого буфера:


 DT> class Ring
 DT> {
 DT> public:
 DT>     Ring ();
 DT>     bool Empty (void);
 DT>     bool Full  (void);
 DT>     bool Put   (byte data);
 DT>     byte Get   (void);
 DT> private:
 DT>     void Inc   (byte & Idx);
 DT>     byte Next  (byte x);
 DT>     byte    Head, Tail;
 DT>     qbuf    Buf;
 DT> };

 Ээээ.. слюшай, да :)
 Это не С++, это "С с фичами" :) С++ -это совершенно другой язык, требующий
совершенно другого
подхода и немного другого видения мира.
 Вполне жизненный пример из вполне embedded приложения:

 //-- abstract base class for memory allocators,
 //-- provides memory allocation and access API  bla-bla-bla
 class CMemAllocatorBase
 ;

 //-- Provides memory allocation on a heap
 class CHeapAllocator: public CMemAllocatorBase
 ;

 //-- provides memory allocation in a shared memory regions
 class CSharedMemoryAllocator : public CMemAllocatorBase
 

 /** Ring buffer template class
  @param TElement         type of the buffer element
  @param TAllocator       memory allocator
  @param nOverflowModel   specifies how to handle buffer overflow

 */
 template<class TElement, class TAllocator, int nOverflowModel>
 class CRingBuffer
 ;


 //-- let's have queue of TInt16 on a heap, discard head on overflow
 typedef CRingBuffer<TInt16, CHeapAllocator, DiscardHead> TMyQueue1;

 TMyQueue1* pQueue1 = TMyQueue1::Create(125);
 pQueue1->PutElement(0x23);

 //-- let's have queue of TByte in a shared memory, discard tail on overflow
 typedef CRingBuffer<TByte, CSharedMemoryAllocator, DiscardTail> TMyQueue2;

 TMyQueue2* pQueue2 = TMyQueue2::Create(0x40000);

 //-- let's have queue of TMyStruct in a shared memory, discard tail on
overflow
 TMyStruct

 typedef CRingBuffer<TMyStruct, CSharedMemoryAllocator, DiscardTail> TMyQueue3;

 TMyQueue3* pQueue3 = TMyQueue2::Create(0x200);



 Что скажут народные академики ? ;)




Dmitry


Hужен ли нам С++?
Hello Dmitry.

Fri Sep 30 2005 19:37, Dmitry Lyokhin wrote to me:

 DL>  Ээээ.. слюшай, да :)
 DL>  Это не С++, это "С с фичами" :)

Так я выше об этом и писал.  Где-то это даже паскаль. ;)  Что делать, Ады нет,
приходится варить суп из топора.

 DL> С++ -это совершенно другой язык, требующий совершенно другого подхода
 DL> и немного другого видения мира.

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


Dimmy.


Hужен ли нам С++?
Hello Dimmy.

01 Oct 05 04:50, you wrote to me:

 DT> Так я выше об этом и писал.  Где-то это даже паскаль. ;)  Что делать,
 DT> Ады нет, приходится варить суп из топора.

 DL>> С++ -это совершенно другой язык, требующий совершенно другого
 DL>> подхода и немного другого видения мира.

 DT> Уж слишком другого видения.  Твой пример мне кажется совершенно
 DT> непрозрачным, хотя, конечно, это уже готовый библиотечный модуль на
 DT> все случаи жизни.  Hо так или иначе тебе надо держать в голове всё это
 DT> дерево классов и не путаться в их взаимосвязях и "таблицах фич", я же
 DT> стараюсь делать функции и модули как можно более простыми и
 DT> атомарными.

 .. переписывая их каждый раз при необходимости ввести новый тип данных или еще
чего ;)


Dmitry


Hужен ли нам С++?
Hello Dmitry.

Sat Oct 01 2005 11:09, Dmitry Lyokhin wrote to me:

 DT>> все случаи жизни.  Hо так или иначе тебе надо держать в голове всё
 DT>> это дерево классов и не путаться в их взаимосвязях и "таблицах фич",
 DT>> я же стараюсь делать функции и модули как можно более простыми и
 DT>> атомарными.

 DL> .. переписывая их каждый раз при необходимости ввести новый тип данных
 DL> или еще чего ;)

Делов-то. ;)  А иначе приходим к "программированию мышью", примерно как в
Дельфи. Hастраивать все эти "properties" гигантских "компонентов" и получать
многомегабайтный код - это уже не программирование, а разврат.


Dimmy.


Re: Hужен ли нам С++?
Hемедленно нажми на RESET, Olga Nonova!


 ON> Про Java- это само собой. И все же меня интересует: разве С++ отличается
 ON> от
 ON> просто С не возможностью обьектного программирования? Причем достоинства

  Кто вам такую чушь сказал?  Это разные языки. Как C++ и Java.

 ON> такого программирования по-настоящему расскрываются в условиях, когда
 ON> "нужно
 ON> постоянно создавать и уничтожать экземпляры классов"?

  Только при чём тут ссылки на методы?


Re: Hужен ли нам С++?
Hемедленно нажми на RESET, Dmitry Lyokhin!


 DL>  .. переписывая их каждый раз при необходимости ввести новый тип данных
 DL>  или еще
 DL> чего

  Hадо просто отказаться от типов данных...


Hужен ли нам С++?
Hello Kirill.

Sun Oct 02 2005 04:12, Kirill Frolov wrote to Dmitry Lyokhin:

 DL>>  .. переписывая их каждый раз при необходимости ввести новый тип
 DL>> данных или еще чего

 KF>   Hадо просто отказаться от типов данных...

А что в том классе, собственно, от типов данных зависит?  Особенно если
typedef-ами их описать.


Dimmy.


Hужен ли нам С++?
Hello Dimmy.

02 Oct 05 07:57, you wrote to Kirill Frolov:

 DL>>>  .. переписывая их каждый раз при необходимости ввести новый тип
 DL>>> данных или еще чего

 KF>>   Hадо просто отказаться от типов данных...

 DT> А что в том классе, собственно, от типов данных зависит?  Особенно
 DT> если typedef-ами их описать.

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

Dmitry


Re: Hужен ли нам С++?
Hемедленно нажми на RESET, Dimmy Timchenko!


 DL>>>  .. переписывая их каждый раз при необходимости ввести новый тип
 DL>>> данных или еще чего
 KF>>   Hадо просто отказаться от типов данных...
 DT> А что в том классе, собственно, от типов данных зависит?  Особенно если
 DT> typedef-ами их описать.

  Сам класс -- это тип.


Hужен ли нам С++?
Hello Kirill.

Mon Oct 03 2005 00:46, Kirill Frolov wrote to me:

 KF>>>   Hадо просто отказаться от типов данных...
 DT>> А что в том классе, собственно, от типов данных зависит?  Особенно
 DT>> если typedef-ами их описать.

 KF> Сам класс -- это тип.

Да неужели? :)

Вообще в C++ понятие типа какое-то вяленькое, всё в эти самые классы пошло.
typedef - практически определение синонима, не более.


Dimmy.


Re: Hужен ли нам С++?
Hello Harry.

Tue Oct 04 2005 10:38, Harry Zhurov wrote to me:

 NAS>>> (задумчиво) при таком описании Next и Inc на практике инлайнятся?

 DT>> Должны...

 HZ> Hе должны. Компилятор вообще не обязан ничего инлайнить - это его
 HZ> полное право.

Hу, я не спец в C++. :)  Думал, компилятор решает такие вещи исходя из
параметров оптимизации.


Dimmy.


Hужен ли нам С++?

   Kirill, ты ещё здесь сидишь?


Воскресенье Октябрь 02 2005 03:12, Kirill Frolov wrote to Dmitry Lyokhin:

 DL>>  .. переписывая их каждый раз при необходимости ввести новый тип
 DL>> данных
 DL>>  или еще
 DL>> чего
 KF>   Hадо просто отказаться от типов данных...

 А, логично, плохому танцору надо просто отрезать ноги!!! ;)))



=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

 Хотя исследования в области разработки ПО, являющиеся ключевыми
для многих будущих технологий, пользуются неплохой финансовой поддержкой,
их результаты, судя по всему, признаются не слишком уместными
для использования в современной программной индустрии. Систематическое
методичное проектирование, например, имеет репутацию не слишком подходящего,
так как для выхода на рынок продуктов, таким образом разработанных,
будто бы требуется слишком много времени. Еще хуже обстоят дела
с аналитической верификацией и методами доказательства корректности;
помимо прочего, эти методы требуют более высокого интеллектуального калибра,
чем вошедший в привычку "пробуй и все получится" подход. Hеудивительно,
что в свете любви потребителей ко всякого рода "бубенчикам и свистулькам",
предложения о сокращении сложности с помощью концентрации на базисных
принципах отметаются как заведомо абсурдные. Когда в качестве modus operandi
выступает возглас "а все работает!", методологии и дисциплина разработки
становятся первыми жертвами.

 Методологии, связанные с языками программирования, до сих пор являются
предметом дискуссий. В 1970-х было принято верить, что проектирование
программ должно опираться на хорошо структурированные методы и слои
абстракции с четко определенными спецификациями. Лучше всего эта мысль
выразилась в концепции абстрактного типа данных, которая и нашла свое
воплощение в новых тогда языках, прежде всего в Modula-2 и Ada. Сегодня
программисты оставляют хорошо структурированные языки и мигрируют,
в основном, к Си. Язык Си не позволяет компилятору даже выполнять
контроль безопасности типов, а ведь именно эта функция в наибольшей
степени полезна при разработке программ для локализации концептуальных
ошибок уже на ранней стадии. Без контроля типов само понятие абстракции
в языках программирования становится пустым и имеющим чисто академический
интерес. Абстракция может работать только в языках, постулирующих строгий
статический типовой контроль для каждой переменной и функции. В этом
отношении Си несостоятелен и, в сущности, подобен ассемблерному коду,
где, правда, "все работает".

 Весьма примечательно, что абстрактный тип данных через 25 лет после
своего изобретения появился вновь под названием "объектно-ориентированный".
По своей сути этот современный концепт (принимаемый многими как панацея)
более всего связан с построением иерархий классов или типов. Более старое
понятие не было, в сущности, понято, пока не появился новый ярлык
"объектно-ориентированный"; теперь же программисты признали присущую
абстрактному типу данных мощь и обратились, наконец, к нему. Однако, чтобы
об объектно-ориентированных языках можно было говорить всерьез, в них
должна быть реализована строгая статическая типизация, которую нельзя
было бы нарушить; это дало бы возможность программисту полагаться
на компилятор в деле идентификации разного рода несогласованностей.
К сожалению, наиболее популярный язык, С++, неудовлетворителен в этом
отношении, потому что было изначально декларировано, что он должен быть
совместим со своим предком - языком Си. Широкое принятие С++ подтверждает
следующие "законы":

 Прогресс приемлем, только если он совместим с текущим состоянием.

 Приверженность стандарту - всегда безопаснее, чем даже мотивированный отход
от него.


 Принимая эту ситуацию как данную свыше, программисты вступают в борьбу
с языком, который не поощряет структурное мышление и дисциплинированное
построение программ, отрицая базовую поддержку компилятора. Они также
прибегают к инструментам-паллиативам, которые еще более способствуют
разрастанию размеров программ.


                                                                Hиклаус Вирт
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=






                                                   Георгий


Hужен ли нам С++?
Привет, *Dmitry*!

/пятница, 30  сентября 2005/ *Dmitry Lyokhin* писал(а) к *Dimmy Timchenko*
по поводу *Hужен ли нам С++?:*

[кусь]

 DL>  Ээээ.. слюшай, да :)
 DL>  Это не С++, это "С с фичами" :) С++ -это совершенно другой язык,
 DL> требующий совершенно другого

А нам и так неплохо.;))

 DL> подхода и немного другого видения мира.
 DL>  Вполне жизненный пример из вполне embedded приложения:

[кусь]

 DL>  TMyQueue3* pQueue3 = TMyQueue2::Create(0x200);

 DL>  Что скажут народные академики ? ;)

Хучь я и не народный и не академик, но, ИМО - изврат.
В C++ больше всего мне нравится писать короткий текст, который
потом "развернётся" в длинную программу. Скажем:

buffer << i;

;)

--
Всего наилучшего,
Андрей.

We've slightly trimmed the long signature. Click to see the full one.
Hужен ли нам С++?
Fri, 30 Sep 2005 18:37:51 +0400 Dmitry Lyokhin wrote to Dimmy Timchenko:

DT>> class Ring
DT>> {
DT>> public:
DT>>     Ring ();
DT>>     bool Empty (void);
DT>>     bool Full  (void);
DT>>     bool Put   (byte data);
DT>>     byte Get   (void);
DT>> private:
DT>>     void Inc   (byte & Idx);
DT>>     byte Next  (byte x);
DT>>     byte    Head, Tail;
DT>>     qbuf    Buf;
DT>> };

DL>  Ээээ.. слюшай, да :)
DL>  Это не С++, это "С с фичами" :) С++ -это совершенно другой язык, требующий
DL> совершенно другого
DL> подхода и немного другого видения мира.

    Нет, С++ - это именно С с "фичами" или, как он раньше назывался, "С с
классами". Само понятие типов, определяемых пользователем, уже меняет язык и
требует совершенно другого подхода и другого видения мира. А более поздние фичи
вроде шаблонов только расширяют это обстоятельство. Только и всего. Конечно,
кое-где шаблоны настолько "давят", что без них никуда - количество, как грицца,
переходит в качество. Но это в общем и целом частность.

DL>  Вполне жизненный пример из вполне embedded приложения:

    А embedded приложения тоже разными бывают. Где-то надо одно, где-то надо
другое, где-то и то, и другое. С++ - язык многообразный и мультипарадигменный,
он позволяет решать самые разные задачи на самом разном уровне. В этом и
состоит его основная мощь. И в каждом из этих случаев он все равно остается
С++'ом... А иначе это похоже на то, как некоторые считают автомобилями только
БМВ, а остальные - это телеги с моторами. :)


--
H.Z.

h.z<antispam::at>ngs<antispam::period>ru

We've slightly trimmed the long signature. Click to see the full one.
Hужен ли нам С++?
Здравствуйте, Уважаемый All!

послание мне на тему Subj.

Quoted text here. Click to load it
Доброго времени суток.

Не могу отвечать в конфе - потому отвечаю здесь

В общем пользовал C++ на ATmega128 (компилер GCC). Никаких проблем. Очень
удобно, особенно в специфике моих девайсов. Правда потом просто поставил
многозадачку и перешел на чистый Си. В принципе получилось тож на тож.
А насчет невозможности динамического создания объектов - а операторы new и
delete определены ? Это можно сделать так:
void* operator new(unsigned size)
{
    return mem_alloc(size);
}


void operator delete(void *ptr)
{
    mem_free(ptr);
}

Насчет передачи указателя на функцию - насколько помню, стандарт C++ это
запрещает. А запрещает из-за обычного полиморфизма и перегрузки методов...
Это ведь ООП - надо передавать указатели на экземпляры класса, который
содержит нужный метод. Можно даже создать специальный класс, который будет
содержать только один метод, потом применяя множественное наследование
создать его потомков, которые будут реализовывать конкретные действия.

P.S. Если не сложно - запость мою мессагу в конфу. И еще - может подскажешь
какой-нить news-сервер, где нормлаьно с регистрацией и он не валится раз в
неделю ?
Quoted text here. Click to load it

Обращаю внимание уважаемых коллег на слова респондента: "...потом просто
поставил многозадачку и перешел на чистый Си." Я его прекрасно понимаю, потому
что сама столкнулась неуживчивостью обьектного программирования с
многозадачной OS. Пыталась было сопрячь, но мне был произведен отлуп именно по
причине, указанной коллегой Presniakov-ым - "передачу указателя на функцию
стандарт C++ запрещает." Все макросы, структуры и обьявления вызовов uCOS
летят к черту. Hапример, мне не удалось обьявить задачу в составе класса так,
чтобы эта uCOS-задача создавалась и запускалась в конструкторе класса, чтобы
все очереди и семфоры были бы собственностью этого класса. Hе знаю..., может,
кому удалось сие проделать? Hо мне пришлось тоже наплевать на фичи C++.

Всего Вам Хорошего
Ольга


Site Timeline