🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.os.linux.programowanie
Article #60135

Re: Jak zrobić program obliczający dużą silnię?

#60135
From: Maciej Sobczak
Date: Thu, 03 Nov 2005 10:47
53 lines
4036 bytes
Marcin 'Qrczak' Kowalczyk wrote:

>>Czy obejmowałaby też etykiety (gdybyś je miał)?
> 
> Nie mogę więc powiedzieć, co by było przy goto, bo ono jest
> niekompatybilne z moim modelem.

Chodziło mi o break. Albo - bardziej ogólnie - o widoczność etykiet w 
zagnieżdżonej funkcji lokalnej. To też ciekawy temat, bo prowokuje 
pytanie, czym jest etykieta i czym się różni od identyfikatora obiektu. 
Tak naprawdę jedno i drugie jest nazwą jakiegoś bytu w programie. 
Pozwalasz na to, żeby funkcja lokalna widziała nazwy obiektów 
zdefiniowanych w tym zakresie, gdzie ta funkcja jest stworzona. Co z 
innymi identyfikatorami? Co z etykietami? Nie chodzi o goto - to jest 
bardziej ogólny temat. Np. wyobrażam sobie język imperatywny z semantyką 
transakcji (commit/rollback), gdzie etykiety mogą służyć do określenia 
miejsc w kodzie, gdzie można np. wycofać różne operacje. Co z takimi 
etykietami? Czy powinny być widoczne w funkcjach lokalnych (jeśli język 
je wspiera)?

Moje zdanie jest takie, że funkcje lokalne nie powinny widzieć *niczego* 
z ich zewnętrznego zakresu (ale można wykorzystać ich parametry do 
przekazania im jakiejś wartości albo referencji) - po prostu nie 
potrafię powiedzieć, gdzie miałbym się z tym zatrzymać.


>>>Musi być coś zamiast finally, żeby język był praktyczny.
>>
>>Oczywiście, tylko że ja na to patrzę odwrotnie (i historycznie chyba
>>mam rację): to właśnie finally jest "czymś zamiast". Z takimi
>>efektami, jak wspomniałeś.
> 
> Co uznajesz za podstawową konstrukcję tego rodzaju?

Obiekty lokalne z destruktorami. Funkcje lokalne (albo anonimowe klasy 
albo jedno i drugie razem) mogą tu bardzo pomóc przy definiowaniu akcji 
ad-hoc.

C++, Ada - te języki mają obiekty lokalne z destruktorami i bardzo mi 
dzięki temu pasują. Niestety nie mają funkcji lokalnych. W C++ może coś 
się w tym temacie zmieni, Ada nie ma na to szans.


> RAII w C++ ma ten sam problem, co wołanie zawsze metody Dispose:
> zmusza do opisania zasobu albo stanu klasą z konstruktorami
> i destruktorem.

Owszem. Funkcje lokalne by się tu przydały.


-- 
Maciej Sobczak : http://www.msobczak.com/
Programming    : http://www.msobczak.com/prog/
Technical Details
Message-ID: <dkcps0$2vq$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!news
References: <djfrn5$i55$1@nemesis.news.tpi.pl> <djij31$st1$1@sunnews.cern.ch> <20051024162624.GA1132@siebert> <djleog$fok$1@nemesis.news.tpi.pl> <1t4bv9mozvw38.12szxw58iqmbp.dlg@40tude.net> <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>

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: Thu, 03 Nov 2005 11:47:29 +0100
Organization: CERN - European Laboratory for Particle Physics
Lines: 53
Message-ID: <dkcps0$2vq$1@sunnews.cern.ch>
References: <djfrn5$i55$1@nemesis.news.tpi.pl> <djij31$st1$1@sunnews.cern.ch> <20051024162624.GA1132@siebert> <djleog$fok$1@nemesis.news.tpi.pl> <1t4bv9mozvw38.12szxw58iqmbp.dlg@40tude.net> <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>
NNTP-Posting-Host: abpc10883.cern.ch
Mime-Version: 1.0
X-Trace: sunnews.cern.ch 1131014848 3066 (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: <87k6fqeq35.fsf@qrnik.zagroda>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit