Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.10.03;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.84 MB
Время: 0.085 c
1-1095187186
Destiny
2004-09-14 22:39
2004.10.03
Как выводить огромную картинку на экран.


3-1093960141
stud
2004-08-31 17:49
2004.10.03
кто работал с master view от квантума


14-1095023837
gas
2004-09-13 01:17
2004.10.03
Перетаскивание текста между программами


3-1093854995
Maxim____
2004-08-30 12:36
2004.10.03
Что такое ISAM и как оно работает?


3-1094060707
Maverick
2004-09-01 21:45
2004.10.03
ODAC





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский