-
oxffff © (05.05.08 15:51) [55]
А нафига Codegear в язык добавляет Generic-и ? Если все так просто можно сделать и без них...
-
что же ты все, сергей, на личности переходишь...
-
Alkid © Я даже боюсь сказать о том, что синтаксис можно сокрашить до. var a:variant; begin
a.sin;
-
> тимохов (05.05.08 16:02) [61]
Рад слышать. Где?
-
> oxffff © (05.05.08 16:06) [62]
Более того эту конструкцию можно даже расширить.
function abc(a:variant;funcName:string); c вызовом abc(a,'sin');
ЗЫ. Читаем справку по Delphi.
-
2oxffff: ну и что ты пытаешься доказать? что в конце концов всё спускается к машинному коду, и что реализуемо на одном turing-complete, то можно и на другом реализовать? можно. баян. лучше спроси у лисперов, как сделать статическую (или хотя бы динамическую) проверку типов без изменения интерпретатора — и будете в рассчёте.
-
И вообще все можно написать на ассемблере. Только долго.
-
> Игорь Шевченко © (05.05.08 16:02) [60] > oxffff © (05.05.08 15:51) [55] > > А нафига Codegear в язык добавляет Generic-и ? Если все > так просто можно сделать и без них...
В том то и дело. То о чем говорю я это будет динамика. Поэтому этот тип фактически является оберткой над реальным типом. Это может быть например TvarRec, TvarData , Объект, и надо подумать на чем еще построить.
Что касаемо generics. То это статика. Поэтому вызов будет проверяться в compile time. А если нацеплен constraint (а я думаю что delphi Win32 будет поддерживать концепцию .NET generics, а не С++ templates). Но честно говоря характеристики Win32 generics не известны.
-
> Ketmar © (05.05.08 16:13) [65] > 2oxffff: ну и что ты пытаешься доказать?
Где? Я только хочу сказать, что если надо, то задача решаема. И достаточно просто. И при желании. До простого синтаксиса.
[62],[64]
Кто короче?
-
> Игорь Шевченко © (05.05.08 16:02) [60] > oxffff © (05.05.08 15:51) [55] > > А нафига Codegear в язык добавляет Generic-и ? Если все > так просто можно сделать и без них...
Можно. Но не забываем что нам на всех форумах представители С++ сообщества ставят в укор. А любят они тыкать нас носом на шаблонную сортировку. И заслуженно кстати. Любая операция с динамическим анализом и преобразованием занимает время. Поэтому в скорости мы проигрываем. И пока мы пишем код для разных типов для сопоставимых результатов с С++, они уже решают другие задачи.
-
> oxffff © (05.05.08 15:48) [52] > type > TXFUNC=function (const a:TvarRec):TvarRec; > > function abc(var List:array of const;func:TXFUNC):integer; > > var i:integer; > begin > for i:=0 to length(List)-1 do LIST[i]:=func(LIST[i]); > end; > > function XSample(const a:TvarRec):TvarRec; > begin > > end; > > procedure TForm1.Button1Click(Sender: TObject); > var a:array of TVarRec; > begin > abc(A,XSample); > end;
Не компилируется abc([1,'a', 2], XSample), т.е. константный список кушать не хочет. В Лиспе с этим проблем нет. Я уж молчу о том, что чтобы правильно сформировать содержимое массива a, надо будет повозиться с полями TVarRec, что очень неудобно. Полиморфизм функции XSample тоже не так просто сделать. > oxffff © (05.05.08 15:50) [54] > Как у вас с ООП?
Видимо, очень плохо. Потому что не представляю, при чём вообще ООП, когда я хочу выполнить простые операции над типами integer, real, char и т.п. > oxffff © (05.05.08 15:51) [55] > Далее по тексту? Читали ли мы TcustomVariant? > Это кстати другое решение.
Да, читали. Но TCustomVariant - это всё-таки не элементарный тип, а обеспечивать полиморфизм на уровне простых типов Delphi не умеет. > oxffff © (05.05.08 16:06) [62] > Я даже боюсь сказать о том, что синтаксис можно сокрашить > до. > var a:variant; > begin > > a.sin;
Написал такую проверку: procedure TForm1.Button1Click(Sender: TObject);
var v:Variant;
begin
v:=0;
v.Sin(0)
end; Получил ожидаемый результат - исключение в строке с синусом. Потому что такие фокусы проходят только когда v содержит указатель на IDispatch, т.е. простые типы опять пролетают как фанера над Парижем. Ответ насчёт стандартной функции sin не засчитывается.
-
> oxffff © (05.05.08 16:28) [68] > Я только хочу сказать, что если надо, то задача решаема.
Решаема. Можно вообще написать на Delphi библиотеку - интерпретатор Лиспа и делать что-то вроде a := LispEval('(apply 'mapcar (cons 'list lst))'); Совсем короткий синтаксис получится :)
-
oxffff © (05.05.08 16:20) [67]
Мне будет крайне интересна передача классов в иерархии через TVarRec
type TFooBase = class public procedure SomeMethod (Param: TParam); virtual; end;
TFoo = class(TFooBase) ... end; TBar = class(TFoo) ... public procedure SomeMethod (Param: TParam); override; end;
То есть, при generic-ах я могу написать
type TFooList = TList<TFoobase> public ... procedure ApplySomeMethod (Param: TParam); end;
procedure TFooList.ApplySomeMethod (Param: TParam); var I: Integer; begin for I:=0 to Count-1 do Items[I].SomeMethod (Param); end;
-
> Григорьев Антон © (05.05.08 16:36) [70]
На все твои замечения ответы дам вечером.
-
> Игорь Шевченко © (05.05.08 16:42) [72]
Предлагаю назначить время вечером и я думаю все решим. Во сколько сегодня?
P.S. Шеф срочно просит написать хрень на ABAP.
-
Давно не наблюдаю AEN (02.05.08 21:46), а пост живет и здравствует. Особенно радуеи состав полемистов:) Успехов Вам в вашем творчестве.
-
> P.S. Шеф срочно просит написать хрень на ABAP.
А на ABAP как mapcar написать? :)))
-
> ПостОвый терминатор © (05.05.08 16:55) [75]
Осталось ещё участкового терминатора придумать :)
-
> Alkid © (05.05.08 17:24) [77]
Почту проверь.
-
Господа, заинтересованные! Извините еще в очередной раз. Позвольте спросить, что Вам мешает открыть соответствующую (новую) обсуждению ветку? А не флудить в ветке автора, которого ваша "переписка" похоже не интересует:(
|