Autor Téma: Nějaké info o nové verzi Delphi  (Přečteno 2121 krát)

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2084
  • Karma: 91
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Nějaké info o nové verzi Delphi
« Odpověď #30 kdy: 29-10-2018, 11:17:30 »
Marco: Introducing Inline Variables in the Delphi Language - http://blog.marcocantu.com/blog/2018-october-inline-variables-delphi.html
Embarcadero MVP - Czech republic

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1381
  • Karma: 33
    • Pepak.net
Re:Nějaké info o nové verzi Delphi
« Odpověď #31 kdy: 29-10-2018, 17:49:05 »
Zajímavé, tak skutečně život proměnné skončí na konci jejího bloku.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2084
  • Karma: 91
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Embarcadero MVP - Czech republic

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2084
  • Karma: 91
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Nějaké info o nové verzi Delphi
« Odpověď #33 kdy: 05-11-2018, 10:22:53 »
Další info: Android Z-Order a platform native prvky pro Android - http://delphi.org/2018/11/android-z-order-native-controls-and-10-3-rio/

Embarcadero MVP - Czech republic

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2084
  • Karma: 91
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Nějaké info o nové verzi Delphi
« Odpověď #34 kdy: 07-11-2018, 19:49:07 »
A pokračujeme: Custom Managed Records Coming in Delphi 10.3 - http://blog.marcocantu.com/blog/2018-november-custom-managed-records-delphi.html
Embarcadero MVP - Czech republic

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1381
  • Karma: 33
    • Pepak.net
Re:Nějaké info o nové verzi Delphi
« Odpověď #35 kdy: 08-11-2018, 06:12:22 »
Zní to zajímavě, jenom nerozumím tomu, proč to do Delphi přichází až teď. Čekal bych to už v okamžiku zavádění metod do recordů. A když už se do recordů konečně zavádějí konstruktory a destruktory, proč se to nevezme pořádně a nedá se tam rovnou i dědičnost - je to poměrně triviální operace a ušetří to další rozbíjení kompatibility v následující verzi.

Offline Delfin

  • Guru
  • *****
  • Příspěvků: 1285
  • Karma: 56
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Nějaké info o nové verzi Delphi
« Odpověď #36 kdy: 08-11-2018, 06:24:11 »
A když už se do recordů konečně zavádějí konstruktory a destruktory, proč se to nevezme pořádně a nedá se tam rovnou i dědičnost - je to poměrně triviální operace a ušetří to další rozbíjení kompatibility v následující verzi.

A jaky by byl potom rozdil mezi recordem a tridou? Uz ted jsem na vazkach, protoze mi prijde ze to cele pozlatko je jen kvuli ARC (ze misto nezdarenemu ARC doporuci vyuziti recordu misto trid). Pritom overhead trid neni temer zadny, naopak se ztraci vyznam recordu jako ulozne struktury.
« Poslední změna: 08-11-2018, 06:30:54 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1381
  • Karma: 33
    • Pepak.net
Re:Nějaké info o nové verzi Delphi
« Odpověď #37 kdy: 08-11-2018, 09:39:56 »
Excellent
Rated 1 time
A jaky by byl potom rozdil mezi recordem a tridou?
Instance třídy je ukazatelem na haldu, instance recordu je přímo blok paměti na zásobníku. Jsou situace, kdy chci pointer, a jsou situace, kdy chci přímo paměť. Dále třída je vždy odděděna od TObject, zatímco record předka mít nemusí (nyní nemůže).

Nebo jinými slovy - jaký smysl má, že record nedovoluje dědičnost? Technický důvod pro to žádný není, za sebe vidím pouze kompatibilitu s minulostí (kterou stejně plánované změny ruší, tak proč se na ni ohlížet?) a možnost říct, "podívejte, máme dvě úplně různé struktury".
« Poslední změna: 08-11-2018, 09:42:57 od pepak »

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2084
  • Karma: 91
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Nějaké info o nové verzi Delphi
« Odpověď #38 kdy: 08-11-2018, 10:47:22 »
Nebo jinými slovy - jaký smysl má, že record nedovoluje dědičnost? Technický důvod pro to žádný není, za sebe vidím pouze kompatibilitu s minulostí (kterou stejně plánované změny ruší, tak proč se na ni ohlížet?) a možnost říct, "podívejte, máme dvě úplně různé struktury".

Jeden z důvodů by byl, že pak struktura by musela být i něco jako tabulku VMT, nebo se pletu?
Embarcadero MVP - Czech republic

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1381
  • Karma: 33
    • Pepak.net
Re:Nějaké info o nové verzi Delphi
« Odpověď #39 kdy: 08-11-2018, 13:29:10 »
Jeden z důvodů by byl, že pak struktura by musela být i něco jako tabulku VMT, nebo se pletu?
No, ano, ale čtyři bajty na instanci typu a čtyři bajty na virtuální metodu mi přijde jako malá cena za to, že budu mít dědičný record.

Offline Delfin

  • Guru
  • *****
  • Příspěvků: 1285
  • Karma: 56
  • SW konzultant
    • Verze Delphi: 2009, Tokyo
Re:Nějaké info o nové verzi Delphi
« Odpověď #40 kdy: 08-11-2018, 16:23:41 »
Instance třídy je ukazatelem na haldu, instance recordu je přímo blok paměti na zásobníku.

Jaky je rozdil vim. Co nechapu je, proc by struktura mela kdy podle nekterych nazoru umet vic nez ukladani hodnot. Jinak psal Barry Kelly, ze jednim z problemu dedicnosti recordu by byl (mimo virtualnich metod) ve ztrate hodnot poli pri prirazovani (tedy napr. i pri predavani zaznamu parametrum). Napr. v tomto pseudokodu:

Kód: Delphi [Vybrat]
  1. type
  2.   TBaseRecord = record
  3.     A: Integer;
  4.   end;
  5.  
  6.   TFinalRecord = record(TBaseRecord)
  7.     B: Integer;
  8.   end;
  9.  
  10. procedure DoSomething(const Base: TBaseRecord);
  11. begin
  12.  
  13. end;
  14.  
  15. var
  16.   Base: TBaseRecord;
  17.   Final: TFinalRecord;
  18. begin
  19.   Final.A := 123;
  20.   Final.B := 456;
  21.   Base := Final; // tady by doslo ke ztrate hodnoty pole B, protoze promenna Base nema dostatecnou velikost pameti
  22.   DoSomething(Final); // tady by doslo ke ztrate hodnoty pole B, protoze parametr Base nema dostatecnou velikost pameti
  23. end;
« Poslední změna: 08-11-2018, 16:26:07 od Delfin »
I'm a soldier, so don't panic! I know the underground! I like WTFPL license! No more Google, go duck, go!

Offline vandrovnik

  • Guru
  • *****
  • Příspěvků: 507
  • Karma: 36
    • Verze Delphi: 10.2
Re:Nějaké info o nové verzi Delphi
« Odpověď #41 kdy: 08-11-2018, 22:35:10 »
Mně konstruktory a destruktory u recordu moc k srdci nepřirostly.
Když někde vidím
Kód: Delphi [Vybrat]
  1. x:=tPokus.Create;
tak zatím jsem zvyklý, že tPokus je třída, tím pádem očekávám, že tam bude něco jako:
Kód: Delphi [Vybrat]
  1. x:=tPokus.Create;
  2. try
  3.  ...
  4. finally
  5.  FreeAndNil(x);
  6. end;

Jakmile se x:=tPokus.Create; bude víc používat i u recordu, tak už nebude tak snadno vidět případné opomenutí toho závěrečného uvolnění instance třídy. A tedy si budu muset i pamatovat, co je třída a co record - třeba moje "oblíbené" TFormatSettings, u kterého si to ověřuju co chvíli.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1381
  • Karma: 33
    • Pepak.net
Re:Nějaké info o nové verzi Delphi
« Odpověď #42 kdy: 09-11-2018, 07:26:39 »
Jaky je rozdil vim. Co nechapu je, proc by struktura mela kdy podle nekterych nazoru umet vic nez ukladani hodnot.
Protože teď máme divný hybrid mezi původním pascalským recordem, který umí akorát ukládání hodnot, a třídou, která toho umí mnoho. A za tímco ani jedna z krajních poloh mě neuráží, tak pro hybrid nevidím žádný smysl. To ať už je record plnoprávná obdoba třídy se vším všudy, akorát že se vytváří i ničí automaticky přímo na zásobníku. Ne že budu mít něco, co se chová skoro stejně jako třída, ale má to nesmyslné rozdíly typu "instance se vytvoří sama, ale nezavolá se na ní konstruktor, takže není nainicializovaná", "instance se zničí sama, ale neexistuje pro ni destruktor" (oboje řeší teď poslední úprava do 10.3), "instance může mít metody, ale tyto metody se nemohou overridovat", atd. Jakkoliv nemohu říci, že bych jazyk C považoval za vzor hodný následování, tak zrovna tohle má udělané dobře hned od zavedení objektů.

Citace
Jinak psal Barry Kelly, ze jednim z problemu dedicnosti recordu by byl (mimo virtualnich metod) ve ztrate hodnot poli pri prirazovani (tedy napr. i pri predavani zaznamu parametrum). Napr. v tomto pseudokodu:
Já v tom právě žádný problém nevidím. Ani z pohledu uživatele, ani z pohledu kompilátoru. A pokud by to někde problém byl, od toho je kopírovací konstruktor a/nebo přiřazovací operátor, aby vyhodil výjimku, že takhle tedy ne.

Offline pepak

  • Guru
  • *****
  • Příspěvků: 1381
  • Karma: 33
    • Pepak.net
Re:Nějaké info o nové verzi Delphi
« Odpověď #43 kdy: 09-11-2018, 07:30:35 »
Mně konstruktory a destruktory u recordu moc k srdci nepřirostly.
Když někde vidím
Kód: Delphi [Vybrat]
  1. x:=tPokus.Create;
tak zatím jsem zvyklý, že tPokus je třída, tím pádem očekávám, že tam bude něco jako:
Bohužel, s tím musíme počítat už od okamžiku, kdy se začaly používat interfacy, protože tam je to přesně to samé. Sám právě v rámci čistoty kódu i u nich používám try-finally s tím, že jim přiřadím nil, abych na první pohled viděl, že je to vyřešené. U recordů bych rád volal ve finally metodu Free, která třeba vůbec nic neudělá, jen bude fungovat jako signál, že ano, je to vyřešené, a kdybych se náhodou rozhodl jednou přejít z recordu na třídu (když už jsou skoro to samé...), tak že mi program bude i nadále fungovat, místo aby začal leakovat.

Citace
Jakmile se x:=tPokus.Create; bude víc používat i u recordu, tak už nebude tak snadno vidět případné opomenutí toho závěrečného uvolnění instance třídy.
Můžeš také používat x.Create bez přiřazení. To bude hned vypadat lépe, jako že voláš metodu na neinstancovaném objektu :-).

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2084
  • Karma: 91
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Nějaké info o nové verzi Delphi
« Odpověď #44 kdy: 09-11-2018, 08:30:03 »
Jakmile se x:=tPokus.Create; bude víc používat i u recordu, tak už nebude tak snadno vidět případné opomenutí toho závěrečného uvolnění instance třídy. A tedy si budu muset i pamatovat, co je třída a co record - třeba moje "oblíbené" TFormatSettings, u kterého si to ověřuju co chvíli.

Jen pro jistotu: rozumíš, že nemusíš to Create používat, že?

Kód: Delphi [Vybrat]
  1. var
  2.   rPokus: TPokus;
  3. begin
  4. // zde nekde se zavola def. constructor, pokud je definovany
  5.   rPokus.neco := 'x';
  6. end; // a zde destructor
  7.  
Embarcadero MVP - Czech republic

 

S rychlou odpovědí můžete používat BB kódy a emotikony jako v běžném okně pro odpověď, ale daleko rychleji.

Jméno: E-mail:
Ověření:
Kolik je šest plus čtyři (slovem):