Re[37]: По просьбам трудящихся: Delphi vs C++(VS)
От: WolfHound  
Дата: 18.09.03 04:24
Оценка:
Здравствуйте, mihailik, Вы писали:

M>Ты считаешь, что реализовать шаблоны сложнее, чем написать хороший оптимизирующий компилятор?

Я считаю что эти задачи сопастовимы по сложности. Особенно если учесть что придется писать оптимизатор так чтобы он мог оптимизировать шаблоны...
А теперь представь что на разработка жабы или .НЕТ пришлось бы потратить примерно в двое больше ресурсов
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[7]: Некоторые итоги:
От: FWP Россия  
Дата: 18.09.03 04:25
Оценка:
Здравствуйте, centurn, Вы писали:

C> Ага, помнится, мне, для того, чтобы поработать в 5-м Delphi, приходилось переключать экран в какой-то жуткий режим, иначе уже Splash screen этой делфи мне намертво комп вешал. Так что для меня субъективно 4-й Делфи лучше 5-го.

4-я дельфя — это уродец эпохи Inprise. Глюк на глюке. А вот с пятой никаких проблем не было. Мы на 6ю перешли то всего с год назад.
C>А 6-й студии афайк хронологически как раз 5-я делфя соответствует.
Нет. VS6 <-> Delphi6.
Re[36]: По просьбам трудящихся: Delphi vs C++(VS)
От: alexkro  
Дата: 18.09.03 04:51
Оценка: :)
Здравствуйте, WolfHound, Вы писали:

WH>VC++7.1

WH>...

WH>Ну как? А какие результаты даст дельфя? Причем это очень простые примеры.

WH>Но практака показывает что запутать компилятор практически не возможно.

Оптимизация, говоришь... You ain't seen nothing yet! Небольшой этюд на тему (ручной) оптимизации виртуальных методов (испольнитель (компилятор) все тот же):

#include <iostream>
#include <vector>
#include <boost/progress.hpp>

using namespace std;
using namespace boost;

#define TYPEID_CALL( TYPE, METHOD ) \
    if ( type_info_ == TYPE::s_type_info ) return static_cast< TYPE * >( this )->METHOD

class CA
{
    int type_info_;

public:
    static const int s_type_info = 1;

    CA( int ti = s_type_info )
        : type_info_( ti )
    {}

    int a();
    int b();
    int c();
    int d();
    int e();

    int a_impl() { return 55; }
    int b_impl() { return 55; }
    int c_impl() { return 55; }
    int d_impl() { return 55; }
    int e_impl() { return 55; }
};

class CB : public CA
{
public:
    static const int s_type_info = 2;

    CB()
        : CA( s_type_info )
    {}

    int a_impl() { return 110; }
    int b_impl() { return 110; }
    int c_impl() { return 110; }
    int d_impl() { return 110; }
    int e_impl() { return 110; }
};

class CC : public CA
{
public:
    static const int s_type_info = 3;

    CC()
        : CA( s_type_info )
    {}

    int a_impl() { return 220; }
    int b_impl() { return 220; }
    int c_impl() { return 220; }
    int d_impl() { return 220; }
    int e_impl() { return 220; }
};


int CA::a()
{
    TYPEID_CALL( CA, a_impl )();
    TYPEID_CALL( CB, a_impl )();
    TYPEID_CALL( CC, a_impl )();
}
int CA::b()
{
    TYPEID_CALL( CA, b_impl )();
    TYPEID_CALL( CB, b_impl )();
    TYPEID_CALL( CC, b_impl )();
}
int CA::c()
{
    TYPEID_CALL( CA, c_impl )();
    TYPEID_CALL( CB, c_impl )();
    TYPEID_CALL( CC, c_impl )();
}
int CA::d()
{
    TYPEID_CALL( CA, d_impl )();
    TYPEID_CALL( CB, d_impl )();
    TYPEID_CALL( CC, d_impl )();
}
int CA::e()
{
    TYPEID_CALL( CA, e_impl )();
    TYPEID_CALL( CB, e_impl )();
    TYPEID_CALL( CC, e_impl )();
}

int test()
{
    CA a1;
    CB a2;
    CC a3;
    CA *c[ 3 ];
    c[ 0 ] = & a3;
    c[ 1 ] = & a1;
    c[ 2 ] = & a2;

    int s = 0;

    for (int k = 0; k < 10000000; ++k)
    {
        for (int m = 0; m < 3; ++m)
        {
            CA * x = c[ m ];
            s += x->a();
            s += x->b();
            s += x->c();
            s += x->d();
            s += x->e();
        }
    }

    return s;
}

int main()
{
    progress_timer t;

    cout << test() << endl;
}

Asm:
; 172  :     cout << test() << endl;

    mov    DWORD PTR _a1$19959[esp+32], 1
    mov    DWORD PTR _a2$19960[esp+32], 2
    mov    DWORD PTR _a3$19961[esp+32], 3
    xor    eax, eax
    mov    ecx, 10000000                ; 00989680H
    npad    1
$L19965:
    add    eax, 1925                ; 00000785H
    dec    ecx
    jne    SHORT $L19965


Всё!

Двадцать методов, цикл, массив, условия, статик касты... Всё как в трубу . Этот компилятор невозможно использовать для написания простых тестов .
Re[11]: По просьбам трудящихся: Delphi vs C++(VS)
От: WolfHound  
Дата: 18.09.03 07:21
Оценка:
Здравствуйте, mihailik, Вы писали:

M>А, так ты Flush в try/finally делаешь?

M>А шуму-то было, мол, в C++ try/finally не нужен никогда.
Что такое исключение? Это ФАТАЛЬНЫЙ сбой в алгоритме. Следовательно алгоритм не отработал.
Вопрос нафига записывать мусор если надо просто сообщить о провале и подчистить ресурсы?

M>А при чём здесь объём памяти? В C# всё прозрачно расписано, когда и в каких случаях стоит вызывать Dispose. Если не следуешь советам, сам виноват.

А при том что когда памяти мало GC убивает объекты до того как будут сожраны ВСЕ ресурсы, а когда много...
Вся проблема в том что вызов РЕКОМЕНДАТЕЛЕН те если ты его забыл сделать то ни кто тебе ни чего не скажет. А как показывает практика 90% ошибок происходит именно из-за забывчивости.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[14]: По просьбам трудящихся: Delphi vs C++(VS)
От: WolfHound  
Дата: 18.09.03 07:21
Оценка:
Здравствуйте, mihailik, Вы писали:

M>Если я тебя правильно понял, ты считаешь, что драйвера нужно писать на продвинутом C++ с STL и прочими наворотами?

А почему нет?
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[34]: По просьбам трудящихся: Delphi vs C++(VS)
От: mihailik Украина  
Дата: 18.09.03 07:22
Оценка:
WH>Да ни хрена ты не понял. Посошник САМ совободит память и вызовет деструкторы у объектов если в процессе заполнения произойдет сбой.

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

А стандартные типы не имеют никакой деструктивной логики, которую нужно было бы вызывать.

WH>try/finally это РУЧНОЕ освобождение ресурсов. В С++ освобождать ресурсы руками это дурной тон, а в дельфе без альтернатив.


Дурной тон? Понимаю.

Если нужно из чужой dll'ки вызвать пару-трёшку функций в определённом порядке, на C++ принято тратить полчаса на враппер? Даже если известно наверняка, что никогда и никому больше этот враппер не понадобится?

Слава богу, что в Дельфи с тоном посвободнее.
... << RSDN@Home 1.1 beta 1 >>
Re[38]: По просьбам трудящихся: Delphi vs C++(VS)
От: mihailik Украина  
Дата: 18.09.03 07:22
Оценка:
M>>Чего-то я не пойму. Такое впечатление, что для тебя просто не существует процесса написания помощников и связанных с этим трудозатрат.

WH>Один раз забить все необходимое в помошник и пользоваться не задумываясь об освобождении ресурсов или постоянно писать try/finally для освобождения ресурсов.

WH>Как ты думаешь в каком случае трудозатраты больше?

Это зависит от цифр.

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


Ну вот. А то кто-то говорит, что в C++ мало ручной работы. Пишете там всякие помощники по поводу и без повода, и нас, бедных Дельфистов агитируете. Доколе!
... << RSDN@Home 1.1 beta 1 >>
Re[38]: По просьбам трудящихся: Delphi vs C++(VS)
От: mihailik Украина  
Дата: 18.09.03 07:22
Оценка:
>>На теже грабли в другом языке я сознательно об этих вопросах беспокоюсь. А в C++ мне Wolfhound, авторитетно сказал, что о времени жизни беспокоиться не нужно.

M>>Или всё-таки нужно?


WH>Если тебя волнует будет ли освобожден ресурс до выхода из функции то не нужно.


Если я должен думать, есть опастность или нет — значит я просто всегда ожидаю опасность. Где же тут C++ даёт послабление относительно Дельфи? Думать-то всё равно нужно столько же.

WH>Но если есть какято очень хитрая логика которая случается раз в год...


Чтобы засечь этот "раз в год", я должен думать об этой возможности каждую секунду. Где же экономия?
... << RSDN@Home 1.1 beta 1 >>
Re[34]: По просьбам трудящихся: Delphi vs C++(VS)
От: mihailik Украина  
Дата: 18.09.03 07:22
Оценка:
_O_>Гм. У нас на нем (C++/C) написан CASE тул, который включает

Ну мало ли, что на нём можно написать. На VB тоже всякие невероятные дела делают. Но реально-то C++ лучше всего выстреливает в системном и низкоуровневом программировании. В создании прикладных систем у него есть мощная конкуренция.

_O_>С Delphi-ями мы бы зависли на реализации эффективного и удобного внутреннего представления по причине отсутствия множественного наследования и шаблонов.


У каждого свой уровень в Дельфи. Ничего зазорного нет, если кто-то не умеет на нём нормально продуктивно работать. Зато вы в C++ специалисты.
... << RSDN@Home 1.1 beta 1 >>
Re[36]: По просьбам трудящихся: Delphi vs C++(VS)
От: mihailik Украина  
Дата: 18.09.03 07:22
Оценка:
WH>>>КОМ серверы например. И вобще все что нужно. С++ дает неизмеримо больше возможностей и контроля чем дельфи.

M>>Ага. А Delphi, Java и C# избавляют программиста от необходимости контроля. Контроль берёт на себя среда.


WH>Где ты среду в дельфе нашол? Дельфи это unmanaged компилятор с произвольным доступом к памяти. Ни какого контроля.


Средой я назвал окружение. Все вот эти "примочки" и "магию" компилятора. Свойства, RTTI. Семантику самого языка в конце концов.

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

Кроме того, все объекты сугубо by ref. Никаких объектов на стеке или ещё где ни попало. Операторы, слава богу, не перегружаются. Никаких конструкторов копирования, неявных преобразований и множественного наследования. Шаблоны тоже разум не затмевают. Короче говоря, возможности поурезаны, но нам-то это и нужно.

А кому нужен мощный инструмент, налагающий большой груз ответственности, инструмент, требующий серьёзного и длительного обучения — вперёд. Тому на C++ работать самая дорога. Там и платят больше.
... << RSDN@Home 1.1 beta 1 >>
Re[38]: По просьбам трудящихся: Delphi vs C++(VS)
От: mihailik Украина  
Дата: 18.09.03 07:22
Оценка:
WH>>> Разговорные языки по функциональности практически равноценны. Но С++ и
WH>>> делфи... ой не смешите мои тапочки.

m>> Мне кажется, твоя обувь слишком много на себя берёт.

m>> По функциональности C++ опережает Дельфи только в возможности
m>> компилировать драйвера.

AD>


AD>2mihailik: большая просьба, обдумывать свои ответы собеседнику, иначе есть

AD>вероятность того, что модератор перенесёт эту ветку в "Коллеги, улыбнитесь"
AD>

Если мои рассуждения народ задолбали, я могу и заткнуться. Делов-то

Кстати, а почему ты переводишь стрелу на модератора. Я считаю, у каждого должен быть свой внутренний модератор. Так что давай конструктивно. Что конкретно тебе не понравилось в моём сообщении?
... << RSDN@Home 1.1 beta 1 >>
Re: от модератора
От: mihailik Украина  
Дата: 18.09.03 07:22
Оценка:
_MM_>пока еще не унесет, но "по шапке надавать" может. обоим есть за что...

Один из этих обоих, кажется, я. А кто второй? С кем мне на скамье сидеть?

P.S. Если есть за что, я готов прислушаться к мнению уважаемого модератора. Какие замечены недостатки?
... << RSDN@Home 1.1 beta 1 >>
Re[40]: По просьбам трудящихся: Delphi vs C++(VS)
От: mihailik Украина  
Дата: 18.09.03 07:22
Оценка:
M>>Есть COM-объект. Необходимо вызывать какие-то его методы, использовать свойства при помощи позднего связывания, т.е. методов IDispatch. В скриптовых языках, в VB, в Дельфи это очень просто.

ГВ>Ну вот же ж блин. Ну нельзя на C++ наезжать по таким направлениям — не для того он предназначен.


Ну так я о том же. Гнобят бедный Дельфи и в хвост и в гриву. В гриву я ещё согласен, но в хвост — это зря.

ГВ>Конечно, если накатать набор врапперов, то можно сделать и "по позднему связыванию". В результате код пользователя будет примерно таким:


Ну да, на Дельфи тоже можно TLB импортировать. Только это куча лишних действий. Если нужно всего-то открыть Excel и бросить значения в пару ячеек, тут враппер как помеха какая-то.

Кроме того, работа по позднему связыванию отличается от работы по интерфейсам тем, что освобождает от привязки к версиям. Если на C++ импортировать Office XP TLB, то с Office 2000 вполне полезут проблемы.

ГВ>Ну и наконец, если в твоей программе логики помимо подключения COM-объектов мало, то кой чёрт тогда тебе C++ использовать? Бери тот же VB и полный вперёд!


Ага. Согласен. Для OLE Automation лучше использовать более соответствующий язык.
... << RSDN@Home 1.1 beta 1 >>
Re[40]: По просьбам трудящихся: Delphi vs C++(VS)
От: mihailik Украина  
Дата: 18.09.03 07:22
Оценка:
M>>Чем C++ может уделать Дельфи с позиций внешнего наблюдателя?

WH>Ни чем. С точки зрения пользователя пофигу как написано приложение на дельфе, С++, асме или в машинных кодах.

WH>А вот с точки зрения ПРОГРАММИСТА не первый план выходят "внутриязыковые приколы".

Пожалуй что так. Но тогда я и не знаю, как прийти к объективности.

Программисту-Дельфисту вряд ли понравятся монстровитый функции C++. А Сишнику в рамках Дельфи будет всё время тесновато.

Предлагается по этому поводу поздравить друг друга и всех окружающих с чем-нибудь там..
... << RSDN@Home 1.1 beta 1 >>
Re[38]: По просьбам трудящихся: Delphi vs C++(VS)
От: mihailik Украина  
Дата: 18.09.03 07:23
Оценка:
M>>Ну напишу я на Дельфи не 7, а 97 таких контейнеров — Дельфи станет от этого круче?
WH>Это 7 базовых контейнеров на их основе можно сделать что угодно.
WH>И вобще попробуй придумать 97 различных структур данных

Ладно, ладно, семь — магическое число. Согласен. Тут C++ переплюнул, у него число более знатное.
... << RSDN@Home 1.1 beta 1 >>
Re[7]: Некоторые итоги:
От: WolfHound  
Дата: 18.09.03 07:27
Оценка:
Здравствуйте, Serginio1, Вы писали:

WH>>А вот о других средствах которые могут заменить шаблоны по подробней.

S>http://www.osp.ru/news/soft/2003/09/15_01_print.htm
copy-paste-replace. Еще раз повторю шаблоны С++ значительно мощьнее чем copy-paste-replace.
S>http://www.wn.ru/computers/16.09.2003/6.html
Вот только очередного С++глюка от багландов мне и не хватало...
Я очень сильно удивлюсь если это будет нормальный компилятор.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[37]: По просьбам трудящихся: Delphi vs C++(VS)
От: WolfHound  
Дата: 18.09.03 07:36
Оценка:
Здравствуйте, alexkro, Вы писали:

WH>>Ну как? А какие результаты даст дельфя? Причем это очень простые примеры.

WH>>Но практака показывает что запутать компилятор практически не возможно.

A>Оптимизация, говоришь... You ain't seen nothing yet! Небольшой этюд на тему (ручной) оптимизации виртуальных методов (испольнитель (компилятор) все тот же):


Это я то ни чего не видел Мои реальные программы намного сильнее морочат компилятор. И ни чего. Вся навороченая compile-time логика летит в трубу.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[39]: По просьбам трудящихся: Delphi vs C++(VS)
От: Lloyd Россия  
Дата: 18.09.03 07:40
Оценка:
Здравствуйте, mihailik, Вы писали:

M>Если мои рассуждения народ задолбали, я могу и заткнуться. Делов-то


M>Кстати, а почему ты переводишь стрелу на модератора. Я считаю, у каждого должен быть свой внутренний модератор. Так что давай конструктивно. Что конкретно тебе не понравилось в моём сообщении?


Внутренний прокурор. (с) Пелевин.
Re[35]: По просьбам трудящихся: Delphi vs C++(VS)
От: WolfHound  
Дата: 18.09.03 09:12
Оценка:
Здравствуйте, mihailik, Вы писали:

M>В Дельфи объекты нельзя распределить в какой-то особенной памяти, кроме как в стандартной куче. Да я и не вижу необходимости.

Ты нет а вот те кто придумывал COM почемуто видят.

M>А стандартные типы не имеют никакой деструктивной логики, которую нужно было бы вызывать.

А варианты? А строки их к стати тоже нужно в COM аллокатором размещать если вернуть хочешь.

M>Дурной тон? Понимаю.

А в дельфе try/create/finally/free, try/create/finally/free, try/create/finally/free,....
В то время как в С++ new, new, new, new,...
Разницу замечаем или еще нет?

M>Если нужно из чужой dll'ки вызвать пару-трёшку функций в определённом порядке, на C++ принято тратить полчаса на враппер? Даже если известно наверняка, что никогда и никому больше этот враппер не понадобится?

Вот мне недавно надо было просканить папку и вернуть файлы удвалетворяющие маске. Я не задумываясь написал врапер над FindFirst/FindNext и не жалею ибо логика работы с ресурсом и логика работы программы были разделены что прибавило читабельности и сильно. К томуже затраты на написание врапера сравними с затратами на одно использование этих функций. А если учесть что работа с ресурсом как правило осуществляется в нескольких местах...

M>Слава богу, что в Дельфи с тоном посвободнее.

Ага вот только народ (из другой конторы) который писал OPC сервер на дельфе потратил много больше времени на разработку ибо за меня работал компилятор, а они все делали ручками.
... << RSDN@Home 1.1 beta 2 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[39]: По просьбам трудящихся: Delphi vs C++(VS)
От: WolfHound  
Дата: 18.09.03 09:12
Оценка:
Здравствуйте, mihailik, Вы писали:

WH>>Один раз забить все необходимое в помошник и пользоваться не задумываясь об освобождении ресурсов или постоянно писать try/finally для освобождения ресурсов.

WH>>Как ты думаешь в каком случае трудозатраты больше?
M>Это зависит от цифр.
Даже при одиночном использовании логика программы разделяется, а это уже стоит многого.

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

M>Ну вот. А то кто-то говорит, что в C++ мало ручной работы. Пишете там всякие помощники по поводу и без повода, и нас, бедных Дельфистов агитируете. Доколе!
Именно по этому и мало ручной работы ибо я пишу логику один раз, а ты каждый раз при использовании.
... << RSDN@Home 1.1 beta 2 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.