Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чем лучше объектный C++ , чем С, для простых прог? С++ 
:(
    Опции темы
Lazin
Дата 2.10.2008, 05:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(MAKCim @  1.10.2008,  22:05 Найти цитируемый пост)
зато в С есть массивы переменной длины на стеке
вектора STL курят

и не засирают стек smile , все-же понимают, что на стеке много памяти выделять нельзя, а если очень хочется, то можно написать для вектора алокатор, который будет выделять память в стеке smile 
PM MAIL Skype GTalk   Вверх
MAKCim
Дата 2.10.2008, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(Lazin @  2.10.2008,  05:42 Найти цитируемый пост)
а если очень хочется, то можно написать для вектора алокатор, который будет выделять память в стеке 

в самом деле?
ну-ка ну-ка по-подробнее с этого места  smile 
может, ты перепутал сьаьтческий буфер в секции данных со стеком?




--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
MAKCim
Дата 2.10.2008, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(UnrealMan @  2.10.2008,  00:22 Найти цитируемый пост)
Это ты намекаешь на то, что все эти либы якобы легко заменяют собой все новшества C++ по отношению к C?

все "новшества" - это синтаксический сахар


Цитата(UnrealMan @  2.10.2008,  00:22 Найти цитируемый пост)
лишнее время на реализацию того, что в C++ уже давно автоматизировано.

гы
за нас компилятор конечно же создаст деструкторы, которые будут уничтожать наши ресурсы...  smile  smile 
точно так же придется ручками писАть
разница лишь в том, что в С функцию освобождения ресурсов надо вызывать вручную


Цитата(UnrealMan @  2.10.2008,  00:22 Найти цитируемый пост)
Я-то думал, речь идёт о виртуальных функциях, а тут generic

виртуальные функции реализованы точно также, как и t_generic->callback
есть таблица ВФ, есть ее адрес в объекте, есть данные
Код

typedef struct poly_class_vt
{
    int (*get)(void*);
    void (*set)(void*, int);
}
t_poly_class_vt;

struct poly_class
{
    t_poly_class_vt *vt;
    void *data;
};
...
void use(struct poly_class *pc)
{
    int v;
    v = pc->vt->get(pc->data);
    ++v;
    pc->vt->set(pc->data, v);
}



Цитата(UnrealMan @  2.10.2008,  00:22 Найти цитируемый пост)
Но вешать эту лапшу на уши другим, пожалуйста, не надо

никто и не вешает
только факты, мой друг, только факты  smile 


Цитата(UnrealMan @  2.10.2008,  00:22 Найти цитируемый пост)
C++ программистам и без неё вполне хорошо живётся

 smile 


Цитата(UnrealMan @  2.10.2008,  00:22 Найти цитируемый пост)
Ах вот оно что. Т.е. если мы на C чего-то не можем, то скажем, что не очень-то и хотелось

вот именно, что никто себя не обманывает
зачем выдавать за факт то, чего нет
я уже давно сказал, что в С нет шаблонов
а так ли они необходимы?
ты уперся на своем, дескать шаблонов нет - и все, без них типа жить нельзя

Добавлено через 11 минут и 12 секунд
вся "прелесть" С++ в его т. н стандарте, которому до конца никто не следует
а все почему, да потому что сложный он
сидели бородатые дядьки, думали, думали и наконец придумали
конечно, их дело маленькое, обкуриться и выдать 
а вы уж реализовывайте  smile 

тот же boost - это мегатонны неудобночитаемого кода...
попытка универсализировать шаблоны, показать всю их "мощь"
дефайны по сравнению с этой кашей - это еще вполне удобноваримо  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Любитель
Дата 2.10.2008, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Пока читал тему понаквотил целую кучу фраз. Когда доскроллил до формочки ответа понял, что на всё отвечать лень, поэтому просто выскажу своё мнение. smile

Итак, С++ - объективно сложный и запутанный в современном состоянии. Это да.

Библиотеки? Если говорим про прикладнуху, то Qt достаточно чтобы считать С++ круче smile IMHO, конечно.

По мне - так С хорош, но кое чего не хватает (неймспейсов, перегрузки функций, шаблонов или более навороченного препроцессора). Последнее впрочем решают внешнее утилиты.

А будущее (в прикладном ПО) вообще за всякими питонами, шарпами, явами и пр.



--------------------
PM MAIL ICQ Skype   Вверх
Mayk
Дата 2.10.2008, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 2
Всего: 134




Цитата(MAKCim @  2.10.2008,  12:28 Найти цитируемый пост)
дефайны по сравнению с этой кашей - это еще вполне удобноваримо  smile  

неа.
Код

#define vector_in(vector, object, iterator, type) \
    ({ type *p; \
    while (iterator(object, &p)) vector_add(vector, p, type); })

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


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
UnrealMan
Дата 2.10.2008, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 0
Всего: 32



Цитата(MAKCim @  2.10.2008,  09:28 Найти цитируемый пост)
все "новшества" - это синтаксический сахар

Да ну? Поддержка RTTI, исключения, шаблоны - всё это синтаксический сахар? Что же тогда по-твоему не синтаксический сахар? Может, у тебя и библиотечные функции - синтаксический сахар? smile

Цитата(MAKCim @  2.10.2008,  09:28 Найти цитируемый пост)
за нас компилятор конечно же создаст деструкторы, которые будут уничтожать наши ресурсы...  

Между прочим, компилятор C++ самостоятельно вызывает деструкторы для базовых подобъектов и нестатических членов-данных объекта. Для весомой части классов деструкторов, сгенерированных компилятором по умолчанию, вполне достаточно. А там, где недостаточно, мы всё равно избавляемся от необходимости явно уничтожать агрегированные объекты.

Цитата(MAKCim @  2.10.2008,  09:28 Найти цитируемый пост)
точно так же придется ручками писАть
разница лишь в том, что в С функцию освобождения ресурсов надо вызывать вручную

Только не надо забывать, что реализуем мы деструктор всего один раз, а вызываться он должен для всех создаваемых в программе объектов. Сложность слежения за тем, чтобы деструктор был вызван всюду, где это необходимо, часто превосходит сложность написания самого деструктора.

Цитата(MAKCim @  2.10.2008,  09:28 Найти цитируемый пост)
никто и не вешает
только факты, мой друг, только факты  

Мсье выдаёт желаемое за действительное.

Цитата(MAKCim @  2.10.2008,  09:28 Найти цитируемый пост)
я уже давно сказал, что в С нет шаблонов
а так ли они необходимы?
ты уперся на своем, дескать шаблонов нет - и все, без них типа жить нельзя

Без тёплого и уютного жилья тоже можно жить. Бомжи вон как-то живут. Не хочешь составить им компанию? Для тебя ведь уровень жизни, видимо, не важен?

Шаблоны позволяют решать в общем виде задачи, которые без шаблонов полноценно в общем виде не решаются. Конечно, можно справиться с решением отдельных частных случаев задачи, но вот досада - это более затратно по времени. Решения в обход типобезопасности также затратны по времени - как прямо (за счёт необходимости отслеживания правильности преобразований), так и косвенно (за счёт практически неизбежно допускаемых ошибок, которые нуждаются во времени на их устранение).

Цитата(MAKCim @  2.10.2008,  09:28 Найти цитируемый пост)
тот же boost - это мегатонны неудобночитаемого кода...

А кто, собственно, требует читать исходники Boost? smile Вменяемый человек ради понимания того, как пользоваться библиотекой, руководствуется документацией к ней, а не её исходным кодом.
PM MAIL   Вверх
Lazin
Дата 2.10.2008, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(MAKCim @  2.10.2008,  08:11 Найти цитируемый пост)
ну-ка ну-ка по-подробнее с этого места

Код

#include <limits>
#include <iostream>
#include <vector>
#include <malloc.h>


template <class T>
class stack_allocator 
{
public:
    typedef T        value_type;
    typedef T*       pointer;
    typedef const T* const_pointer;
    typedef T&       reference;
    typedef const T& const_reference;
    typedef std::size_t    size_type;
    typedef std::ptrdiff_t difference_type;

    template <class U>
    struct rebind 
    {
        typedef stack_allocator<U> other;
    };

    pointer address (reference value) const 
    {
        return &value;
    }
    const_pointer address (const_reference value) const 
    {
        return &value;
    }
    stack_allocator()
    {
    }
    stack_allocator(const stack_allocator&) 
    {
    }
    template <class U>
    stack_allocator (const stack_allocator<U>&)
    {
    }
    ~stack_allocator()
    {
    }
    size_type max_size () const
    {
        return std::numeric_limits<std::size_t>::max() / sizeof(T);
    }
    pointer allocate (size_type num, const void* = 0) 
    {
        pointer ret = (int*)_alloca( num*sizeof(T) );
        return ret;
    }
    void construct (pointer p, const T& value) 
    {
        new((void*)p)T(value);
    }
    // destroy elements of initialized storage p
    void destroy (pointer p) 
    {
        p->~T();
    }
    void deallocate (pointer p, size_type num) 
    {
        //dont need
    }
};

// return that all specializations of this allocator are interchangeable
template <class T1, class T2>
bool operator== (const stack_allocator<T1>&,
                 const stack_allocator<T2>&)
{
                     return true;
}
template <class T1, class T2>
bool operator!= (const stack_allocator<T1>&,
                 const stack_allocator<T2>&)
{
                     return false;
}


int main()
{
    {
        std::vector<int, stack_allocator<int> > vect;
        for(int i = 0; i < 10; ++i)
            vect.push_back(i);
        for(int i = 0; i < 10; ++i)
            std::cout << vect[i] << std::endl;
    }
    system("pause");

}

но только это нихрена не работает, так как память освобождается в самом аллокаторе smile 

Это сообщение отредактировал(а) Lazin - 2.10.2008, 14:53
PM MAIL Skype GTalk   Вверх
Любитель
Дата 2.10.2008, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Насчёт аллокатора - если написать аллокатор, юзающий salloc - разве не то получится?


--------------------
PM MAIL ICQ Skype   Вверх
J0ker
Дата 2.10.2008, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: нет
Всего: 14



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


--------------------
user posted image
PM MAIL   Вверх
Любитель
Дата 2.10.2008, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 5
Всего: 92



Цитата(J0ker @  2.10.2008,  16:30 Найти цитируемый пост)
Аргументов невозможности обеспечить безопасность типов 

С++ в этом плане не настолько уж и крут (не-не - разница есть, но не надо преувеличивать).


--------------------
PM MAIL ICQ Skype   Вверх
MAKCim
Дата 2.10.2008, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(UnrealMan @  2.10.2008,  14:02 Найти цитируемый пост)
Только не надо забывать, что реализуем мы деструктор всего один раз, а вызываться он должен для всех создаваемых в программе объектов. Сложность слежения за тем, чтобы деструктор был вызван всюду, где это необходимо, часто превосходит сложность написания самого деструктора.

сразу видно, на С ты не программировал  smile 
нет ничего сложного
есть объект A, есть функция для его создания и уничтожения
есть функция, использующая A
в ней есть блок завершения, в котором идет вызов функции уничтожения
переход на блок завершения идет через goto
блоков завершения может быть несколько, в зависимости от числа типов создаваемых объектов
располагаются последовательно в обратном созданию порядке
любая функция строится по такому правилу
в итоге нет ни утечек, ни сложностей для восприятия
 smile 

Цитата(UnrealMan @  2.10.2008,  14:02 Найти цитируемый пост)
Без тёплого и уютного жилья тоже можно жить. Бомжи вон как-то живут. Не хочешь составить им компанию? Для тебя ведь уровень жизни, видимо, не важен?

аналогия в корне не верна

Цитата(UnrealMan @  2.10.2008,  14:02 Найти цитируемый пост)
Вменяемый человек ради понимания того, как пользоваться библиотекой, руководствуется документацией к ней, а не её исходным кодом. 

а почему ты решил, что я на этом акцентирую внимание?  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
J0ker
Дата 2.10.2008, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: нет
Всего: 14



Цитата(Любитель @ 2.10.2008,  16:37)
Цитата(J0ker @  2.10.2008,  16:30 Найти цитируемый пост)
Аргументов невозможности обеспечить безопасность типов 

С++ в этом плане не настолько уж и крут (не-не - разница есть, но не надо преувеличивать).

я не преувеличиваю
C++ оставляет ВОЗМОЖНОСТЬ эту безопасность обойти, но если вам эта возожность понадобилась - ищите ошибки в проектировании, а язык тут совершенно не при чем.

Добавлено через 8 минут и 32 секунды
Цитата(MAKCim @  2.10.2008,  22:41 Найти цитируемый пост)
в ней есть блок завершения, в котором идет вызов функции уничтожения
переход на блок завершения идет через goto
блоков завершения может быть несколько, в зависимости от числа типов создаваемых объектов
располагаются последовательно в обратном созданию порядке
любая функция строится по такому правилу

Действительно, поразительно удобно  smile 

Народ, он ИМХО над нами издевается  smile 

кстати, а чтож вы на неудобные вопросы-то не отвечаете, а?




--------------------
user posted image
PM MAIL   Вверх
MAKCim
Дата 3.10.2008, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



Цитата(J0ker @  2.10.2008,  23:13 Найти цитируемый пост)
Действительно, поразительно удобно

о вкусах не спорят
сразу видно, что тут на С мало кто программировал  smile 

Цитата(J0ker @  2.10.2008,  23:13 Найти цитируемый пост)
кстати, а чтож вы на неудобные вопросы-то не отвечаете, а?

давайте список, буду отвечать

Добавлено через 10 минут и 41 секунду
Цитата(J0ker @  2.10.2008,  23:13 Найти цитируемый пост)
Народ, он ИМХО над нами издевается

ничуть
я сам был раньше фанатом С++
пока не понял, что он того не стОит

Это сообщение отредактировал(а) MAKCim - 3.10.2008, 08:19


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
nerezus
Дата 3.10.2008, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 13
Всего: 43



Цитата

GTK+?   
 А если надо что-то кросплатформенное?)
Тогда Qt.


Цитата

Верно, и некоторым людям в силу собственной лени к изучению новых технологий в программировании психологически проще убедить себя, что старые технологии мол и так работают достаточно эффективно, чем взяться за рассмотрение пугающе большого объёма материала. 
 Это одна из возможных причин.
Вторая причина - в потенциальной кривости не программиста, а языка.
Сравни C++ с Java. Только языки(не платформы).
Т.е. считай, что в джаве есть указатели(естественно они deprecated) и она компилится в натив.
Тебе не кажется, что тогда практически все бы выбрали Java(как и случилось с ентерпрайзом)?

Цитата

все "новшества" - это синтаксический сахар
 О да. Собственно как и любой язык - синтаксический сахар над бинарным кодом.
Только вот этот "синтаксический сахар" очень удобен ;)

P.S. До недавнего времени юзал C, теперь C++. Ибо Qt и классическое ООП(без него стало сложно). Ненавижу C++ за сложность(неоправданную).


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
UnrealMan
Дата 3.10.2008, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 722
Регистрация: 30.3.2006

Репутация: 0
Всего: 32



Цитата(MAKCim @  2.10.2008,  23:41 Найти цитируемый пост)
сразу видно, на С ты не программировал  

А ты что-нибудь посложнее Hello World на своём C программировал?

Цитата(MAKCim @  2.10.2008,  23:41 Найти цитируемый пост)
нет ничего сложного
есть объект A, есть функция для его создания и уничтожения
есть функция, использующая A
в ней есть блок завершения, в котором идет вызов функции уничтожения
переход на блок завершения идет через goto
блоков завершения может быть несколько, в зависимости от числа типов создаваемых объектов
располагаются последовательно в обратном созданию порядке
любая функция строится по такому правилу

Ну, надо же, как всё просто smile

Предположим, у нас есть два ресурса: первый захватывается объектом x, второй - объектом y:

Код
ResourceHandle acquire_resource();            // эта функция может выбросить исключение
void release_resource(ResourceHandle handle);

class SomeClass
{
public:
    SomeClass()  { m_handle = acquire_resource(); } // захватываем ресурс
    ~SomeClass() { release_resource(m_handle) }     // освобождаем ресурс
    void use_resource();                            // выполняет какие-то операции с ресурсом
    
private:
    ResourceHandle m_handle;
};

void f()
{
    SomeClass x;      // здесь может сгенерироваться исключение
    SomeClass y;      // здесь может сгенерироваться исключение
    x.use_resource(); // здесь может сгенерироваться исключение
    y.use_resource(); // здесь может сгенерироваться исключение
}

В случае неудачной попытки захватить какой-либо ресурс, либо неудачного отрабатывания метода use_resource надо выйти из функции f (освободив все захваченные ресурсы) и передать ошибку наверх. Перепиши этот код на C.

Цитата(MAKCim @  2.10.2008,  23:41 Найти цитируемый пост)
аналогия в корне не верна

Я так понял, ты теперь отказываешься от этого своего супер-аргумента "раз без шаблонов можно выжить, значит они не нужны"? smile

Цитата(MAKCim @  2.10.2008,  23:41 Найти цитируемый пост)
а почему ты решил, что я на этом акцентирую внимание?

А кто ж тебя знает, на чём ты там акцентировал внимание? Я всё-таки не телепат.

Цитата(MAKCim @  3.10.2008,  09:18 Найти цитируемый пост)
я сам был раньше фанатом С++

Когда речь заходит о фанатах, я в первую очередь вспоминаю о том, что фанатизм, как и всякое помешательство, свидетельствует скорее о психических отклонениях у человека, нежели о том, что он грамотный специалист в своём деле. Вот если б ты сказал, что был профессиональным программистом C++ (а не каким-то там фанатом), то мог бы создать хоть какую-то иллюзию того, что так оно и было smile 

Цитата(nerezus @  3.10.2008,  11:03 Найти цитируемый пост)
Сравни C++ с Java. 

Я не знаю Java и сравнивать их не стану (ибо предпочитаю говорить только о том, в чём, как я считаю, достаточно хорошо разбираюсь).
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
2 Пользователей читают эту тему (2 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.1047 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.