Форум: "Потрепаться";
Текущий архив: 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.095 c