• KSergey © (23.11.18 07:55) [0]
    Приехало письмо от борланда про выход новой версии 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]
  • 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 © (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 такого не было.

    Вообше-то "изобрести" - это создать что-то новое. А содрать из других языков под определение "изобрести" никак не попадает.
Есть новые Нет новых   [118232   +26][b:0][p:0.002]