🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.pascal
Article #93003

Re: Generic

#93003
From: darekm
Date: Fri, 30 Apr 2010 12:37
63 lines
2960 bytes
W dniu 2010-04-29 23:38, webmajsterek@poczta.onet.pl pisze:
> we FPC 2.3.1 wprowadzona kilka nowych słow kluczowych
>
> np: Generic ( http://wiki.freepascal.org/Generics ) i  specialize .
>
>
> moze ktos to w miare senowny sposob wytłumaczyć jak to cóś  działa ???
> albo jakiś przykład z opisem po polsku.
>
>

  type
  GList = generic class of T
  public
    procedure Add(const stuff: T);
  end;

Tworzysz definicję obiektu GList dla pewnego abstrakcyjnego typu danych 
(w powyższym przykładzie T)
T można używać jak jakiś super uniwersalny obiekt, na którym 
dopuszczalna jest każda operacja:
T:=T+1;
T.add;
x:=t.Create;
abs(T)
itd.


na tym etapie kompilatora  obchodzi tylko (częściowa) poprawność składniowa.

Następnie użycie takiego generycznego obiektu (specjalizacja):
GList<string>
kompilator generuje kod programu na podstawie uprzedniej definicji 
podstawiając zamiast T żądany typ (czyli string) a następnie dokonuje 
normalnej już normalnej kompilacji.
Innymi słowy jest to forma preprocesora kodu, który bierze tekst 
programu, odpowiednie go modyfikuje (dokonuje podstawień) i tak 
utworzony kod przekazuje do właściwej kompilacji.


w dużym uproszczeniu można to samo osiągnąć korzystając z makrodefinicji 
$Include i $Define


Po co to stosujemy:
1. Gdy takie same algorytmy stosujemy dla różnych typów danych (inna 
możliwość to dziedziczenie i interface)
2.Gdy chcemy uniknąć stosowania funkcji wirtualnych (są wolniejsze od 
zwykłych)
3. Tzw silne typowanie, choć pascal jest naturalnie silnie typowany
4.Zwiększenie czytelności programu: rozdzielenie uniwersalnej części 
algorytmu od wariantów wykorzystujących pewne indywidualne własności 
niektórych typów danych (template vs specialize)


Darek





-- 
   Darek
Technical Details
Message-ID: <4bdacf04$0$2599$65785112@news.neostrada.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!plix.pl!newsfeed1.plix.pl!aotearoa.belnet.be!news.belnet.be!feed.xsnews.nl!border-1.ams.xsnews.nl!feeder.news-service.com!feeder1.cambriumusenet.nl!feed.tweaknews.nl!209.197.12.242.MISMATCH!nx01.iad01.newshosting.com!newshosting.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
References: <3461.0000204c.4bd9fc39@newsgate.onet.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!plix.pl!newsfeed1.plix.pl!aotearoa.belnet.be!news.belnet.be!feed.xsnews.nl!border-1.ams.xsnews.nl!feeder.news-service.com!feeder1.cambriumusenet.nl!feed.tweaknews.nl!209.197.12.242.MISMATCH!nx01.iad01.newshosting.com!newshosting.com!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-b-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail
Date: Fri, 30 Apr 2010 14:37:15 +0200
From: darekm <darekm@emadar.com>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.1.9) Gecko/20100317 Thunderbird/3.0.4
MIME-Version: 1.0
Newsgroups: pl.comp.lang.pascal
Subject: Re: Generic
References: <3461.0000204c.4bd9fc39@newsgate.onet.pl>
In-Reply-To: <3461.0000204c.4bd9fc39@newsgate.onet.pl>
Lines: 66
Message-ID: <4bdacf04$0$2599$65785112@news.neostrada.pl>
Organization: Telekomunikacja Polska
NNTP-Posting-Host: 83.3.216.122
X-Trace: 1272631044 unt-rea-a-02.news.neostrada.pl 2599 83.3.216.122:62535
X-Complaints-To: abuse@news.neostrada.pl
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit