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

Offline Ondřej Pokorný

  • Guru
  • *****
  • Příspěvků: 815
  • Karma: 59
    • Verze Delphi: Primárně Lazarus, jinak D7 až aktuální
    • Kluug.net
Re:Nějaké info o nové verzi Delphi
« Odpověď #30 kdy: 24-10-2018, 13:32:16 »
Za mně je největší bomba konec ARC. Od začátku jsem to kritizoval. Teď ještě zrušit 0-based stringy a opravit string helper, aby např. TStringHelper.IndexOf neházel výsledek od nuly.

Fakt nevím, jaký k*k*ti to tenkrát vymysleli, prosadili a nakonec i zavedli... AppMethod stejně prakticky okamžitě po vydání zapíchli - akorát kvůli tomu udělali v Delphi bordel (ARC, 0-based strings) a teď to budou horko těžko dávat nějak dokupy :/ Třeba ten TStringHelper.IndexOf se nedá opravit, aniž by zrušili kompatibilitu mezi verzemi.

No nic, k Delphi se stejně vrátím maximálně, když budu potřebovat napsat nějakou mobilní appku, tak mi to může být i jedno.
Embarcadero Technology Partner

Offline Ondřej Pokorný

  • Guru
  • *****
  • Příspěvků: 815
  • Karma: 59
    • Verze Delphi: Primárně Lazarus, jinak D7 až aktuální
    • Kluug.net
Re:Nějaké info o nové verzi Delphi
« Odpověď #31 kdy: 24-10-2018, 13:42:46 »
Citace
Výhody:
- zpřehlednění a bezpečnější kód (proměnná je platná jen kde programátor chce)
Té závorce nevěřím. Jsem si takřka stoprocentně jistý, že proměnná bude platná až do konce funkce, akorát na ni možná kompilátor nedovolí odkazovat.

Já být tebou bych si na to nevsadil. Už jen logicky to musí fungovat podobně třeba jako u vnořené procedury, nebo snad i anonymní metody (tam je to pro mne pořád celkem velká magie), jen se prostě scope jinak ohraničí. Ale na potvrzení si budeme muset počkat.

https://plus.google.com/u/0/photos/photo/101947654489970802434/6615652239303236002?icm=true&iso=false&ftu=false

Citace
Delphi: Inline variables and constants
- scope is limited to block
- Lifetime is limited to block - destroyed on block end
- Tightly scoped - cleaner code
Embarcadero Technology Partner

Offline Ondřej Pokorný

  • Guru
  • *****
  • Příspěvků: 815
  • Karma: 59
    • Verze Delphi: Primárně Lazarus, jinak D7 až aktuální
    • Kluug.net
Re:Nějaké info o nové verzi Delphi
« Odpověď #32 kdy: 25-10-2018, 08:03:38 »
Excellent
Rated 1 time
Abych pravdu řekl, zatím jsem nějak přehnaně nestudoval, co by bylo na mobilní vývoj nejlepší. Ale vzhledem k tomu, že jsem zarytý příznivce Pascalu, tak Delphi bude jeden z prvních nástrojů, které budu brát v úvahu.

Schodou okolností jsem včera aktualizoval moji XML knihovnu OXml a tak jsem ji potřeboval otestovat, jestli funguje i na ARC. No strávil jsem s konfigurací mého androidího telefonu celý večer. Nakonec se mi deploy teda nějak podařil, ale debugger jsem nerozchodil - chybová hláška. Rychlost kompilace&deploy byla doopravdy strašná. Moc nadšený jsem suma sumárum nebyl.

A přitom to mělo Embarcadero prakticky ložené: kdyby se nepatlali s AppMethod fíčurama, které akorát zmastily kompatibilitu mezi win32 a mobile, tak si člověk napíše a otestuje mobilní aplikaci na desktopu a může spoléhat na to, že na mobilu to poběží taky s minimem problémů. V tom případě by pomalý mobile compile&deploy ani moc nevadil.

S tímhle gulášem, že každá platforma má jinak nastavený kompilátor, je to fakt na palici. Teď je to tak, že člověk musí řešit, aby mu kód běžel na ARC i non-ARC, nesmí zapomenout na direktivy zrušení 0-based strings. Nebo to vyvíjí jen čistě na mobile, ale to se snad kvůli ultra pomalému kompilátoru a ladiči snad ani nedá. Prostě vopruz. Ale to už jsem psal dávno a furt se opakuju...

Tak třeba to dá Embarcadero dokupy, než budu mobilní aplikace potřebovat.
« Poslední změna: 25-10-2018, 08:15:54 od Ondřej Pokorný »
Embarcadero Technology Partner

Offline Ondřej Pokorný

  • Guru
  • *****
  • Příspěvků: 815
  • Karma: 59
    • Verze Delphi: Primárně Lazarus, jinak D7 až aktuální
    • Kluug.net
Re:Nějaké info o nové verzi Delphi
« Odpověď #33 kdy: 25-10-2018, 08:13:46 »
- pry to je dulezite pro různé jiné moderní jazykové konstrukce, at uz existující (anonymní metody) nebo možné
Moderni... IMHO to je jeden z duvodu, proc Delphi nema dodnes radne resenou persitenci, protoze deserializace vyzaduje bezparametricky konstruktor, aby se daly vytvaret anonymne vytvaret instance

Nedávno jsem se serializaci&deserializaci v rámci Delphi RTTI docela dost věnoval a můj OXml deserializer recordy vytvářet umí - a umí i automaticky vytvářet interface/třídy v rámci recordu.

Bezparametrický konstruktor k tomu není nutná podmínka. Navíc ho můžeš nahradit static class function:
Kód: Delphi [Vybrat]
  1. program Project1;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. type
  6.   TMyRec = record
  7.   private
  8.     FInt: Integer;
  9.   public
  10.     property Int: Integer read FInt;
  11.     class function Create: TMyRec; static;
  12.   end;
  13.  
  14. { TMyRec }
  15.  
  16. class function TMyRec.Create: TMyRec;
  17. begin
  18.   Result.FInt := 123;
  19. end;
  20.  
  21. var
  22.   R: TMyRec;
  23. begin
  24.   R := TMyRec.Create;
  25.   Writeln(R.Int);
  26. end.

Jinak samozřejmě nechápu, proč Delphi bezparametrický konstruktor nemá.
Embarcadero Technology Partner

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2315
  • Karma: 102
    • 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: 25-10-2018, 08:26:53 »
No nic, k Delphi se stejně vrátím maximálně, když budu potřebovat napsat nějakou mobilní appku, tak mi to může být i jedno.

I Ty, Brute?

On tím myslel ze používá primárně Lazarus.
Embarcadero MVP - Czech republic

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2315
  • Karma: 102
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Nějaké info o nové verzi Delphi
« Odpověď #35 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ů: 1414
  • Karma: 34
    • Pepak.net
Re:Nějaké info o nové verzi Delphi
« Odpověď #36 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ů: 2315
  • Karma: 102
    • 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ů: 2315
  • Karma: 102
    • 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: 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ů: 2315
  • Karma: 102
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Nějaké info o nové verzi Delphi
« Odpověď #39 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ů: 1414
  • Karma: 34
    • Pepak.net
Re:Nějaké info o nové verzi Delphi
« Odpověď #40 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 pepak

  • Guru
  • *****
  • Příspěvků: 1414
  • Karma: 34
    • Pepak.net
Re:Nějaké info o nové verzi Delphi
« Odpověď #41 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ů: 2315
  • Karma: 102
    • Verze Delphi: D5,D2007, DXE, DXE2 + 2 poslední (Tokyo)
    • O Delphi v češtině
Re:Nějaké info o nové verzi Delphi
« Odpověď #42 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ů: 1414
  • Karma: 34
    • Pepak.net
Re:Nějaké info o nové verzi Delphi
« Odpověď #43 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 vandrovnik

  • Guru
  • *****
  • Příspěvků: 745
  • Karma: 42
    • Verze Delphi: 10.3
Re:Nějaké info o nové verzi Delphi
« Odpověď #44 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.