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

Вниз

Д2009   Найти похожие ветки 

 
просто так   (2008-08-25 11:34) [40]

не работает typeof - на объекты имеющие vmt ругается что ее нет


 
Empleado ©   (2008-08-25 13:38) [41]

We are in the process to plan new international webinars...
http://www.embarcadero-events.eu/


 
Anatoly Podgoretsky ©   (2008-08-25 23:32) [42]

Наконец и http://www.embarcadero.com/news/press_releases/delphicppbuilder.html проснулась, выпустила пресс релиз, принимаются предварительные заказы.


 
Тимохов   (2008-08-26 00:15) [43]

Я сам не видел сабж (хотя вроде есть возможность ставить - к моему стыду я так и не принял участие в бете :((( ).

Но вот полезно почитать:
1. Манагер Ник Ходжес пишет http://blogs.codegear.com/nickhodges/2008/08/25/39111
2. Теоретик Дельфи Ален Баер: http://blogs.codegear.com/abauer. Там есть все ответы про уникод и про все остальное. Очень толково, только нужно временем запастись. Т.е. этот товарищь - тот, кто придумывает язык Дельфи. Ему можно верить.


 
ZeroDivide ©   (2008-08-26 00:38) [44]

Заказы принимаются, только не понятно за что. Скачать ничего нельзя. Прайс дифференцированный, для европейцев в 1.5 раза дороже (т.к. в евро), чем для америкосов. Для русских - не озвучено.


 
Тимохов   (2008-08-26 01:21) [45]

Я тут жутко был занят своим проектом. Поэтому не следил за новостями Дельфи последние полгода. Сейчас же почитал Алена Байера (http://blogs.codegear.com/abauer).

Вот мое мнение.
Всё текущее поведение Дельфи должно сопровождаться:
а) Термоядерной ШТАТНОЙ докой (т.е. классным описанием, а не книгами за деньги от приближенных к разработчику авторов).
б) Эта ШТАТНАЯ дока должна соответсвовать поведению Дельфи :)

Иначе во всем этом разобраться будет не просто... И не имхо.


 
Германн ©   (2008-08-26 02:05) [46]


> Тимохов   (26.08.08 01:21) [45]
>
> Я тут жутко был занят своим проектом. Поэтому не следил
> за новостями Дельфи последние полгода. Сейчас же почитал
> Алена Байера (http://blogs.codegear.com/abauer).
>
> Вот мое мнение.
> Всё текущее поведение Дельфи должно сопровождаться:
> а) Термоядерной ШТАТНОЙ докой (т.е. классным описанием,
> а не книгами за деньги от приближенных к разработчику авторов).
>
> б) Эта ШТАТНАЯ дока должна соответсвовать поведению Дельфи
> :)
>
> Иначе во всем этом разобраться будет не просто... И не имхо.
>
>

Лучше я пока ограничусь ТП6 и Д4, Д6.
А там посмотрим.


 
Тимохов   (2008-08-26 02:13) [47]

2Германн

Ну в общем верно. Я бы тоже не слезал ни с шестерки, ни с семерки.

Если честно, то меня ввели в заблуждение и сказали, что Д7 более не лицензируеца года 2-3 назад. Поэтому я купил в свое время Д2005, а там пошло-пехало. Вот и до 2009 дожил. Правда, пока не заказал...

ЗЫ Знаете ли вы, но всемирноизвестный установщик inno setup до сих пор для своей компиляции использует ДЕЛЬФИ ДВААААА!!! При этом программа установки работает (почти) корректно и на Висте... Видимо нас дурят немного (я не КодГир имею в виду, а вообще всю братию, кто зарабатывает на разработке софта - купи новую версию, а то старая безбожно устарела...).


 
Tricky   (2008-08-26 02:23) [48]

Никто нас не дурят. Хошь бери хошь нет. Больше компонентов, новые фичи, новый и более удобный редактор. Исправленные баги компилятора и IDE.
Я вот собираюсь переходить на тибурон только из за того что там юникод в VCL. Хотя давно уже юзаю KOL MCK - там изначально юникод. Но есть пару проектов на VCL.


 
Tricky   (2008-08-26 02:24) [49]

А так юзаю Delphi 7 уже давным давно.


 
Tricky   (2008-08-26 02:25) [50]

Если Object убрали то это конечно плохо. KOL построен на нем.


 
Германн ©   (2008-08-26 02:26) [51]


> ЗЫ Знаете ли вы, но всемирноизвестный установщик inno setup
> до сих пор для своей компиляции использует ДЕЛЬФИ ДВААААА!
> !!

Знаем. И это автор сам говорит. Но зачем так кричать?


 
Тимохов   (2008-08-26 03:14) [52]


> Tricky   (26.08.08 02:23) [48]
> Никто нас не дурят.


Да шучу я :)
Не зря MBA есть по информационным технологиям - все это бизнес.


 
Eraser ©   (2008-08-26 03:16) [53]

> [47] Тимохов   (26.08.08 02:13)


> Видимо нас дурят немного

не дурят, в версиях до 2007 приходилось всю логику работы с формами изрядно потрошить для корректной работы с вистой, а сейчас все автоматически.


 
Тимохов   (2008-08-26 03:27) [54]


> не дурят, в версиях до 2007 приходилось всю логику работы
> с формами изрядно потрошить для корректной работы с вистой,
>  а сейчас все автоматически.


В чем это конкретно выражалось?


 
Eraser ©   (2008-08-26 03:31) [55]

> [54] Тимохов   (26.08.08 03:27)

хотя бы в такой мелочи, как отображение содержимого окна при alt + tab. Так же, начиная с Д2007 стало намного проще делать приложения, в которых несколько окон могут размещаться на такс-баре, до этого чтобы все конкретно работало приходилось использовать парочку очень нетривиальных хаков.
про поддержку Aero-Glass и прочие чисто вистовские навороты вообще молчу )


 
ketmar ©   (2008-08-26 07:45) [56]

>[55] Eraser © (2008-08-26 03:31:00)
m$ как всегда напилила фигни, которая со старым не совместима, а виноваты оказались разработчики систем программирования, да.

---
Understanding is not required. Only obedience.


 
Anatoly Podgoretsky ©   (2008-08-26 08:59) [57]

> ZeroDivide  (26.08.2008 0:38:44)  [44]

Для русских в 24 раза дешевле, так как в рублях.


 
Anatoly Podgoretsky ©   (2008-08-26 08:59) [58]

> Тимохов  (26.08.2008 1:21:45)  [45]

Раскатал губу.


 
Anatoly Podgoretsky ©   (2008-08-26 09:01) [59]

> Германн  (26.08.2008 2:05:46)  [46]

> Лучше я пока ограничусь ТП6 и Д4, Д6.

Видимо тебя задачи не ограничивают, а я вот вынужден был проверить все версии начиная с Д5 по Д2006 - только последнея подошла, серьезные ошибки в АДО, просто непонятно как такие ошибки можно было сделать и еще интереснее, как их было можно не заметить. Вроде еще не все ошибки исправлены, но меня уже устраивает.


 
Anatoly Podgoretsky ©   (2008-08-26 09:03) [60]

> Тимохов  (26.08.2008 2:13:47)  [47]

Тебя не обманывали, это в России сбывали остатки.
Правда потом все равно обманули, глядя на Россию Борланд напечатал дополнительный тираж.


 
Dennis I. Komarov ©   (2008-08-26 10:05) [61]

После того как выйдет SP1 (или 2) можно будет глянуть :)
поэтому пока посидим на 7, Турбо...


 
Eraser ©   (2008-08-26 14:41) [62]

> [56] ketmar ©   (26.08.08 07:45)

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


 
tesseract ©   (2008-08-26 14:57) [63]

Анонимные методы ддо конца не понял - и так ведь работало с процедурными типами. Правда объектные / необъектные различались.


 
Tricky   (2008-08-26 17:56) [64]


> Анонимные методы ддо конца не понял - и так ведь работало
> с процедурными типами


Действительно кто то может дать толковое объяснение, чем отличаются?


 
ketmar ©   (2008-08-26 18:50) [65]

>[64] Tricky (2008-08-26 17:56:00)
не надо заводить идентификатор для каждого чиха. ну, и я так понимаю, что можно будет делать такое:
Sort (a, b, function (i0, i1: xxx) begin return i0<i1; end);
ну, надеюсь, что можно. %-)

---
Understanding is not required. Only obedience.


 
Servy ©   (2008-08-26 21:44) [66]

> не надо заводить идентификатор для каждого чиха. ну, и я
> так понимаю, что можно будет делать такое:
> Sort (a, b, function (i0, i1: xxx) begin return i0<i1; end)
> ;
> ну, надеюсь, что можно. %-)


Скачал преальфу, действительно можно, правда без return :)

type
 TMyFunc = reference to function(): string;
...
procedure TForm4.Button1Click(Sender: TObject);
begin
 CallMe(function (): string begin Result := "hello"; end)
end;

procedure TForm4.CallMe(F: TMyFunc);
begin
 ShowMessage(F());
end;


В общем, впечатления от среды положительные, хоть я и далеко не грубоко профессиональный разработчик. Сделали удобное переключение Debug/Release и возможность ставить опции проекта для обоих режимов сразу. Правда, подсказки по коду иногда порождают ошибки (довольно часто ему не нравится Result, особенно если его использовать как переменную цикла), но это спишем на недоальфу.

С generic"ами вот только непонятно. Дабы опробовать этот инструмент, хотел написать самую очевидную вещь - список.

 TList<T> = class
 {...}
 private
   FItems: array of T;
   {...}
 public
   {...}
   function IndexOf(Item: T): Integer;
   {...}
 end;

{...}

function TList<T>.IndexOf(Item: T): Integer;
var
 LCount: Integer;
begin
 LCount := FCount;
 for Result := 0 to LCount - 1 do
   if FItems[Result] = Item then
     Exit;
 Result := -1;
end;


Вот тут на строчке с if"ом я и был послан:
[Pascal Error] uGenerics.pas(213): E2015 Operator not applicable to this operand type

То есть, оператор "=" для типа T не определен :(. Как красиво обойти данный неприятный казус я пока не придумал. Можно конечно заставить использующего класс вручать нам функцию для сравнения двух элементов списка (благо теперь есть эти анонимные методы или как их правильно называть), но очень не хотелось бы его обременять такой ерундой, так как для всех простых типов "=" вполне подойдет (а для record"ов его можно определить, жаль для классов вне дот нета все еще нельзя), и вроде логично было бы его использовать "по умолчанию". Если у кого-нибудь есть идеи, как красиво разрешить данную ситуацию, буду рад услышать.

Эхх, еще бы доку нормальную по всем новым возможностям. Пока несбыточные мечты :).


 
oxffff ©   (2008-08-26 22:30) [67]

Посмотри реализацию их TList<T>.
Подключи generics.Collections.
Опиши результат здесь.


 
oxffff ©   (2008-08-26 23:01) [68]

Хотя http://www.xakep.ru/post/44864/default.asp?print=true

+ Еще всплывают новые факты например запрещено использовать
шаблоны в обычных процедурах и функциях.

Я бы им поставил два с минусом за реализацию шаблонов. Передрать идеалогию с .NET. Что своих мозгов что ли нет!
Запрет на использование оператора при работе с параметризованным параметром вызван ограничением IL набора, у которого инструкция ceq и ей подобные ограничены только определенными типами.
int, F, & и O.
оно и понятно поскольку неизвестно какую обертку оператора подставлять для сравнения типа. Например как сравнивать value типы и им подобные.
Конечно есть способы, но они выбрали такой способ.

Но здесь нет байкода. Все известно во время компиляции.

Если это так. То просто огромный НЕЗАЧЕТ.
Уж взяли бы идеалогию template из С++.

Я в шоке и расстроен.

НО здесь нет


 
Servy ©   (2008-08-26 23:22) [69]

Посмотрел.

У них используется следующий интерфейс:

IComparer<T> = interface
 function Compare(const Left, Right: T): Integer;
end;

 
 Соответственно, при создании списка вы можете передать ему в конструкторе этот IComparer<T>, а можете и не передать. Если этот сравниватель не указан, то берется умолчательный:
 
if FComparer = nil then
 FComparer := TComparer<T>.Default;

   
В этом самом Default вся woodoo magic и заключается.
   
class function TComparer<T>.Default: IComparer<T>;
begin
 Result := IComparer<T>(_LookupVtableInfo(giComparer, TypeInfo(T), SizeOf(T)));
end;

{...}

type
 TDefaultGenericInterface = (giComparer, giEqualityComparer);  
 
{...}

function _LookupVtableInfo(intf: TDefaultGenericInterface; info: PTypeInfo; size: Integer): Pointer;
var
 pinfo: PVtableInfo;
begin
 if info <> nil then
 begin
   pinfo := @VtableInfo[intf, info^.Kind];
   Result := pinfo^.Data;
   if ifSelector in pinfo^.Flags then
     Result := TTypeInfoSelector(Result)(info, size);
   if ifVariableSize in pinfo^.Flags then
     Result := MakeInstance(Result, size);
 end
 else
 begin
   case intf of
     giComparer: Result := Comparer_Selector_Binary(info, size);
     giEqualityComparer: Result := EqualityComparer_Selector_Binary(info, size);
   else
     System.Error(reRangeError);
     Result := nil;
   end;
 end;
end;

Чтобы пост влез в разумные рамки, я не стал здесь приводить всех используемых типов и констант, их тут целый ворох. В кратце получается так - для неизвестного типа в Generic"е можно вызвать TypeInfo(T) и получить о нем информацию. Далее, проанализировав эту информацию, можно для каждого типа написать свой сравниватель, что там и сделано. Если еще посчелкать с Ctrl+Click"ом, то можно найти и сами функции сравнения (указатели на них закопаны глубоко в константном массиве VtableInfo), вот например:

function Compare_U1(Inst: Pointer; const Left, Right: Byte): Integer;
begin
 if Left < Right then
   Result := -1
 else if Left > Right then
   Result := 1
 else
   Result := 0;
end;

function Compare_U2(Inst: Pointer; const Left, Right: Word): Integer;
begin
 if Left < Right then
   Result := -1
 else if Left > Right then
   Result := 1
 else
   Result := 0;
end;


Резюме такое: Code Gear это уже за нас написал, и хотя вариант с нормальной поддержкой оператора "=" для классов, и его использования в этой ситуации по мне был бы ничуть не хуже, я вполне удовлетворен. В моем случае "самопального" TList, я должен просто вызвать уже написанный TComparer<T>.Default, и не изобретать страшных велосипедов, а лучше дать возможность пользователю класса этот самый IComparer указать самому, если он того возжелает.


 
oxffff ©   (2008-08-26 23:35) [70]


> В этом самом Default вся woodoo magic и заключается.


Да это их любимые выкрутасы. Но зачем?
Я так понимаю, они хотят унифицировать x86 код для любых object типов.
То есть фактически будет использован тот же код, если параметризованный параметр будет object типа. А различный код для value типов. Все как в .NET.

Это что же получается для того, чтобы сравнить элементы они во первых должны быть одного и того же типа.
А во вторых, чтобы сделать такую ничтожную операцию как сравнение нужно вызвать внешний код через таблицу VMT интерфейса, вместо того чтобы сделать просто inline кода сравнения для известного типа.
Это, чтобы пробежаться по коллекции

Поэтому от сюда правила. Следуют избегать их неэффективные выкрутасы. А делать прямое сравнение. Например

List<T>.Items[5]=5, что будет эффективней.

Понятно? :)


 
oxffff ©   (2008-08-26 23:37) [71]

Теперь понятно зачем они ввели виртуальный метод в Tobject под названием equals.


 
oxffff ©   (2008-08-26 23:42) [72]

Servy ©   (26.08.08 23:22) [69]

Посмотри пожалуйста перечисление с giComparer, такие они еще туда операции вставили?

_LookupVtableInfo такого небыло раньше в system.pas

Что же смотрю интроспекция расширяется, значит будет что расковырять в ближайшее время(хоть это радует).


 
Servy ©   (2008-08-26 23:44) [73]

Кстати еще одна мелкая но приятная фишка - подсказки (в случае, если они не разваливаются с ощибками ^_^) при использовании generic класса сразу показывают подставляемый тип, что довольно удобно (в студии от майкрософта, где как вы написали IndexOf(Item: T) так и увидите свое T в IntelSence). Вот скриншот, а то непонятно наверное :)

http://www.valar.ru/upload/jpg/0808/1219776625_screen.htm


> Еще всплывают новые факты например запрещено использовать
>
> шаблоны в обычных процедурах и функциях.


Ну, может и нельзя, мне не попадалось таких по крайней мере. Однако, никто не может запретить использовать то же решение, что и сами Code Gear использовали со своим Compare"ом:

TFuncWrapper<T> = class
 class function MyFunc(Param: T);
end;

И использовать:

TFuncWrapper<string>.MyFunc("Привет!");

Не слишком коротко, да и класс нужно объявлять, но меня на данный момент вполне устроит, тем более широкого применения функциям с template"ами я не вижу.

Ах да, ну и Char теперь действительно 2 байта, чудо свершилось :).


 
Servy ©   (2008-08-26 23:50) [74]

> _LookupVtableInfo такого небыло раньше в system.pas

Оно в Generics.Defaults


> Посмотри пожалуйста перечисление с giComparer, такие они
> еще туда операции вставили?


Вот вам самые эти занимательные модули (Generics.Collections и Generics.Defaults)
http://slil.ru/26091378 (12 Кб).

Смотрите на здоровье, потому как ваш вопрос был мною непонят :)


 
oxffff ©   (2008-08-26 23:51) [75]


> Servy ©   (26.08.08 23:44) [73]
> Кстати еще одна мелкая но приятная фишка - подсказки


Я думаю это так и должно быть. Что еще можно по другому? :)


 
oxffff ©   (2008-08-26 23:53) [76]


> Servy ©   (26.08.08 23:50) [74]


Спасибо. Я скачал prerelease но требует от меня какую то лиценцию на Ribbon controls, вообщем зашел на microsoft, там им нужно что то отправить чтобы они тебе прислали лицензию. Вообщем я послал их ...
Есть способ проще?
Ты откуда слил?


 
Servy ©   (2008-08-27 00:00) [77]


> Ты откуда слил?

С упомянутого здесь торрентс ру.


 
oxffff ©   (2008-08-27 00:04) [78]

TDefaultGenericInterface = (giComparer, giEqualityComparer);

Направление их мысли мне понятно. Вычленение набора операций в отдельную сущность. Хотя их де факто две giComparer, giEqualityComparer.

Теперь вопрос на один миллион долларов как быть с остальными операторами + - и т.д.  :))))))))))))


 
Servy ©   (2008-08-27 00:21) [79]

> Я думаю это так и должно быть. Что еще можно по другому?
> :)


А в Microsoft Visual Studio, с которой мне приходиться иметь дело на работе, не так. Все-таки есть разница между скрином в [73] и

http://www.valar.ru/upload/jpg/0808/1219778614_screen2.htm  (аналогичная подсказка в MVS).

Хотя, все это само собой мелочи.


> Теперь вопрос на один миллион долларов как быть с остальными
> операторами + - и т.д.  :))))))))))))


Видимо, нам придется обойтись без оных. Правда, темплейты явно теряют часть своей привлекательности... Но хоть теперь есть готовые и (я надеюсь) отлаженные list и map (тут они его вроде dictionary назвали), в которые можно без зазрения совести пихать record"ы, и не мучиться с созданием/убийством обекътов там, где они не нужны. А также без необходимости тип приводить руками при каждом обращении, либо наследника от TList писать для каждого чиха. Нет, все таки наш арсенал немного возрос, а скорость компиляции вроде не пострадала, что ни может не радовать.


 
Eraser ©   (2008-08-27 02:58) [80]

> Нет, все таки наш арсенал немного возрос, а скорость компиляции
> вроде не пострадала, что ни может не радовать

да уж, не сказал бы, что в C# часто приходилось пользоваться какими-то сложнейшими конструкциями с шаблонами, List<T> все и заканчивалось обычно, но как этого не хватало в Делфи!



Страницы: 1 2 3 4 5 6 вся ветка

Форум: "Прочее";
Текущий архив: 2008.11.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.64 MB
Время: 0.015 c
2-1224746120
JustI
2008-10-23 11:15
2008.11.30
пункт меню в DELPHI7 IDE


9-1175880657
GLProg
2007-04-06 21:30
2008.11.30
Ошибка в GL программе


15-1222494767
TUser
2008-09-27 09:52
2008.11.30
Макс, с днем тебя!!


15-1222826765
Slider007
2008-10-01 06:06
2008.11.30
С днем рождения ! 1 октября 2008 среда


15-1222689558
^-k2-^
2008-09-29 15:59
2008.11.30
"Микрософт загибается" :)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский