Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.30;
Скачать: CL | DM;

Вниз

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

 
Anatoly Podgoretsky ©   (2008-08-23 21:25) [0]

Новость промелькнула

http://www.eweek.com/c/a/Application-Development/Embarcadero-Plans-New-Delphi-CBuilder-Releases/

Дождались


 
DVM ©   (2008-08-23 21:45) [1]

интересно, а эта поддержка Unicode там будет отключаемая? Т.е мало ли какие проблемы могут возникнуть в старых программах в связи с тем, что например, PChar станет PWideChar.


 
Andy BitOff ©   (2008-08-23 21:45) [2]

Я не понял, а пощупать-то ея можно?


 
palva ©   (2008-08-23 21:46) [3]


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

Это в каком году будет? В статье явного указания нет. Если в этом, тогда почему Delphi 2009 ? А если в будущем, то откуда такая точность?


 
DVM ©   (2008-08-23 21:55) [4]


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

через 2 дня это будет


 
Anatoly Podgoretsky ©   (2008-08-23 22:03) [5]

вот другая ссылка, там тоже нет года, но есть подсказка
Embarcadero Technologies next week plans. Загадка несложная.

http://news.yahoo.com/s/infoworld/20080821/tc_infoworld/109777


 
Anatoly Podgoretsky ©   (2008-08-23 22:04) [6]


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

ReplaceAll = sring - AnsiString


 
Anatoly Podgoretsky ©   (2008-08-23 22:05) [7]

> DVM  (23.08.2008 21:55:04)  [4]

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


 
Германн ©   (2008-08-23 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 ©   (2008-08-23 22:08) [9]


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

Ну 25 августа в понедельник получается. Обещали же осенью этого года. Видать раньше успели.


 
palva ©   (2008-08-23 22:16) [10]


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

Уговорили. Пошел думать, какой сейчас год.


 
Anatoly Podgoretsky ©   (2008-08-23 22:33) [11]

> palva  (23.08.2008 22:16:10)  [10]

Не забудь нам сообщить ответ на загадку.


 
Polevi ©   (2008-08-23 23:23) [12]

предсмертные судороги, пора закрывать лавочку


 
Городской Шаман   (2008-08-24 02:25) [13]


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


Ну если юникод введут, то с Delphi перестанут уходить. Если и еще x64-bit, то начнут возвращаться.


 
Германн ©   (2008-08-24 02:41) [14]


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

Эт ты об чём?
Или как?


 
Nic ©   (2008-08-24 02:51) [15]

Cофт не черствеет.


 
Городской Шаман   (2008-08-24 03:03) [16]


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


Это я не об здесь.


 
Eraser ©   (2008-08-24 03:43) [17]

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


 
Германн ©   (2008-08-24 03:49) [18]


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


Ааа.
Понял. :)


 
oxffff ©   (2008-08-24 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 ©   (2008-08-24 11:59) [20]

Из неозвученного.

Добавили exit с параметром.
Еще добавили три виртуальных метода в Tobject
GetHashCode, Еquals, ToString.


 
Городской Шаман   (2008-08-24 12:25) [21]


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


С Java. А вообще удобно.


 
Псалтырь ©   (2008-08-24 12:56) [22]


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

Уже щупают некоторые. Партнерам раздали пре-бета для тестов.


 
DVM ©   (2008-08-24 14:43) [23]


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

мужик с бородой колоритный


 
ketmar ©   (2008-08-24 17:19) [24]

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

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

---
All Your Base Are Belong to Us


 
Petr V. Abramov ©   (2008-08-24 21:15) [25]


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

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

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

нафига?


 
Городской Шаман   (2008-08-24 22:06) [26]


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


Для работы с системоей не через задниц проход(WOW64). Сейчас в 64-битных системах программы на Delphi работают хуже чем на Wine.


 
просто так   (2008-08-24 22:21) [27]

попробовал пререлиз, возникли проблемы с object`ом, незря в хелпах давно про устарение писали((


 
oxffff ©   (2008-08-24 22:48) [28]


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


ГДЕ????????


 
oxffff ©   (2008-08-24 22:50) [29]

Реально есть. :)
Нашел. Качаю


 
oxffff ©   (2008-08-24 22:50) [30]

Реально есть. :)
Нашел. Качаю


 
Andy BitOff ©   (2008-08-24 23:12) [31]

> oxffff ©   (24.08.08 11:54) [19]

Дык сцылочкой поделитесь.


 
просто так   (2008-08-24 23:14) [32]

никакого вареза, просто нетерпеж
на торрентс.ру уже неделю болтается


 
oxffff ©   (2008-08-24 23:17) [33]

google
pre release TIBURON delphi


 
Prohodil Mimo ©   (2008-08-25 00:12) [34]

потом расскажете где больше глюков в 2005 или тут :о)


 
Германн ©   (2008-08-25 00:21) [35]


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

А почему для сравнения избрал именно 2005?


 
123-ий ©   (2008-08-25 08:30) [36]

на торрентс.ру выложили бету вроде


 
ZeroDivide ©   (2008-08-25 09:17) [37]


> on Aug. 25


Ну и?
Когда у америкосов понедельник начинаеться по мск времени?


 
TiBuron   (2008-08-25 10:07) [38]

> Ну и?
> Когда у америкосов понедельник начинаеться по мск времени?
>

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

Америкосы всё продумали, так что дружно пингуемся


 
Anatoly Podgoretsky ©   (2008-08-25 11:05) [39]

> ZeroDivide  (25.08.2008 9:17:37)  [37]

Да кто же в полночь торговать будет.


 
просто так   (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> все и заканчивалось обычно, но как этого не хватало в Делфи!


 
ketmar ©   (2008-08-27 07:49) [81]

>[66] Servy © (2008-08-26 21:44:00)
>правда без return :)

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

---
All Your Base Are Belong to Us


 
oxffff ©   (2008-08-27 08:21) [82]


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


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

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


 
ZeroDivide ©   (2008-08-27 11:22) [83]


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


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

По описанию и прайсу Oxygene уделывает Delphi. А вот как на счет применения в реальных боевых условиях? Юзал его?


 
jack128_   (2008-08-27 12:58) [84]


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

по прайсу по подробнее?  я так понял, что в качестве IDE используется MS Visual Studio ? То есть её тоже нуно покупать???


 
oxffff ©   (2008-08-27 20:12) [85]


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


Я пока больше теоретик.


 
SpellCaster   (2008-08-28 15:54) [86]

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

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

C шаблонами пока е разбирался, насчет анонимных методов пока не могу придумать, где могут понадобиться. Лучше бы локальные переменные внутри блока сделали б, что ли )).


 
pasha_golub ©   (2008-08-28 16:17) [87]


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

Класс!


 
Ega23 ©   (2008-08-28 16:22) [88]


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


Нда, приятная мелочь...  :)


 
федот   (2008-08-28 21:07) [89]

ап, еще мнения будут?


 
ketmar ©   (2008-08-28 21:12) [90]

>[86] SpellCaster (2008-08-28 15:54:00)
анонимы как раз рулят. я приводил пример, где и когда.

---
Do what thou wilt shall be the whole of the Law.


 
федот   (2008-08-28 21:21) [91]

Кстати уже доступен свежий билд (RC или релиз?)
12.0.3155.16733, с хэлпом в комплекте.


 
DVM ©   (2008-08-28 21:24) [92]


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

где?


 
TiBuron   (2008-08-28 21:41) [93]

> весь релиз лежит на оф. сайте


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



> где?

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

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

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

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

зы: когда ссылки на реальный оф. релиз появятся, на e-mail придут уведомления, для тех, кто подписался


 
oxffff ©   (2008-08-28 23:34) [94]

Завтра на работе устрою разбор реализации анонимных методов и шаблонов.


 
oxffff ©   (2008-08-28 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 ©   (2008-08-29 00:10) [96]

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

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

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

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

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

Слегка изменился код инстранцирования параметризованных классов.
Есть предположения, завтра проверю.
Завтра я вниметельно разберу все под отладчиком.
И возможно сообщу здесь, если вдруг не забухаю.
Теперь спать.


 
oxffff ©   (2008-08-29 00:17) [97]


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

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

Небольшое отступление. Я смотрел их "хитрый" код для сопоставления для типов классовоберток оператора сравнения.
Мозг не сломаешь, но выкрутасы честно говоря не выразительные.


 
oxffff@yandex.ru   (2008-08-29 09:37) [98]


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


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

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

Например is, as, приведение запрещены над Т. Хотя .net для этих целей
использует опкод box <T>, т.е. приводит к управляемому типу.
Зачем было тогда нацеплять идеалогию, которая не будет ложится полностью на native delphi.
Ну и запрет на использование операторов меня просто удивили.


 
Anatoly Podgoretsky ©   (2008-08-29 09:51) [99]

> oxffff@yandex.ru  (29.08.2008 9:37:38)  [98]

Модно и зависть.


 
oxffff ©   (2008-08-29 10:04) [100]


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


Будьте любезны поправьте мой пост [98].
Поправьте заголовок. оставьте просто oxffff


 
Anatoly Podgoretsky ©   (2008-08-29 10:27) [101]

> oxffff  (29.08.2008 10:04:40)  [100]

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


 
федот   (2008-08-29 10:53) [102]

Кстати многие изменения подробно описаны в хелпе.


 
SpellCaster   (2008-08-29 10:57) [103]

> [90] ketmar ©   (28.08.08 21:12)
Пример-то есть, но что-то особой пользы я от него не вижу %)

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



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


Угу... вот только ToString, насколько я понял, никто не перекрывает, а базовый метод тупо возвращает ClassName. То бишь пользы от этой фени - 0.


 
федот   (2008-08-29 11:14) [104]

)))))))
Это специально и сделано что бы иметь возможность перекрыть и реализовать.


 
SpellCaster   (2008-08-29 13:21) [105]

> [104] федот   (29.08.08 11:14)

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

Ps Риббон контролы вызывают эксепшен при попытке перетащить на форму, однако демка компилится. Ну, что ж, симпатично сделано. Закос под офис07 удался)


 
Tricky   (2008-08-29 16:07) [106]


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


Дык это и есть цензура. Кстати довольно алогичная она у вас.


 
Anatoly Podgoretsky ©   (2008-08-29 16:11) [107]

> Tricky  (29.08.2008 16:07:46)  [106]

Не путай отказ в публикации, с изменением текста сообщений (цензура). Если бы не было отказов, то все газеты и журналы были бы заполонены только графоманскими поделками. Редакция в праве отказать в публикации любой статьи, кроме тех, которые вынуждены печатать по решению суда. Публиковать не публиковать решение принимает редактор, на форумах он называется модератор.


 
Prohodil Mimo ©   (2008-08-29 19:05) [108]

Германн ©   (25.08.08 0:21) [35]
А почему для сравнения избрал именно 2005?


потому-что она первая из бдс и самая глючная. И эта первая с уникодом :о)


 
Anatoly Podgoretsky ©   (2008-08-29 19:21) [109]


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

Первая студия у них 7 - еще как то можно было назвать, с натяжкой.
Следующая 8, эту вообще студией называть стыдно и эта самая глюкавая.
Следующея 2005 и это действительно студия.


 
ZeroDivide ©   (2008-08-29 19:45) [110]

Меня, все-таки, больше всего прайс волнует. Она будет для России какая-то особенная или такая же подстава как для остальной еврозоны - долларовые цены со значком "Евро". Да и долларовая цена далека от цен на Турбо.

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

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


Это что это? Я не смогу через IBX к удаленному FireBird"у подключиться?


 
speller   (2008-08-29 20:14) [111]


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

Object оставили


 
speller   (2008-08-29 20:35) [112]

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

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

А вот справка на моей х64 винде не запустилась... В дистре вроде была.


 
Anatoly Podgoretsky ©   (2008-08-29 23:31) [113]

> speller  (29.08.2008 20:35:52)  [112]

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

Таже чепуха и в 2006


 
DVM ©   (2008-08-30 14:15) [114]

Скачал, посмотрел. Да, со старыми проектами проблем много. Замена PChar на PAnsiChar и подобное прокатит не везде. Но все же скомпилить кое что удалось.


 
jack128_   (2008-08-30 16:47) [115]

хе.

type
 TMyClass<T: record> = class

 end;

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

end;


Вполне успешно компилируется..


 
jack128_   (2008-08-30 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_   (2008-08-30 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_   (2008-08-30 17:06) [118]


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

НЕ исправили.


 
oxffff ©   (2008-08-30 18:32) [119]


> jack128_   (30.08.08 16:50) [116]


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

C := TMyClass<Integer>.Create.Free;
КАк так?


 
федот   (2008-08-30 18:35) [120]

var
C: TMyClass<Integer>;
begin
 TMyClass<Integer>.Create.Free;
end;


 
федот   (2008-08-30 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_   (2008-08-30 19:27) [122]


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

Блин,  лоханулся.. Глаз замылился, сорри.


 
jack128_   (2008-08-30 19:29) [123]


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

доступ через метод, а не поле сделай.


 
федот   (2008-08-30 19:43) [124]

Internal Error


 
oxffff ©   (2008-08-30 19:50) [125]

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

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

Мои 6 и 8 комментарий.


 
jack128_   (2008-08-30 22:10) [126]


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

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

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

var
 Func: reference to function: Integer;

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

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


 
Prohodil Mimo ©   (2008-08-30 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 ©   (2008-08-30 23:23) [128]

ммм-дааа... была у заюшки избушка лубяная, а у лисы ледяная...


 
KilkennyCat ©   (2008-08-30 23:26) [129]


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

а у подводного карлсона - термоядерный реактор!


 
boa_kaa ©   (2008-08-30 23:30) [130]


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

поди, лиса, вон! :D


 
KilkennyCat ©   (2008-08-30 23:33) [131]


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


уже: квартиру ищу...


 
Anatoly Podgoretsky ©   (2008-08-30 23:37) [132]

> Prohodil Mimo  (30.08.2008 23:20:07)  [127]

Кроме денег была и боязнь отстать от паровоза .NET
Так я знаю, что не будет, но я просто введу пару букв, хотя бы в комментарии, а не буду локализацию менять.
Так что эта особенно не новая, а существует с первых версий 200x и так не исправлено это, надо или все писать в UTF-8 или разрешить управлять этим в настройках.


 
Prohodil Mimo ©   (2008-08-30 23:44) [133]

Anatoly Podgoretsky ©   (30.08.08 23:37) [132]
не буду локализацию менять

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

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

а зачем всё в UTF-8? появились нестандартные символы - в UTF-8, а если их нет, то и ASCII сойдёт. Хотя - дело вкуса, а мен лишние байты жалко :о)


 
Anatoly Podgoretsky ©   (2008-08-31 00:17) [134]

> Prohodil Mimo  (30.08.2008 23:44:13)  [133]

Если бы было так, то проблем бы не было, а проблема в том, если эти не попадающие под локализацию символы появлялись потом, то запрос уже не делался и преобразование тоже. Не знаю, может этот глюк решили в Д2007/9 но в 2006 ухо надо было держать тоже. Кстати в VS тоже самое, не уследишь при сохранение, то можно и потерять и не сразу это заметишь. А у меня подозрение, что студия лицензирована у Микрософт.


 
speller   (2008-08-31 05:31) [135]

Сохраняешь русские буквы в ascii, отдаешь исходник индусу, а у него локаль другая и прощайте нужные буковки. А если это не тексты, а какие служебные символы? Индус просто что-то исправил в коде, ничего более не трогал, и тебе вернулись квадратики или какая еще хрень вместо текста.


 
ggg   (2008-08-31 09:37) [136]

А что теперь будут возвращать функции Ord и Chr?
Как стоит переписать функции шифрования, которые используют посимвольные операции над байтами?
Т.е. если сейчас написать шифрование xor на БДС 2007, в 2009 функция скомпилируется, но результат будет различен и дешифровать без конвертации в AnsiString не удастся?


 
speller   (2008-08-31 10:11) [137]


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

Вот такой код

var
 S: string;
begin
 S := IntToStr(Ord("я"));
 S := S + " ";
 S := S + IntToStr(Ord("&#64324;"));


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

// 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("&#64324;"));
lea edx,[ebp-$08]
mov eax,$0000fb44
call IntToStr
mov edx,[ebp-$08]
lea eax,[ebp-$04]
call @UStrCat


Русская буква осталась в ascii, а пробел пошел уже в юникоде... По-моему это глюк.


 
speller   (2008-08-31 10:24) [138]

нет, пробел не в юникоде, загнал я


 
Anatoly Podgoretsky ©   (2008-08-31 10:34) [139]

> ggg  (31.08.2008 9:37:16)  [136]

Все нормально, не волнуйся.


 
speller   (2008-08-31 11:17) [140]

На самом деле странно что вроде всё в юникоде, а ord на русской букве возвращает ascii значение. Или я просто чем-то не проникся?


 
speller   (2008-08-31 11:18) [141]

что выдаст ord("я") на компе индуса?


 
@!!ex ©   (2008-08-31 11:23) [142]

> [141] speller   (31.08.08 11:18)

Я так понимаю - зависит о того, в какой кодировке передана буква "я".
Не вижу проблемы.


 
Anatoly Podgoretsky ©   (2008-08-31 11:26) [143]

Код русской буквы "я", в соответствии с кодировкой.

> ord("я")

Откуда код? По всей видимости это в ANSI


 
speller   (2008-08-31 11:30) [144]


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

Вне зависимости, в какой кодировке исходник, ascii или utf-8, результат ord("я") = 255. Т.е. компилятор во время компиляции делает преобразование из юникода в ascii. Что он сделает если буквы "я" нет в локали индуса? Подставит значение юникода и в результате получится ord("я") = 1103?


 
Loginov Dmitry ©   (2008-08-31 12:27) [145]

а что там сейчас с длинными комментами на русском?


 
speller   (2008-08-31 14:14) [146]

а что было?


 
ggg   (2008-08-31 14:28) [147]

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

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


 
DVM ©   (2008-08-31 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 ©   (2008-08-31 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);


 
федот   (2008-08-31 22:21) [150]

это правильно, смотрите варнинги, которые есть.


 
DVM ©   (2008-08-31 22:24) [151]


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

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


 
DVM ©   (2008-08-31 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;


 
федот   (2008-09-01 20:15) [153]

Новый билд 12.0.3163.16897, чую  релиз.


 
oxffff ©   (2008-09-01 21:17) [154]

Намек понят.


 
DVM ©   (2008-09-01 21:19) [155]

Не не буду качать опять 600 мег. Теперь только релиз.


 
oxffff ©   (2008-09-01 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 ©   (2008-09-01 21:38) [157]


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


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


 
oxffff ©   (2008-09-01 21:43) [158]

Приколько.
Я тут несколько высказался "демократично" насчет их реализации, я их не оскорблял, просто указал на некоторые изъяны.

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

Sergey Antonov Says: Your comment is awaiting moderation.

Повторяю в моих постах не было оскорблений, просто голые факты.
Интересно это связано как то с их оценкой роли России в мироустройстве.


 
jack128_   (2008-09-01 22:59) [159]


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

в версии 12,0,3128,15596 все нормально..


 
oxffff ©   (2008-09-01 23:13) [160]


> jack128_   (01.09.08 22:59) [159]


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

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

P.S. Включи оптимизацию и перестрой.


 
jack128_   (2008-09-01 23:22) [161]

она включена.


 
oxffff ©   (2008-09-01 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_   (2008-09-02 00:53) [163]

Хм. Чудеса..  Щас запустил по новой дельфи, асм код глянуть.  Терь External error выдает..  Всё страньше и страньше, как говорила Алиса...


 
oxffff ©   (2008-09-02 08:30) [164]


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


Это не чудеса. Это ребята из Codegear.


 
oxffff ©   (2008-09-02 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   (2008-09-02 16:02) [166]


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

В исходнике UTF-8 представление буквы "я". Какая может быть зависимость от ввода?


 
федот   (2008-09-04 14:20) [167]

Очередная версия 3168.16957


 
oxffff ©   (2008-09-05 10:24) [168]

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


 
speller   (2008-09-05 10:38) [169]

после д7 без бутылки в д2009 хрен разберешься во всех новшествах, произошедших за этот период )


 
jack128_   (2008-09-05 10:55) [170]

да ладно - их по пальца одной руки пересчитать мона.
1) хелперы
2) advanced records
3) анонимные функции/замыкания
4) дженерики

Ну и там по мелочи, типа strict и Exit(FuncResult)...


 
Skyle ©   (2008-09-05 11:12) [171]


> jack128_   (05.09.08 10:55) [170]

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


 
Anatoly Podgoretsky ©   (2008-09-05 13:15) [172]

> Skyle  (05.09.2008 11:12:51)  [171]

Так на руке как раз 5 пальцев.


 
jack128_   (2008-09-05 13:34) [173]


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

это входит в Advanced records. Перегрузка операторов только для них допустима..


 
jack128_   (2008-09-06 13:05) [174]


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

прикольно.  Хотя в принципе - всё тоже самое можно и в 2007 сделать.


 
guav ©   (2008-09-06 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_   (2008-09-06 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 ©   (2008-09-06 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_   (2008-09-06 14:06) [178]


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

например???  То есть я понимаю, что при желании где угодно можэно ошибок наляпать.  Имеются в виду неочевидные какие нить ошибки


 
guav ©   (2008-09-06 14:23) [179]

Если у нас два разных смарт-поинтера, то может так получится что из одного сконтсруировали другой, и (вместо ожидаемого: увеличения общего числа ссылок/передачи владения/ошибки компиляции) оба будут владеть.

Не уверен что это применимо к Delphi (вообще Delphi у меня нет, я просто так сюда захожу), но в С++ это известная проблема.


 
jack128_   (2008-09-06 14:33) [180]

хм.  Да, ничего хорошего..
ну да ладно, и в таком виде нормально выглядит..


 
oxffff ©   (2008-09-06 16:43) [181]


> jack128_   (06.09.08 14:33) [180]


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


 
jack128_   (2008-09-06 16:58) [182]


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

Ну дополнительных - только один объект создается. Во вторых - а что предлагаешь ты??  Внедрить объекты на стеке (или деструкторы у рекордов) в язык??  И так много новоодений..


 
jack128_   (2008-09-06 16:59) [183]


> новоодений

нововведений


 
oxffff ©   (2008-09-07 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 ©   (2008-09-07 11:52) [185]


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


А скорее старовведения.


 
jack128_   (2008-09-07 15:25) [186]


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

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

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


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

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


 
oxffff ©   (2008-09-07 16:02) [187]


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


:)

см.

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

скачать здесь
http://cc.codegear.com/Item/21646


 
jack128_   (2008-09-07 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 ©   (2008-09-07 16:58) [189]


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


Мне легче я еще под градусом со вчерашнего. :)


 
guav ©   (2008-09-07 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_   (2008-09-07 19:19) [191]


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

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


 
guav ©   (2008-09-07 20:16) [192]


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

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

Вот смотри на аналогию: PChar это указатель на объект, а AnsiString - смарт-поинтер. Приведение AnsiString к PChar - олько явное.


 
pasha_golub ©   (2008-09-09 09:03) [193]

Ребят, а у меня вот вопрос. Если имеем С функцию экспортируемую из некой ДЛЛ, например,

       int return_int(const char *somename);


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

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

Если последнее, то каким макаром мне передать функции данные в кодировке UTF8? Ведь PChar у нас будет хранить UTF16, вроде как... С этим TEncoding голова пухнет.


 
jack128_   (2008-09-09 10:28) [194]


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

конечно следует менять.
PChar - теперь эквивалентен PWideChar


 
clickmaker ©   (2008-09-09 10:35) [195]

> C := TMyClass<Integer>.Create.Free;
> КАк так?

ну передумал создавать - чего непонятного?


 
pasha_golub ©   (2008-09-09 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 ©   (2008-09-09 12:40) [197]


> clickmaker ©  

а ты не получал еще диск с 2009?


 
clickmaker ©   (2008-09-09 12:44) [198]

> [197] KilkennyCat ©   (09.09.08 12:40)

не-а
я с дельфи почти не работаю. Так, шабашки мелкие на 5-ке в основном


 
KilkennyCat ©   (2008-09-09 12:50) [199]


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

понятно... ладно, буду ждать октября...


 
Anatoly Podgoretsky ©   (2008-09-09 13:21) [200]


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

PChar generic тип, значит нужно использовать фундаментальный PAnsiChar


 
Anatoly Podgoretsky ©   (2008-09-09 13:25) [201]


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

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

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


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

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


 
pasha_golub ©   (2008-09-09 17:18) [202]


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

Это как это?

У меня есть String. Она UTF16. В функцию я могу передать UTF8.


 
jack128_   (2008-09-09 17:24) [203]


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

вообще то сколько нужно терминирующих нулей в функцию передать -функция и опрделеяет. Дельфя тут как бы не причем ;-)


 
Anatoly Podgoretsky ©   (2008-09-09 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 ©   (2008-09-09 18:52) [205]

разве до 6? мне казалось что до 3-х.


 
Anatoly Podgoretsky ©   (2008-09-09 19:06) [206]

> wl  (09.09.2008 18:52:25)  [205]

Не будем устраивать торг. Желающие могут посмотреть точные данные в rfc или в какой либо педии.


 
pasha_golub ©   (2008-09-09 19:47) [207]


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


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

Это хорошо. А каким образом мне string переделать в UTF8string? Простым присваиванием?


 
Anatoly Podgoretsky ©   (2008-09-09 20:50) [208]

> pasha_golub  (09.09.2008 19:47:27)  [207]

Если ты хочешь переделать Юникод в UTF8 то в Дельф много функций, не считая функций из АПИ, которых одна, вокруг которой и паразитирует Дельфи.
Попробуй например UnicodeToUtf8


 
speller   (2008-09-10 06:53) [209]


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

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


 
Romkin ©   (2008-09-10 11:17) [210]

Если кто-то не в курсе еще, выложили триал Delphi 2009.
http://cc.codegear.com/Free.aspx?id=25876


 
Eraser ©   (2008-09-20 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   (2008-09-26 11:11) [212]

Забавная фича ))

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

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


 
blackman ©   (2008-09-26 11:31) [213]

Anatoly Podgoretsky ©   (23.08.08 21:25)  
Дождались
Покупать что ли будешь?
Денег выделили?
Или просто так радуешься? За других счастливчиков...


 
Anatoly Podgoretsky ©   (2008-09-26 12:11) [214]

> blackman  (26.09.2008 11:31:33)  [213]

За державу


 
blackman ©   (2008-09-26 12:23) [215]

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

Вообще-то, мне лично и D6-7 хватает.
Не нужны эти новые примочки для лишних заморочек усталого старческого сознания  :)


 
Anatoly Podgoretsky ©   (2008-09-26 12:59) [216]

> blackman  (26.09.2008 12:23:35)  [215]

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

Ну а мне не хватает, по крайней мере с 1996 года, и остро с 2001 с переходом на Юникод ОСи


 
Eraser ©   (2008-09-26 14:55) [217]

> [215] blackman ©   (26.09.08 12:23)

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


 
blackman ©   (2008-09-26 15:23) [218]

Anatoly Podgoretsky ©   (26.09.08 12:59) [216]
и остро с 2001 с переходом на Юникод ОСи
Для и зачем перешел? Не понял...


 
Palladin ©   (2008-09-26 15:29) [219]


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

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


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

У самого то мыслей не возникает?


 
Anatoly Podgoretsky ©   (2008-09-26 16:14) [220]

> blackman  (26.09.2008 15:23:38)  [218]

А ты, что еще на не Юникод Полосатый Мух?


 
blackman ©   (2008-09-26 17:05) [221]

Anatoly Podgoretsky ©   (26.09.08 16:14) [220]
Совсем не нужно этих глупостей. Вполне обхожусь.


 
blackman ©   (2008-09-26 17:06) [222]

Т.е. вы не сможете привести ни одной по-настоящему веской причины применения


 
Anatoly Podgoretsky ©   (2008-09-26 19:13) [223]


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

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

Я боюсь предположить самое плохое :-)


 
pasha_golub ©   (2008-09-26 20:11) [224]


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

Я продаю свой продукт в Азию. Продажи идут хреново из-за отсутствия поддержки Уникода. Чем не веская причина?


 
uw ©   (2008-09-26 20:32) [225]


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

Рожа прям как у Копира, прости господи.


 
blackman ©   (2008-09-28 17:39) [226]

Anatoly Podgoretsky ©   (26.09.08 19:13) [223]
У тебя программы только на английском? Я боюсь предположить самое плохое :-)
Не боись! Не только :)

pasha_golub ©   (26.09.08 20:11) [224]
С азией не работаем, а остальным эти примочки ни к чему


 
SpellCaster   (2008-09-29 11:32) [227]

http://skiminog.livejournal.com/33610.html
подробно расписанные фичи 2009-ки, зачитываюсь)


 
pasha_golub ©   (2008-09-29 11:41) [228]


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


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

Окромя Азии есть еще Венгрия, Польша, Германия со своими умляутами, да не будут они помянуты на ночь, страны Балтики, Бразилия с Португезами тоже всякие крючочки полюбляют


 
blackman ©   (2008-09-29 13:24) [229]

pasha_golub ©   (29.09.08 11:41) [228]
Совсем не обязательно использовать. Латинского алфавита вполне достаточно.
Не художественное произведение пишем :)



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

Текущий архив: 2008.11.30;
Скачать: CL | DM;

Наверх




Память: 1.08 MB
Время: 0.011 c
2-1224225379
Darvin
2008-10-17 10:36
2008.11.30
TThread + OnException


4-1200806775
MTM
2008-01-20 08:26
2008.11.30
X509Certificate


2-1224221423
Sergey2
2008-10-17 09:30
2008.11.30
Прокрутка гиф-анимации в отдельном потоке при выполнении задачи


8-1188033550
hahol
2007-08-25 13:19
2008.11.30
помогите чайнику плз


2-1224182146
MZG
2008-10-16 22:35
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский