Article View: pl.comp.os.linux.programowanie
Article #60141Re: Jak zrobić program obliczający dużą silnię?
From: Maciej Sobczak
Date: Fri, 04 Nov 2005 08:16
Date: Fri, 04 Nov 2005 08:16
72 lines
4616 bytes
4616 bytes
Marcin 'Qrczak' Kowalczyk wrote:
>>http://www.msobczak.com/prog/articles/lambdacpp.html
>>
>>Są tam przykłady użycia takich funkcji (paragraf "Anonymous
>>Function"), ale *nie ma* przykładów na dostęp z tych funkcji do
>>obiektów zdefiniowanych tam, gdzie one same były definiowane.
>
> Trudno, żebyś podawał przykłady, które przeczą Twojej tezie :-)
:)
Chodzi mi o to, że dostęp z funkcji lokalnych do ich zewnętrznego
zakresu *nie jest* (albo nie musi być) integralną częścią koncepcji
funkcji lokalnych. To są dwie osobne sprawy - mogę wyobrazić sobie
funkcje lokalne bez takiego dostępu a skoro tak, to mówiąc "funkcja
lokalna" nie mam koniecznie na myśli "funkcja lokalna z dostępem na
zewnątrz".
> W moim kompilatorze w 13754 liniach jest 408 anonimowych funkcji
> używających zewnętrznych zmiennych [...]
Wierzę.
> I dobrze mi z tym.
W to też. :)
>>Ten tekst pokazuje, że funkcje lokalne (lambdy) mogą być przydatne
>>bez dodatkowego dostępu do czegokolwiek.
>
> Dla mnie skoro są równoważne globalnym, to projektowanie dla nich
> specjalnej składni mija się z celem.
Nie. Nadal mają sens, podobnie jak każdy inny anonimowy byt.
W szczególności (copy'n'paste ze strony):
# the name space is not polluted with the names of entities that are
supposed to be used only once
# the "locality of reference" in the source code is higher
# the code is potentially shorter and more expressive
I to są powody dla których uważam anonimowe lokalne funkcje za
pożyteczne, nawet bez dostępu do obiektów (lub etykiet) z zewnątrz.
>>No, nie licząc *typów* danych (więc jednak ściemniałem trochę z tym
>>"brakiem widoczności czegokolwiek"), ale bez tego nie dało by się
>>użyć lambdy w szablonie.
>
> Pamiętaj, że nie możesz ukonkretnić szablonu lokalnym typem.
> One są jeszcze bardziej ograniczone niż globalne...
To jest jasne, ale tu chodziło o coś odwrotnego: o możliwość
zdefiniowania lokalnej funkcji w szablonie a nie o możliwość
konkretyzowania szablonu funkcją lokalną.
Z drugiej strony - nikt nie potrafi jasno odpowiedzieć na pytanie
*dlaczego* to drugie nie jest możliwe w C++. Osobiście uważam, że to
ograniczenie jest zbędne i pokazałem przykłady, gdzie nie istnieje, np:
std::sort(b, e, bool (int a, int b) { return a < b; });
Jak by nie patrzeć, typ funkcji lokalnej jest... lokalny i jak
najbardziej służy do konkretyzacji szablonu std::sort. To, że w ramach
najprostszej implementacji kompilator mógłby posłużyć się przepisywaniem
tego na jakąś funkcję zewnętrzną z unikalną nazwą tym bardziej pokazuje,
że to ograniczenie dla lokalnych typów nie ma uzasadnienia.
--
Maciej Sobczak : http://www.msobczak.com/
Programming : http://www.msobczak.com/prog/
Technical Details
Message-ID:
<dkf5da$d8g$1@sunnews.cern.ch>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.nask.pl!news.nask.org.pl!newsfeed00.sul.t-online.de!t-online.de!irazu.switch.ch!news-zh.switch.ch!switch.ch!cernne03.cern.ch!cern.ch!newsReferences:
<djfrn5$i55$1@nemesis.news.tpi.pl> <djn9lh$ktl$1@nemesis.news.tpi.pl> <e2pcznjzv2gh$.1drgaxj9rqzhj.dlg@40tude.net> <djnjtf$suk$2@nemesis.news.tpi.pl> <1i7bbr8l84m9o$.8ttxld9ccdq4.dlg@40tude.net> <djnq5h$8ae$1@atlantis.news.tpi.pl> <gmqro8ttahov.aorv2e8thz25.dlg@40tude.net> <87wtk0iiqw.fsf@qrnik.zagroda> <djq3rj$4fm$1@sunnews.cern.ch> <87y84fz1bn.fsf@qrnik.zagroda> <djqg9q$1sg$1@sunnews.cern.ch> <87ll0ezpyl.fsf@qrnik.zagroda> <djsle0$q36$1@sunnews.cern.ch> <877jbx7q2t.fsf@qrnik.zagroda> <dk4n41$aue$1@sunnews.cern.ch> <87vezdanl0.fsf@qrnik.zagroda> <dk9su1$6su$1@sunnews.cern.ch> <87k6fqeq35.fsf@qrnik.zagroda> <dkcps0$2vq$1@sunnews.cern.ch> <slrndmk3v4.p01.jajcus@serwis2.beta> <dkd731$2u6$1@sunnews.cern.ch> <87psphsc6n.fsf@qrnik.zagroda>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.nask.pl!news.nask.org.pl!newsfeed00.sul.t-online.de!t-online.de!irazu.switch.ch!news-zh.switch.ch!switch.ch!cernne03.cern.ch!cern.ch!news From: Maciej Sobczak <no.spam@no.spam.com> Newsgroups: pl.comp.os.linux.programowanie Subject: Re: Jak zrobić program obliczający dużą silnię? Date: Fri, 04 Nov 2005 09:16:43 +0100 Organization: CERN - European Laboratory for Particle Physics Lines: 72 Message-ID: <dkf5da$d8g$1@sunnews.cern.ch> References: <djfrn5$i55$1@nemesis.news.tpi.pl> <djn9lh$ktl$1@nemesis.news.tpi.pl> <e2pcznjzv2gh$.1drgaxj9rqzhj.dlg@40tude.net> <djnjtf$suk$2@nemesis.news.tpi.pl> <1i7bbr8l84m9o$.8ttxld9ccdq4.dlg@40tude.net> <djnq5h$8ae$1@atlantis.news.tpi.pl> <gmqro8ttahov.aorv2e8thz25.dlg@40tude.net> <87wtk0iiqw.fsf@qrnik.zagroda> <djq3rj$4fm$1@sunnews.cern.ch> <87y84fz1bn.fsf@qrnik.zagroda> <djqg9q$1sg$1@sunnews.cern.ch> <87ll0ezpyl.fsf@qrnik.zagroda> <djsle0$q36$1@sunnews.cern.ch> <877jbx7q2t.fsf@qrnik.zagroda> <dk4n41$aue$1@sunnews.cern.ch> <87vezdanl0.fsf@qrnik.zagroda> <dk9su1$6su$1@sunnews.cern.ch> <87k6fqeq35.fsf@qrnik.zagroda> <dkcps0$2vq$1@sunnews.cern.ch> <slrndmk3v4.p01.jajcus@serwis2.beta> <dkd731$2u6$1@sunnews.cern.ch> <87psphsc6n.fsf@qrnik.zagroda> NNTP-Posting-Host: abpc10883.cern.ch Mime-Version: 1.0 X-Trace: sunnews.cern.ch 1131092202 13584 (None) 137.138.37.241 X-Complaints-To: news@sunnews.cern.ch User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.12) Gecko/20050922 Red Hat/1.7.12-1.1.3.2.SL3 X-Accept-Language: en-us, en In-Reply-To: <87psphsc6n.fsf@qrnik.zagroda> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit