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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Самый сложный язык программирования, но не эзотерический 
:(
    Опции темы
Lazin
Дата 11.6.2009, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Alexeis @  10.6.2009,  22:24 Найти цитируемый пост)
Вектор тоже может не подойти для той или иной задачи, и что?

в этом и дело, я могу вместо vector<double> написать vector<long> или list<complex>, все будет работать одинаково, первая ф-я ожидает на вход пару forward итераторов, в качестве forward итератора может выступать все что угодно, начиная от указателя и заканчивая файловым итератором. 
Вторая ф-я принимает vector<T>, но можно ее переписать так, что она будет принимать пару random access итераторов.

Цитата(Alexeis @  10.6.2009,  22:24 Найти цитируемый пост)
Для типов есть стандартное преобразование в строку, для объектов можно переопределить ToString и юзать как альтернативу.

а можно тупо добавить каждому объекту метод WriteMe и все, че париться smile 

Цитата(Alexeis @  10.6.2009,  22:24 Найти цитируемый пост)
Вариант это и массив и объект и интерфейс и ком объект.

а если я написал класс complex, который не имеет таблицы вирт. функций, это просто пара чисел, не массив, не интерфейс и не ком объект, и выводить их нужно не просто так, а перед мнимой частью еще вывести "j". Писать убер-функцию которая будет выводить все что угодно?

Цитата(Alexeis @  10.6.2009,  22:24 Найти цитируемый пост)
Вот только Variant это все ран тайм фичи, как я уже говорил, разная направленность у языков.

вот мы наконец и вернулись к сабжу, почему я считаю что delhpi - сложный язык программирования
- код на delphi жутко не гибкий, написать простую ф-ю - просто, но сложную, как например ф-ю вывода на экран содержимого любого контейнера, "правильно" реализовать очень сложно, так как все решения принимаются в рантайме, эта ф-я должна быть невероятно могучей и знать о всех типах, которые ей могут быть переданы. Проблемы с отладкой и сопровождением такого кода будут обязательно. Плюсовый вариант, который я привел, просто сгенерирует множество реализаций ф-ии print_data, для всех типов аргументов, причем у нас есть полный контроль за тем, как это будет происходить. Можно специализировать шаблон для определенных аргументов.

- язык имеет статическую типизацию, но, при этом он в основном ориентирован на "ран тайм фичи", что приводит к раздуванию кода. К примеру ф-я print_data на динамическом ЯП будет выглядеть по настоящему просто:
Код

    def print_data(iterable):
        for x in iterable:
            print(x)

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

Добавлено через 8 минут и 5 секунд
еще одна сложность, возможно надуманная - освобождение памяти
в delphi нет GC, поэтому все нужно удалять вручную, но не всегда, часть объектов управляют временем жизни объектов, которые им передают, к примеру так поступает большинство VCL классов, но некоторые этого не делают, и перед тем как удалить, скажем TList, нужно сначала удалить его содержимое, это неудобно и не интуитивно. А из-за того, что delphi не поддерживает deterministic destruction как с++, то и написать smart pointer, который будет следить за памятью - невозможно, ну а реализовать сборщик мусора на delphi думаю вообще не реально...
PM MAIL Skype GTalk   Вверх
MAKCim
Дата 11.6.2009, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



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


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

PM MAIL   Вверх
Void
Дата 11.6.2009, 14:57 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Цитата(MAKCim @  11.6.2009,  10:38 Найти цитируемый пост)
некоторые вещи не совсем интуитивны

Почти всегда «интуитивный» в отношении ЯП означает «похожий на то, что я видел ранее».

Если считать мерой сложности количество ad hoc решений в языке, не выводимых из неких базовых принципов, то C++ здесь вне конкуренции, пожалуй smile


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
gcc
Дата 12.6.2009, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

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



сложный ли такой код? (вроде бы ничего сложного)

Код

#perl/bin/perl -w

        #${$a[3][2]{ass}}[7]='MOTHER';
        #print $#{$a[3][2]{ass}}+1;
        #${$a[3][2]{ass}}{zxc}='MOTHER';
        #${$a[3][2]{ass}}{xcv}='FUCKER';
        #$a=(($#{[%{$a[3][2]{ass}}]})+1);
        #print $a/2-1;

        $aaaaa='DOT';
        $aaaa=\$aaaaa;
        $aaa=\$aaaa;

        $a[0]=1;
        $a[1]{'A'}='as1s';
        $a[1]{'E'}='as4s';
        $a[2]=2;
        $a[3][0]='Zs1s';
        $a[3][1]='Zs2s';
        $a[3][2]='Zs3s';
        $a[3][3]=\$aaa;
        $a[4]='Ludka';
        #$a[3][4][2][5]='Zs3s';

        #print $#{[@{$a[3]}]};
        #$z=$#{$a[3][4][2]};
        #print $z;

        #__END__
        # @a - сложная структура
        # @b - массив с текущей позицией в дереве
        # $z - значение текущего элемента

        @b=(0,'a');
        $f=0;
        while ($f==0)
                {

                print "\n";
                ($z,$ss)=_Array2String();
        #       print "($z,$ss)=Array2Srting()\n";
        #       $z - содержимое текущего элемента
        #       $ss- количество элементов
        #       print "Begin _StepForward \@b=";
        #       print @b;
        #       print "\n";
        #       print "5.1 ref(z)=".ref($z)."  z=$z\n";
                if (!ref($z))   
                        {
                        $f=0;
                        @c=@b;
                        $r=_StepForward();
                        if ($r eq 'end') {print "END of structure\n";$f=1;}
                        print "Element=$z\n" if $f!=1;
                        print "\@c=";
                        print @c;
                        print "\n";
                        }
        #       print "5.2 ref(z)=".ref($z)."  z=$z\n";
                if (ref($z) eq 'ARRAY')
                        {
        #print "z-ARRAY ref!\n";
                        push @b, 0; push @b, 'a';
                        }
                elsif (ref($z) eq 'HASH')
                        {
                        push @b, 0; push @b, 'h';
        #print "z-HASH ref!\n";
                        }
                elsif (ref($z) eq 'REF' || ref($z) eq 'SCALAR')
                        {
                        push @b, 0; push @b, 's';
        #print "z-SCALAR ref!\n";
                        }
                #if (ref($z) eq 'SCALAR') {push @b, 0; push @b, 'a';}

                }

        print "END!\n";

        # передвигается по структуре на 1 шаг (найти следующий элемент - НЕ ССЫЛКУ
        sub _StepForward
                {
                #print "Begin _StepForward \@b=";
                #print @b;
                #print "\n";
                if ($f==1) {return}
                if ($#b<=0) {return 'end';}
        #       print '1.$b[$#b]='.$b[$#b]."\n";
        #       print '2.$b[$#b-1]='.$b[$#b-1]."\n";
                if ($b[$#b] eq 'a' || $b[$#b] eq 'h')
                        {
                        ($sz,$ss)=_Array2String();
                        # если массив не перебран весь, то инкремент позиции
        #               print "3. ss=".$ss."\n";
        #               print '3.1 $b[$#b-1]='.$b[$#b-1].'<ss='.$ss."\n";
        #       print "3.2 In _StepForward \@b=";
        #       print @b;
        #       print "\n";
                        if ($b[$#b-1]<$ss) {$b[$#b-1]++;}#
                        else
                                {
        #                       print "4.\@b=pop\n";
                                pop (@b);
                                pop (@b);
                                _StepForward();
        #
                                }
                }
                elsif ($b[$#b] eq 's')
                        {
                        pop@b;pop@b;
                        _StepForward();
        #
                        }
        #       print "3.3 In _StepForward \@b=";
        #       print @b;
        #       print "\n";
            return;
                }

        # Парсит массив @b в строку, которую возвращает
        sub _Array2String
                {
                $s='$a';
                for (my $i=0;$i<$#b;$i+=2)
                        {
                        if ($b[$i+1] eq 'a') {$s.='['.$b[$i].']'}
                        elsif ($b[$i+1] eq 'h')
                                {
                                $ss='$zz=\\'.$s;
                                eval $ss;
                                $zz=$$zz;
                                @keys=sort keys %$zz;
                                $s.='{'.$keys[$b[$i]].'}'
                                }
                        elsif ($b[$i+1] eq 's') {$s='${'.$s.'}';}
                        }

                $ss=$s;
        #       print "2.1 ss=$ss\n";
                #print "b=".$b[$#b]."\n";
        # подсчет количества элементов в $ss
                if ($b[$#b] eq 'a')
                        {
        #               print "2.2 Array ss=$ss\n"; # $z= $#{$a[3]};
                        if ($#b>1)
                                {
                                $ss=~s/^\$/\$#\{\$/;
                                $ss=~s/\[\d+\]$/}/;
                                }
                        else
                                {
                                $ss=~s/^\$/\$#/;
                                $ss=~s/\[\d+\]$//;
                                }

                        $ss='$ss='.$ss;
                        #print "2.3 Array ss=$ss\n";
                        eval $ss;
                        #print "2.4 Array ss=$ss\n";
                        }
                elsif ($b[$#b] eq 'h')
                        {
                        $ss=~s/^\$/\$#\{\[%\{\$/;
                        $ss=~s/\{[a-zA-Z0-9_]+\}$/}]}/;
                        $ss='$sz='.$ss;
                        eval $ss;
        #               print "2.3 hash sz=$sz\n";
                        $sz++;
                        $sz=$sz/2;
                        $sz--;
                        $ss=$sz;
                        }
                else {undef $ss;}

                $s='$sz=\\'.$s;
                eval $s;
        #       print "2.9 ss=$ss\n";
                $sz=$$sz;
                return ($sz,$ss);
                }


PM WWW ICQ Skype GTalk Jabber   Вверх
kemiisto
Дата 12.6.2009, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

Репутация: 7
Всего: 160



gcc, читать сложно. smile

Добавлено через 2 минуты и 8 секунд
А, так это Perl! Read-only language! smile 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Alexeis
Дата 12.6.2009, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Lazin @  11.6.2009,  07:23 Найти цитируемый пост)
а можно тупо добавить каждому объекту метод WriteMe и все, че париться

  Разница есть. ToString есть у общего предка TObject притом виртуальная.

Цитата(Lazin @  11.6.2009,  07:23 Найти цитируемый пост)
а если я написал класс complex, который не имеет таблицы вирт. функций, это просто пара чисел, не массив, не интерфейс и не ком объект, и выводить их нужно не просто так, а перед мнимой частью еще вывести "j". Писать убер-функцию которая будет выводить все что угодно?

  Если бы это было самой большой проблемой программирования, то я бы согласился. Чтобы вывести массив чисел и функции не нужно, можно просто так написать smile . 

Цитата(Lazin @  11.6.2009,  07:23 Найти цитируемый пост)
в этом и дело, я могу вместо vector<double> написать vector<long> или list<complex>, все будет работать одинаково, первая ф-я ожидает на вход пару forward итераторов, в качестве forward итератора может выступать все что угодно, начиная от указателя и заканчивая файловым итератором. 

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

Добавлено через 1 минуту и 13 секунд
  И главное, синтаксис в десятки раз проще.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Lazin
Дата 13.6.2009, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Alexeis @  12.6.2009,  23:14 Найти цитируемый пост)
Разница есть. ToString есть у общего предка TObject притом виртуальная.

в паскале все объекты являются наледниками TObject? видимо нет, тоесть ради приведения к строковому типу, я должен наследовать свой класс от TObject? А если мне нужно создать несколько миллионов экземпляров моего класса, не будет-ли дорогим удовольствием наличие дополнительных данных и таблицы вирт. функций в моем классе?

Цитата(Alexeis @  12.6.2009,  23:14 Найти цитируемый пост)
Если бы это было самой большой проблемой программирования, то я бы согласился. Чтобы вывести массив чисел и функции не нужно, можно просто так написать

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

Цитата(Alexeis @  12.6.2009,  23:14 Найти цитируемый пост)
А вот с этим как раз проблем нет, в VCL есть универсальная система потоков пронизанная через весь VCL. Есть унифицированный интерфейс для чтения и записи в файл, память, ресурс, строку и т.д. Есть также объекты умеющие писать в поток стандартные вещи. Короче на все есть свое альтернативное решение. Просто ты мыслишь в терминах С++, от того не находишь аналога.

Кажется мы разговариваем на разных языках, поток данных != итератор на элемент из набора данных.
Существует ли в delphi поток для записи в двухсвязный список, или в бинарное дерево поиска? Вероятно - нет.
Цитата(Alexeis @  12.6.2009,  23:14 Найти цитируемый пост)
И главное, синтаксис в десятки раз проще.

Може он и проще, но зато он многословней, и простота синтаксиса != простота программирования smile 
PM MAIL Skype GTalk   Вверх
Alexeis
Дата 13.6.2009, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(Lazin @  13.6.2009,  09:21 Найти цитируемый пост)
в паскале все объекты являются наледниками TObject? видимо нет, тоесть ради приведения к строковому типу, я должен наследовать свой класс от TObject? А если мне нужно создать несколько миллионов экземпляров моего класса, не будет-ли дорогим удовольствием наличие дополнительных данных и таблицы вирт. функций в моем классе?

  Все объекты его наследники.

Цитата(Lazin @  13.6.2009,  09:21 Найти цитируемый пост)
Може он и проще, но зато он многословней, и простота синтаксиса != простота программирования

  А вот это уже новости smile . С++ намного более многословный, особенно при работе с шаблонами.
  Сравни dynamic_cast<TObject>(SomeObj) == NULL и SomeObj is TObject .

Цитата(Lazin @  13.6.2009,  09:21 Найти цитируемый пост)
ну это частный случай общей проблеммы, это может быть не вывод на экран, а к примеру сериализация в xml

  С сериализацией как раз мощнее и удобнее на порядок ввиду того что RTTI на голову выше.

Цитата(Lazin @  13.6.2009,  09:21 Найти цитируемый пост)
Кажется мы разговариваем на разных языках, поток данных != итератор на элемент из набора данных.
Существует ли в delphi поток для записи в двухсвязный список, или в бинарное дерево поиска? Вероятно - нет.


  Если подумать, то использование итератора это ни что иное как вызов виртуального метода. Работают же с деревьями, например с тем же TreeView или TXMLDocument. Вся проблема сводиться к тому что вместо It++/It-- нужно записать ChNode := RNode.Next; или ChNode := RNode.Prev;
  Скажу честно, мне не приходилось в Delphi работать с деревьями, но наверняка, те работал имеют свои наработки. Нельзя ждать, что в поставке будет все все, на все случаи жизни. Есть много сторонних классов.

  На счет 4х байтов адреса VMT, а ты знаешь какие накладные расходы на однократное выделение  
памяти? По меньшей 10-30 байт, только на служебную информацию, потом выравнивание на границу 4х байт, потом выравнивание структур на границу 8ми или даже 16ти байт. Сейчас 4 байта ничего не значат, это не вопрос оптимизации. Это крошечная плата за ту полноту фич, которые можно использовать. Например в С++ нельзя по указателю достоверно узнать какой это на самом деле класс, потому что нет ни какой гарантии что у этого класса есть VMT. А тут такая гарантия есть и на это можно всегда рассчитывать, будь то свой или чужой класс. Точно также работа с памятью. Возникают куча проблем с тем чтобы сначала выделить память и потом вернуть в ней результат, потому что объект может быть статическим, стековым или в куче. Нельзя быть уверенным что его можно уничтожить из вне или создать во вне и вернуть ссылку, так чтобы получатель мог его сам удалить при необходимости. А тут запросто, передавай куда хош, возвращай из функции, создавай и уничтожай где хош, потому что все объекты динамические. Это очень просто, других объектов быть не может. Собственный метод free() удалит его, каким бы способом он не создавался, кроме того если объект создавался во вне, а получен был лишь его интерфейс, то объект автоматически будет уничтожен как только переменная интерфейса выйдет из области видимости.
  Чего ни говори, но работа в динамике на порядок удобнее.




--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Void
Дата 13.6.2009, 11:10 (ссылка) |    (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Традиции Винграда: любую тему о ЯП здесь превращают в холивар Delphi vs C++. Добро пожаловать в 2009 год, что ли...


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Logo
Дата 14.6.2009, 09:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(kemiisto @ 12.6.2009,  23:04)
gcc, читать сложно. smile

Добавлено @ 23:07
А, так это Perl! Read-only language! smile

Write-only smile 
PM MAIL   Вверх
Lazin
Дата 14.6.2009, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Alexeis @  13.6.2009,  10:59 Найти цитируемый пост)
Все объекты его наследники

ужас какой, а еще у вас нет стековых объектов
Цитата(Alexeis @  13.6.2009,  10:59 Найти цитируемый пост)
А вот это уже новости smile . С++ намного более многословный, особенно при работе с шаблонами.
  Сравни dynamic_cast<TObject>(SomeObj) == NULL и SomeObj is TObject

ну знаешь, в с++ этой конструкцией почти не приходится пользоваться, так как есть шаблоны, а в Delphi нужно постоянно использовать downcast-ы, так-как все контейнеры и все классы VCL, хранят указатели на TObject, там, где нужно хранить произвольные пользовательские данные.

Цитата(Alexeis @  13.6.2009,  10:59 Найти цитируемый пост)
С сериализацией как раз мощнее и удобнее на порядок ввиду того что RTTI на голову выше.
но на голову ниже чем в C# smile 
Вообще, в с++ это то-же возможно, есть фреймверки для сериализации, которые сильно это упрощают.  smile 
Цитата(Alexeis @  13.6.2009,  10:59 Найти цитируемый пост)
Если подумать, то использование итератора это ни что иное как вызов виртуального метода. Работают же с деревьями, например с тем же TreeView или TXMLDocument. Вся проблема сводиться к тому что вместо It++/It-- нужно записать ChNode := RNode.Next; или ChNode := RNode.Prev;

неа, возьмем к примеру std::vector<int>, после инстанциировния и оптимизации компилятором, итератор на элемень вектора сведется к указателю на int, а все операции над итератором - к операциям над указателем, никаких вирт. ф-ий, все максимально эффективно smile 

Цитата(Alexeis @  13.6.2009,  10:59 Найти цитируемый пост)
На счет 4х байтов адреса VMT, а ты знаешь какие накладные расходы на однократное выделение  
памяти? По меньшей 10-30 байт, только на служебную информацию, потом выравнивание на границу 4х байт, потом выравнивание структур на границу 8ми или даже 16ти байт. Сейчас 4 байта ничего не значат, это не вопрос оптимизации. Это крошечная плата за ту полноту фич, которые можно использовать.

Цитата(Alexeis @  13.6.2009,  10:59 Найти цитируемый пост)
Чего ни говори, но работа в динамике на порядок удобнее.

ну знаешь, выравниванием можно управлять, и очень часто, приходится работать с объектами, размер которых сопостовим с размером указателя на VMT, так-что это не аргумент. К примеру, мне нужно проводить вычисления над кватернионами, в С++ можно написать класс, который будет иметь семантику значений, полиморфизм такому объекту не нужен, но в delphi это сделать нельзя. Придется размещать объекты этого класса в куче, а это во первых медленней, так как повышается уровень косвенности при обращении, к тому-же, рано или поздно это приведет к фрагментации памяти.

Цитата(Alexeis @  13.6.2009,  10:59 Найти цитируемый пост)
Например в С++ нельзя по указателю достоверно узнать какой это на самом деле класс, потому что нет ни какой гарантии что у этого класса есть VMT. А тут такая гарантия есть и на это можно всегда рассчитывать, будь то свой или чужой класс.

Вообще-то можно, это называется RTTI. Но это как правило не нужно и обычно вызвано ошибками проектирования. Как правило, нам нужно наоборот, не знать с объектм какого класса работает программа, обращаясь к нему через указатель(ссылку) на базовый класс.

Цитата(Alexeis @  13.6.2009,  10:59 Найти цитируемый пост)
Точно также работа с памятью. Возникают куча проблем с тем чтобы сначала выделить память и потом вернуть в ней результат, потому что объект может быть статическим, стековым или в куче. Нельзя быть уверенным что его можно уничтожить из вне или создать во вне и вернуть ссылку, так чтобы получатель мог его сам удалить при необходимости.
Ну, эти проблемы возникают обычно у нубов и это не проблемы вовсе. Такие ошибки достаточно легко обнаруживаются, так-как вызывают падение программы. К тому-же, моно сделать так, что с объектами некоторго класса будет можно работать только через указатель(нельзя будет создать на стеке), или только через смарт поинтер определенного типе. Можно сделать наоборот, так, что-бы объект можно было создать только на стеке и нельзя - в динамической памяти. В конце концов, можно написать сборщик мусора, а еще лучше - использовать готовую библиотеку smile 
PM MAIL Skype GTalk   Вверх
ToshaCh
Дата 14.6.2009, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 555
Регистрация: 10.11.2005
Где: Москва, РФ

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



Цитата(Void @  13.6.2009,  11:10 Найти цитируемый пост)
Традиции Винграда: любую тему о ЯП здесь превращают в холивар Delphi vs C++. Добро пожаловать в 2009 год, что ли...

Намана. Хорошо холиварят, даже читать приятно. smile Берите пиво и попкорн!
Правда увлеклись vcl, а вопрос был про язык, а не библиотеки. А то знаете ли можно и MFC вспомнить или GTK 1.

Синтаксически С++ самый тяжёлый. А читабельность исходников сильно зависит от того насколько хороший профессионал их писал, в отличии от скажем python'а. 


--------------------
Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 
--
Oracle это не только способ отмывания денег, но и вполне себе преличная база данных.
PM MAIL Jabber   Вверх
Stolzen
Дата 16.12.2013, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



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

(пардон за некропостинг)


--- 

UPD
Итог
* визуализация ответов http://goo.gl/xzyV1x
* итоговая оценка сложности http://goo.gl/F3hk4k

Спасибо всем ответившим!

Это сообщение отредактировал(а) Stolzen - 24.12.2013, 15:27


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Разные вопросы"
Smartov

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


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

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


 




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


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

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