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

Вниз

УРА!!!!!!!!!!!!!!!!!!! Delphi RoadMap   Найти похожие ветки 

 
oxffff ©   (2008-04-24 09:38) [0]

http://blogs.codegear.com/nickhodges/2008/04/23/39051

Specific language enhancements planned for Tiburón include:

Generics, including language and RTL support
Anonymous Methods, which enable the user to define a method in the body of an expression while extending the lifetime of any captured local declarations and assign the resulting method reference to a location of method reference type.


 
guav ©   (2008-04-24 11:07) [1]

Круто.
Было бы интересно глянуть на синтаксис анонимных методов.
Я так понимаю, что extending the lifetime of any captured local declarations будет и для win32 ?


 
ага   (2008-04-24 11:23) [2]

Вот что особенно интересно:

Beyond “Commodore”

As part of development beyond the Commodore project, specific areas of focus under consideration for Delphi and C++Builder are:

   * Continued multi-core/multi-threaded development
   * Cross-compilation to other operating systems
   * Development for PDAs and the Compact Framework
   * Language enhancements and standards conformance
   * Rich Internet Application (RIA) development
   * Continuously improved and frequently updated documentation


Будем ждать :)


 
oxffff ©   (2008-04-24 11:25) [3]


> Я так понимаю, что extending the lifetime of any captured
> local declarations будет и для win32 ?


Угу.


 
guav ©   (2008-04-24 11:40) [4]

> [3] oxffff ©   (24.04.08 11:25)
> Угу.

А как ?

type TMyMethod = function(): Integer of object;

function CreateCounter(): TMyMethod;
var
 X: Integer;
begin
 X := 0;
 Result := (function(): Integer; begin Inc(X); Result := X; end;);
end;

Вот и интересно мне, как мы будем знать когда уничтожить захваченый X ?
Наверное тип будет не TmyMethod, а нечто с рефкаунтингом приводимое к TMyMethod...


 
oxffff ©   (2008-04-24 11:49) [5]


> guav ©   (24.04.08 11:40) [4]


Так же как и остальные языки.
Cоздание объекта кучи с Ref Counting.


 
guav ©   (2008-04-24 11:59) [6]

Ну это не "так же как и остальные языки".
В C++0x это будет тип без рефкаунтинга (насколько я понял), в других языках просто есть gc.


 
31512   (2008-04-24 12:04) [7]

Мдяяяя... А народишко-то ругается на http://dn.codegear.com/article/36620

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


 
oxffff ©   (2008-04-24 12:09) [8]


> guav ©   (24.04.08 11:59) [6]


Остается вопрос как они сделают финализацию объекта кучи.

Неужели введут новый тип Finalized Tmethod?

Аля.
function(): Integer of auto object;

Может это будет просто static переменная?    :)    

А тебя какое мнение по реализации захвата переменной (с подробностями)?


 
oxffff ©   (2008-04-24 12:12) [9]


> oxffff ©   (24.04.08 12:09) [8]


А может все проще и они не разрешат возвращать TMethod.
А использовать его только локально. Аля вложенные процедуры и функции.


 
oxffff ©   (2008-04-24 12:14) [10]


> Аля вложенные процедуры и функции.


Вид сбоку.


 
Anatoly Podgoretsky ©   (2008-04-24 12:20) [11]

> ага  (24.04.2008 11:23:02)  [2]

Конечно интересно - Development for PDAs and the Compact Framework, только на дворе уже давно 2008 год, а ждать еще несколько лет, что бы иметь эту возможность, как то не очень.


 
ага   (2008-04-24 12:29) [12]


> Anatoly Podgoretsky ©   (24.04.08 12:20) [11]

Меня больше заинтересовало     * Cross-compilation to other operating systems


 
Anatoly Podgoretsky ©   (2008-04-24 12:32) [13]

Тоже самое.


 
guav ©   (2008-04-24 12:43) [14]

> [8] oxffff ©   (24.04.08 12:09)
> А тебя какое мнение по реализации захвата переменной (с
> подробностями)?

Надо подумать.
Во первых, что будет захват - создание копии сразу ? Или возможен захват по ссылке ?

В C++0x возможны эти два варианта захвата, при этом в случае захвата по ссылке время жизни захваченного по ссылке объекта не продляется автоматически.

Если

> А может все проще и они не разрешат возвращать TMethod.
> А использовать его только локально. Аля вложенные процедуры
> и функции.

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


> Может это будет просто static переменная?    :)    

Одна на все анонимные функции ?
А если в исходной функции она изменяется при следующем её вызове ?
Нет, static не интересно :)

Я это пока тоже вижу как встроенный рефкаунтинг, это Delphi-way для таких случаев. При этом новый тип может быть приводим к function(): Integer of object


 
Eraser ©   (2008-04-24 12:44) [15]

64 бита опять на год перенесли..
слов нету, чтоб не забанили..


 
oxffff ©   (2008-04-24 12:50) [16]


> Надо подумать.
> Во первых, что будет захват - создание копии сразу ? Или
> возможен захват по ссылке ?
>
> В C++0x возможны эти два варианта захвата, при этом в случае
> захвата по ссылке время жизни захваченного по ссылке объекта
> не продляется автоматически.


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

Встает вопрос как это дело освобождать.
Прикрутить  финализацию к TMethod. То это рушит стройность.


> > Может это будет просто static переменная?    :)    
>
> Одна на все анонимные функции ?
> А если в исходной функции она изменяется при следующем её
> вызове ?
> Нет, static не интересно :)


И я о том же.


>
> Я это пока тоже вижу как встроенный рефкаунтинг, это Delphi-
> way для таких случаев.


Как сделать финализацию?


 
guav ©   (2008-04-24 12:56) [17]

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

Если все схватить по ссылке без продления жизни, то достаточно одного указателя на стек внешней функции.
В C++0x случай когда все по ссылке - рассмотрен отдельно. И, если все хватать по ссылке без продления жизни, кроме указателя на стек получается ничего не нужно и всё помещается в TMethod.


> Как сделать финализацию?

Ну как будто function(): Integer of auto object это что-то вроде interface, неявно приводимого к TMethod..., удалена последняя ссылка - чистим.


 
oxffff ©   (2008-04-24 14:24) [18]


> guav ©   (24.04.08 12:56) [17]

> Если все схватить по ссылке без продления жизни, то достаточно
> одного указателя на стек внешней функции.
> В C++0x случай когда все по ссылке - рассмотрен отдельно.
>  И, если все хватать по ссылке без продления жизни, кроме
> указателя на стек получается ничего не нужно и всё помещается
> в TMethod.
>

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

>
> > Как сделать финализацию?
>
> Ну как будто function(): Integer of auto object это что-
> то вроде interface, неявно приводимого к TMethod..., удалена
> последняя ссылка - чистим.


Это не решение. И вот почему.
Если сделать неявное приведение.  
То Грабли первые

var a,b:Tmethod;
a:= ReturnTmethodSomeFunc:Tmethod;

endl;  <-   Здесь Tmethod - не финализируется.

То Грабли вторые

var a,b:Tmethod;
a:= ReturnTmethodSomeFunc:Tmethod;
b:=a

endl;  <-   Здесь Tmethod a и b - не финализируется.

Поэтому вывод неявного приведения не будет, ибо типы Tmethod и Auto object не совместимы.


 
guav ©   (2008-04-24 14:47) [19]

> [18] oxffff ©   (24.04.08 14:24)
> Это аналог вложенных процедур и функций в Delphi, поскольку
> именно указатель на стековый фрейм родителя передается вложенной
> процедуре в Delphi.
> А поскольку это стек, то и область применения соответственна
> ограничена.

Да, область ограничена временем выполнения внешней функции и ограниченностью захвата по ссылке.
Но тоже может быть полезно. Вложенные сейчас не могут использоваться как колбэки и вообще быть помещены в TMethod. Ну и для анонимных можно реализовать более компактный синтаксис, чем для вложеных.


> [18] oxffff ©   (24.04.08 14:24)
> Это не решение.

Да, понял.

А твой вариант какой ?


 
oxffff ©   (2008-04-24 14:54) [20]


> Да, область ограничена временем выполнения внешней функции
> и ограниченностью захвата по ссылке.
> Но тоже может быть полезно. Вложенные сейчас не могут использоваться
> как колбэки и вообще быть помещены в TMethod. Ну и для анонимных
> можно реализовать более компактный синтаксис, чем для вложеных.
>


Я как раз об этом и написал.

oxffff ©   (24.04.08 12:12) [9]


> А твой вариант какой ?


Мой вариант какой? Поставновка задачи неизвестная. Остается только гадать.
Это только наши догадки.


 
Anatoly Podgoretsky ©   (2008-04-24 14:58) [21]

> Eraser  (24.04.2008 12:44:15)  [15]

Выражайся только цивильно, например - Этот нехороший человек, Василий Алибабаевич


 
oxffff ©   (2008-04-25 10:37) [22]


> guav ©   (24.04.08 14:47) [19]


Есть предположение, что при построении Closure возвращаться непосредственно будет объект, а не Tmethod, таким образом мы сами ответственны за его уничтожение.

P.S. Естественно его можно уничтожать и через Tmethod.data,
однако это type unsafety


 
guav ©   (2008-04-25 11:19) [23]

> [22] oxffff ©   (25.04.08 10:37)
> мы сами ответственны за его уничтожение

Непрактично.
Попробуй представить себе что все Variantы, строки и дин. массивы надо финализировать вручную.

Я считаю что тип, хранящий замыкание будет со следующими свойствами:
1. Присваивание между переменными этого типа должно работать.
2. Финализация должна быть автоматическая.
3. Должен быть способ легко назначить замыкание на обработчик события.

Вот например:
Для замыканий есть дженерик интерфейс IClosure(IInterface) с параметризацией по прототипу замыкаемой функции и с методом Call, который имеет этот прототип.

Т.е. вместо
type
 TClosureEvent = procedure(Sender: TObject) of auto object;

будет
type
 TClosureEvent = IClosure<procedure(Sender: TObject)>;

который будет раскрываться в
 IClosure = interface(IInterface)
   procedure Call(Sender: TObject);
 end;


Соответствено функция возвращающая замыкание:
function MakeEvent(): IClosure<procedure(Sender: TObject)>;
Назначение замыкания на событие
FMyClosure := MakeEvent();
Button1.OnClick := FMyClosure.Call;


Тут ещё вопрос как generics (в т.ч. для win32) будут работать в Delphi, может быть мой синтаксис не будет допустим, но при этом generics дадут возможность для другой реализации замыканий.


 
guav ©   (2008-04-25 11:42) [24]

Или лучше просто прикрутить финализацию к методам...


 
oxffff ©   (2008-04-25 11:47) [25]


> guav ©   (25.04.08 11:19) [23]
> > [22] oxffff ©   (25.04.08 10:37)
> > мы сами ответственны за его уничтожение
>
> Непрактично.
> Попробуй представить себе что все Variantы, строки и дин.
>  массивы надо финализировать вручную.
>
> Я считаю что тип, хранящий замыкание будет со следующими
> свойствами:
> 1. Присваивание между переменными этого типа должно работать.
>
> 2. Финализация должна быть автоматическая.
> 3. Должен быть способ легко назначить замыкание на обработчик
> события.
>

Это все конечно хорошо.

> Вот например:
> Для замыканий есть дженерик интерфейс IClosure(IInterface)
> с параметризацией по прототипу замыкаемой функции и с методом
> Call, который имеет этот прототип.
>
> Т.е. вместо
> type
>  TClosureEvent = procedure(Sender: TObject) of auto object;
>
> будет
> type
>  TClosureEvent = IClosure<procedure(Sender: TObject)>;
> который будет раскрываться в
>  IClosure = interface(IInterface)
>    procedure Call(Sender: TObject);
>  end;

Интересный способ. НО Generics не воспринимает передачу контракта функции. а только типы. Поэтому в твоем случае. Это будет

TClosureEvent = IClosure<procedure(Sender: TObject)>;
который будет раскрываться в

 IClosure = interface(T)
   procedure Call(Sender: T);
 end;

Ограничение, как расширить количество параметров?

Ну можно конечно. Например такой финт.

 IClosure = interface(T)
   function GetImplementation:T;
 end;

В итоге IClosure.GetImplementation(signature of T)

Ну вот передачу параметров решили. Теперь далее.

>
>
> Соответствено функция возвращающая замыкание:
> function MakeEvent(): IClosure<procedure(Sender: TObject)>;
>
> Назначение замыкания на событие
> FMyClosure := MakeEvent();

> Button1.OnClick := FMyClosure.Call;

хм.
Увы так нельзя. Хотя интерфейс и имеет схожую с объектом схему вызова. То есть есть неявный параметр. НО сейчас это нельзя сделать.
И вот почему.
После того как ты выйдишь из scope FMyClosure финализируется. И объект будет разрушен.
как Button1.OnClick узнает о разрушениии?

-> В итоге ты опять управляешь временем жизни.
А поэтому это не отличается от использования обычных объектов.
Понятно?


 
guav ©   (2008-04-25 11:55) [26]

>
> После того как ты выйдишь из scope FMyClosure финализируется.
> И объект будет разрушен.
> как Button1.OnClick узнает о разрушениии?

Да.


> > Button1.OnClick := FMyClosure.Call;
>
> хм.
> Увы так нельзя.

Хм. точно ?
т.е. это сейчас не скомпилится ?
type
 ISome = interface
   procedure M();
 end;
 TM = procedure of object;
var
 I: ISome;
 M: TM;
begin
 M := I;
end;


> -> В итоге ты опять управляешь временем жизни.

Да. FMyClosure поле формы в этом примере. Но я не делаю явного освобождаения.
Тут можно сравнить с приведением string в PChar - я отвесчаю за вермя жизни string на которую указывает PChar, но не освобождаю её явно.


 
guav ©   (2008-04-25 11:59) [27]

> M := I;

M := I.M;


 
oxffff ©   (2008-04-25 12:22) [28]


> guav ©   (25.04.08 11:59) [27]
> > M := I;
>
> M := I.M;


Это не компилируется. Но могу показать как выкрутиться.

var
I: IClosure<TnotifyEvent>;
M: TnotifyEvent;
begin
M := I.GetImplementation;


 
oxffff ©   (2008-04-25 12:37) [29]


> Да. FMyClosure поле формы в этом примере. Но я не делаю
> явного освобождаения.

Это не отличается от явного вызова Free.
Поскольку программист осознанно должен располагать в нужном scope и отличается лишь тем, что написать Free.

То есть мы в итоге приходим к выводу, что это будет либо непосредственно объект, либо обертка на интерфейсе. И принципиально это не отличается. поскольку время жизни определяется детерменированно программистом.
И потенциально ни то, ни другое решение не является safe.

> Тут можно сравнить с приведением string в PChar - я отвесчаю
> за вермя жизни string на которую указывает PChar, но не
> освобождаю её явно.

Отсюда и грабли.


 
oxffff ©   (2008-04-26 11:38) [30]

To guav ©  

Можно спросить у них как они это сделают?

http://dev.newswhat.com/amsg/borland.public.delphi.non-technical/480fe164$1@newsgroups.borland.com.html

см. последние посты начиная с Mikko Laiho  25 Apr, 14:10

Понятно, что приведенный синтакс Chrome/Oxygene это позволит сделать.

Если такое реализуемо.

Button1.OnClick :=
     begin
ShowMessage("Hello World!");
     end;

То вот такое при сохранении синтаксиса маловероятно.

Button1.OnClick :=
     begin
ShowMessage(Inttostr(a));
     end;


 
oxffff ©   (2008-04-26 11:50) [31]


> Понятно, что приведенный синтакс Chrome/Oxygene это позволит
> сделать.


Поскольку .NET


 
Тимохов   (2008-04-27 13:39) [32]

вот лично мне вот что не нравится (не только это, но это очень сильно).

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

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

и понятно почему - какие-то сторонние компоненты, сегодня есть, а завтра их нет (такое было не раз, не правда ли?). нафиг разбираться  с этими компонентами.

т.е. мое имхо, что в списке доработок некоторые пункты для галочки.

-------------

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

блин, ну напишите сами авторы ХОРОШУЮ книгу по СОВРЕМЕННОМУ дельфи, ну или спонсируйте ее написание. Сделайте возможность входа в среду и в язык легче. Ведь, тому кто юзал старый дельфи почти незачем юзать новый дельфи.

хотя, это бизнес, видимо, они там тоже не дураки, знают, что делают, если судьба дункана маклауда пока им по силам.



Страницы: 1 вся ветка

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

Наверх





Память: 0.56 MB
Время: 0.038 c
2-1210838406
tytus
2008-05-15 12:00
2008.06.08
как в SendMessage передать строку?


15-1208933357
sql
2008-04-23 10:49
2008.06.08
MS SQL 2000


15-1209453265
Восхищенный
2008-04-29 11:14
2008.06.08
LOL


15-1209108197
Ega23
2008-04-25 11:23
2008.06.08
Правовые аспекты использования алгоритмов шифрования


15-1208872237
No_Dead
2008-04-22 17:50
2008.06.08
Дипломный проект и авторские права





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