-
-
интересно, а эта поддержка Unicode там будет отключаемая? Т.е мало ли какие проблемы могут возникнуть в старых программах в связи с тем, что например, PChar станет PWideChar.
-
Я не понял, а пощупать-то ея можно?
-
> Delphi 2009 and C++Builder 2009, on Aug. 25
Это в каком году будет? В статье явного указания нет. Если в этом, тогда почему Delphi 2009 ? А если в будущем, то откуда такая точность?
-
> Это в каком году будет?
через 2 дня это будет
-
-
> а эта поддержка Unicode там будет отключаемая?
ReplaceAll = sring - AnsiString
-
> DVM (23.08.2008 21:55:04) [4]
В понедельник что ли?
-
> Anatoly Podgoretsky © (23.08.08 21:25)
This ain't no technological breakdown
Oh no, this is the road to hell
(с)
-
> В понедельник что ли?
Ну 25 августа в понедельник получается. Обещали же осенью этого года. Видать раньше успели.
-
> Embarcadero Technologies next week plans. Загадка несложная.
Уговорили. Пошел думать, какой сейчас год.
-
> palva (23.08.2008 22:16:10) [10]
Не забудь нам сообщить ответ на загадку.
-
предсмертные судороги, пора закрывать лавочку
-
> Polevi © (23.08.08 23:23) [12]
>
> предсмертные судороги, пора закрывать лавочку
Ну если юникод введут, то с Delphi перестанут уходить. Если и еще x64-bit, то начнут возвращаться.
-
> Городской Шаман (24.08.08 02:25) [13]
>
>
> > Polevi © (23.08.08 23:23) [12]
> >
> > предсмертные судороги, пора закрывать лавочку
>
>
> Ну если юникод введут, то с Delphi перестанут уходить. Если
> и еще x64-bit, то начнут возвращаться.
>
Эт ты об чём?
Или как?
-
Cофт не черствеет.
-
> Германн © (24.08.08 02:41) [14]
>
> Эт ты об чём?
> Или как?
Это я не об здесь.
-
-
> Городской Шаман (24.08.08 03:03) [16]
>
>
> > Германн © (24.08.08 02:41) [14]
> >
> > Эт ты об чём?
> > Или как?
>
>
> Это я не об здесь.
Ааа.
Понял. :)
-
-
Из неозвученного.
Добавили exit с параметром.
Еще добавили три виртуальных метода в Tobject
GetHashCode, Еquals, ToString.
-
> oxffff © (24.08.08 11:59) [20]
>
> Из неозвученного.
>
> Добавили exit с параметром.
> Еще добавили три виртуальных метода в Tobject
> GetHashCode, Еquals, ToString.
С Java. А вообще удобно.
-
> Andy BitOff © (23.08.08 21:45) [2]
>
> Я не понял, а пощупать-то ея можно?
Уже щупают некоторые. Партнерам раздали пре-бета для тестов.
-
-
>[23] DVM © (2008-08-24 14:43:00)
>мужик с бородой колоритный
АП с перепоя? %-)
---
All Your Base Are Belong to Us
-
> Ну если юникод введут, то с Delphi перестанут уходить.
может быть. но насчет того,что новых проектов начнет больше открываться, все ж сомневаюсь.
> Если и еще x64-bit, то начнут возвращаться.
нафига?
-
> Petr V. Abramov © (24.08.08 21:15) [25]
>
>
> > Ну если юникод введут, то с Delphi перестанут уходить.
>
>
> может быть. но насчет того,что новых проектов начнет больше
> открываться, все ж сомневаюсь.
>
> > Если и еще x64-bit, то начнут возвращаться.
>
> нафига?
Для работы с системоей не через задниц проход(WOW64). Сейчас в 64-битных системах программы на Delphi работают хуже чем на Wine.
-
попробовал пререлиз, возникли проблемы с object`ом, незря в хелпах давно про устарение писали((
-
> просто так (24.08.08 22:21) [27]
ГДЕ????????
-
Реально есть. :)
Нашел. Качаю
-
Реально есть. :)
Нашел. Качаю
-
> oxffff © (24.08.08 11:54) [19]
Дык сцылочкой поделитесь.
-
никакого вареза, просто нетерпеж
на торрентс.ру уже неделю болтается
-
google
pre release TIBURON delphi
-
потом расскажете где больше глюков в 2005 или тут :о)
-
> Prohodil Mimo © (25.08.08 00:12) [34]
>
> потом расскажете где больше глюков в 2005 или тут :о)
>
А почему для сравнения избрал именно 2005?
-
на торрентс.ру выложили бету вроде
-
> on Aug. 25
Ну и?
Когда у америкосов понедельник начинаеться по мск времени?
-
-
> ZeroDivide (25.08.2008 9:17:37) [37]
Да кто же в полночь торговать будет.
-
не работает typeof - на объекты имеющие vmt ругается что ее нет
-
-
-
Я сам не видел сабж (хотя вроде есть возможность ставить - к моему стыду я так и не принял участие в бете :((( ).
Но вот полезно почитать:
1. Манагер Ник Ходжес пишет
http://blogs.codegear.com/nickhodges/2008/08/25/391112. Теоретик Дельфи Ален Баер:
http://blogs.codegear.com/abauer. Там есть все ответы про уникод и про все остальное. Очень толково, только нужно временем запастись. Т.е. этот товарищь - тот, кто придумывает язык Дельфи. Ему можно верить.
-
Заказы принимаются, только не понятно за что. Скачать ничего нельзя. Прайс дифференцированный, для европейцев в 1.5 раза дороже (т.к. в евро), чем для америкосов. Для русских - не озвучено.
-
Я тут жутко был занят своим проектом. Поэтому не следил за новостями Дельфи последние полгода. Сейчас же почитал Алена Байера (
http://blogs.codegear.com/abauer).
Вот мое мнение.
Всё текущее поведение Дельфи должно сопровождаться:
а) Термоядерной ШТАТНОЙ докой (т.е. классным описанием, а не книгами за деньги от приближенных к разработчику авторов).
б) Эта ШТАТНАЯ дока должна соответсвовать поведению Дельфи :)
Иначе во всем этом разобраться будет не просто... И не имхо.
-
> Тимохов (26.08.08 01:21) [45]
>
> Я тут жутко был занят своим проектом. Поэтому не следил
> за новостями Дельфи последние полгода. Сейчас же почитал
> Алена Байера (http://blogs.codegear.com/abauer).
>
> Вот мое мнение.
> Всё текущее поведение Дельфи должно сопровождаться:
> а) Термоядерной ШТАТНОЙ докой (т.е. классным описанием,
> а не книгами за деньги от приближенных к разработчику авторов).
>
> б) Эта ШТАТНАЯ дока должна соответсвовать поведению Дельфи
> :)
>
> Иначе во всем этом разобраться будет не просто... И не имхо.
>
>
Лучше я пока ограничусь ТП6 и Д4, Д6.
А там посмотрим.
-
2Германн
Ну в общем верно. Я бы тоже не слезал ни с шестерки, ни с семерки.
Если честно, то меня ввели в заблуждение и сказали, что Д7 более не лицензируеца года 2-3 назад. Поэтому я купил в свое время Д2005, а там пошло-пехало. Вот и до 2009 дожил. Правда, пока не заказал...
ЗЫ Знаете ли вы, но всемирноизвестный установщик inno setup до сих пор для своей компиляции использует ДЕЛЬФИ ДВААААА!!! При этом программа установки работает (почти) корректно и на Висте... Видимо нас дурят немного (я не КодГир имею в виду, а вообще всю братию, кто зарабатывает на разработке софта - купи новую версию, а то старая безбожно устарела...).
-
Никто нас не дурят. Хошь бери хошь нет. Больше компонентов, новые фичи, новый и более удобный редактор. Исправленные баги компилятора и IDE.
Я вот собираюсь переходить на тибурон только из за того что там юникод в VCL. Хотя давно уже юзаю KOL MCK - там изначально юникод. Но есть пару проектов на VCL.
-
А так юзаю Delphi 7 уже давным давно.
-
Если Object убрали то это конечно плохо. KOL построен на нем.
-
> ЗЫ Знаете ли вы, но всемирноизвестный установщик inno setup
> до сих пор для своей компиляции использует ДЕЛЬФИ ДВААААА!
> !!
Знаем. И это автор сам говорит. Но зачем так кричать?
-
> Tricky (26.08.08 02:23) [48]
> Никто нас не дурят.
Да шучу я :)
Не зря MBA есть по информационным технологиям - все это бизнес.
-
> [47] Тимохов (26.08.08 02:13)
> Видимо нас дурят немного
не дурят, в версиях до 2007 приходилось всю логику работы с формами изрядно потрошить для корректной работы с вистой, а сейчас все автоматически.
-
> не дурят, в версиях до 2007 приходилось всю логику работы
> с формами изрядно потрошить для корректной работы с вистой,
> а сейчас все автоматически.
В чем это конкретно выражалось?
-
> [54] Тимохов (26.08.08 03:27)
хотя бы в такой мелочи, как отображение содержимого окна при alt + tab. Так же, начиная с Д2007 стало намного проще делать приложения, в которых несколько окон могут размещаться на такс-баре, до этого чтобы все конкретно работало приходилось использовать парочку очень нетривиальных хаков.
про поддержку Aero-Glass и прочие чисто вистовские навороты вообще молчу )
-
>[55] Eraser © (2008-08-26 03:31:00)
m$ как всегда напилила фигни, которая со старым не совместима, а виноваты оказались разработчики систем программирования, да.
---
Understanding is not required. Only obedience.
-
> ZeroDivide (26.08.2008 0:38:44) [44]
Для русских в 24 раза дешевле, так как в рублях.
-
> Тимохов (26.08.2008 1:21:45) [45]
Раскатал губу.
-
> Германн (26.08.2008 2:05:46) [46]
> Лучше я пока ограничусь ТП6 и Д4, Д6.
Видимо тебя задачи не ограничивают, а я вот вынужден был проверить все версии начиная с Д5 по Д2006 - только последнея подошла, серьезные ошибки в АДО, просто непонятно как такие ошибки можно было сделать и еще интереснее, как их было можно не заметить. Вроде еще не все ошибки исправлены, но меня уже устраивает.
-
> Тимохов (26.08.2008 2:13:47) [47]
Тебя не обманывали, это в России сбывали остатки.
Правда потом все равно обманули, глядя на Россию Борланд напечатал дополнительный тираж.
-
После того как выйдет SP1 (или 2) можно будет глянуть :)
поэтому пока посидим на 7, Турбо...
-
> [56] ketmar © (26.08.08 07:45)
ну это уже в порядке вещей. GUI это цветочки, куда больше проблем с другими новшествами висты.
-
Анонимные методы ддо конца не понял - и так ведь работало с процедурными типами. Правда объектные / необъектные различались.
-
> Анонимные методы ддо конца не понял - и так ведь работало
> с процедурными типами
Действительно кто то может дать толковое объяснение, чем отличаются?
-
>[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.
-
> не надо заводить идентификатор для каждого чиха. ну, и я
> так понимаю, что можно будет делать такое:
> 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'ов его можно определить, жаль для классов вне дот нета все еще нельзя), и вроде логично было бы его использовать "по умолчанию". Если у кого-нибудь есть идеи, как красиво разрешить данную ситуацию, буду рад услышать.
Эхх, еще бы доку нормальную по всем новым возможностям. Пока несбыточные мечты :).
-
Посмотри реализацию их TList<T>.
Подключи generics.Collections.
Опиши результат здесь.
-
Хотя
http://www.xakep.ru/post/44864/default.asp?print=true+ Еще всплывают новые факты например запрещено использовать
шаблоны в обычных процедурах и функциях.Я бы им поставил два с минусом за реализацию шаблонов. Передрать идеалогию с .NET. Что своих мозгов что ли нет!
Запрет на использование оператора при работе с параметризованным параметром вызван ограничением IL набора, у которого инструкция
ceq и ей подобные ограничены только определенными типами.
int, F, & и O.
оно и понятно поскольку неизвестно какую обертку оператора подставлять для сравнения типа. Например как сравнивать value типы и им подобные.
Конечно есть способы, но они выбрали такой способ.
Но здесь нет байкода. Все известно во время компиляции.
Если это так. То просто огромный НЕЗАЧЕТ.
Уж взяли бы идеалогию template из С++.
Я в шоке и расстроен.
НО здесь нет
-
Посмотрел.
У них используется следующий интерфейс:
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 указать самому, если он того возжелает.
-
> В этом самом Default вся woodoo magic и заключается.
Да это их любимые выкрутасы. Но зачем?
Я так понимаю, они хотят унифицировать x86 код для любых object типов.
То есть фактически будет использован тот же код, если параметризованный параметр будет object типа. А различный код для value типов. Все как в .NET.
Это что же получается для того, чтобы сравнить элементы они во первых должны быть одного и того же типа.
А во вторых, чтобы сделать такую ничтожную операцию как сравнение нужно вызвать внешний код через таблицу VMT интерфейса, вместо того чтобы сделать просто inline кода сравнения для известного типа.
Это, чтобы пробежаться по коллекции
Поэтому от сюда правила. Следуют избегать их неэффективные выкрутасы. А делать прямое сравнение. Например
List<T>.Items[5]=5, что будет эффективней.
Понятно? :)
-
Теперь понятно зачем они ввели виртуальный метод в Tobject под названием equals.
-
Servy © (26.08.08 23:22) [69]
Посмотри пожалуйста перечисление с giComparer, такие они еще туда операции вставили?
_LookupVtableInfo такого небыло раньше в system.pas
Что же смотрю интроспекция расширяется, значит будет что расковырять в ближайшее время(хоть это радует).
-
Кстати еще одна мелкая но приятная фишка - подсказки (в случае, если они не разваливаются с ощибками ^_^) при использовании 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 байта, чудо свершилось :).
-
> _LookupVtableInfo такого небыло раньше в system.pas
Оно в Generics.Defaults
> Посмотри пожалуйста перечисление с giComparer, такие они
> еще туда операции вставили?
Вот вам самые эти занимательные модули (Generics.Collections и Generics.Defaults)
http://slil.ru/26091378 (12 Кб).
Смотрите на здоровье, потому как ваш вопрос был мною непонят :)
-
> Servy © (26.08.08 23:44) [73]
> Кстати еще одна мелкая но приятная фишка - подсказки
Я думаю это так и должно быть. Что еще можно по другому? :)
-
> Servy © (26.08.08 23:50) [74]
Спасибо. Я скачал prerelease но требует от меня какую то лиценцию на Ribbon controls, вообщем зашел на microsoft, там им нужно что то отправить чтобы они тебе прислали лицензию. Вообщем я послал их ...
Есть способ проще?
Ты откуда слил?
-
> Ты откуда слил?
С упомянутого здесь торрентс ру.
-
TDefaultGenericInterface = (giComparer, giEqualityComparer);
Направление их мысли мне понятно. Вычленение набора операций в отдельную сущность. Хотя их де факто две giComparer, giEqualityComparer.
Теперь вопрос на один миллион долларов как быть с остальными операторами + - и т.д. :))))))))))))
-
> Я думаю это так и должно быть. Что еще можно по другому?
> :)
А в Microsoft Visual Studio, с которой мне приходиться иметь дело на работе, не так. Все-таки есть разница между скрином в
[73] и
http://www.valar.ru/upload/jpg/0808/1219778614_screen2.htm (аналогичная подсказка в MVS).
Хотя, все это само собой мелочи.
> Теперь вопрос на один миллион долларов как быть с остальными
> операторами + - и т.д. :))))))))))))
Видимо, нам придется обойтись без оных. Правда, темплейты явно теряют часть своей привлекательности... Но хоть теперь есть готовые и (я надеюсь) отлаженные list и map (тут они его вроде dictionary назвали), в которые можно без зазрения совести пихать record'ы, и не мучиться с созданием/убийством обекътов там, где они не нужны. А также без необходимости тип приводить руками при каждом обращении, либо наследника от TList писать для каждого чиха. Нет, все таки наш арсенал немного возрос, а скорость компиляции вроде не пострадала, что ни может не радовать.
-
> Нет, все таки наш арсенал немного возрос, а скорость компиляции
> вроде не пострадала, что ни может не радовать
да уж, не сказал бы, что в C# часто приходилось пользоваться какими-то сложнейшими конструкциями с шаблонами, List<T> все и заканчивалось обычно, но как этого не хватало в Делфи!
-
>[66] Servy © (2008-08-26 21:44:00)
>правда без return :)
угу. пардон, недоперенастроил мозг с сей. %-)
---
All Your Base Are Belong to Us
-
> Нет, все таки наш арсенал немного возрос,
Дык, я не спорю. Это хорошо. Только как то немножко противно, что все делается с оглядкой на C#.
P.S. Я почемуто стал обращать внимание на D и Oxygene.
-
>
> P.S. Я почемуто стал обращать внимание на D и Oxygene.
Вообще RemObjects рулит, я давно уже юзаю PS и доволен им. ИМХО, другие продукты этой компании не должны быть хуже по качеству.
По описанию и прайсу Oxygene уделывает Delphi. А вот как на счет применения в реальных боевых условиях? Юзал его?
-
> и прайсу Oxygene уделывает Delphi.
по прайсу по подробнее? я так понял, что в качестве IDE используется MS Visual Studio ? То есть её тоже нуно покупать???
-
> ZeroDivide © (27.08.08 11:22) [83]
Я пока больше теоретик.
-
Вот и я добрался до пощупывания Акулы (если кому надо, весь релиз лежит на оф. сайте, ссылки и лекарство в разделе Варезник ру-борда).
Что могу сказать, обновления радуют, а вот реализация не очень... все новые фичи какие-то недоделанные.
Класс эксплорер при добавлении элементов каждый раз генерит новую секцию, диспетчер ресурсов почему-то не создает автоматом кода для загрузки картинки, как на презентации, новые компоненты вообще хз как работают - на вид ничем не отличаются. А баллун хинт почти нельзя настроить, к тому же он с забивает на положение мыши и возникает всегда под ней. ToString у объекта - вещь хорошая, вот только если б она еще и прописана была, а то тупо возвращает имя класса, и всё.
Вот exit с параметром - это единственная фича, которая пока что мне больше всего понравилась)). Теперь можно забыть про дурацкие
if Suxx then
begin
Result:="Suxx"; Exit;
end
и делать if Suxx then Exit("Suxx") - мелочь, а приятно)
C шаблонами пока е разбирался, насчет анонимных методов пока не могу придумать, где могут понадобиться. Лучше бы локальные переменные внутри блока сделали б, что ли )).
-
> и делать if Suxx then Exit("Suxx") - мелочь, а приятно)
Класс!
-
> и делать if Suxx then Exit("Suxx") - мелочь, а приятно)
Нда, приятная мелочь... :)
-
ап, еще мнения будут?
-
>[86] SpellCaster (2008-08-28 15:54:00)
анонимы как раз рулят. я приводил пример, где и когда.
---
Do what thou wilt shall be the whole of the Law.
-
Кстати уже доступен свежий билд (RC или релиз?)
12.0.3155.16733, с хэлпом в комплекте.
-
> Кстати уже доступен свежий билд
где?
-
> весь релиз лежит на оф. сайте
> Кстати уже доступен свежий билд (RC или релиз?)
> где?
Вот именно что, Где?
Не надоело ещё людям мозг пудрить. Методом тыка и подборки имён архивов заюзали списочек из ссылок
http://installers.codegear.com/release/radstudio/12.0.3155.16733/***.7zipСкачали, и радуетесь, что оф. релиз скачали :) Ну прям дети. Никто не даёт гарантию, что это именно файлы релиза, а не какой-нибудь промежуточной сборки. Может поэтому и недоступен на codegear он-лайн инсталлятор
Лучше уж дождаться ISO-образа. На этой неделе скорее весго его и выложат.
зы: когда ссылки на реальный оф. релиз появятся, на e-mail придут уведомления, для тех, кто подписался
-
Завтра на работе устрою разбор реализации анонимных методов и шаблонов.
-
Первые исследования показывают,что 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.
-
Что меня сейчас реально расстроило, код для инстанцированых шаблонов с разным параметризованных параметров отличается.
Однако зачем было городить поддержку использования операторов в параметризованных классов через унифицированный интерфейс, т.е через жопу я не знаю. Это же не .NET.
Я тут уже слегка кратко выше разобрал их реализацию
Возможно я сейчас чего не до конца понимаю, однако завтра я разберу все на винтики.
Теперь далее.
Слегка изменился код инстранцирования параметризованных классов.
Есть предположения, завтра проверю.
Завтра я вниметельно разберу все под отладчиком.
И возможно сообщу здесь, если вдруг не забухаю.
Теперь спать.
-
> oxffff © (29.08.08 00:10) [96]
> Что меня сейчас реально расстроило, код для инстанцированых
> шаблонов с разным параметризованных параметров отличается.
>
Уточние.
Точнее не расстроило, однако прикручивание операции сравнения через унифицированный интерфейс для известного на этапе компиляции типа меня сильно растроило. То есть не будет вам динамического инстанцирования шаблонов как в .NET. Я его и не ждал конечно, однако унифицированый интерфейс наводил на такие мысли.
Вообщем могли бы сделать полу generics, полу template. Я ожидал этого.
НО!!!..
Небольшое отступление. Я смотрел их "хитрый" код для сопоставления для типов классовоберток оператора сравнения.
Мозг не сломаешь, но выкрутасы честно говоря не выразительные.
-
> Слегка изменился код инстранцирования параметризованных
> классов
Нет, код такой же.
Далее
Мое мнение о реализации generics - это полу generics.
Например is, as, приведение запрещены над Т. Хотя .net для этих целей
использует опкод box <T>, т.е. приводит к управляемому типу.
Зачем было тогда нацеплять идеалогию, которая не будет ложится полностью на native delphi.
Ну и запрет на использование операторов меня просто удивили.
-
> oxffff@yandex.ru (29.08.2008 9:37:38) [98]
Модно и зависть.
-
> Anatoly Podgoretsky © (29.08.08 09:51) [99]
Будьте любезны поправьте мой пост [98].
Поправьте заголовок. оставьте просто oxffff
-
> oxffff (29.08.2008 10:04:40) [100]
У нас нет цензуры, можно только не принять статью к публикации, а редактировать не положено.
-
Кстати многие изменения подробно описаны в хелпе.
-
> [90] ketmar © (28.08.08 21:12)
Пример-то есть, но что-то особой пользы я от него не вижу %)
> [95] oxffff © (28.08.08 23:51)
> Первые исследования показывают,что Tobject обзавелся новыми
> методами
Угу... вот только ToString, насколько я понял, никто не перекрывает, а базовый метод тупо возвращает ClassName. То бишь пользы от этой фени - 0.
-
)))))))
Это специально и сделано что бы иметь возможность перекрыть и реализовать.
-
> [104] федот (29.08.08 11:14)
C таким же успехом можно было и самим это провернуть, вот если бы они для каждого класса вывод соотв инфы сделали, было б круто)
Ps Риббон контролы вызывают эксепшен при попытке перетащить на форму, однако демка компилится. Ну, что ж, симпатично сделано. Закос под офис07 удался)
-
> У нас нет цензуры, можно только не принять статью к публикации,
> а редактировать не положено.
Дык это и есть цензура. Кстати довольно алогичная она у вас.
-
> Tricky (29.08.2008 16:07:46) [106]
Не путай отказ в публикации, с изменением текста сообщений (цензура). Если бы не было отказов, то все газеты и журналы были бы заполонены только графоманскими поделками. Редакция в праве отказать в публикации любой статьи, кроме тех, которые вынуждены печатать по решению суда. Публиковать не публиковать решение принимает редактор, на форумах он называется модератор.
-
Германн © (25.08.08 0:21) [35]
А почему для сравнения избрал именно 2005?
потому-что она первая из бдс и самая глючная. И эта первая с уникодом :о)
-
> потому-что она первая из бдс и самая глючная.
Первая студия у них 7 - еще как то можно было назвать, с натяжкой.
Следующая 8, эту вообще студией называть стыдно и эта самая глюкавая.
Следующея 2005 и это действительно студия.
-
Меня, все-таки, больше всего прайс волнует. Она будет для России какая-то особенная или такая же подстава как для остальной еврозоны - долларовые цены со значком "Евро". Да и долларовая цена далека от цен на Турбо.
А еще вот эта строчка смущает:
Delphi 2009 Professional
"...и гибкие возможности для соединения с локальными базами данных."
Это что это? Я не смогу через IBX к удаленному FireBird'у подключиться?
-
> Если Object убрали то это конечно плохо. KOL построен на
> нем
Object оставили
-
Ковыряю потихоньку сабж - на первый взгляд очень хорошо всё, работает очень шустро. Решил сразу проверить юникод - внатуре работает :) Редактор изначально русские буковки в cp1251 сохраняет, но если вставить какую абракадабру в исходник - предлагает сохранить в utf-8. Вот бы еще найти как по умоляанию в юникод всё сохранять...
Настройки почти все подхватила от установленной 6-ки. Некоторые по-своему сделала.
А вот справка на моей х64 винде не запустилась... В дистре вроде была.
-
> speller (29.08.2008 20:35:52) [112]
> Редактор изначально русские буковки в cp1251 сохраняет, но если вставить какую абракадабру в исходник - предлагает сохранить в utf-8.
Таже чепуха и в 2006
-
Скачал, посмотрел. Да, со старыми проектами проблем много. Замена PChar на PAnsiChar и подобное прокатит не везде. Но все же скомпилить кое что удалось.
-
хе.
type
TMyClass<T: record> = class
end;
procedure TForm2.FormCreate(Sender: TObject);
var
C: TMyClass<Integer>;
begin
end;
Вполне успешно компилируется..
-
мдя..
procedure TForm2.FormCreate(Sender: TObject);
var
C: TMyClass<Integer>;
begin
C := TMyClass<Integer>.Create.Free;
end;
при этом
C := TMyClass<Integer>.Create;
С.Free;
нормально колмпилируется..
-
блин. И старую ошибку с 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 // тут интернал еррор...
-
> блин. И старую ошибку с advanced records
НЕ исправили.
-
> jack128_ (30.08.08 16:50) [116]
Ты что то не так понял.
C := TMyClass<Integer>.Create.Free;
КАк так?
-
var
C: TMyClass<Integer>;
begin
TMyClass<Integer>.Create.Free;
end;
-
Вообщем харе народ пугать, оба примера которые вы привели отлично раюотают )
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
-
> C := TMyClass<Integer>.Create.Free;
Блин, лоханулся.. Глаз замылился, сорри.
-
> FMyRec: TAdvRec;
> public
> property MyRec: TAdvRec read FMyRec;
доступ через метод, а не поле сделай.
-
Internal Error
-
-
> Я тут слегка на них наехал за их реализацию Generics.
ну в асм я не лез, а чисто на практике - невозможность использовать опрераторы над дженериками - это аццтой..
ПРидирка:
нельзя написать так:
var
Func: reference to function: Integer;
требуется описать тип
TFunc = reference to function : Integer;
var
Func: TFunc;
хотя например записи таким макаром нормально всегда описывались
-
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]
поди, лиса, вон! :D
-
> boa_kaa © (30.08.08 23:30) [130]
>
>
> > KilkennyCat © (30.08.08 23:26) [129]
>
> поди, лиса, вон! :D
уже: квартиру ищу...
-
> Prohodil Mimo (30.08.2008 23:20:07) [127]
Кроме денег была и боязнь отстать от паровоза .NET
Так я знаю, что не будет, но я просто введу пару букв, хотя бы в комментарии, а не буду локализацию менять.
Так что эта особенно не новая, а существует с первых версий 200x и так не исправлено это, надо или все писать в UTF-8 или разрешить управлять этим в настройках.
-
Anatoly Podgoretsky © (30.08.08 23:37) [132]
не буду локализацию менять
отображение неуникода - не совсем локализация.
надо или все писать в UTF-8 или разрешить управлять этим в настройках
а зачем всё в UTF-8? появились нестандартные символы - в UTF-8, а если их нет, то и ASCII сойдёт. Хотя - дело вкуса, а мен лишние байты жалко :о)
-
> Prohodil Mimo (30.08.2008 23:44:13) [133]
Если бы было так, то проблем бы не было, а проблема в том, если эти не попадающие под локализацию символы появлялись потом, то запрос уже не делался и преобразование тоже. Не знаю, может этот глюк решили в Д2007/9 но в 2006 ухо надо было держать тоже. Кстати в VS тоже самое, не уследишь при сохранение, то можно и потерять и не сразу это заметишь. А у меня подозрение, что студия лицензирована у Микрософт.
-
Сохраняешь русские буквы в ascii, отдаешь исходник индусу, а у него локаль другая и прощайте нужные буковки. А если это не тексты, а какие служебные символы? Индус просто что-то исправил в коде, ничего более не трогал, и тебе вернулись квадратики или какая еще хрень вместо текста.
-
А что теперь будут возвращать функции Ord и Chr?
Как стоит переписать функции шифрования, которые используют посимвольные операции над байтами?
Т.е. если сейчас написать шифрование xor на БДС 2007, в 2009 функция скомпилируется, но результат будет различен и дешифровать без конвертации в AnsiString не удастся?
-
> А что теперь будут возвращать функции Ord и Chr?
Вот такой код
var
S: string;
begin
S := IntToStr(Ord('я'));
S := S + ' ';
S := S + IntToStr(Ord('פּ'));
компилируется в
lea edx,[ebp-$04]
mov eax,$000000ff
call IntToStr
lea eax,[ebp-$04]
mov edx,$0046421c
call @UStrCat
lea edx,[ebp-$08]
mov eax,$0000fb44
call IntToStr
mov edx,[ebp-$08]
lea eax,[ebp-$04]
call @UStrCat
Русская буква осталась в ascii, а пробел пошел уже в юникоде... По-моему это глюк.
-
нет, пробел не в юникоде, загнал я
-
> ggg (31.08.2008 9:37:16) [136]
Все нормально, не волнуйся.
-
На самом деле странно что вроде всё в юникоде, а ord на русской букве возвращает ascii значение. Или я просто чем-то не проникся?
-
что выдаст ord('я') на компе индуса?
-
> [141] speller (31.08.08 11:18)
Я так понимаю - зависит о того, в какой кодировке передана буква 'я'.
Не вижу проблемы.
-
Код русской буквы "я", в соответствии с кодировкой.
> ord('я')
Откуда код? По всей видимости это в ANSI
-
> зависит о того, в какой кодировке передана буква
Вне зависимости, в какой кодировке исходник, ascii или utf-8, результат ord('я') = 255. Т.е. компилятор во время компиляции делает преобразование из юникода в ascii. Что он сделает если буквы "я" нет в локали индуса? Подставит значение юникода и в результате получится ord('я') = 1103?
-
а что там сейчас с длинными комментами на русском?
-
а что было?
-
Да не обязательно с комментариями. Если в строке были русские символы, то экран "уезжал" вправо пропорционально их количеству, а курсор оставался где-то слева, за границей области видимости.
Всё-таки как-то не убедительно с Ord :) Похоже, в случае с Ord('я') просто компилятор подставляет константу. Может для чистоты эксперимента попробуете строку взять из элемента формы?
-
В связи с тестированием 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 и никаких сообщений компилятор не выдает. Странно как то.
Как бы мне заставить это работать в обеих версиях делфи?
-
Наше проблему, дело оказалось не в 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]
варнинг только в D2009 появлялся, в D7 его не было, я поэтому как то среди прочих сообщений не обратил внимания сразу на него.
-
чтобы без варнингов работало в обеих версиях, пришлось исправить:
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;
-
Новый билд 12.0.3163.16897, чую релиз.
-
Намек понят.
-
Не не буду качать опять 600 мег. Теперь только релиз.
-
Найден первый баг
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;
:(
-
> федот (01.09.08 20:15) [153]
> Новый билд 12.0.3163.16897, чую релиз.
Неа, я теперь стал ожидать множество сервис паков.
Просто огромное количество.
Честно говоря нельзя быть настолько небрежным в отношении реализации языка.
-
Приколько.
Я тут несколько высказался "демократично" насчет их реализации, я их не оскорблял, просто указал на некоторые изъяны.
Теперь. Очередной комментарий
Sergey Antonov Says: Your comment is awaiting moderation.
Повторяю в моих постах не было оскорблений, просто голые факты.
Интересно это связано как то с их оценкой роли России в мироустройстве.
-
> Найден первый баг
в версии 12,0,3128,15596 все нормально..
-
> jack128_ (01.09.08 22:59) [159]
У меня версия 12.0.3155.16733.
То есть получается они не делают, а ломают.
Нормально это исключение?
P.S. Включи оптимизацию и перестрой.
-
она включена.
-
Вот код для
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
-
Хм. Чудеса.. Щас запустил по новой дельфи, асм код глянуть. Терь External error выдает.. Всё страньше и страньше, как говорила Алиса...
-
> jack128_ (02.09.08 00:53) [163]
> Хм. Чудеса..
Это не чудеса. Это ребята из Codegear.
-
Еще вот чудеса.
Нельзя использовать 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
-
> Похоже, в случае с Ord('я') просто компилятор подставляет
> константу. Может для чистоты эксперимента попробуете строку
> взять из элемента формы?
В исходнике UTF-8 представление буквы "я". Какая может быть зависимость от ввода?
-
Очередная версия 3168.16957
-
-
после д7 без бутылки в д2009 хрен разберешься во всех новшествах, произошедших за этот период )
-
да ладно - их по пальца одной руки пересчитать мона.
1) хелперы
2) advanced records
3) анонимные функции/замыкания
4) дженерики
Ну и там по мелочи, типа strict и Exit(FuncResult)...
-
> jack128_ (05.09.08 10:55) [170]
5. Перегрузка операторов.
-
> Skyle (05.09.2008 11:12:51) [171]
Так на руке как раз 5 пальцев.
-
> 5. Перегрузка операторов.
это входит в Advanced records. Перегрузка операторов только для них допустима..
-
-
-
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; - это глюк или политика партии??
-
> [176] jack128_ (06.09.08 13:44)
> class operator Implicit(const AValue: TSmartPointer<T>):
> T; - это глюк или политика партии??
Кстати в С++ у стандартных сматр-поинтеров shared_ptr, auto_ptr, scoped_ptr и других нету неявного преобразования в обычный указатель, хотя оно могло бы быть реализовано. Вместо него - метод get(). Тут политика партии: такое неявное преобразования показало себя как источник ошибок.
-
> такое неявное преобразования показало себя как источник
> ошибок.
например??? То есть я понимаю, что при желании где угодно можэно ошибок наляпать. Имеются в виду неочевидные какие нить ошибки
-
Если у нас два разных смарт-поинтера, то может так получится что из одного сконтсруировали другой, и (вместо ожидаемого: увеличения общего числа ссылок/передачи владения/ошибки компиляции) оба будут владеть.
Не уверен что это применимо к Delphi (вообще Delphi у меня нет, я просто так сюда захожу), но в С++ это известная проблема.
-
хм. Да, ничего хорошего..
ну да ладно, и в таком виде нормально выглядит..
-
> jack128_ (06.09.08 14:33) [180]
Я бы так не сказал. В его примере дополнительно создается два объекта кучи.
-
> Я бы так не сказал. В его примере дополнительно создается
> два объекта кучи.
Ну дополнительных - только один объект создается. Во вторых - а что предлагаешь ты?? Внедрить объекты на стеке (или деструкторы у рекордов) в язык?? И так много новоодений..
-
> новоодений
нововведений
-
> 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.
Так что это не нововведения. :)
-
> Так что это не нововведения. :)
А скорее старовведения.
-
> Обертка анонимного метода с захватом AValue
в данной конкретной реализации смартпоинтера - да, два объекта. Но мона реализовать интерфейс, чтоб он явно уничтожал объект, а не выполнял какую то неизвестную фунцию, тогда будет только один объект.
Вобще они конечно зря смарт поинтеры в этот пример присобачили. Сила в примера в том, что мы может вообще что угодно сделать при выходе за scope. Смарт поинтер конечно самый полезный пример, но не единственный...
> Все они есть Delphi.NET.
>
> Так что это не нововведения. :)
ну мало ли что есть в .NET'е... давай еще скажем, что в delphi for win сборку мусора ввести - раз плюнуть и это никакое не нововедение будет...
-
-
-
> эм.. на слух английским только по глубокой пьяни владею.
> :-)
Мне легче я еще под градусом со вчерашнего. :)
-
> [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);
-
> неправильно, временный объект разрушится при ;
а вот в дельфи - smart pointer разрушится только при выходе из процедуры
-
> а вот в дельфи - smart pointer разрушится только при выходе
> из процедуры
а даже если ведёт себя как локальная переменная, можно сломать:
1. циклом, тогда объект последующей итерации будет создаваться на месте пердыдущего.
2. попыткой использовать после выхода из процедуры.
Вот смотри на аналогию: PChar это указатель на объект, а AnsiString - смарт-поинтер. Приведение AnsiString к PChar - олько явное.
-
Ребят, а у меня вот вопрос. Если имеем С функцию экспортируемую из некой ДЛЛ, например,
int return_int(const char *somename);
То ранее я ее определял как
Treturn_int = function(somename: PChar): Integer; cdecl;
В случае с Тибуроном это остается в силе? Или следует менять на PAnsiChar или того хуже TBytes?
Если последнее, то каким макаром мне передать функции данные в кодировке UTF8? Ведь PChar у нас будет хранить UTF16, вроде как... С этим TEncoding голова пухнет.
-
> Или следует менять на PAnsiChar
конечно следует менять.
PChar - теперь эквивалентен PWideChar
-
> C := TMyClass<Integer>.Create.Free;
> КАк так?
ну передумал создавать - чего непонятного?
-
> jack128_ (09.09.08 10:28) [194]
Хорошо, получится что это теперь
Treturn_int = function(somename: PAnsiChar): Integer; cdecl;
А как мне туда запихнуть содержимое строки? Чего-нибудь в таком роде:
var S: string;
begin
..
i := return_int(PAnsiChar(UnicodeToUTF8(S));
...
end;
Вообщем, как-то я не могу сложить разум в кучу по этому поводу. Опять же сколько надо терминирующих нулей вопрос. Ранее один впулил и доволен. Теперича, я так понимаю, два надобно?
-
> clickmaker ©
а ты не получал еще диск с 2009?
-
> [197] KilkennyCat © (09.09.08 12:40)
не-а
я с дельфи почти не работаю. Так, шабашки мелкие на 5-ке в основном
-
> clickmaker © (09.09.08 12:44) [198]
понятно... ладно, буду ждать октября...
-
> pasha_golub © (09.09.08 09:03) [193]
PChar generic тип, значит нужно использовать фундаментальный PAnsiChar
-
> Вообщем, как-то я не могу сложить разум в кучу по этому
> поводу. Опять же сколько надо терминирующих нулей вопрос.
> Ранее один впулил и доволен. Теперича, я так понимаю, два
> надобно?
Неправильно понимаешь, и раньше и сейчас ровно один символ NUL - ты оперируешь не той сущностью, забудь про байты и нули, думай в символах.
Если нужно ввести один символ nul то указывай #0 и все, остальное дело компилятора и системы.
Это не ясно зачем?
Уточни вопрос.
> var S: string; //UNT16
> begin
> ..
> i := return_int(PAnsiChar(UnicodeToUTF8(S));
> ...
> end;
Может это поможет - UTF8 = AnsiChar
-
> Может это поможет - UTF8 = AnsiChar
Это как это?
У меня есть String. Она UTF16. В функцию я могу передать UTF8.
-
> Опять же сколько надо терминирующих нулей вопрос. Ранее
> один впулил и доволен.
вообще то сколько нужно терминирующих нулей в функцию передать -функция и опрделеяет. Дельфя тут как бы не причем ;-)
-
Естественно я опечатался, имелось в виду AnsiString , а не AnsiChar
Из Д7
> type UTF8String = type string;
>
> C++ syntax:
>
> typedef AnsiString UTF8String;
Определение в C++ правильное, для Дельфи в 2009 оно поправлено до AnsiString
UTF8 это транспортная кодировка, что бы Юникод можно было передавать по каналам связи, которые де факто ASCII и реагируют на управляющие символы, не все символы воспринимаются как символы, например #0 и #1A
Один символ Юникода может быть закодирован от 1 до 6 символов UTF8
-
разве до 6? мне казалось что до 3-х.
-
> wl (09.09.2008 18:52:25) [205]
Не будем устраивать торг. Желающие могут посмотреть точные данные в rfc или в какой либо педии.
-
> Anatoly Podgoretsky © (09.09.08 18:47) [204]
> для Дельфи в 2009 оно поправлено до AnsiString
Это хорошо. А каким образом мне string переделать в UTF8string? Простым присваиванием?
-
> pasha_golub (09.09.2008 19:47:27) [207]
Если ты хочешь переделать Юникод в UTF8 то в Дельф много функций, не считая функций из АПИ, которых одна, вокруг которой и паразитирует Дельфи.
Попробуй например UnicodeToUtf8
-
> Простым присваиванием?
Именно. Компилятор сам переводит из одной кодировки в другую без явного использования функций перекодировки. Где-то в блогах разработчиков было написано, вроде даже в этой ветке была ссылка.
-
-
> 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;
тоже сейчас столкнулся с этой проблемой.
по-моему проще привести тип прям в условии
iIP := inet_addr(PAnsiChar(AnsiString(sIP)));
if iIP = Integer(INADDR_NONE) then
begin
Exit;
end;
-
Забавная фича ))
procedure TForm1.FormCreate(Sender: TObject);
procedure Процедурко;
begin
ShowMessage('Превед');
end;
begin
Процедурко;
end;
-
Anatoly Podgoretsky © (23.08.08 21:25)
Дождались
Покупать что ли будешь?
Денег выделили?
Или просто так радуешься? За других счастливчиков...
-
> blackman (26.09.2008 11:31:33) [213]
За державу
-
Anatoly Podgoretsky © (26.09.08 12:11) [214]
За которую ? Тут много разных ...
Или за тех кто за морем? :)
Вообще-то, мне лично и D6-7 хватает.
Не нужны эти новые примочки для лишних заморочек усталого старческого сознания :)
-
> blackman (26.09.2008 12:23:35) [215]
За королевство Дельфи.
Ну а мне не хватает, по крайней мере с 1996 года, и остро с 2001 с переходом на Юникод ОСи
-
> [215] blackman © (26.09.08 12:23)
дженерики и юникод - вещи отличные.
жаль что дженерики это не шаблоны, говорят на производительность влияет. но в большенстве моих задач такой потерей можно пренебречь.
-
Anatoly Podgoretsky © (26.09.08 12:59) [216]
и остро с 2001 с переходом на Юникод ОСи
Для и зачем перешел? Не понял...
-
> blackman © (26.09.08 15:23) [218]
"ОСи" - это не "толпа больших полосатых мухи", а "Операционной Системы"
> Для и зачем перешел?
У самого то мыслей не возникает?
-
> blackman (26.09.2008 15:23:38) [218]
А ты, что еще на не Юникод Полосатый Мух?
-
Anatoly Podgoretsky © (26.09.08 16:14) [220]
Совсем не нужно этих глупостей. Вполне обхожусь.
-
Т.е. вы не сможете привести ни одной по-настоящему веской причины применения
-
> blackman © (26.09.08 17:05) [221]
У тебя программы только на английском? Или ты их устнавиливаешь и эксплуатируешь только на контролируемой тобой системах?
Я боюсь предположить самое плохое :-)
-
> blackman © (26.09.08 17:06) [222]
>
> Т.е. вы не сможете привести ни одной по-настоящему веской
> причины применения
Я продаю свой продукт в Азию. Продажи идут хреново из-за отсутствия поддержки Уникода. Чем не веская причина?
-
-
Anatoly Podgoretsky © (26.09.08 19:13) [223]
У тебя программы только на английском? Я боюсь предположить самое плохое :-)
Не боись! Не только :)
pasha_golub © (26.09.08 20:11) [224]
С азией не работаем, а остальным эти примочки ни к чему
-
-
> blackman © (28.09.08 17:39) [226]
> С азией не работаем, а остальным эти примочки ни к чему
Окромя Азии есть еще Венгрия, Польша, Германия со своими умляутами, да не будут они помянуты на ночь, страны Балтики, Бразилия с Португезами тоже всякие крючочки полюбляют
-
pasha_golub © (29.09.08 11:41) [228]
Совсем не обязательно использовать. Латинского алфавита вполне достаточно.
Не художественное произведение пишем :)