Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.03;
Скачать: CL | DM;

Вниз

Delphi vs. C++   Найти похожие ветки 

 
noname_   (2004-09-06 17:06) [120]

2 Romkin [102]

Переопределение _AddRef _Release не всегда помогает.
В следующем примере (получение объекта по интерфейсной ссылке из функции и уничтожение объекта) я не смог избавиться от AV в процедуре DoTest.


program testintf;
{$APPTYPE CONSOLE}

uses
 SysUtils;

type
 ITest = interface(IUnknown)
   procedure Delete;
 end;

 TTest = class(TInterfacedObject, ITest)
 private

 protected
   function _AddRef: Integer; stdcall;
   function _Release: Integer; stdcall;
 public
   procedure Delete;
 end;

var
 gTest: ITest;

procedure TTest.Delete;
begin
 Free;
end;

function TTest._AddRef: Integer;
begin
 Result := -1;
end;

function TTest._Release: Integer;
begin
 Result := -1;
end;

procedure NewObj;
begin
 gTest := TTest.Create;
end;

function GetObj: ITest;
begin
 Result := gTest;
end;

procedure DoTest;
var
 i: Integer;
 s1: string;
begin
 NewObj;
 GetObj.Delete;
 for i := 1 to 500 do
   s1 := StringOfChar(#0, 200000);
end;

begin
 try
   DoTest;
   WriteLn("all right");
 except
   on E: Exception do
     WriteLn(E.Message)
   else
     WriteLn("unknown exception");
 end;
end.


 
Суслик ©   (2004-09-06 17:10) [121]


> noname_   (06.09.04 17:06) [120]

сейчас получишь клеймо "кривые руки".

Вообще в этом случае очень вероятно получить что-нить типа privelaged instructrion. У меня в подобном случае так и было.

Т.е. то, что дельфа лезет в любом случае делать _release меня самого разражало. Я делал так

T: ITest;
T := GetObj;
T.Delete;
Pointer(T) := nil.


 
VMcL ©   (2004-09-06 17:19) [122]

>>Суслик ©  (06.09.04 17:10) [121]

>Т.е. то, что дельфа лезет в любом случае делать _release меня самого разражало.

Странно это слышать. Может ещё и длинные строки компилятору за тебя не разрушать, а вдруг ты чё-то такое этакое с ней заделал?

P.S. Недавно писал одну тулзу на Це-постинкременте. Просто задолбался интерфейсы вручную релизить макросом SAFE_RELEASE. Хотя, в принципе, мне потом подсказали, что можно wrapper"ом было  воспользоваться.


 
Суслик ©   (2004-09-06 17:21) [123]


> VMcL ©   (06.09.04 17:19) [122]

повторю, то, что я сказал ромкину - немнимательно читаете, граждане.

Никто не говорил, про отмену поддержика авт. вызова _release - я говорил про упраление этим процессом.


 
VMcL ©   (2004-09-06 17:30) [124]

>>Суслик ©  (06.09.04 17:21) [123]

Чем тебе не нравится такое управление: Pointer(T) := nil;
?

ИМХО, такая конструкция понятна, причем на уровне обычного понимания операций приведения типов.


 
Суслик ©   (2004-09-06 17:33) [125]


> VMcL ©   (06.09.04 17:30) [124]

Да мне все нравится.
Так и делаю.

В общем-то тема посвящена холи вар. А обязательный вызов _release есть просто одно из того, что я вспомнил на высказываение Акуличева Дмитрий: "Интерфейсы -- это не имитация множественного наследования. Это самостоятельная, весьма прозрачная и плодотворная идея.". Я добавил,что она была бы еще более плодотворной, если ...


 
Григорьев Антон ©   (2004-09-06 17:33) [126]


> Игорь Шевченко ©   (06.09.04 16:52) [119]
>
> > А C/C++ создавался с целью наискорейшей реализации всего,
>
> > что в голову приходит.
>
>
> А с этого места подробнее...


Так автор С (вылетело имя из головы) сам рассказывал, что при создании этого языка он обращал внимание прежде всего на удобство отдельных конструкций, а не на структуру языка в целом. Отсюда такие извращения, как оператор присваивания, возвращающий результат, препроцессор, эквивалентность char и short и т.п. Явно оптимизировались отдельные операции, а не структура программы в целом.


 
Игорь Шевченко ©   (2004-09-06 17:48) [127]


> Так автор С (вылетело имя из головы)


Ричи ?


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


А нельзя ли источник этого рассказа ?


 
Игорь Шевченко ©   (2004-09-06 17:50) [128]

Григорьев Антон ©   (06.09.04 17:33) [126]

А Страуструпа почитать не помогает (относительно реализации того, что приходит в голову и делания столь поспешных выводов о том, что "кто любит переделывать в проектах и т.д.") ?


 
Verg ©   (2004-09-06 18:02) [129]

Да уж, не на шутку тут у вас... хе-хе...
Мне так только GNU Delphi и не хватает.
Кросс, embedded, и проч. "удвольствия" Борланд решил навсегда обойти стороной. Обидно. Ну, впрочем,ему же и хуже...


 
Акуличев Дмитрий   (2004-09-06 18:05) [130]


> Суслик ©   (06.09.04 17:33) [125]
> В общем-то тема посвящена холи вар. А обязательный вызов
> _release есть просто одно из того, что я вспомнил на высказываение
> Акуличева Дмитрий: "Интерфейсы -- это не имитация множественного
> наследования. Это самостоятельная, весьма прозрачная и плодотворная
> идея.". Я добавил,что она была бы еще более плодотворной,
> если ...

Если бы перед тем, как спороть чушь, ты бы ещё задумывался...

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

В общем, как говорил дедушка Крылов: "У ламера всегда компилер виноват".


 
Григорьев Антон ©   (2004-09-06 18:10) [131]


> Игорь Шевченко ©   (06.09.04 17:48) [127]
>
> > Так автор С (вылетело имя из головы)
>
> Ричи ?
>
> А нельзя ли источник этого рассказа ?


Да, Ричи, спасибо. А источник попробую поискать, так не помню, где я это читал. Помнил бы - сразу бы привёл ссылку :)


> Игорь Шевченко ©   (06.09.04 17:50) [128]
> А Страуструпа почитать не помогает (относительно реализации
> того, что приходит в голову и делания столь поспешных выводов
> о том, что "кто любит переделывать в проектах и т.д.") ?

Согласен с тем, что в C++ есть средства, позволяющие грамотно проектировать приложения, но одновременно есть и такие средства (в основном, унаследованные из C), которые позволяют без этого проектирования обойтись.

Честно говоря, я думаю, что если бы Страуструп создавал свой язык с нуля, а не основывался бы на С, получился бы куда как более приятный язык. Потому что наличие многих хороших безопасных конструкций в С++ соседствует с необязательностью их использования. Пример - есть константы и шаблоны, но нет запрета на использование для аналогичных целей препроцессора. Или - новые более безопасные операторы приведения типов не отменяют традиционного С-шного способа.


 
Акуличев Дмитрий   (2004-09-06 18:15) [132]


> Честно говоря, я думаю, что если бы Страуструп создавал
> свой язык с нуля, а не основывался бы на С, получился бы

Получился бы Оберон.

Впрочем, нет, не получился бы. Страуструп уже был отравлен ядом Ц.


 
Verg ©   (2004-09-06 18:21) [133]


> В общем, как говорил дедушка Крылов: "У ламера всегда компилер
> виноват".


А плохому сисадмину - Windows.


 
Суслик ©   (2004-09-06 18:22) [134]


> Акуличев Дмитрий   (06.09.04 18:05) [130]

Резок ты, Димон, в оценках.
Каюсь, у меня нет времени свою чушь делать столь выразительной посредством bold шрифта, а вот у тебя свою - есть.
Похвально.


> Отсюда первое следствие: время жизни интерфейса не совпадает
> со временем жизни объекта

откуда ты вывел эту мягко говоря фигню?
Сам придумал? Книжечек умненьких начитался. :))) Это проходит, когда сам думать начнешь.


 
Суслик ©   (2004-09-06 18:23) [135]

Удалено модератором


 
Игорь Шевченко ©   (2004-09-06 18:25) [136]

Суслик ©   (06.09.04 18:22) [134]


> откуда ты вывел эту мягко говоря фигню?
> Сам придумал? Книжечек умненьких начитался. :))) Это проходит,
> когда сам думать начнешь.


Дима, прежде чем ламерить, изучи матчасть.


 
Verg ©   (2004-09-06 18:28) [137]

Да уж, колбасит что-то не по-детски.
А вы с тупого конца не пробовали? ..ну,.. в смысле яйца бить?


 
Суслик ©   (2004-09-06 18:29) [138]


> Игорь Шевченко ©   (06.09.04 18:25) [136]

Быстро работаешь (135).

Игорь. Понятие интерфейса меняется от одной объектной нотации к другой. Как минимум я видел два. В дельфи есть реализация ключевого слова interface. Утверждение многоуважаемого Дмитрия:
"Отсюда первое следствие: время жизни интерфейса не совпадает со временем жизни объекта" не соответствует семантике ключевого слова interface. Мне удивительно с каких таких позиций ты утверждаешь обратное? Уверен, что не с тех, которые ты обозначил в [136] в отношении меня. Тогда с каких?


 
Суслик ©   (2004-09-06 18:30) [139]


> Verg ©   (06.09.04 18:28) [137]

согласен, съезд на личности тянет.

Ты заметь - кто начала употреблять слова:
1 ламер
2 чушь
3 недостаток мышления


 
GrayFace ©   (2004-09-06 18:37) [140]

Ермак ©   (05.09.04 17:35) [10]
Преимуществ языка C (но не С++!) по сравнению с Паскаль сейчас нет вообще.

Как бы не так. Одни { } вместо begin end чего стоят. А еще хороший for, еще a:=?b:c:d; т.е. болбшие удобства. А как в паскале указатели сделаны - это же ужас!
Скорость +-15% уже давно не является критерием для высокоуровневого программирования.
Еще как является, но реально, ИМХО, там +-5% от силы.
Поэтому писать средний прикладной проект на Дельфи лучше всего.
Не по этому. Все дело в возможностях.

Игорь Шевченко ©   (05.09.04 17:42) [11]
На самом деле, скорее всего, наибольшее количество программ написано на Basic"е или на Cobol"e.

А что такое Cabol? На Basic - это да. Только треть программ на Basic"е - это рисоваание машинки и т.п(возможно даже едущей), другая треть - вычисление факториала и т.п., а третья - это проги для Емахи и т.д.

начинающий ©   (05.09.04 17:46) [12]
Так же было сказано, что ни одна приличная фирма не станет набирать программистов со знанием Дельфи

Просто чушь.

Игорь Шевченко ©   (05.09.04 18:05) [15]
Мой совет, смени преподавателя, если возможно. Потому что ламер не сможет научить чему-то.
Не все самодуры - ламеры, но самодур тоже многому не научит.

Юрий Зотов ©   (05.09.04 20:36) [20]
Нееет. Нормальный препод скорее бы сказал так: "Такой-то код превращается в такой-то ассемблерный код", либо "То-то код оптимизируется хуже", либо "с объектами работа медленнее", но
a) Зачем даказывать все, что говоришь - спросят - докажешь.
b) Препод мог прочесть статью уважаемого им человека, не запомнив примеры
c) Ученик может не знать ни асма, ни объектов

Мюмзик в мове   (06.09.04 8:55) [24]
у Visual С++ есть будущее, пока есть будущее у Windows

Думаешь, заката Visual C++ мы не застаним? Или думаешь, что Windows вот-вот уйдет? Я думаю, что Visual C++ еще лет 10-20 прожевет, а Windows - гораздо дольше. Хотя, Microsoft, может быть, сменит название Windows...

Ермак ©   (05.09.04 17:49) [13]
Хороший программист должен знать хотя бы два языка. Дельфи и Си++ - идеальное сочетание.

Я знаю Delphi и Pascal :) Хотя еще чуть-чуть Асм, Java и сишный синтаксис. А Basic уже не знаю.

Rem   (06.09.04 11:11) [29]
[10] >>огромное преимущество С++ - возможности проектирования ООП
А Object Pascal что, инвалид в этом?


Именно инвалид. Интерфейсы - полезная штука ,а в Delphi  - это геморрой тот еще, особенно то, что по интерфейсу не возможно узнать объект (могу ошибаться). +Переопределение операций.
Это абсолютно ИМХО.

PVOzerski ©   (06.09.04 11:30) [36]
LOL

Игорь Шевченко ©   (06.09.04 11:48) [41]
У каждого языка свои возможности. Ну и что ?

Думкин ©   (06.09.04 11:57) [44]
Субъективное мнение имеет один недостаток - оно может оказаться не объективным.


Извините, но это чистая демогогия.

wicked ©   (06.09.04 12:54) [61]
но здесь сравнивать пытаются object pascal и c++ - это не pascal и c...

Как я понимаю, Delphi - это object pascal + оболочка + VCL т.д. Здесь сравнивают именно Дельфи и C++, а сам Object Pascal - ИМХО, жалкое подобие языка C++.

lipskiy ©   (06.09.04 12:59) [63]
Выходит что оба языка в итоге развились к состоянию, способному решать одни и те же типы задач? Не так ли?

См. Ермак [60] - это одно из немногих отличий областей применения.

jack128 ©   (06.09.04 11:38) [39] - нельзя верить хотя бы по тому, что это опубликованно на сайте со словом "hack" в названии. Как подсказывает мой скромный опыт, на сахтах по хаку часто бывают завирусованные программы, очень часто всплывающие окна, а уж о достоверности информации и говорить не чего. А жаль.

Акуличев Дмитрий   (06.09.04 13:28) [69]
Нэймспейсы -- это не поддержка (тем более -- ха-ха! -- полная) модульности, это даже не её имитация. Это ещё один костыль при её (модульности) полном отсутсвии.
А хоть один аргумент в защиту своих слов?

Romkin ©   (06.09.04 14:29) [78]
И никому в голову не приходило ее хаять или сравнивать с VB или VC ;)

Ну с VB сравнивать - это кощунство.
C# :) К этому идет: простой язык, многое, очень многое взявший от Паскаля.
Например?
Romkin ©   (06.09.04 14:33) [79]
Если что-то, что нельзя назвать множественным наследованием, позволяет тожесамо, что и это самое множественное наследование... И, кстати, прозрачнее :)

И, кстати, геморройнее. :o)

Суслик ©   (06.09.04 14:33) [80]
Да прав ты, кто с тобой спорит.

Я. И я считаю, что он не прав.

Акуличев Дмитрий   (06.09.04 15:15) [89]
Интерфейсы -- это не имитация множественного наследования. Это самостоятельная, весьма прозрачная и плодотворная идея.

Хоть в чем-то ты прав.


 
Игорь Шевченко ©   (2004-09-06 18:40) [141]

GrayFace ©   (06.09.04 18:37) [140]


> А как в паскале указатели сделаны - это же ужас!


"Видел я код этого ворда - кто ж так пишет" (с)

Что именно ужасного в указателях в паскале ?


 
Verg ©   (2004-09-06 18:52) [142]

"А вы все еще не пробовали сделать серьезный проект на ADA?" (C) Один умолишенный из госпиталя МО США.


 
Акуличев Дмитрий   (2004-09-06 18:57) [143]

Удалено модератором


 
Sergey Kaminski ©   (2004-09-06 19:04) [144]

^^^^^
:)
Теперь я знаю, через какой TInterface реализуется DiamondShark


 
Verg ©   (2004-09-06 19:05) [145]

Брэк!!!

Вот сколько я на своей памяти такого сорта споров помню, все они заканчивались примерно одночленно...
:)))... грязной руганью...


 
Agent13 ©   (2004-09-06 19:05) [146]


> "А вы все еще не пробовали сделать серьезный проект на ADA?"

...
Тогда мы идём к вам??? :)


 
Ермак ©   (2004-09-06 19:09) [147]

>>Григорьев Антон ©   (06.09.04 16:51) [118]
>>Кстати, этот спор - хорошая иллюстрация к идеям Вирта. Он всю >>жизнь создавал языки, которые вынуждают сначала как можно >>лучше продумать проект, а потом уж садиться за клавиатуру....

Вполне согласен. А вот про Оберон можно чуть подробнее? Що це такэ и с чем его ядят?


 
Акуличев Дмитрий   (2004-09-06 19:17) [148]


> GrayFace ©   (06.09.04 18:37) [140]


>> Нэймспейсы -- это не поддержка (тем более -- ха-ха! -- полная)
>> модульности, это даже не её имитация. Это ещё один костыль
>> при её (модульности) полном отсутсвии.

> А хоть один аргумент в защиту своих слов?

Во-первых, ответ уже содержится в этой ветке, во-вторых, я предлагал словарик почитать.

Модуль -- единица инкапсуляции. Нэймспейс -- нет.


> Именно инвалид. Интерфейсы - полезная штука ,а в Delphi
>  - это геморрой тот еще, особенно то, что по интерфейсу
> не возможно узнать объект (могу ошибаться). +Переопределение
> операций.
> Это абсолютно ИМХО.

Это абсолютно кю.
Геморрой начинается там, где кончается понимание.

А вот переопределение операций -- действительно геморрой.


 
Суслик ©   (2004-09-06 19:22) [149]

Удалено модератором


 
Суслик ©   (2004-09-06 19:23) [150]


> Sergey Kaminski ©   (06.09.04 19:04) [144]

А может это DimondShark и есть?


 
Суслик ©   (2004-09-06 19:24) [151]

Удалено модератором


 
Ермак ©   (2004-09-06 19:25) [152]

>> А вот переопределение операций -- действительно геморрой.

Ой ли? Никто не заставляет человека это использовать, но в некоторых случаях это очень удобно. Тогда в Дельфи, например, тип PChar и любой другой, написанный уже вами, а не Борланд,мог бы иметь семантику такую же, как и String, и достаточно было бы заменить Type string на Type MyString чтобы вся программа начала работать со строками другого формата. А уж кем эти строки реализованы ей бы было глубоко параллельно. Это, конечно, не очень хороший пример, но суть ясна...


 
Суслик ©   (2004-09-06 19:26) [153]

Удалено модератором


 
Ермак ©   (2004-09-06 19:29) [154]

Удалено модератором


 
Суслик ©   (2004-09-06 19:29) [155]

Удалено модератором


 
Ермак ©   (2004-09-06 19:31) [156]

Народ, а все таки: ЧТО ТАКОЕ ОБЕРОН? А то скажет кто-нибудь умное слово, а чтоб объяснить дураку, так это нет!


 
Суслик ©   (2004-09-06 19:32) [157]


> Ермак ©   (06.09.04 19:29) [154]

Понимешь ли в чем дело...

Люли прочтя много книг по ООП начинаю считать себя очень умными. Скорее всего так и есть (даже точно так и есть), но они совершенно перестают слушать чужое мнение - фигли я столько читал и думал (и, возможно, учил наиузусть), чтобы принимать чужое мнение.

Само по себе это явление неискоренимо - образованные не слушают образовывающихся. Это не только в прогрммировании, это везде :(


 
Акуличев Дмитрий   (2004-09-06 19:33) [158]


> Ермак ©   (06.09.04 19:25) [152]

Дело в том, что переопределённая операция может прийти со стороны (вспомним, что собирается у нас программа фактически как один большой исходник). И вот тут начинаются чудеса, когда при включении какого-то левого .h вруг меняется семантика уже написанного (причём, возможно, что и не твоего, а опять же стороннего!) кода.

Сравнение с совместимостью разных типов строк не совсем корректно. Эти операции являются частью спецификации языка, они описаны, и они не меняются со стороны.


 
Суслик ©   (2004-09-06 19:35) [159]

Удалено модератором


 
Акуличев Дмитрий   (2004-09-06 19:40) [160]


> Ермак ©   (06.09.04 19:31) [156]
> Народ, а все таки: ЧТО ТАКОЕ ОБЕРОН?


http://www.oberon.ethz.ch/



Страницы: 1 2 3 4 5 6 7 8 9 
10 11 12 13 14 15 вся ветка

Текущий архив: 2004.10.03;
Скачать: CL | DM;

Наверх




Память: 0.85 MB
Время: 0.071 c
1-1095673883
Iconka
2004-09-20 13:51
2004.10.03
Drag&Drop


14-1095319296
BiN
2004-09-16 11:21
2004.10.03
Смех да и только (ну цинник я, цинник)


8-1087894955
Borealis
2004-06-22 13:02
2004.10.03
Изображения ключевых кадров из авишки (RIFF_AVI)


4-1093055871
DelphiN!
2004-08-21 06:37
2004.10.03
Как получить время, не связанное с временем Windows?


6-1090999597
wHammer
2004-07-28 11:26
2004.10.03
Отправка почты