🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi
Article #346829

Re: Nowe Delphi

#346829
From: Roman Tyczka
Date: Tue, 30 Oct 2018 11:13
69 lines
3048 bytes
On Thu, 25 Oct 2018 02:01:13 -0700 (PDT), immo wrote:

>> begin
>>  ...
>>  var s : string := 'tekst';
>>  for i : Integer := 1 to Length(s) do writeln(s[i]);
>> 
>> lub
>> 
>> begin
>>  ...
>>  var aStrList := TStringList.Create;
>> 
>> I jak? Dobre?
> 
> Jak już wymyślamy to wolałbym

Nie wymyślamy tylko zaczynamy używać ;-)

> 
> for i := 1 to s.length do s[i].toString (lub s[i].WriteLn());

A co tu magicznego? Pomijając, że nie bardzo rozumiem s[i].toString to
reszta w zasadzie już jest (helpery).

> A co do określania typu zmiennej to pozostałbym przy konwencji Delphi - czyli określenie typu tylko w sekcji var. Jak już dopuściłbyś w bloku kodu, to trzeba by to zrobić dla wszystkich nie tylko dla pętli a to znowu postawiłoby kod delphi na głowie, bo rodziłoby wiele dodatkowych problemów.

Nie rodzi żadnych problemów, za to wiele ich rozwiązuje.
Dla mnie szczególnie cenne jest to, że teraz na wejściu i wyjściu z metody
nie będą wszystkie zmienne z typami zarządzalnymi (jak string, rekordy,
tablice czy interfejsy) alokowane i zwalniane, lecz tylko wtedy, gdy
wykonanie kodu wejdzie w blok, np. po staremu:

function Test(wartosc : integer) : Integer;
var
 WielkaTablica : array[milion] of Integer;
begin
 if wartosc > 10 then
 begin
  result := WielkaTablica[wartosc];
 end;
end;

Wywołanie powyższej metody powoduje, że na początku tablica jest alokowana
(4 MIB ramu!), a na końcu zwalniana, nawet jeśli jej nie tkniemy! Tak teraz
to działa, można zobaczyć w oknie ASM debugera.

Teraz, po nowemu gdy będzie tak:

function Test(wartosc : integer) : Integer;
begin
 if wartosc > 10 then
 begin
  var WielkaTablica : array[milion] of Integer;
  result := WielkaTablica[wartosc];
 end;
end;

To tylko jeśli wartosc wejściowa spełni warunek i wykonanie wejdzie w
begin/end warunku to nastąpi alokacja i zwolnienie, w innych przypadkach
nie tknie pamięci!

I teraz przełóżmy to na 10 zmiennych lokalnych, to nawet mogą być puste
stringi, nastąpi ich alokacja i zwolnienie. I teraz tak w każdej
metodzie... czujesz olbrzymią wydajnościową różnicę? Ja tak.

-- 
pozdrawiam
Roman Tyczka
Technical Details
Message-ID: <5bcrkgobe6zx$.dlg@tyczka.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail
References: <7376c5jxe41w$.dlg@tyczka.com> <d60ae831-92ca-4e7f-8a06-29012c3ac596@googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.POSTED!not-for-mail
From: Roman Tyczka <noemail@because.no>
Newsgroups: pl.comp.lang.delphi
Subject: Re: Nowe Delphi
Date: Tue, 30 Oct 2018 12:13:28 +0100
Organization: ATMAN - ATM S.A.
Lines: 69
Sender: romek@tyczka.no.found
Message-ID: <5bcrkgobe6zx$.dlg@tyczka.com>
References: <7376c5jxe41w$.dlg@tyczka.com> <d60ae831-92ca-4e7f-8a06-29012c3ac596@googlegroups.com>
NNTP-Posting-Host: ip-94-75-90-137.wave.com.pl
Mime-Version: 1.0
X-Trace: node2.news.atman.pl 1540898007 16289 94.75.90.137 (30 Oct 2018 11:13:27 GMT)
X-Complaints-To: usenet@atman.pl
NNTP-Posting-Date: Tue, 30 Oct 2018 11:13:27 +0000 (UTC)
User-Agent: 40tude_Dialog/2.0.15.84
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit