• Anatoly Podgoretsky © (23.08.08 21:25) [0]
  • DVM © (23.08.08 21:45) [1]
    интересно, а эта поддержка Unicode там будет отключаемая? Т.е мало ли какие проблемы могут возникнуть в старых программах в связи с тем, что например, PChar станет PWideChar.
  • Andy BitOff © (23.08.08 21:45) [2]
    Я не понял, а пощупать-то ея можно?
  • palva © (23.08.08 21:46) [3]

    > Delphi 2009 and C++Builder 2009, on Aug. 25

    Это в каком году будет? В статье явного указания нет. Если в этом, тогда почему Delphi 2009 ? А если в будущем, то откуда такая точность?
  • DVM © (23.08.08 21:55) [4]

    > Это в каком году будет?

    через 2 дня это будет
  • Anatoly Podgoretsky © (23.08.08 22:03) [5]
    вот другая ссылка, там тоже нет года, но есть подсказка
    Embarcadero Technologies next week plans. Загадка несложная.

    http://news.yahoo.com/s/infoworld/20080821/tc_infoworld/109777
  • Anatoly Podgoretsky © (23.08.08 22:04) [6]

    > а эта поддержка Unicode там будет отключаемая?

    ReplaceAll = sring - AnsiString
  • Anatoly Podgoretsky © (23.08.08 22:05) [7]
    > DVM  (23.08.2008 21:55:04)  [4]

    В понедельник что ли?
  • Германн © (23.08.08 22:06) [8]

    > Anatoly Podgoretsky ©   (23.08.08 21:25)

    This ain't no technological breakdown
    Oh no, this is the road to hell
    (с)
  • DVM © (23.08.08 22:08) [9]

    > В понедельник что ли?

    Ну 25 августа в понедельник получается. Обещали же осенью этого года. Видать раньше успели.
  • palva © (23.08.08 22:16) [10]

    > Embarcadero Technologies next week plans. Загадка несложная.

    Уговорили. Пошел думать, какой сейчас год.
  • Anatoly Podgoretsky © (23.08.08 22:33) [11]
    > palva  (23.08.2008 22:16:10)  [10]

    Не забудь нам сообщить ответ на загадку.
  • Polevi © (23.08.08 23:23) [12]
    предсмертные судороги, пора закрывать лавочку
  • Городской Шаман (24.08.08 02:25) [13]

    > Polevi ©   (23.08.08 23:23) [12]
    >
    > предсмертные судороги, пора закрывать лавочку


    Ну если юникод введут, то с Delphi перестанут уходить. Если и еще x64-bit, то начнут возвращаться.
  • Германн © (24.08.08 02:41) [14]

    > Городской Шаман   (24.08.08 02:25) [13]
    >
    >
    > > Polevi ©   (23.08.08 23:23) [12]
    > >
    > > предсмертные судороги, пора закрывать лавочку
    >
    >
    > Ну если юникод введут, то с Delphi перестанут уходить. Если
    > и еще x64-bit, то начнут возвращаться.
    >

    Эт ты об чём?
    Или как?
  • Nic © (24.08.08 02:51) [15]
    Cофт не черствеет.
  • Городской Шаман (24.08.08 03:03) [16]

    > Германн ©   (24.08.08 02:41) [14]
    >
    > Эт ты об чём?
    > Или как?


    Это я не об здесь.
  • Eraser © (24.08.08 03:43) [17]
  • Германн © (24.08.08 03:49) [18]

    > Городской Шаман   (24.08.08 03:03) [16]
    >
    >
    > > Германн ©   (24.08.08 02:41) [14]
    > >
    > > Эт ты об чём?
    > > Или как?
    >
    >
    > Это я не об здесь.


    Ааа.
    Понял. :)
  • oxffff © (24.08.08 11:54) [19]
    Скачайте посмотрите
    DavidI’s seminar on what’s new in Delphi 2009.
    http://video.codegear.com/Tiburon/2008-08-13-WhatsNewInDelphi2009.zip

    Занимает 35МБ.
  • oxffff © (24.08.08 11:59) [20]
    Из неозвученного.

    Добавили exit с параметром.
    Еще добавили три виртуальных метода в Tobject
    GetHashCode, Еquals, ToString.
  • Городской Шаман (24.08.08 12:25) [21]

    > oxffff ©   (24.08.08 11:59) [20]
    >
    > Из неозвученного.
    >
    > Добавили exit с параметром.
    > Еще добавили три виртуальных метода в Tobject
    > GetHashCode, Еquals, ToString.


    С Java. А вообще удобно.
  • Псалтырь © (24.08.08 12:56) [22]

    > Andy BitOff ©   (23.08.08 21:45) [2]
    >
    > Я не понял, а пощупать-то ея можно?

    Уже щупают некоторые. Партнерам раздали пре-бета для тестов.
  • DVM © (24.08.08 14:43) [23]

    > скриншоты
    > http://www.xakep.ru/post/44864/default.asp

    мужик с бородой колоритный
  • ketmar © (24.08.08 17:19) [24]
    >[23] DVM © (2008-08-24 14:43:00)
    >мужик с бородой колоритный

    АП с перепоя? %-)

    ---
    All Your Base Are Belong to Us
  • Petr V. Abramov © (24.08.08 21:15) [25]

    > Ну если юникод введут, то с Delphi перестанут уходить.

    может быть. но насчет того,что новых проектов начнет больше открываться, все ж сомневаюсь.

    > Если и еще x64-bit, то начнут возвращаться.

    нафига?
  • Городской Шаман (24.08.08 22:06) [26]

    > Petr V. Abramov ©   (24.08.08 21:15) [25]
    >
    >
    > > Ну если юникод введут, то с Delphi перестанут уходить.
    >
    >
    > может быть. но насчет того,что новых проектов начнет больше
    > открываться, все ж сомневаюсь.
    >
    > > Если и еще x64-bit, то начнут возвращаться.
    >
    > нафига?


    Для работы с системоей не через задниц проход(WOW64). Сейчас в 64-битных системах программы на Delphi работают хуже чем на Wine.
  • просто так (24.08.08 22:21) [27]
    попробовал пререлиз, возникли проблемы с object`ом, незря в хелпах давно про устарение писали((
  • oxffff © (24.08.08 22:48) [28]

    > просто так   (24.08.08 22:21) [27]


    ГДЕ????????
  • oxffff © (24.08.08 22:50) [29]
    Реально есть. :)
    Нашел. Качаю
  • oxffff © (24.08.08 22:50) [30]
    Реально есть. :)
    Нашел. Качаю
  • Andy BitOff © (24.08.08 23:12) [31]
    > oxffff ©   (24.08.08 11:54) [19]

    Дык сцылочкой поделитесь.
  • просто так (24.08.08 23:14) [32]
    никакого вареза, просто нетерпеж
    на торрентс.ру уже неделю болтается
  • oxffff © (24.08.08 23:17) [33]
    google
    pre release TIBURON delphi
  • Prohodil Mimo © (25.08.08 00:12) [34]
    потом расскажете где больше глюков в 2005 или тут :о)
  • Германн © (25.08.08 00:21) [35]

    > Prohodil Mimo ©   (25.08.08 00:12) [34]
    >
    > потом расскажете где больше глюков в 2005 или тут :о)
    >

    А почему для сравнения избрал именно 2005?
  • 123-ий © (25.08.08 08:30) [36]
    на торрентс.ру выложили бету вроде
  • ZeroDivide © (25.08.08 09:17) [37]

    > on Aug. 25


    Ну и?
    Когда у америкосов понедельник начинаеться по мск времени?
  • TiBuron (25.08.08 10:07) [38]
    > Ну и?
    > Когда у америкосов понедельник начинаеться по мск времени?
    >

    А зачем мучаться?
    http://update.codegear.com/forms/AMUSCA0807BasicFormLayout
    (http://www.codegear.com/cg-videos/)

    Америкосы всё продумали, так что дружно пингуемся
  • Anatoly Podgoretsky © (25.08.08 11:05) [39]
    > ZeroDivide  (25.08.2008 9:17:37)  [37]

    Да кто же в полночь торговать будет.
  • просто так (25.08.08 11:34) [40]
    не работает typeof - на объекты имеющие vmt ругается что ее нет
  • Empleado © (25.08.08 13:38) [41]
    We are in the process to plan new international webinars...
    http://www.embarcadero-events.eu/
  • Anatoly Podgoretsky © (25.08.08 23:32) [42]
    Наконец и http://www.embarcadero.com/news/press_releases/delphicppbuilder.html проснулась, выпустила пресс релиз, принимаются предварительные заказы.
  • Тимохов (26.08.08 00:15) [43]
    Я сам не видел сабж (хотя вроде есть возможность ставить - к моему стыду я так и не принял участие в бете :((( ).

    Но вот полезно почитать:
    1. Манагер Ник Ходжес пишет http://blogs.codegear.com/nickhodges/2008/08/25/39111
    2. Теоретик Дельфи Ален Баер: http://blogs.codegear.com/abauer. Там есть все ответы про уникод и про все остальное. Очень толково, только нужно временем запастись. Т.е. этот товарищь - тот, кто придумывает язык Дельфи. Ему можно верить.
  • ZeroDivide © (26.08.08 00:38) [44]
    Заказы принимаются, только не понятно за что. Скачать ничего нельзя. Прайс дифференцированный, для европейцев в 1.5 раза дороже (т.к. в евро), чем для америкосов. Для русских - не озвучено.
  • Тимохов (26.08.08 01:21) [45]
    Я тут жутко был занят своим проектом. Поэтому не следил за новостями Дельфи последние полгода. Сейчас же почитал Алена Байера (http://blogs.codegear.com/abauer).

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

    Иначе во всем этом разобраться будет не просто... И не имхо.
  • Германн © (26.08.08 02:05) [46]

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

    Лучше я пока ограничусь ТП6 и Д4, Д6.
    А там посмотрим.
  • Тимохов (26.08.08 02:13) [47]
    2Германн

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

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

    ЗЫ Знаете ли вы, но всемирноизвестный установщик inno setup до сих пор для своей компиляции использует ДЕЛЬФИ ДВААААА!!! При этом программа установки работает (почти) корректно и на Висте... Видимо нас дурят немного (я не КодГир имею в виду, а вообще всю братию, кто зарабатывает на разработке софта - купи новую версию, а то старая безбожно устарела...).
  • Tricky (26.08.08 02:23) [48]
    Никто нас не дурят. Хошь бери хошь нет. Больше компонентов, новые фичи, новый и более удобный редактор. Исправленные баги компилятора и IDE.
    Я вот собираюсь переходить на тибурон только из за того что там юникод в VCL. Хотя давно уже юзаю KOL MCK - там изначально юникод. Но есть пару проектов на VCL.
  • Tricky (26.08.08 02:24) [49]
    А так юзаю Delphi 7 уже давным давно.
  • Tricky (26.08.08 02:25) [50]
    Если Object убрали то это конечно плохо. KOL построен на нем.
  • Германн © (26.08.08 02:26) [51]

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

    Знаем. И это автор сам говорит. Но зачем так кричать?
  • Тимохов (26.08.08 03:14) [52]

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


    Да шучу я :)
    Не зря MBA есть по информационным технологиям - все это бизнес.
  • Eraser © (26.08.08 03:16) [53]
    > [47] Тимохов   (26.08.08 02:13)


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

    не дурят, в версиях до 2007 приходилось всю логику работы с формами изрядно потрошить для корректной работы с вистой, а сейчас все автоматически.
  • Тимохов (26.08.08 03:27) [54]

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


    В чем это конкретно выражалось?
  • Eraser © (26.08.08 03:31) [55]
    > [54] Тимохов   (26.08.08 03:27)

    хотя бы в такой мелочи, как отображение содержимого окна при alt + tab. Так же, начиная с Д2007 стало намного проще делать приложения, в которых несколько окон могут размещаться на такс-баре, до этого чтобы все конкретно работало приходилось использовать парочку очень нетривиальных хаков.
    про поддержку Aero-Glass и прочие чисто вистовские навороты вообще молчу )
  • ketmar © (26.08.08 07:45) [56]
    >[55] Eraser © (2008-08-26 03:31:00)
    m$ как всегда напилила фигни, которая со старым не совместима, а виноваты оказались разработчики систем программирования, да.

    ---
    Understanding is not required. Only obedience.
  • Anatoly Podgoretsky © (26.08.08 08:59) [57]
    > ZeroDivide  (26.08.2008 0:38:44)  [44]

    Для русских в 24 раза дешевле, так как в рублях.
  • Anatoly Podgoretsky © (26.08.08 08:59) [58]
    > Тимохов  (26.08.2008 1:21:45)  [45]

    Раскатал губу.
  • Anatoly Podgoretsky © (26.08.08 09:01) [59]
    > Германн  (26.08.2008 2:05:46)  [46]

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

    Видимо тебя задачи не ограничивают, а я вот вынужден был проверить все версии начиная с Д5 по Д2006 - только последнея подошла, серьезные ошибки в АДО, просто непонятно как такие ошибки можно было сделать и еще интереснее, как их было можно не заметить. Вроде еще не все ошибки исправлены, но меня уже устраивает.
  • Anatoly Podgoretsky © (26.08.08 09:03) [60]
    > Тимохов  (26.08.2008 2:13:47)  [47]

    Тебя не обманывали, это в России сбывали остатки.
    Правда потом все равно обманули, глядя на Россию Борланд напечатал дополнительный тираж.
  • Dennis I. Komarov © (26.08.08 10:05) [61]
    После того как выйдет SP1 (или 2) можно будет глянуть :)
    поэтому пока посидим на 7, Турбо...
  • Eraser © (26.08.08 14:41) [62]
    > [56] ketmar ©   (26.08.08 07:45)

    ну это уже в порядке вещей. GUI это цветочки, куда больше проблем с другими новшествами висты.
  • tesseract © (26.08.08 14:57) [63]
    Анонимные методы ддо конца не понял - и так ведь работало с процедурными типами. Правда объектные / необъектные различались.
  • Tricky (26.08.08 17:56) [64]

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


    Действительно кто то может дать толковое объяснение, чем отличаются?
  • ketmar © (26.08.08 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 © (26.08.08 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 © (26.08.08 22:30) [67]
    Посмотри реализацию их TList<T>.
    Подключи generics.Collections.
    Опиши результат здесь.
  • oxffff © (26.08.08 23:01) [68]
    Хотя http://www.xakep.ru/post/44864/default.asp?print=true

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

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

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

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

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

    НО здесь нет
  • Servy © (26.08.08 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 © (26.08.08 23:35) [70]

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


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

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

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

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

    Понятно? :)
  • oxffff © (26.08.08 23:37) [71]
    Теперь понятно зачем они ввели виртуальный метод в Tobject под названием equals.
  • oxffff © (26.08.08 23:42) [72]
    Servy ©   (26.08.08 23:22) [69]

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

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

    Что же смотрю интроспекция расширяется, значит будет что расковырять в ближайшее время(хоть это радует).
  • Servy © (26.08.08 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 © (26.08.08 23:50) [74]
    > _LookupVtableInfo такого небыло раньше в system.pas

    Оно в Generics.Defaults


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


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

    Смотрите на здоровье, потому как ваш вопрос был мною непонят :)
  • oxffff © (26.08.08 23:51) [75]

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


    Я думаю это так и должно быть. Что еще можно по другому? :)
  • oxffff © (26.08.08 23:53) [76]

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


    Спасибо. Я скачал prerelease но требует от меня какую то лиценцию на Ribbon controls, вообщем зашел на microsoft, там им нужно что то отправить чтобы они тебе прислали лицензию. Вообщем я послал их ...
    Есть способ проще?
    Ты откуда слил?
  • Servy © (27.08.08 00:00) [77]

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

    С упомянутого здесь торрентс ру.
  • oxffff © (27.08.08 00:04) [78]
    TDefaultGenericInterface = (giComparer, giEqualityComparer);

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

    Теперь вопрос на один миллион долларов как быть с остальными операторами + - и т.д.  :))))))))))))
  • Servy © (27.08.08 00:21) [79]
    > Я думаю это так и должно быть. Что еще можно по другому?
    > :)


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

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

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


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


    Видимо, нам придется обойтись без оных. Правда, темплейты явно теряют часть своей привлекательности... Но хоть теперь есть готовые и (я надеюсь) отлаженные list и map (тут они его вроде dictionary назвали), в которые можно без зазрения совести пихать record'ы, и не мучиться с созданием/убийством обекътов там, где они не нужны. А также без необходимости тип приводить руками при каждом обращении, либо наследника от TList писать для каждого чиха. Нет, все таки наш арсенал немного возрос, а скорость компиляции вроде не пострадала, что ни может не радовать.
  • Eraser © (27.08.08 02:58) [80]
    > Нет, все таки наш арсенал немного возрос, а скорость компиляции
    > вроде не пострадала, что ни может не радовать

    да уж, не сказал бы, что в C# часто приходилось пользоваться какими-то сложнейшими конструкциями с шаблонами, List<T> все и заканчивалось обычно, но как этого не хватало в Делфи!
  • ketmar © (27.08.08 07:49) [81]
    >[66] Servy © (2008-08-26 21:44:00)
    >правда без return :)

    угу. пардон, недоперенастроил мозг с сей. %-)

    ---
    All Your Base Are Belong to Us
  • oxffff © (27.08.08 08:21) [82]

    > Нет, все таки наш арсенал немного возрос,


    Дык, я не спорю. Это хорошо. Только как то немножко противно, что все делается с оглядкой на C#.

    P.S. Я почемуто стал обращать внимание на D и Oxygene.
  • ZeroDivide © (27.08.08 11:22) [83]

    >
    > P.S. Я почемуто стал обращать внимание на D и Oxygene.


    Вообще RemObjects рулит, я давно уже юзаю PS и доволен им. ИМХО, другие продукты этой компании не должны быть хуже по качеству.

    По описанию и прайсу Oxygene уделывает Delphi. А вот как на счет применения в реальных боевых условиях? Юзал его?
  • jack128_ (27.08.08 12:58) [84]

    > и прайсу Oxygene уделывает Delphi.

    по прайсу по подробнее?  я так понял, что в качестве IDE используется MS Visual Studio ? То есть её тоже нуно покупать???
  • oxffff © (27.08.08 20:12) [85]

    > ZeroDivide ©   (27.08.08 11:22) [83]


    Я пока больше теоретик.
  • SpellCaster (28.08.08 15:54) [86]
    Вот и я добрался до пощупывания Акулы (если кому надо, весь релиз лежит на оф. сайте, ссылки и лекарство в разделе Варезник ру-борда).
    Что могу сказать, обновления радуют, а вот реализация не очень... все новые фичи какие-то недоделанные.
    Класс эксплорер при добавлении элементов каждый раз генерит новую секцию, диспетчер ресурсов почему-то не создает автоматом кода для загрузки картинки, как на презентации, новые компоненты вообще хз как работают - на вид ничем не отличаются. А баллун хинт почти нельзя настроить, к тому же он с забивает на положение мыши и возникает всегда под ней. ToString у объекта - вещь хорошая, вот только если б она еще и прописана была, а то тупо возвращает имя класса, и всё.
    Вот exit с параметром - это единственная фича, которая пока что мне больше всего понравилась)). Теперь можно забыть про дурацкие
    if Suxx then
    begin
    Result:="Suxx"; Exit;
    end

    и делать if Suxx then Exit("Suxx") - мелочь, а приятно)

    C шаблонами пока е разбирался, насчет анонимных методов пока не могу придумать, где могут понадобиться. Лучше бы локальные переменные внутри блока сделали б, что ли )).
  • pasha_golub © (28.08.08 16:17) [87]

    > и делать if Suxx then Exit("Suxx") - мелочь, а приятно)

    Класс!
  • Ega23 © (28.08.08 16:22) [88]

    > и делать if Suxx then Exit("Suxx") - мелочь, а приятно)


    Нда, приятная мелочь...  :)
  • федот (28.08.08 21:07) [89]
    ап, еще мнения будут?
  • ketmar © (28.08.08 21:12) [90]
    >[86] SpellCaster (2008-08-28 15:54:00)
    анонимы как раз рулят. я приводил пример, где и когда.

    ---
    Do what thou wilt shall be the whole of the Law.
  • федот (28.08.08 21:21) [91]
    Кстати уже доступен свежий билд (RC или релиз?)
    12.0.3155.16733, с хэлпом в комплекте.
  • DVM © (28.08.08 21:24) [92]

    > Кстати уже доступен свежий билд

    где?
  • TiBuron (28.08.08 21:41) [93]
    > весь релиз лежит на оф. сайте


    > Кстати уже доступен свежий билд (RC или релиз?)



    > где?

    Вот именно что, Где?

    Не надоело ещё людям мозг пудрить. Методом тыка и подборки имён архивов заюзали списочек из ссылок
    http://installers.codegear.com/release/radstudio/12.0.3155.16733/***.7zip

    Скачали, и радуетесь, что оф. релиз скачали :) Ну прям дети. Никто не даёт гарантию, что это именно файлы релиза, а не какой-нибудь промежуточной сборки. Может поэтому и недоступен на codegear он-лайн инсталлятор

    Лучше уж дождаться ISO-образа. На этой неделе скорее весго его и выложат.

    зы: когда ссылки на реальный оф. релиз появятся, на e-mail придут уведомления, для тех, кто подписался
  • oxffff © (28.08.08 23:34) [94]
    Завтра на работе устрою разбор реализации анонимных методов и шаблонов.
  • oxffff © (28.08.08 23:51) [95]
    Первые исследования показывают,что Tobject обзавелся новыми методами

    class Method
    UnitName;

    instance virtual Methods
    Equals(self);    VMT-$2С
    ToString;        VMT-$24
    GetHashCode;  VMT-$28

    +
    перегруженный

    class function TObject.MethodAddress(const Name: string): Pointer;
    begin
    {$IFDEF UNICODE}
     Result := MethodAddress(UTF8EncodeToShortString(Name));
    {$ELSE}
     Result := MethodAddress(ShortString(Name));
    {$ENDIF}
    end;

    Это был совсем беглый взгляд на содержимое system.pas.
    Завтра буду дрючить его по полной.

    Теперь, что реально меня интересовало кодогенерация и инстранцирование шаблонов. Пока не ушел спать поковыряю минут 20.
  • oxffff © (29.08.08 00:10) [96]
    Что меня сейчас реально расстроило, код для инстанцированых шаблонов с разным параметризованных параметров отличается.

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

    Я тут уже слегка кратко выше разобрал их реализацию

    Возможно я сейчас чего не до конца понимаю, однако завтра я разберу все на винтики.

    Теперь далее.

    Слегка изменился код инстранцирования параметризованных классов.
    Есть предположения, завтра проверю.
    Завтра я вниметельно разберу все под отладчиком.
    И возможно сообщу здесь, если вдруг не забухаю.
    Теперь спать.
  • oxffff © (29.08.08 00:17) [97]

    > oxffff ©   (29.08.08 00:10) [96]
    > Что меня сейчас реально расстроило, код для инстанцированых
    > шаблонов с разным параметризованных параметров отличается.
    >

    Уточние.
    Точнее не расстроило, однако прикручивание операции сравнения через унифицированный интерфейс для известного на этапе компиляции типа меня сильно растроило. То есть не будет вам динамического инстанцирования шаблонов как в .NET. Я его и не ждал конечно, однако унифицированый интерфейс наводил на такие мысли.
    Вообщем могли бы сделать полу generics, полу template. Я ожидал этого.
    НО!!!..

    Небольшое отступление. Я смотрел их "хитрый" код для сопоставления для типов классовоберток оператора сравнения.
    Мозг не сломаешь, но выкрутасы честно говоря не выразительные.
  • oxffff@yandex.ru (29.08.08 09:37) [98]

    > Слегка изменился код инстранцирования параметризованных
    > классов


    Нет, код такой же.

    Далее
    Мое мнение о реализации generics - это полу generics.

    Например is, as, приведение запрещены над Т. Хотя .net для этих целей
    использует опкод box <T>, т.е. приводит к управляемому типу.
    Зачем было тогда нацеплять идеалогию, которая не будет ложится полностью на native delphi.
    Ну и запрет на использование операторов меня просто удивили.
  • Anatoly Podgoretsky © (29.08.08 09:51) [99]
    > oxffff@yandex.ru  (29.08.2008 9:37:38)  [98]

    Модно и зависть.
  • oxffff © (29.08.08 10:04) [100]

    > Anatoly Podgoretsky ©   (29.08.08 09:51) [99]


    Будьте любезны поправьте мой пост [98].
    Поправьте заголовок. оставьте просто oxffff
  • Anatoly Podgoretsky © (29.08.08 10:27) [101]
    > oxffff  (29.08.2008 10:04:40)  [100]

    У нас нет цензуры, можно только не принять статью к публикации, а редактировать не положено.
  • федот (29.08.08 10:53) [102]
    Кстати многие изменения подробно описаны в хелпе.
  • SpellCaster (29.08.08 10:57) [103]
    > [90] ketmar ©   (28.08.08 21:12)
    Пример-то есть, но что-то особой пользы я от него не вижу %)

    > [95] oxffff ©   (28.08.08 23:51)



    > Первые исследования показывают,что Tobject обзавелся новыми
    > методами


    Угу... вот только ToString, насколько я понял, никто не перекрывает, а базовый метод тупо возвращает ClassName. То бишь пользы от этой фени - 0.
  • федот (29.08.08 11:14) [104]
    )))))))
    Это специально и сделано что бы иметь возможность перекрыть и реализовать.
  • SpellCaster (29.08.08 13:21) [105]
    > [104] федот   (29.08.08 11:14)

    C таким же успехом можно было и самим это провернуть, вот если бы они для каждого класса вывод соотв инфы сделали, было б круто)

    Ps Риббон контролы вызывают эксепшен при попытке перетащить на форму, однако демка компилится. Ну, что ж, симпатично сделано. Закос под офис07 удался)
  • Tricky (29.08.08 16:07) [106]

    > У нас нет цензуры, можно только не принять статью к публикации,
    >  а редактировать не положено.


    Дык это и есть цензура. Кстати довольно алогичная она у вас.
  • Anatoly Podgoretsky © (29.08.08 16:11) [107]
    > Tricky  (29.08.2008 16:07:46)  [106]

    Не путай отказ в публикации, с изменением текста сообщений (цензура). Если бы не было отказов, то все газеты и журналы были бы заполонены только графоманскими поделками. Редакция в праве отказать в публикации любой статьи, кроме тех, которые вынуждены печатать по решению суда. Публиковать не публиковать решение принимает редактор, на форумах он называется модератор.
  • Prohodil Mimo © (29.08.08 19:05) [108]
    Германн ©   (25.08.08 0:21) [35]
    А почему для сравнения избрал именно 2005?


    потому-что она первая из бдс и самая глючная. И эта первая с уникодом :о)
  • Anatoly Podgoretsky © (29.08.08 19:21) [109]

    > потому-что она первая из бдс и самая глючная.

    Первая студия у них 7 - еще как то можно было назвать, с натяжкой.
    Следующая 8, эту вообще студией называть стыдно и эта самая глюкавая.
    Следующея 2005 и это действительно студия.
  • ZeroDivide © (29.08.08 19:45) [110]
    Меня, все-таки, больше всего прайс волнует. Она будет для России какая-то особенная или такая же подстава как для остальной еврозоны - долларовые цены со значком "Евро". Да и долларовая цена далека от цен на Турбо.

    А еще вот эта строчка смущает:

    Delphi 2009 Professional
    "...и гибкие возможности для соединения с локальными базами данных."


    Это что это? Я не смогу через IBX к удаленному FireBird'у подключиться?
  • speller (29.08.08 20:14) [111]

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

    Object оставили
  • speller (29.08.08 20:35) [112]
    Ковыряю потихоньку сабж - на первый взгляд очень хорошо всё, работает очень шустро. Решил сразу проверить юникод - внатуре работает :) Редактор изначально русские буковки в cp1251 сохраняет, но если вставить какую абракадабру в исходник - предлагает сохранить в utf-8. Вот бы еще найти как по умоляанию в юникод всё сохранять...

    Настройки почти все подхватила от установленной 6-ки. Некоторые по-своему сделала.

    А вот справка на моей х64 винде не запустилась... В дистре вроде была.
  • Anatoly Podgoretsky © (29.08.08 23:31) [113]
    > speller  (29.08.2008 20:35:52)  [112]

    > Редактор изначально русские буковки в cp1251 сохраняет, но если вставить какую абракадабру в исходник - предлагает сохранить в utf-8.

    Таже чепуха и в 2006
  • DVM © (30.08.08 14:15) [114]
    Скачал, посмотрел. Да, со старыми проектами проблем много. Замена PChar на PAnsiChar и подобное прокатит не везде. Но все же скомпилить кое что удалось.
  • jack128_ (30.08.08 16:47) [115]
    хе.

    type
     TMyClass<T: record> = class

     end;

    procedure TForm2.FormCreate(Sender: TObject);
    var
     C: TMyClass<Integer>;
    begin

    end;



    Вполне успешно компилируется..
  • jack128_ (30.08.08 16:50) [116]
    мдя..  

    procedure TForm2.FormCreate(Sender: TObject);
    var
     C: TMyClass<Integer>;
    begin
     C := TMyClass<Integer>.Create.Free; // [DCC Error] Unit2.pas(37): E2010 Incompatible types: 'TMyClass<System.Integer>' and 'procedure, untyped pointer or untyped parameter'
    end;

    при этом
    C := TMyClass<Integer>.Create;
    С.Free;



    нормально колмпилируется..
  • jack128_ (30.08.08 17:04) [117]
    блин. И старую ошибку с advanced records

    type
     TAdvRec = record
      private
       function GetProp: boolean;
     public
       property Prop: boolean read GetProp;
     end;

     TMyClass = class
      public
        property MyRec: TAdvRec read FMyRec;
     end;

    var
     c: TMyClass;

    if C.MyRec.Prop then // тут интернал еррор...
  • jack128_ (30.08.08 17:06) [118]

    > блин. И старую ошибку с advanced records

    НЕ исправили.
  • oxffff © (30.08.08 18:32) [119]

    > jack128_   (30.08.08 16:50) [116]


    Ты что то не так понял.

    C := TMyClass<Integer>.Create.Free;
    КАк так?
  • федот (30.08.08 18:35) [120]
    var
    C: TMyClass<Integer>;
    begin
     TMyClass<Integer>.Create.Free;
    end;
  • федот (30.08.08 18:40) [121]
    Вообщем харе народ пугать, оба примера которые вы привели отлично раюотают )

    TMyClass = class
       FMyRec: TAdvRec;
     public
       property MyRec: TAdvRec read FMyRec;
    end;

    var
     C: TMyClass;

    procedure TForm7.FormCreate(Sender: TObject);
    begin
     C := TMyClass.Create;
     if C.MyRec.Prop then
       beep;
    end;

    { TAdvRec }

    function TAdvRec.GetProp: boolean;
    begin
     result := true;
    end;

    ЗЫ версия 12.0.3155.16733
  • jack128_ (30.08.08 19:27) [122]

    > C := TMyClass<Integer>.Create.Free;

    Блин,  лоханулся.. Глаз замылился, сорри.
  • jack128_ (30.08.08 19:29) [123]

    >   FMyRec: TAdvRec;
    >  public
    >    property MyRec: TAdvRec read FMyRec;

    доступ через метод, а не поле сделай.
  • федот (30.08.08 19:43) [124]
    Internal Error
  • oxffff © (30.08.08 19:50) [125]
    Я тут слегка на них наехал за их реализацию Generics.

    http://blogs.teamb.com/craigstuntz/2008/08/29/37832

    Мои 6 и 8 комментарий.
  • jack128_ (30.08.08 22:10) [126]

    > Я тут слегка на них наехал за их реализацию Generics.

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

    ПРидирка:
    нельзя написать так:

    var
     Func: reference to function: Integer;

    требуется описать тип
     TFunc = reference to function : Integer;
    var
     Func: TFunc;

    хотя например записи таким макаром нормально всегда описывались
  • Prohodil Mimo © (30.08.08 23:20) [127]
    Anatoly Podgoretsky ©   (29.08.08 19:21) [109]

    потому и сказал, что первая.
    а 8 именем Delphi назвать стыдно. Как такое вообще пропустили? Видать денег надо было срочно.

    speller   (29.08.08 20:35) [112]
    Редактор изначально русские буковки в cp1251 сохраняет, но если вставить какую абракадабру в исходник - предлагает сохранить в utf-8.

    Anatoly Podgoretsky ©   (29.08.08 23:31) [113]
    Таже чепуха и в 2006


    Поставте в регионе для неуникода кирилицу, и просить не будет в utf-8 сконвертировать.
  • boa_kaa © (30.08.08 23:23) [128]
    ммм-дааа... была у заюшки избушка лубяная, а у лисы ледяная...
  • KilkennyCat © (30.08.08 23:26) [129]

    > boa_kaa ©   (30.08.08 23:23) [128]

    а у подводного карлсона - термоядерный реактор!
  • boa_kaa © (30.08.08 23:30) [130]

    > KilkennyCat ©   (30.08.08 23:26) [129]

    поди, лиса, вон! :D
  • KilkennyCat © (30.08.08 23:33) [131]

    > boa_kaa ©   (30.08.08 23:30) [130]
    >
    >
    > > KilkennyCat ©   (30.08.08 23:26) [129]
    >
    > поди, лиса, вон! :D


    уже: квартиру ищу...
  • Anatoly Podgoretsky © (30.08.08 23:37) [132]
    > Prohodil Mimo  (30.08.2008 23:20:07)  [127]

    Кроме денег была и боязнь отстать от паровоза .NET
    Так я знаю, что не будет, но я просто введу пару букв, хотя бы в комментарии, а не буду локализацию менять.
    Так что эта особенно не новая, а существует с первых версий 200x и так не исправлено это, надо или все писать в UTF-8 или разрешить управлять этим в настройках.
  • Prohodil Mimo © (30.08.08 23:44) [133]
    Anatoly Podgoretsky ©   (30.08.08 23:37) [132]
    не буду локализацию менять

    отображение неуникода - не совсем локализация.

    надо или все писать в UTF-8 или разрешить управлять этим в настройках

    а зачем всё в UTF-8? появились нестандартные символы - в UTF-8, а если их нет, то и ASCII сойдёт. Хотя - дело вкуса, а мен лишние байты жалко :о)
  • Anatoly Podgoretsky © (31.08.08 00:17) [134]
    > Prohodil Mimo  (30.08.2008 23:44:13)  [133]

    Если бы было так, то проблем бы не было, а проблема в том, если эти не попадающие под локализацию символы появлялись потом, то запрос уже не делался и преобразование тоже. Не знаю, может этот глюк решили в Д2007/9 но в 2006 ухо надо было держать тоже. Кстати в VS тоже самое, не уследишь при сохранение, то можно и потерять и не сразу это заметишь. А у меня подозрение, что студия лицензирована у Микрософт.
  • speller (31.08.08 05:31) [135]
    Сохраняешь русские буквы в ascii, отдаешь исходник индусу, а у него локаль другая и прощайте нужные буковки. А если это не тексты, а какие служебные символы? Индус просто что-то исправил в коде, ничего более не трогал, и тебе вернулись квадратики или какая еще хрень вместо текста.
  • ggg (31.08.08 09:37) [136]
    А что теперь будут возвращать функции Ord и Chr?
    Как стоит переписать функции шифрования, которые используют посимвольные операции над байтами?
    Т.е. если сейчас написать шифрование xor на БДС 2007, в 2009 функция скомпилируется, но результат будет различен и дешифровать без конвертации в AnsiString не удастся?
  • speller (31.08.08 10:11) [137]

    > А что теперь будут возвращать функции Ord и Chr?

    Вот такой код

    var
     S: string;
    begin
     S := IntToStr(Ord('я'));
     S := S + ' ';
     S := S + IntToStr(Ord('פּ'));



    компилируется в

    // S := IntToStr(Ord('я'));
    lea edx,[ebp-$04]
    mov eax,$000000ff
    call IntToStr
    // S := S + ' ';
    lea eax,[ebp-$04]
    mov edx,$0046421c
    call @UStrCat
    // S := S + IntToStr(Ord('פּ'));
    lea edx,[ebp-$08]
    mov eax,$0000fb44
    call IntToStr
    mov edx,[ebp-$08]
    lea eax,[ebp-$04]
    call @UStrCat



    Русская буква осталась в ascii, а пробел пошел уже в юникоде... По-моему это глюк.
  • speller (31.08.08 10:24) [138]
    нет, пробел не в юникоде, загнал я
  • Anatoly Podgoretsky © (31.08.08 10:34) [139]
    > ggg  (31.08.2008 9:37:16)  [136]

    Все нормально, не волнуйся.
  • speller (31.08.08 11:17) [140]
    На самом деле странно что вроде всё в юникоде, а ord на русской букве возвращает ascii значение. Или я просто чем-то не проникся?
  • speller (31.08.08 11:18) [141]
    что выдаст ord('я') на компе индуса?
  • @!!ex © (31.08.08 11:23) [142]
    > [141] speller   (31.08.08 11:18)

    Я так понимаю - зависит о того, в какой кодировке передана буква 'я'.
    Не вижу проблемы.
  • Anatoly Podgoretsky © (31.08.08 11:26) [143]
    Код русской буквы "я", в соответствии с кодировкой.

    > ord('я')

    Откуда код? По всей видимости это в ANSI
  • speller (31.08.08 11:30) [144]

    > зависит о того, в какой кодировке передана буква

    Вне зависимости, в какой кодировке исходник, ascii или utf-8, результат ord('я') = 255. Т.е. компилятор во время компиляции делает преобразование из юникода в ascii. Что он сделает если буквы "я" нет в локали индуса? Подставит значение юникода и в результате получится ord('я') = 1103?
  • Loginov Dmitry © (31.08.08 12:27) [145]
    а что там сейчас с длинными комментами на русском?
  • speller (31.08.08 14:14) [146]
    а что было?
  • ggg (31.08.08 14:28) [147]
    Да не обязательно с комментариями. Если в строке были русские символы, то экран "уезжал" вправо пропорционально их количеству, а курсор оставался где-то слева, за границей области видимости.

    Всё-таки как-то не убедительно с Ord :) Похоже, в случае с Ord('я') просто компилятор подставляет константу. Может для чистоты эксперимента попробуете строку взять из элемента формы?
  • DVM © (31.08.08 21:56) [148]
    В связи с тестированием Delphi2009 столкнулся с проблемкой, которой никак не могу найти удовлетворительного на мой взгляд решения.
    Ранее пользовался функций:

    function InetAddr(const AHost: string): integer;
    var
     PHost:PChar;
     HostEnt: PHostEnt;
    begin
     if AHost = '' then
       result := INADDR_NONE
     else
       begin
         PHost := PChar(AHost);
         Result := inet_addr(PHost);
         if Result = INADDR_NONE then
           begin
             HostEnt := GetHostByName(PHost);
             if HostEnt <> nil then
               Result := integer(pointer(HostEnt^.h_addr^)^);
           end;
       end;
    end;



    Функция прекрасно работала, пока string не превратился в WideString, а PChar в PWideChar. Хорошо, подумал я и поменял:

    function InetAddr(const AHost: AnsiString): integer;
    var
     PHost: PAnsiChar;
     HostEnt: PHostEnt;
    begin
     if AHost = '' then
       result := INADDR_NONE
     else
       begin
         PHost := PAnsiChar(AHost);
         Result := inet_addr(PHost);
         if Result = INADDR_NONE then
           begin
             HostEnt := GetHostByName(PHost);
             if HostEnt <> nil then
               Result := integer(pointer(HostEnt^.h_addr^)^);
           end;
       end;
    end;



    Вроде бы все верно и действительно функция прекрасно работает в D7, но не работает в D2009, будучи вызвана, например, так:

    procedure TForm1.FormCreate(Sender: TObject);
    begin
     WSAStartup($101, WSA);
     caption := inttostr(InetAddr('ya.ru'));
    end;



    В функцию, как мне кажется передается строка, но строка по-видимому становится WideString, хотя у меня в параметрах функции указано AnsiString и никаких сообщений компилятор не выдает. Странно как то.
    Как бы мне заставить это работать в обеих версиях делфи?
  • DVM © (31.08.08 22:17) [149]
    Наше проблему, дело оказалось не в WideString

    Переделал так:

    function InetAddr(const AHost: AnsiString): DWORD;
    var
     PHost: PAnsiChar;
     HostEnt: PHostEnt;
    begin
     if AHost = '' then
       result := INADDR_NONE
     else
       begin
         PHost := PAnsiChar(AHost);
         Result := inet_addr(PHost);
         if Result = INADDR_NONE then
           begin
             HostEnt := GetHostByName(PHost);
             if HostEnt <> nil then
               Result := DWORD(pointer(HostEnt^.h_addr^)^);
           end;
       end;
    end;



    в файле Winsock поменялось  INADDR_NONE      = -1; на INADDR_NONE      = DWORD($FFFFFFFF);
  • федот (31.08.08 22:21) [150]
    это правильно, смотрите варнинги, которые есть.
  • DVM © (31.08.08 22:24) [151]

    > федот   (31.08.08 22:21) [150]

    варнинг только в D2009 появлялся, в D7 его не было, я поэтому как то среди прочих сообщений не обратил внимания сразу на него.
  • DVM © (31.08.08 22:27) [152]
    чтобы без варнингов работало в обеих версиях, пришлось исправить:

    function InetAddr(const AHost: AnsiString): DWORD;
    var
     PHost: PAnsiChar;
     HostEnt: PHostEnt;
    begin
     if AHost = '' then
       result := DWORD($FFFFFFFF)
     else
       begin
         PHost := PAnsiChar(AHost);
         Result := inet_addr(PHost);
         if Result = DWORD($FFFFFFFF) then
           begin
             HostEnt := GetHostByName(PHost);
             if HostEnt <> nil then
               Result := DWORD(pointer(HostEnt^.h_addr^)^);
           end;
       end;
    end;

  • федот (01.09.08 20:15) [153]
    Новый билд 12.0.3163.16897, чую  релиз.
  • oxffff © (01.09.08 21:17) [154]
    Намек понят.
  • DVM © (01.09.08 21:19) [155]
    Не не буду качать опять 600 мег. Теперь только релиз.
  • oxffff © (01.09.08 21:35) [156]
    Найден первый баг

    TGenericRecord <T>: record = record
    procedure DoSomething(aParam: T);
    end;

    procedure TForm1.FormCreate(Sender: TObject);
    var a:TGenericRecord<integer>;
       b:integer;
    begin
    a.DoSomething(5);
    end;

    procedure TGenericRecord<T>.DoSomething(aParam: T);
    var a:integer;
    begin
    a:=integer((@aParam)^);          //  Он здесь, привет EDX регистру
    showmessage(inttostr(a));
    end;

    :(
  • oxffff © (01.09.08 21:38) [157]

    > федот   (01.09.08 20:15) [153]
    > Новый билд 12.0.3163.16897, чую  релиз.


    Неа, я теперь стал ожидать множество сервис паков.
    Просто огромное количество.
    Честно говоря нельзя быть настолько небрежным в отношении реализации языка.
  • oxffff © (01.09.08 21:43) [158]
    Приколько.
    Я тут несколько высказался "демократично" насчет их реализации, я их не оскорблял, просто указал на некоторые изъяны.

    Теперь. Очередной комментарий

    Sergey Antonov Says: Your comment is awaiting moderation.

    Повторяю в моих постах не было оскорблений, просто голые факты.
    Интересно это связано как то с их оценкой роли России в мироустройстве.
  • jack128_ (01.09.08 22:59) [159]

    > Найден первый баг

    в версии 12,0,3128,15596 все нормально..
  • oxffff © (01.09.08 23:13) [160]

    > jack128_   (01.09.08 22:59) [159]


    У меня версия 12.0.3155.16733.
    То есть получается они не делают, а ломают.

    Нормально это исключение?

    P.S. Включи оптимизацию и перестрой.
  • jack128_ (01.09.08 23:22) [161]
    она включена.
  • oxffff © (01.09.08 23:27) [162]
    Вот код для

    procedure TGenericRecord<T>.DoSomething(aParam: T);
    var a:integer;
    begin
    a:=integer((@aParam)^);          //  Он здесь, привет EDX регистру
    showmessage(inttostr(a));
    end;

    Unit1.pas.40: begin
    0046C610 55               push ebp
    0046C611 8BEC             mov ebp,esp
    0046C613 6A00             push $00
    0046C615 53               push ebx
    0046C616 33C0             xor eax,eax
    0046C618 55               push ebp
    0046C619 6850C64600       push $0046c650
    0046C61E 64FF30           push dword ptr fs:[eax]
    0046C621 648920           mov fs:[eax],esp
    Unit1.pas.41: a:=integer((@aParam)^);          //  Он здесь, привет EDX  
                                                                 регистру
    0046C624 8DC2             lea eax,quiet_dl   <-валится на этой инструкции

    0046C626 8B18             mov ebx,[eax]
    Unit1.pas.42: showmessage(inttostr(a));
    0046C628 8D55FC           lea edx,[ebp-$04]
    0046C62B 8BC3             mov eax,ebx
    0046C62D E8EAE2F9FF       call IntToStr
  • jack128_ (02.09.08 00:53) [163]
    Хм. Чудеса..  Щас запустил по новой дельфи, асм код глянуть.  Терь External error выдает..  Всё страньше и страньше, как говорила Алиса...
  • oxffff © (02.09.08 08:30) [164]

    > jack128_   (02.09.08 00:53) [163]
    > Хм. Чудеса..


    Это не чудеса. Это ребята из Codegear.
  • oxffff © (02.09.08 09:07) [165]
    Еще вот чудеса.

    Нельзя использовать ASM в параметризованном классе.

    AClass<T>=class
    procedure abc(const a:T);
    procedure cde;
    end;

    procedure AClass<T>.abc(const a: T);
    asm
    end;                                  <-- жалуется

    procedure AClass<T>.cde;
    asm
    end;                                  <-- жалуется

    [DCC Error] Unit1.pas(39): E2426 Inline function must not have asm block
  • speller (02.09.08 16:02) [166]

    > Похоже, в случае с Ord('я') просто компилятор подставляет
    > константу. Может для чистоты эксперимента попробуете строку
    > взять из элемента формы?

    В исходнике UTF-8 представление буквы "я". Какая может быть зависимость от ввода?
  • федот (04.09.08 14:20) [167]
    Очередная версия 3168.16957
  • oxffff © (05.09.08 10:24) [168]
    Читать всем.
    smart pointers in delphi
    http://barrkel.blogspot.com/2008/09/smart-pointers-in-delphi.html
  • speller (05.09.08 10:38) [169]
    после д7 без бутылки в д2009 хрен разберешься во всех новшествах, произошедших за этот период )
  • jack128_ (05.09.08 10:55) [170]
    да ладно - их по пальца одной руки пересчитать мона.
    1) хелперы
    2) advanced records
    3) анонимные функции/замыкания
    4) дженерики

    Ну и там по мелочи, типа strict и Exit(FuncResult)...
  • Skyle © (05.09.08 11:12) [171]

    > jack128_   (05.09.08 10:55) [170]

    5. Перегрузка операторов.
  • Anatoly Podgoretsky © (05.09.08 13:15) [172]
    > Skyle  (05.09.2008 11:12:51)  [171]

    Так на руке как раз 5 пальцев.
  • jack128_ (05.09.08 13:34) [173]

    > 5. Перегрузка операторов.

    это входит в Advanced records. Перегрузка операторов только для них допустима..
  • jack128_ (06.09.08 13:05) [174]

    > Читать всем.
    > smart pointers in delphi
    > http://barrkel.blogspot.com/2008/09/smart-pointers-in-delphi.
    > html

    прикольно.  Хотя в принципе - всё тоже самое можно и в 2007 сделать.
  • guav © (06.09.08 13:38) [175]
    > [168] oxffff ©   (05.09.08 10:24)


    smart pointers in delphi
    http://barrkel.blogspot.com/2008/09/smart-pointers-in-delphi.html


    Смарт поинтеры ? Скоп гарды ? Иммитация замыканий ?
    Осталось finally запретить и будет вам С++ :)
  • jack128_ (06.09.08 13:44) [176]
    var
     x: TSmartPointer<TLifetimeWatcher>;
    begin
     x := TLifetimeWatcher.Create



    Хм. Что то мне подумалось, что это не правельно - когда время жизни объекта опредлеяется способом декларации переменной, в котой этот объект сидит. По идее - этот мемент должен разруливаться способом _создания_ объекта.

    то есть вместо
    var
     Form: TSmartPointer<TForm>;
    begin
     Form := TForm.Create(nil);
    end;
    лудше бы писать:
    var
     Form: TForm;
    begin
     Form :=TSmartPointer<TForm>.Create(TForm.Create(nil)).Value;
    end;
    так конечно длиннее, но зато потом при вызове методов не нуно будет писать '.Value.', например Form.Value.SameMethod

    PS Кста, то что невозможно описать оператор
    class operator Implicit(const AValue: TSmartPointer<T>): T;  - это глюк или политика партии??
  • guav © (06.09.08 13:58) [177]
    > [176] jack128_   (06.09.08 13:44)


    > class operator Implicit(const AValue: TSmartPointer<T>):
    > T;  - это глюк или политика партии??

    Кстати в С++ у стандартных сматр-поинтеров shared_ptr, auto_ptr, scoped_ptr и других нету неявного преобразования в обычный указатель, хотя оно могло бы быть реализовано. Вместо него - метод get(). Тут политика партии: такое неявное преобразования показало себя как источник ошибок.
  • jack128_ (06.09.08 14:06) [178]

    > такое неявное преобразования показало себя как источник
    > ошибок.

    например???  То есть я понимаю, что при желании где угодно можэно ошибок наляпать.  Имеются в виду неочевидные какие нить ошибки
  • guav © (06.09.08 14:23) [179]
    Если у нас два разных смарт-поинтера, то может так получится что из одного сконтсруировали другой, и (вместо ожидаемого: увеличения общего числа ссылок/передачи владения/ошибки компиляции) оба будут владеть.

    Не уверен что это применимо к Delphi (вообще Delphi у меня нет, я просто так сюда захожу), но в С++ это известная проблема.
  • jack128_ (06.09.08 14:33) [180]
    хм.  Да, ничего хорошего..
    ну да ладно, и в таком виде нормально выглядит..
  • oxffff © (06.09.08 16:43) [181]

    > jack128_   (06.09.08 14:33) [180]


    Я бы так не сказал. В его примере дополнительно создается два объекта кучи.
  • jack128_ (06.09.08 16:58) [182]

    > Я бы так не сказал. В его примере дополнительно создается
    > два объекта кучи.

    Ну дополнительных - только один объект создается. Во вторых - а что предлагаешь ты??  Внедрить объекты на стеке (или деструкторы у рекордов) в язык??  И так много новоодений..
  • jack128_ (06.09.08 16:59) [183]

    > новоодений

    нововведений
  • oxffff © (07.09.08 11:33) [184]

    > jack128_   (06.09.08 16:58) [182]
    >
    > > Я бы так не сказал. В его примере дополнительно создается
    >
    > > два объекта кучи.
    >
    > Ну дополнительных - только один объект создается. Во вторых
    > - а что предлагаешь ты??  Внедрить объекты на стеке (или
    > деструкторы у рекордов) в язык??  И так много новоодений.
    > .


    Объекта создается два. См. код

    constructor TSmartPointer<T>.Create(const AValue: T);
    begin
     FValue := AValue;
     FLifetime := TLifetimeWatcher.Create(procedure
     begin
       AValue.Free;
     end);
    end;

    Объекты

    1.TLifetimeWatcher
    2. Обертка анонимного метода с захватом AValue.

    Нововведений? :)

    Все они есть Delphi.NET.

    Так что это не нововведения. :)
  • oxffff © (07.09.08 11:52) [185]

    > Так что это не нововведения. :)


    А скорее старовведения.
  • jack128_ (07.09.08 15:25) [186]

    > Обертка анонимного метода с захватом AValue

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

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


    > Все они есть Delphi.NET.
    >
    > Так что это не нововведения. :)

    ну мало ли что есть в .NET'е... давай еще скажем, что в delphi for win сборку мусора ввести - раз плюнуть и это никакое не нововедение будет...
  • oxffff © (07.09.08 16:02) [187]

    > ну мало ли что есть в .NET'е... давай еще скажем, что в
    > delphi for win сборку мусора ввести - раз плюнуть и это
    > никакое не нововедение будет...


    :)

    см.

    http://www.delphi.org/tag/garbage-collection/

    скачать здесь
    http://cc.codegear.com/Item/21646
  • jack128_ (07.09.08 16:19) [188]

    > http://www.delphi.org/tag/garbage-collection/

    эм.. на слух английским только по глубокой пьяни владею. :-)


    > http://cc.codegear.com/Item/21646

    не..  щас я готов открывать приплюснутые исходники. А вот из дельфиских:

    function Gc_FreeMem(p: Pointer): Integer;
    begin
     // do nothing
     Result := 0;
    end;

    Это уже радует.
  • oxffff © (07.09.08 16:58) [189]

    > эм.. на слух английским только по глубокой пьяни владею.
    >  :-)


    Мне легче я еще под градусом со вчерашнего. :)
  • guav © (07.09.08 17:21) [190]
    > [178] jack128_   (06.09.08 14:06)

    Вот ещё вспомнил, почему неявно умный указатель не преобразуют в обычный:

    std::shared_ptr<someclass> get_some();
    void use_some(someclass *);

    неявное преобразование:
    std::shared_ptr<someclass> p = get_some(); // правильно
    use_some(p);
    someclass* p = get_some(); // неправильно, временный объект разрушится при ;
    use_some(p);
    get:
    std::shared_ptr<someclass> p = get_some(); // правильно
    use_some(p.get());
    someclass* p = get_some().get(); // неправильно, но теперь выглядит подозрительно.
    use_some(p);

  • jack128_ (07.09.08 19:19) [191]

    > неправильно, временный объект разрушится при ;

    а вот в дельфи - smart pointer разрушится только при выходе из процедуры
  • guav © (07.09.08 20:16) [192]

    > а вот в дельфи - smart pointer разрушится только при выходе
    > из процедуры

    а даже если ведёт себя как локальная переменная, можно сломать:
    1. циклом, тогда объект последующей итерации будет создаваться на месте пердыдущего.
    2. попыткой использовать после выхода из процедуры.

    Вот смотри на аналогию: PChar это указатель на объект, а AnsiString - смарт-поинтер. Приведение AnsiString к PChar - олько явное.
  • pasha_golub © (09.09.08 09:03) [193]
    Ребят, а у меня вот вопрос. Если имеем С функцию экспортируемую из некой ДЛЛ, например,

           int return_int(const char *somename);



    То ранее я ее определял как
    Treturn_int = function(somename: PChar): Integer; cdecl;



    В случае с Тибуроном это остается в силе? Или следует менять на PAnsiChar или того хуже TBytes?

    Если последнее, то каким макаром мне передать функции данные в кодировке UTF8? Ведь PChar у нас будет хранить UTF16, вроде как... С этим TEncoding голова пухнет.
  • jack128_ (09.09.08 10:28) [194]

    > Или следует менять на PAnsiChar

    конечно следует менять.
    PChar - теперь эквивалентен PWideChar
  • clickmaker © (09.09.08 10:35) [195]
    > C := TMyClass<Integer>.Create.Free;
    > КАк так?

    ну передумал создавать - чего непонятного?
  • pasha_golub © (09.09.08 12:39) [196]

    > jack128_   (09.09.08 10:28) [194]

    Хорошо, получится что это теперь
    Treturn_int = function(somename: PAnsiChar): Integer; cdecl;



    А как мне туда запихнуть содержимое строки? Чего-нибудь в таком роде:

    var S: string; //UNT16
    begin
    ..
     i := return_int(PAnsiChar(UnicodeToUTF8(S));
    ...
    end;



    Вообщем, как-то я не могу сложить разум в кучу по этому поводу. Опять же сколько надо терминирующих нулей вопрос. Ранее один впулил и доволен. Теперича, я так понимаю, два надобно?
  • KilkennyCat © (09.09.08 12:40) [197]

    > clickmaker ©  

    а ты не получал еще диск с 2009?
  • clickmaker © (09.09.08 12:44) [198]
    > [197] KilkennyCat ©   (09.09.08 12:40)

    не-а
    я с дельфи почти не работаю. Так, шабашки мелкие на 5-ке в основном
  • KilkennyCat © (09.09.08 12:50) [199]

    > clickmaker ©   (09.09.08 12:44) [198]

    понятно... ладно, буду ждать октября...
  • Anatoly Podgoretsky © (09.09.08 13:21) [200]

    > pasha_golub ©   (09.09.08 09:03) [193]

    PChar generic тип, значит нужно использовать фундаментальный PAnsiChar
  • Anatoly Podgoretsky © (09.09.08 13:25) [201]

    > Вообщем, как-то я не могу сложить разум в кучу по этому
    > поводу. Опять же сколько надо терминирующих нулей вопрос.
    >  Ранее один впулил и доволен. Теперича, я так понимаю, два
    > надобно?

    Неправильно понимаешь, и раньше и сейчас ровно один символ NUL - ты оперируешь не той сущностью, забудь про байты и нули, думай в символах.
    Если нужно ввести один символ nul то указывай #0 и все, остальное дело компилятора и системы.

    Это не ясно зачем?
    Уточни вопрос.


    > var S: string; //UNT16
    > begin
    > ..
    >  i := return_int(PAnsiChar(UnicodeToUTF8(S));
    > ...
    > end;

    Может это поможет - UTF8 = AnsiChar
  • pasha_golub © (09.09.08 17:18) [202]

    > Может это поможет - UTF8 = AnsiChar

    Это как это?

    У меня есть String. Она UTF16. В функцию я могу передать UTF8.
  • jack128_ (09.09.08 17:24) [203]

    > Опять же сколько надо терминирующих нулей вопрос. Ранее
    > один впулил и доволен.

    вообще то сколько нужно терминирующих нулей в функцию передать -функция и опрделеяет. Дельфя тут как бы не причем ;-)
  • Anatoly Podgoretsky © (09.09.08 18:47) [204]
    Естественно я опечатался, имелось в виду AnsiString , а не AnsiChar

    Из Д7

    > type UTF8String = type string;
    >
    > C++ syntax:
    >
    > typedef AnsiString UTF8String;

    Определение в C++ правильное, для Дельфи в 2009 оно поправлено до AnsiString

    UTF8 это транспортная кодировка, что бы Юникод можно было передавать по каналам связи, которые де факто ASCII и реагируют на управляющие символы, не все символы воспринимаются как символы, например #0 и #1A

    Один символ Юникода может быть закодирован от 1 до 6 символов UTF8
  • wl © (09.09.08 18:52) [205]
    разве до 6? мне казалось что до 3-х.
  • Anatoly Podgoretsky © (09.09.08 19:06) [206]
    > wl  (09.09.2008 18:52:25)  [205]

    Не будем устраивать торг. Желающие могут посмотреть точные данные в rfc или в какой либо педии.
  • pasha_golub © (09.09.08 19:47) [207]

    > Anatoly Podgoretsky ©   (09.09.08 18:47) [204]


    > для Дельфи в 2009 оно поправлено до AnsiString

    Это хорошо. А каким образом мне string переделать в UTF8string? Простым присваиванием?
  • Anatoly Podgoretsky © (09.09.08 20:50) [208]
    > pasha_golub  (09.09.2008 19:47:27)  [207]

    Если ты хочешь переделать Юникод в UTF8 то в Дельф много функций, не считая функций из АПИ, которых одна, вокруг которой и паразитирует Дельфи.
    Попробуй например UnicodeToUtf8
  • speller (10.09.08 06:53) [209]

    > Простым присваиванием?

    Именно. Компилятор сам переводит из одной кодировки в другую без явного использования функций перекодировки. Где-то в блогах разработчиков было написано, вроде даже в этой ветке была ссылка.
  • Romkin © (10.09.08 11:17) [210]
    Если кто-то не в курсе еще, выложили триал Delphi 2009.
    http://cc.codegear.com/Free.aspx?id=25876
  • Eraser © (20.09.08 01:51) [211]

    > DVM ©   (31.08.08 22:17) [149]
    > Наше проблему, дело оказалось не в WideStringПеределал так:
    > function InetAddr(const AHost: AnsiString): DWORD;var  PHost:
    >  PAnsiChar;  HostEnt: PHostEnt;begin  if AHost = '' then
    >    result := INADDR_NONE  else    begin      PHost := PAnsiChar(AHost);
    >       Result := inet_addr(PHost);      if Result = INADDR_NONE
    > then        begin          HostEnt := GetHostByName(PHost);
    >           if HostEnt <> nil then            Result := DWORD(pointer(HostEnt^.
    > h_addr^)^);        end;    end;end;

    тоже сейчас столкнулся с этой проблемой.
    по-моему проще привести тип прям в условии

     // Преобразуем IP в числовой вид.
     iIP := inet_addr(PAnsiChar(AnsiString(sIP)));
     if iIP = Integer(INADDR_NONE) then
     begin
       // Недопустимое значение, отклоняем.
       Exit;
     end;

  • SpellCaster (26.09.08 11:11) [212]
    Забавная фича ))

    procedure TForm1.FormCreate(Sender: TObject);
     procedure Процедурко;
     begin
       ShowMessage('Превед');
     end;

    begin
     Процедурко;
    end;

  • blackman © (26.09.08 11:31) [213]
    Anatoly Podgoretsky ©   (23.08.08 21:25)  
    Дождались
    Покупать что ли будешь?
    Денег выделили?
    Или просто так радуешься? За других счастливчиков...
  • Anatoly Podgoretsky © (26.09.08 12:11) [214]
    > blackman  (26.09.2008 11:31:33)  [213]

    За державу
  • blackman © (26.09.08 12:23) [215]
    Anatoly Podgoretsky ©   (26.09.08 12:11) [214]
    За которую ? Тут много разных ...
    Или за тех кто за морем? :)

    Вообще-то, мне лично и D6-7 хватает.
    Не нужны эти новые примочки для лишних заморочек усталого старческого сознания  :)
  • Anatoly Podgoretsky © (26.09.08 12:59) [216]
    > blackman  (26.09.2008 12:23:35)  [215]

    За королевство Дельфи.

    Ну а мне не хватает, по крайней мере с 1996 года, и остро с 2001 с переходом на Юникод ОСи
  • Eraser © (26.09.08 14:55) [217]
    > [215] blackman ©   (26.09.08 12:23)

    дженерики и юникод - вещи отличные.
    жаль что дженерики это не шаблоны, говорят на производительность влияет. но в большенстве моих задач такой потерей можно пренебречь.
  • blackman © (26.09.08 15:23) [218]
    Anatoly Podgoretsky ©   (26.09.08 12:59) [216]
    и остро с 2001 с переходом на Юникод ОСи
    Для и зачем перешел? Не понял...
  • Palladin © (26.09.08 15:29) [219]

    > blackman ©   (26.09.08 15:23) [218]

    "ОСи" - это не "толпа больших полосатых мухи", а "Операционной Системы"


    > Для и зачем перешел?

    У самого то мыслей не возникает?
  • Anatoly Podgoretsky © (26.09.08 16:14) [220]
    > blackman  (26.09.2008 15:23:38)  [218]

    А ты, что еще на не Юникод Полосатый Мух?
  • blackman © (26.09.08 17:05) [221]
    Anatoly Podgoretsky ©   (26.09.08 16:14) [220]
    Совсем не нужно этих глупостей. Вполне обхожусь.
  • blackman © (26.09.08 17:06) [222]
    Т.е. вы не сможете привести ни одной по-настоящему веской причины применения
  • Anatoly Podgoretsky © (26.09.08 19:13) [223]

    > blackman ©   (26.09.08 17:05) [221]

    У тебя программы только на английском? Или ты их устнавиливаешь и эксплуатируешь только на контролируемой тобой системах?

    Я боюсь предположить самое плохое :-)
  • pasha_golub © (26.09.08 20:11) [224]

    > blackman ©   (26.09.08 17:06) [222]
    >
    > Т.е. вы не сможете привести ни одной по-настоящему веской
    > причины применения

    Я продаю свой продукт в Азию. Продажи идут хреново из-за отсутствия поддержки Уникода. Чем не веская причина?
  • uw © (26.09.08 20:32) [225]

    > DVM ©   (24.08.08 14:43) [23]
    >
    >
    > > скриншоты
    > > http://www.xakep.ru/post/44864/default.asp
    >
    > мужик с бородой колоритный
    >

    Рожа прям как у Копира, прости господи.
  • blackman © (28.09.08 17:39) [226]
    Anatoly Podgoretsky ©   (26.09.08 19:13) [223]
    У тебя программы только на английском? Я боюсь предположить самое плохое :-)
    Не боись! Не только :)

    pasha_golub ©   (26.09.08 20:11) [224]
    С азией не работаем, а остальным эти примочки ни к чему
  • SpellCaster (29.09.08 11:32) [227]
    http://skiminog.livejournal.com/33610.html
    подробно расписанные фичи 2009-ки, зачитываюсь)
  • pasha_golub © (29.09.08 11:41) [228]

    > blackman ©   (28.09.08 17:39) [226]


    > С азией не работаем, а остальным эти примочки ни к чему

    Окромя Азии есть еще Венгрия, Польша, Германия со своими умляутами, да не будут они помянуты на ночь, страны Балтики, Бразилия с Португезами тоже всякие крючочки полюбляют
  • blackman © (29.09.08 13:24) [229]
    pasha_golub ©   (29.09.08 11:41) [228]
    Совсем не обязательно использовать. Латинского алфавита вполне достаточно.
    Не художественное произведение пишем :)
Есть новые Нет новых   [134442   +15][b:0.002][p:0.01]