Article View: pl.comp.lang.funkcyjne
Article #769Re: j. funkcyjne - jakie zastosowania?
From: Marcin 'Qrczak' Kowalczyk
Date: Wed, 04 Jan 2006 16:08
Date: Wed, 04 Jan 2006 16:08
46 lines
3853 bytes
3853 bytes
RobertSzefler <NOSPAMrszeflerNOSPAM@murator.com.pl> writes:
>>>> x * y; // co to za konstrukcja?
>>>
>>>Eee... a tu jest jakaś niejednoznaczność? To jest po prostu mnożenie x
>>>przez y na moje oko.
>> To może być też definicja zmiennej y typu wskaźnik do x.
>
> aaach! oczywiście ... to problem jak rozumiem pojawiający się dla ISO
> C99 (a dla jakich dialektów C++?)
Problem pojawia się we wszystkich wersjach C, które miały już
konstrukcję typedef, i w C++.
W C niejednoznaczność może być zawsze rozstrzygnięta przez kompilator
na podstawie kontekstu: parser musi tylko wiedzieć, które identyfikatory
oznaczają typy, a które nie.
W C++ szablony nakładają nową trudność. "Identyfikator" nie musi
być globalny, może być kwalifikowany nazwą klasy, a klasa może być
ukonkretnieniem szablonu. Czyli żeby rozstrzygnąć, jak to parsować,
trzeba konkretyzować szablony. Co w ogólności może być niemożliwe,
jeśli kod jest umieszczony w innym szablonie i to, czym konkretyzuje
tamten szablon, zależy od jego parametru, czyli jeszcze nie jest znane.
Stąd typename, żeby ujednoznacznił to programista. A kompilator musi
to sobie tak zorganizować, że jedne ukonkretnienia szablonów są
wykonywane od razu, a inne są odraczane, aż będą znane parametry.
Podobnie ze sprawdzaniem typów: jeśli jesteśmy w szablonie, to jedne
wyrażenia mają typ obliczany od razu, a inne są odraczane, zależnie
od tego, czy ten typ może zależeć od parametrów szablonu. Określanie
tych typów, które się da, od razu, jest o tyle potrzebne, że semantyka
C++ uzależnia przestrzenie wyszukiwania identyfikatorów od typów
(m.in. tzw. Koenig lookup). Jeśli typy są znane w czasie przetwarzania
szablonu, to identyfikatory są wyszukiwane w przestrzeniach nazw
wyznaczonych przez te typy i zależnych tylko od miejsca definicji
szablonu, a jeśli nie są znane, to wszystko jest odraczane, a przy
konkretyzacji szablonu identyfikatory są wyszukiwane zarówno
w miejscach zależnych od kontekstu definicji szablonu, jak i od
kontekstu użycia.
--
__("< Marcin Kowalczyk
\__/ qrczak@knm.org.pl
^^ http://qrnik.knm.org.pl/~qrczak/
Technical Details
Message-ID:
<874q4kou1c.fsf@qrnik.zagroda>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.tpinternet.pl!nemesis.news.tpi.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mailReferences:
<dpc61g$f0l$1@news.onet.pl> <dpdvtq$oss$1@nemesis.news.tpi.pl> <slrndrn602.61b.tomasz.zielonka@localhost.localdomain> <slrndrn661.61b.tomasz.zielonka@localhost.localdomain> <dpg8ns$52m$1@nemesis.news.tpi.pl> <slrndrnguv.6eu.tomasz.zielonka@localhost.localdomain> <dpghlc$1j3v$1@news2.ipartners.pl> <slrndrnj9i.6j9.tomasz.zielonka@localhost.localdomain> <dpgkkg$1ksh$1@news2.ipartners.pl> <87hd8k0zk6.fsf@qrnik.zagroda> <dpgqmi$1o8c$1@news2.ipartners.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!newsfeed.tpinternet.pl!nemesis.news.tpi.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mail
From: Marcin 'Qrczak' Kowalczyk <qrczak@knm.org.pl>
Newsgroups: pl.comp.lang.funkcyjne
Subject: Re: j. funkcyjne - jakie zastosowania?
Date: Wed, 04 Jan 2006 17:08:15 +0100
Organization: Klub Nieszkodliwych Manjaków
Lines: 46
Message-ID: <874q4kou1c.fsf@qrnik.zagroda>
References: <dpc61g$f0l$1@news.onet.pl> <dpdvtq$oss$1@nemesis.news.tpi.pl> <slrndrn602.61b.tomasz.zielonka@localhost.localdomain> <slrndrn661.61b.tomasz.zielonka@localhost.localdomain> <dpg8ns$52m$1@nemesis.news.tpi.pl> <slrndrnguv.6eu.tomasz.zielonka@localhost.localdomain> <dpghlc$1j3v$1@news2.ipartners.pl> <slrndrnj9i.6j9.tomasz.zielonka@localhost.localdomain> <dpgkkg$1ksh$1@news2.ipartners.pl> <87hd8k0zk6.fsf@qrnik.zagroda> <dpgqmi$1o8c$1@news2.ipartners.pl>
NNTP-Posting-Host: paf87.warszawa.sdi.tpnet.pl
Mime-Version: 1.0
X-Trace: nemesis.news.tpi.pl 1136390967 20700 217.96.225.87 (4 Jan 2006 16:09:27 GMT)
X-Complaints-To: usenet@tpi.pl
NNTP-Posting-Date: Wed, 4 Jan 2006 16:09:27 +0000 (UTC)
X-Face: .B/ouEO}=VFkSJWE}s0@!:diHI.Z,<Ilt`:~@*]7rnn^K_y"XV8AXf^E)x*|3yVg:$FCq0Y )iGn@Z[SOA<+p}TkAv'Lzu$w{z2?F);0Xt>`m}AqK#Vjuscq(Vf1B}H[)v\9tBN}>AdP,QSRbhO]=v 3?;I+cN/Z0HKPm_Eg99/pFrU!WfpjgQ!z":>A~qt0^4):0-UuPB(6^>j!mN$)RIb)rRhXeK:+MLPW[ RVb7Kepvby-ww6_zci7Yy_@IrWW
User-Agent: Gnus/5.1006 (Gnus v5.10.6) Emacs/21.4 (gnu/linux)
Cancel-Lock: sha1:j4wJLaJ6WO4qcAWbYbOJQ0UzU1g=
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit