Article View: pl.comp.lang.delphi
Article #346829Re: Nowe Delphi
From: Roman Tyczka
Date: Tue, 30 Oct 2018 11:13
Date: Tue, 30 Oct 2018 11:13
69 lines
3048 bytes
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-mailReferences:
<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