Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Delphi 10.3


KSergey ©   (23.11.18 07:55

Приехало письмо от борланда про выход новой версии 10.3

Во это считаю самым классным и важным пунктом из всего списка, потому как касается наконец-то сделанного развития языка в нужное русло:

Inline Variable Declaration

procedure Test1; // multiple inline declarations (symbols declared when used)
begin
 var I: Integer := 22;
 var J: Integer;
 J := 22 + I;
 var K: Integer := I + J;
 ShowMessage (K.ToString);
end;


И тут молодсяги:

procedure Test2; // scope limited to local block
begin
 var I: Integer := 22;
 if I > 10 then
 begin
   var J: Integer := 3;
   ShowMessage (J.ToString);
 end
 else
 begin
   var K: Integer := 3;
   ShowMessage (J.ToString); // COMPILER ERROR: “Undeclared identifier: ‘J’”
 end;
end;

procedure Test;
begin
 var I := 22;    // Type Inference for Inlined Variables (обратите внимание - тип явно не указан)
 ShowMessage (I.ToString);
end;


И в циклах:

 for var I: Integer := 1 to 10 do ...
 for var Item: TItemType in Collection do...

 for var I := 1 to 10 do ...
 for var Item in Collection do ...


KSergey ©   (23.11.18 08:01[1]

оф справка:
http://docwiki.embarcadero.com/RADStudio/Rio/en/Inline_Variable_Declaration


KSergey ©   (23.11.18 08:24[2]

Не понял только два момента.

1.
procedure Test99;
begin

 // some code

 if (something) then
 begin
   var Intf: IInterface = GetInterface; // Intf.AddRef
   var MRec: TManagedRecord = GetMRecValue; // MRec.Create + MRec.Assign
   UseIntf(Intf);
   UseMRec(MRec);
 end; // Intf.Release and MRec.Destroy are implicitly called at end of scope
 
 // more code

end; // no additional cleanup


Почему тут просто = вместо := ? это какие-то синтаксиса для интерфейсов?

2.
procedure NewTest;
begin
 var MyDictionary := TDictionary<string, Integer>.Create;
 MyDictionary.Add ('one', 1);
 var APair := MyDictionary.ExtractPair('one');
 ShowMessage (APair.Value.ToString)
end;


Почему здесь нет MyDictionary.Free ?? это какой-то жутко халтурный пример или есть какой-то нюанс использования Inline Variable?
Я думаю, что это просто недопустимо халтурный пример.


virex(home) ©   (23.11.18 08:35[3]


> var MyDictionary := TDictionary<string, Integer>.Create;
> Почему здесь нет MyDictionary.Free ??
> или есть какой-то нюанс использования Inline Variable

гугл перевод:
"A managed variable, like an interface reference or a record, will be properly cleaned up at the end of the block, rather than at the end of the procedure or method"

"Управляемая переменная, такая как ссылка на интерфейс или запись, будет правильно очищена в конце блока, а не в конце процедуры или метода"


virex(home) ©   (23.11.18 08:39[4]


> Почему тут просто = вместо := ? это какие-то синтаксиса
> для интерфейсов?

гугл:
The type of the r-value expression (that is, what comes after the :=) is analyzed to determine the type of the variable.
Тип выражения r-value (то есть, что происходит после: =) анализируется для определения типа переменной.

в случае с интерфейсом, record, константой видимо определять тип переменной не требуется, поэтому просто "="
хз


virex(home) ©   (23.11.18 08:45[5]


> virex(home) ©   (23.11.18 08:35) [3]
> "Управляемая переменная, такая как ссылка на интерфейс или
> запись, будет правильно очищена в конце блока, а не в конце
> процедуры или метода"

упс, не туда
относится к интерфейсам и record
но может и MyDictionary тоже будет очищен "в конце блока"


dmk ©   (23.11.18 09:46[6]

Лучше бы AVX в ассемблер добавили. Никто не слышал когда будет?


xayam ©   (23.11.18 09:51[7]

> dmk ©   (23.11.18 09:46) [6]
>
> лучше бы avx в ассемблер добавили. никто не слышал когда будет?
del me


Германн ©   (24.11.18 01:45[8]


> KSergey ©   (23.11.18 07:55)
>
> Приехало письмо от борланда про выход новой версии 10.3
>
> Во это считаю самым классным и важным пунктом из всего списка,
>  потому как касается наконец-то сделанного развития языка
> в нужное русло:

Этой новости уже как более половины месяца.
И честно говоря я не разделяю восторгов по "наконец-то сделанного развития языка в нужное русло". Допустим (я с этим не согласен, но допустим) писать программы будет проще. Особенно СИ-шникам, случайно  залезшим в Дельфи. Но вот отлаживать? И так с отладчиком у папаши Борланда были проблемы с показом значений переменных.


Eraser ©   (24.11.18 04:47[9]


> Почему здесь нет MyDictionary.Free ?? это какой-то жутко
> халтурный пример или есть какой-то нюанс использования Inline
> Variable?
> Я думаю, что это просто недопустимо халтурный пример.

он написан в ARC стиле. однако ARC, скорее всего, в следующей версии упразднят, куда ему и дорога.


ухты ©   (24.11.18 15:34[10]

С определением типа переменной не додумали. Упрощать так упрощать. Но вообще согласен, это куда лучше стало.


Eraser ©   (24.11.18 16:19[11]


> ухты ©   (24.11.18 15:34) [10]
> С определением типа переменной не додумали.

додумали.


ухты ©   (24.11.18 16:31[12]


> додумали.
Точно, увидел поздно. (


KSergey ©   (26.11.18 08:28[13]

> Германн ©   (24.11.18 01:45) [8]
> Этой новости уже как более половины месяца.
> И честно говоря я не разделяю восторгов по "наконец-то сделанного
> развития языка в нужное русло". Допустим (я с этим не согласен,  но допустим) писать программы будет проще. Особенно СИ-шникам,

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

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

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

PS
Да, новость уже была, что "будет такая вот фича", тут вы правы.
Но послушайте, фичу 2-х недельной давности - неужто уже есть повод объявить баяном??? ну учитывая общую скорочть развития языка Дельфи.


KSergey ©   (26.11.18 08:29[14]

> Eraser ©   (24.11.18 04:47) [9]
> он написан в ARC стиле.

Можно поподробнее или ссылку: о чем это? что за стиль?


Плохиш ©   (26.11.18 13:47[15]


> Определение переменной в середине функции сразу с инициализацией
> значения - позволит избежать таких ошибок.
> Именно поэтому считаю это самой лучшей фичей, какую только
> сумели изобрести в Борланде.

"изобрести"? ви делаете мне смешно...


KSergey ©   (26.11.18 13:59[16]

По сути есть что сказать?
и таки да, изобрели, ибо в Pascal такого не было.


ухты ©   (26.11.18 16:23[17]

еще надо бегины с эндами заменить на что то простое )


Eraser ©   (26.11.18 17:03[18]


> KSergey ©   (26.11.18 08:29) [14]

http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Automatic_Reference_Counting_in_Delphi_Mobile_Compilers

также вот по теме
http://blog.marcocantu.com/blog/2018-october-Delphi-ARC-directions.html


KSergey ©   (27.11.18 11:47[19]

> Eraser ©   (26.11.18 17:03) [18]

Спасибо за ссылки!
Я это место упустил совсем.

Вот только из ссылок я так и не уловил: в 10.3 это самое ARC уже появилось в версии компилятора для Windows по новой опции компилятора, или всё еще доступно только для мобильных платформ?


Eraser ©   (27.11.18 13:13[20]


> KSergey ©   (27.11.18 11:47) [19]


> в 10.3 это самое ARC уже появилось в версии компилятора
> для Windows по новой опции компилятора, или всё еще доступно
> только для мобильных платформ?

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


Плохиш ©   (28.11.18 11:31[21]


> KSergey ©   (26.11.18 13:59) [16]
>
> По сути есть что сказать?
> и таки да, изобрели, ибо в Pascal такого не было.

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


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо