Forum Delphi.cz

Delphi => Obecné => Téma založeno: Radek Červinka 23-10-2018, 18:51:10

Název: Nějaké info o nové verzi Delphi
Přispěvatel: Radek Červinka 23-10-2018, 18:51:10
https://plus.google.com/u/0/+RafaelDipold/posts/NCnhrFYb7Yi?cfem=1 (https://plus.google.com/u/0/+RafaelDipold/posts/NCnhrFYb7Yi?cfem=1)
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: František 23-10-2018, 22:11:15
takze ako Venom
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Radek Červinka 24-10-2018, 07:38:02
takze ako Venom

Co?
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Stanislav Hruška 24-10-2018, 08:31:41
Žeby mal na mysli toto https://www.csfd.cz/film/265276-venom/prehled/ (https://www.csfd.cz/film/265276-venom/prehled/)
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: František 24-10-2018, 08:34:28
áno Stanislav,
symbióza s C#, ale myslím že to je dobre - inline variables


Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Slappy 24-10-2018, 08:36:05
Inline variables je jednoznacne krok vpred! Tymto sa Delphi konecne vyrovna "modernym" jazykom, co mnozstvo ludi odradzalo a sposobovalo to strasny zmatok. (Konecne budu JavaScriptaci vediet spravit FOR v Delphi :D)

Bohuzial to z mojho osobneho hladiska nic neriesi, pretoze projekty kompilujem aj v starsich verzia Delphi.

V podstate som pomaly ustupoval od Delphi, ale posledne ozivenie a samozrejme prichod CrossVCL (+Linux a mobilne app) znaci velmi dobru cestu!

Good Luck Delphi!
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Radek Červinka 24-10-2018, 08:42:08
Žeby mal na mysli toto https://www.csfd.cz/film/265276-venom/prehled/ (https://www.csfd.cz/film/265276-venom/prehled/)

Já vím co je venom, jen jsem tím chtěl neznačit, že taková reakce na patrně největší změny v kompilátoru (a ne jen inline vars, ale i ta další co je na obrázku) od D2009 je facepalm^4.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: pepak 24-10-2018, 08:42:10
Mohl bych poprosit o nějaké stručné nakopnutí, co mi inline variables přinesou? Konkrétně v kontextu Delphi - co teď Googluji, tak si dovedu představit jejich smysl pro C++, i když mi pořád připadá, že benefity ani zdaleka nevyrovnají ztrátu kompatibility, ale pro Delphi ty use cases nevidím.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: František 24-10-2018, 08:45:58
no z hľadiska kompatibility dole, by to nemusel byť problém, zaleží od toho ako to bude naimplementované v novom, lebo nemal by byť problém uložiť to postarom a zobrazovať to v novom ponovom
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Delfin 24-10-2018, 08:56:35
Mohl bych poprosit o nějaké stručné nakopnutí, co mi inline variables přinesou?

Pokud bude case sensitive (jako JavaScript) tak jenom chaos. A sesbirat promenne, uhodnout jejich datovy typ a vlozit ho nejakym kompilacnim preprocesorem do skryteho var bloku nebude zas takova slozitost. Takze verim ze by to mohli dat na prvni dobrou.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Radek Červinka 24-10-2018, 09:04:31
Mohl bych poprosit o nějaké stručné nakopnutí, co mi inline variables přinesou? Konkrétně v kontextu Delphi - co teď Googluji, tak si dovedu představit jejich smysl pro C++, i když mi pořád připadá, že benefity ani zdaleka nevyrovnají ztrátu kompatibility, ale pro Delphi ty use cases nevidím.

Jakou ztrátu kompatibility? Kdo chce používat stávající deklarace může pro všechny verze. Kdo chce i inline, tak je to jeho rozhodnutí a kompatibilita vzhledem kupředu. Takže žádná ztráta.

Výhody:
- zpřehlednění a bezpečnější kód (proměnná je platná jen kde programátor chce)
- byl to jeden s hlavních požadavků uživatelů (a já s tím plně souhlasím)
- umožní to explicitně ve spolupráci s def. constructorem a destructorem možnou lepší kontrolu nad správou resources (jak vidno z tech slide tak ARC bude umreno)
- pry to je dulezite pro různé jiné moderní jazykové konstrukce, at uz existující (anonymní metody) nebo možné


muzes napsat treba

Kód: Delphi [Vybrat]
  1.     var o:=TDictionary<string, string>.Create;
  2.  
  3. // a o je typu TDictionary<string, string>
  4.     o.Add('a', 'b');
  5.  

ale nikdo ti nebrani napsat
Kód: Delphi [Vybrat]
  1. var
  2.   o:TDictionary<string, string>;
  3. begin
  4.   o:=TDictionary<string, string>.Create;
  5.  

Nechápu v čem vidíte problém, za mne naprostá bomba
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Radek Červinka 24-10-2018, 09:06:09
Pokud bude case sensitive (jako JavaScript) tak jenom chaos.
...

ne, navic je to navic ke stavajicim deklaracím a budou platit stejná pravidla.

Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Delfin 24-10-2018, 09:20:08
Nechápu v čem vidíte problém, za mne naprostá bomba

Problem vidim prave v tom ze muzes napsat oboji. Zive si dokazu predstavit jaky zmatek s tim nedusledni programatori napachaji.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: pepak 24-10-2018, 09:48:46
Jakou ztrátu kompatibility? Kdo chce používat stávající deklarace může pro všechny verze. Kdo chce i inline, tak je to jeho rozhodnutí a kompatibilita vzhledem kupředu. Takže žádná ztráta.
Tomu, že kód s novou featurou nelze použít ve starších Delphi, já říkám ztráta. Speciálně za situace, kdy nelze jednoduše doplnit něco, co mi tu featuru umožní získat i ve starších Delphi (např. pomocí IFDEF STAREDELPHI doplním funkci, která v nich ještě nebyla). To tady podle všeho nemůžu - pokud chci inline proměnné, musím buď zahodit starší Delphi, nebo vlastně celý kód napsat dvakrát, čímž je veškerý přínos z větší přehlednosti v háji.

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.

Citace
- pry to je dulezite pro různé jiné moderní jazykové konstrukce, at uz existující (anonymní metody) nebo možné
Proto se ptám, protože mě žádná nenapadá.

Ostatní důvody beru. Hlavně je pro mě ale důležitý ten kód, protože jsem teprve z něj pochopil, že inline proměnnými se myslí definice var prom: typ; někde uvnitř těla funkce. Otázku jsem pokládal v domění, že se pod inline proměnnými myslí to, co zavedlo C++17. Důvod definovat funkce v body samozřejmě vidím a souhlasím, že by to bylo super - i když za sebe si myslím, že cena (ztráta kompatibility) je příliš vysoká.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: pepak 24-10-2018, 09:52:24
Nechápu v čem vidíte problém, za mne naprostá bomba
Nevidím problém. Jen jsem zároveň neviděl přínos (vypadalo to jako "změna pro změnu") a viděl jsem náklady. Nyní už vidím i ty přínosy (náklady bohužel stále jsou).

Za sebe bych třeba uvítal spíš něco na způsob maker, co by reflektovalo aktuální stav kompilátoru - abych mohl čtením nějaké built-in konstanty zjistit jméno aktuálního souboru, číslo aktuálního řádku, jméno aktuální funkce, jestli je nebo není nějaká funkce definovaná, jestli je nebo není nějaká unita v uses... Tohle všechno jsou mimochodem věci, které mohu bezpečně zaifdefovat, abych zachoval kompatibilitu se staršími Delphi.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: pf1957 24-10-2018, 09:57:03
Mohl bych poprosit o nějaké stručné nakopnutí, co mi inline variables přinesou? Konkrétně v kontextu Delphi - co teď Googluji, tak si dovedu představit jejich smysl pro C++, i když mi pořád připadá, že benefity ani zdaleka nevyrovnají ztrátu kompatibility, ale pro Delphi ty use cases nevidím.
Ty benefity jsou v "nehmotne" oblasti jako je pracnost a srozumitelnost/udrzovatelnost kodu. Jak si na to zvyknes, pak navrat k tupym doprednym definicim ti bude vadit s kazdy stiskem klavesy...

Kompatibilita se zda byt vaznou namitkou, ale to snad jen pro toho, kdo vytvari OSS nebo knihovny a potrebuje, aby jeden kod sel prekladat kde cim. Jinak s tim nemuze mit problem.

Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: pf1957 24-10-2018, 10:01:21
- 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
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: pf1957 24-10-2018, 10:10:54
Problem vidim prave v tom ze muzes napsat oboji. Zive si dokazu predstavit jaky zmatek s tim nedusledni programatori napachaji.
No to do urcite miry problem byt muze, zejmena u projektu, ktere se budou migrovat do novych Delphi. Tam se sice da organizacne predepsat, aby se pouzival nadale stary zpusob, ale prakticky to urcite nebude fungovat, takze se tam budou michat oba dva styly. Ale osobne vim, ze cokoli mi usnadni zivot, tak moje hlava vstreba v podstate mimodek a to, co ji pridelava praci, tomu se intenzivne vzpira.

A myslim, ze ani namitka zameny tridy pri inferenci typu je v podstate banalni a bude drive ci pozdeji odhalena, protoze se to v podstate vztahuje k automatickym promennych. A pokud je to neco na urovni class-scope, tak tam to pouzit nejde.


Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Radek Červinka 24-10-2018, 10:21:34
- 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

bezparametricky konstruktor jako např. záznamu? uvidime
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: pf1957 24-10-2018, 10:26:26
bezparametricky konstruktor jako např. záznamu? uvidime
Zaznam, to je takovy divny "hodnotovy" element, ktery buhvi proc zazil reinkarnaci :-O To vypada jako takove zjednodusijici siditko, ale jakmile to nastrkas do generic, tak zacnou byt problemy se spravou zivotniho cyklu a stejne to konci konverzi na regulerni class.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Radek Červinka 24-10-2018, 11:52:09
bezparametricky konstruktor jako např. záznamu? uvidime
Zaznam, to je takovy divny "hodnotovy" element, ktery buhvi proc zazil reinkarnaci :-O To vypada jako takove zjednodusijici siditko, ale jakmile to nastrkas do generic, tak zacnou byt problemy se spravou zivotniho cyklu a stejne to konci konverzi na regulerni class.

buhviproc? protoze u zaznamu, stringu a interface je uz dlouho vyreseno automaticke uvolnovani pameti
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Radek Červinka 24-10-2018, 12:00:13
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.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: František 24-10-2018, 12:34:43
zaujímavé inak, že som to v poslednej roadmape priamo nenašiel ...
možno toto: "additional syntax improvements" (10.3)
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Ondřej Pokorný 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.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Ondřej Pokorný 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 (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
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Delfin 25-10-2018, 00:13:24
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? Osobne bych teda pouzil k mobilnimu multi-kulti spis Xamarin, ale nativni vyvoj je pro me stale primarni volba. Podle typu aplikace, samozrejme. Videl bych to tak ze pro managerske aplikace nebo U.S. trh bych vytvoril i appku pro jabka. Jinak si myslim ze pro zbytek trhu pohodlne staci droid.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Delfin 25-10-2018, 02:03:33
Osobne bych teda pouzil k mobilnimu multi-kulti spis Xamarin, ale nativni vyvoj je pro me stale primarni volba.

Samozrejme konceptu all-in one, kde se pocita ze budou aplikace behat jak na desktopovych OS tak na mobilnich platformach proste neverim (o coz se EMBT ohniva opice snazi). Ale nakonec proc ne, svoji cestu si snad pro nekoho najde (byt bude nejspis vzdy pozadu). Pro me je aplikace ktera bude schopna bezet na "vsech" OS stale aplikace webova...
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Ondřej Pokorný 25-10-2018, 08:03:38
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.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Ondřej Pokorný 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á.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Radek Červinka 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.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Radek Červinka 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 (http://blog.marcocantu.com/blog/2018-october-inline-variables-delphi.html)
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: pepak 29-10-2018, 17:49:05
Zajímavé, tak skutečně život proměnné skončí na konci jejího bloku.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Radek Červinka 01-11-2018, 15:33:15
Změny v IDE - https://community.embarcadero.com/blogs/entry/new-in-10-3-ide-ui-improvements-in-the-main-window (https://community.embarcadero.com/blogs/entry/new-in-10-3-ide-ui-improvements-in-the-main-window)
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Radek Červinka 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/ (http://delphi.org/2018/11/android-z-order-native-controls-and-10-3-rio/)

Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Radek Červinka 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 (http://blog.marcocantu.com/blog/2018-november-custom-managed-records-delphi.html)
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: pepak 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.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Delfin 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.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: pepak 08-11-2018, 09:39:56
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".
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Radek Červinka 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?
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: pepak 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.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Delfin 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 (https://stackoverflow.com/questions/2095596), 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;
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: vandrovnik 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.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: pepak 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 (https://stackoverflow.com/questions/2095596), 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.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: pepak 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 :-).
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Radek Červinka 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.  
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: pepak 09-11-2018, 09:06:20
Jen pro jistotu: rozumíš, že nemusíš to Create používat, že?
Jenže až od Delphi 10.3. V současných Delphi musíš - a ještě to nesmí být konstruktor, protože jinak ti to Delphi nezkompilují:

Kód: Delphi [Vybrat]
  1. {$apptype console}
  2. type
  3.   TTestRecord = record
  4.     Value: string;
  5.     constructor Create;
  6.   end;
  7.  
  8. constructor TTestRecord.Create;
  9. begin
  10.   Value := 'Ahoj';
  11. end;
  12.  
  13. var
  14.   Rec: TTestRecord;
  15.  
  16. begin
  17.   Writeln(Rec.Value);
  18.   Rec.Create;
  19.   Writeln(Rec.Value);
  20. end.
Testováno na 10.2: "Error: E2394 Parameterless constructors not allowed on record types"
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: zdenek 09-11-2018, 09:46:15
On to taky není úplně konstruktor.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: pepak 09-11-2018, 10:11:32
On to taky není úplně konstruktor.
Jaký jiný název navrhuješ pro funkci, která se zavolá na začátku života datového bloku a nastaví ho do nějakého výchozího stavu?

Nebo jinak, v čem se podle tebe liší konstruktor v tvém pojetí od "konstruktoru" recordu?
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: zdenek 09-11-2018, 10:39:25
Konstruktor je součástí alokace objektu dané třídy. Je kolem něho nabalena další funkcionalita. Mně je celkem jedno jak tomu říkat, ale tady u recordu je to trochu něco jiného. Ten record existuje sám  o sobě a toto je vlastně jenom procedura, která s ním pracuje. Mulvím o 10.2 a starší.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: pepak 09-11-2018, 10:56:18
Konstruktor je součástí alokace objektu dané třídy.
Ne, to není.

Citace
Ten record existuje sám  o sobě
To také není pravda. I u recordu proběhne alokace, akorát jiným mechanismem, a udělá ji kód dodaný kompilátorem, ne explicitně programátor.

Pochop, že se nebavím o tom, jak to vypadá na úrovni zdrojového kódu. Bavím se o tom, jak to je udělané uvnitř.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Delfin 09-11-2018, 12:00:31
Jaký jiný název navrhuješ pro funkci, která se zavolá na začátku života datového bloku a nastaví ho do nějakého výchozího stavu?

Napr. Initialize. V kodu je pak lepe videt ze se jedna o inicializaci struktury, ne o tvorbu instance. Samozrejme se nebavim o nejake migraci datovych typu z datove struktury na tridu a opacne, kdybys tim chtel argumentovat :).

I u recordu proběhne alokace, akorát jiným mechanismem, a udělá ji kód dodaný kompilátorem, ne explicitně programátor.

Deje se to prave tim doted zapovezenym bezparametrickym konstruktorem.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: pepak 09-11-2018, 14:34:05
Aha. Zjevně je tu zásadní neporozumění mezi tím, co je to alokace, co je to inicializace, a co z toho dělá konstruktor. No nic, tak já už mlčím.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Slappy 09-11-2018, 18:38:46
Zmeny v nastaveniach (konecne!): http://community.idera.com/developer-tools/b/blog/posts/new-in-rad-studio-10-3-options-dialog-improvements (http://community.idera.com/developer-tools/b/blog/posts/new-in-rad-studio-10-3-options-dialog-improvements)
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: vandrovnik 09-11-2018, 18:47:20
Jen pro jistotu: rozumíš, že nemusíš to Create používat, že?

Jo, rozumím, měl jsem do příkladu napsat to tFormatSettings, u něj v helpu je přímo:
1. Declare a variable of type TFormatSettings.
2. Call TFormatSettings.Create to populate the TFormatSettings variable with locale information (FS := TFormatSettings.Create('en-US'); ).
Což mě pak vždycky znejistí, jestli jsem ho náhodou taky neměl uvolnit, pokud si nedám do komentáře, že uvolňovat nemusím.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Delfin 09-11-2018, 19:05:00
Aha. Zjevně je tu zásadní neporozumění mezi tím, co je to alokace, co je to inicializace, a co z toho dělá konstruktor. No nic, tak já už mlčím.

Za me ne. Alokace recordu nezajisti jeho inicialiaci (v zavislosti na scope). V pripade lokalni promenne jde jen o kus pameti o jehoz stavu muze rozhodnout programator nastavenim hodnot nebo inicialiaci pomoci funkce Default. Konstruktor v pripade trid zarizuje jak alokaci, tak v zavislosti na implementaci i inicializaci vychozich hodnot.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Radek Červinka 21-11-2018, 12:03:51
Dnes je hezky, dnes by to šlo.
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Delfin 21-11-2018, 12:13:08
Dnes je hezky, dnes by to šlo.

Co by slo?
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: vandrovnik 21-11-2018, 14:04:43
Dnes je hezky, dnes by to šlo.

Že by? Už to není "my nesmíme ani naznačovat"? ;-)
Název: Re:Nějaké info o nové verzi Delphi
Přispěvatel: Radek Červinka 21-11-2018, 14:29:20
Dnes je hezky, dnes by to šlo.

Že by? Už to není "my nesmíme ani naznačovat"? ;-)

Ehm,
na druhou stranu bohužel http://blog.marcocantu.com/blog/2018-november-deferring-managed%20records.html (http://blog.marcocantu.com/blog/2018-november-deferring-managed%20records.html)