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

Вниз

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

 
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



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

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

Наверх





Память: 0.81 MB
Время: 0.034 c
15-1222600425
Кое кто
2008-09-28 15:13
2008.11.30
Купил игру


2-1224493145
Alex7
2008-10-20 12:59
2008.11.30
возврат двух значений одним вызовом одной функции


15-1222717128
Антон
2008-09-29 23:38
2008.11.30
Время до завершения при копировании файлов


15-1222535144
Анонимм
2008-09-27 21:05
2008.11.30
Шахматная задачка из ветки


15-1222602793
Дмитрий С
2008-09-28 15:53
2008.11.30
Молчаливый OleVariant





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