🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

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

#60133
From: Maciej Sobczak
Date: Wed, 02 Nov 2005 08:21
88 lines
5315 bytes
Marcin 'Qrczak' Kowalczyk wrote:

>>OK. Jak już pisałem wcześniej - mogę to związać z pojęciem zakresu
>>pętli i widoczności obiektów. Jeśli w jakimkolwiek miejscu widzę
>>obiekty zadeklarowane w pętli, to mogę tą pętlę też przerwać.
>>To właśnie obejmuje nie tylko ciąg instrukcji traktowany jako
>>sekwencję, ale również lokalne rozgałęzienia w rodzaju instrukcji
>>warunkowych (tak naprawdę to dopiero wtedy przerywanie pętli ma
>>sens).
> 
> Zgodnie z tym kryterium powinno też obejmować lokalne funkcje.
> I u mnie obejmuje, a u Ciebie nie.

U Ciebie nie obejmuje, bo nie masz break.
U mnie nie obejmuje, bo nie mam lokalnych funkcji. :)

Gdybym je miał, to i tak sceptycznie podchodzę do tematu dostępności 
obiektów lokalnych. Nawet gdybym na to pozwolił, to nie pozwoliłbym na 
ingerowanie z ich poziomu w logikę pętli, które strukturalnie są 
zewnętrzne w stosunku do tych funkcji.
W Twoim przypadku wyjątki pomagają ulepić jakiś schemat kontroli 
sterowania pomiędzy poziomami, ale to jest *skutek* modelu, który 
przyjąłeś a nie obiektywnie dobre rozwiązanie. Ja tego nie kupuję.

>>Wywołanie funkcji w pętli powoduje, że powstaje nowy zakres, gdzie
>>obiekty stworzone w pętli nie są widoczne (to też zależy od języka,
>>ale mówię o "moich" językach, gdzie widoczność jest ustalana
>>statycznie) -
> 
> A ja mówię o moim, gdzie jest ustalana statycznie *i* obejmuje obiekty
> zdefiniowane w pętli.

Czy obejmowałaby też etykiety (gdybyś je miał)?

Konkretniej:
Masz pętlę albo inną strukturę z etykietą i w tej strukturze definiujesz 
i aplikujesz lokalną funkcję. Czy w tej lokalnej funkcji pozwoliłbyś na 
dostęp do tej etykiety i jej wykorzystanie?

Składnia z czapki, oparta o C++:

etykieta:
while (true)
{
     string msg = "Hi";

     void () { cout << msg; break etykieta; }   ();

//  ^ . . . . . . . . . . . . . . . . . .  ^   ^
//  |                                      |   |
//  |              ,-----------------------'   |
//  lokalna funkcja                            |
//                                             |
//                           i jej aplikacja --'
}

Tu masz przykład na dostęp z funkcji lokalnej do obiektów zdefiniowanych 
w pętli (msg) *oraz* do etykiety.

Pozwoliłbyś na to? Wygląda fajnie, ale ja zabroniłbym *obu* tych rzeczy.


> 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ś.

>>No właśnie nie jest przezroczyste, bo powstaje kod, który nie widzi
>>pętli, którą przerywa. Taki kod (czyli tą funkcję) można wywołać
>>w inny sposób, i wtedy przestaje mieć sens.
> 
> Ależ widzi. Tyle że jeśli się uprzeć, to można zbudować kod, który
> będzie próbował przerwać pętlę po tym, jak ona się już zakończyła.
> Takie życie.

No właśnie mi się to nie podoba.

> Sytuacja jest podobna do próby operacji na pliku po jego zamknięciu.

U Ciebie, tak. U mnie nie, bo nie używam tokena. Przerwanie pętli jest 
częścią jej struktury i *nie da się* przerwać pętli nie mając pętli - 
dla mnie to jest błąd statyczny a nie "takie życie".


-- 
Maciej Sobczak : http://www.msobczak.com/
Programming    : http://www.msobczak.com/prog/
Technical Details
Message-ID: <dk9su1$6su$1@sunnews.cern.ch>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news2.icm.edu.pl!news.studio.net.pl!newsfeed.silweb.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.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> <dji80k$2a5$2@atlantis.news.tpi.pl> <20051024135514.GA237@siebert> <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>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news2.icm.edu.pl!news.studio.net.pl!newsfeed.silweb.pl!agh.edu.pl!news.agh.edu.pl!news.cyf-kr.edu.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: Wed, 02 Nov 2005 09:21:22 +0100
Organization: CERN - European Laboratory for Particle Physics
Lines: 88
Message-ID: <dk9su1$6su$1@sunnews.cern.ch>
References: <djfrn5$i55$1@nemesis.news.tpi.pl> <dji80k$2a5$2@atlantis.news.tpi.pl> <20051024135514.GA237@siebert> <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>
NNTP-Posting-Host: abpc10883.cern.ch
Mime-Version: 1.0
X-Trace: sunnews.cern.ch 1130919681 7070 (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: <87vezdanl0.fsf@qrnik.zagroda>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit