🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.c
Article #310200

Re: Coroutines w (GNU) C

#310200
From: heby
Date: Wed, 29 Jan 2020 21:56
72 lines
5014 bytes
On 29/01/2020 22:40, Maciek Godek wrote:
>> Jeb. Właśnie użyłeś zmiennej globalnej. Ojej. Co się może stać?
> No. Co się może stać?

Się stan może pomieszać między korutynami.

>> Innymi słowy jesteś krytykowany że twój kod wymaga zmiennych globalnych,
>> pytasz "czego nie możesz zrobić bez stosu, a co mógłbyć zrobić, gdybyś
>> miał korutyny ze stosem", podaje przykład a ty dajesz przykład korutyny
>> bez stosu joko dowód że też da się zrobić.
> To, czy użyjesz zmiennej automatycznej, czy statycznej, to tylko drobna różnica w implementacji.

Nie, to różnica między programowaniem funkcyjnym a tym drugim.

> Funkcjonalnie ten kod jest identyczny.

Nie. Bo zależy to od reszty kodu którego nie widać. Konkretnie kod *nie* 
pure nie da się ocenić patrząc tylko w jedną funkcję.

> A jeżeli nie jest, to pokaż mi proszę różnicę.

Dwie identyczne korutyny przeplatające się w jednym flow będa się zakłócać.

Dwie identyczne korutyny nie przeplatajace się, ale będące w różnych 
wątkach będa się zakłucać.

Poprawnie napisana bibliteka do coroutines nie będzie miała tych wad 
ponieważ zadba o *osobny* stos per wywołanie. Tak robi każda znana mi 
bibliteka do korutyn w jezykach imperatywnych. W tych innych pewnie też.

>> Nie, jedno to pure function a druga to side effect. Fundamentalna
>> różnica, ludzie poświęcili życie aby wykazać lepszosc jednych nad
>> drugimi, tony prac naukowych napisali. Przykro mi że nie dostrzegasz
>> tego "detalu".
> Korutyna nie jest "pure function".

Nie ma przeszkód aby była. Przykładowo spora częśc wzorca projektowego 
"generator" jest pure i jest korutyną. Iteratory są korutyną i są 
zazwyczaj pure. W ogóle, wiele rzeczy jest pure. Bez znaczenia czy to 
korutyny czy zwykłe funkcje.

Tylko nie u Ciebie. U Ciebie każde użycie zmiennej kończy się byciem 
"nie pure". Chyba że zastosujesz lokalny kontener na zmienne, ale wtedy 
musisz zarządzań nim poza korutynami. I tak wynalazłeś właśnie 
cooperative multitasking, tylko kwadratowy.

> Poczytaj sobie może troszkę, zanim zaczniesz używać terminologii.

O ba, Panie, ja to stosuje od dawna. Przeczytałem to z jakieś 20 lat 
temu, obecnie bazuje wyłącznie na własnej ignorancji.

> Czyste funkcje w ogóle nie mają czegoś takiego, jak "przebieg sterowania".

No i wychodzi na to że nie czaisz bazy. Moja *funkcja* jest pure. Twoja 
nie. Obie są korutynami.

Ja mogę napisać "nie pure" funkcje jak chcę lub muszę.

Ty nie możesz napisać pure poza duperelowatymi funkcyjkami bez stanu. Bo 
mechanizm ma fundamentalną wadę. Stan jest poza lokalnym stosem. Game over.

>> Nie musiałem, sam napisałeś przed chwilą przykład korutyny która jest
>> nie reentrant, thradsafe, wahatever. Moja z boosta jest reentrant,
>> threadsafe, whatever.
> No to pokaż mi różnicę behawioralną. Pokaż, jak jedna się może zepsuć, a druga nie może, bo na razie to tak sobie gadasz.

Och, puśc tą samą korutynę 2x w jednym flow, na przemian.

Moja zadziała, twoja zaplącze się we wspólnym stanie.

Nie ma manipulacji stosem, nie ma korutyn. Jest tylko "jump oriented 
programming".
Technical Details
Message-ID: <r0sv2c$k80$1@dont-email.me>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!fu-berlin.de!news.unit0.net!eternal-september.org!feeder.eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mail
References: <4375b52d-ba21-462a-8844-9bd1a02e9ece@googlegroups.com> <r0k8i5$ifg$1@dont-email.me> <ce3f0b08-658f-4248-b82c-09f093a7f20c@googlegroups.com> <r0kq6d$v6h$1@dont-email.me> <748c5d16-f4a8-43a0-8a56-bea0800e1e04@googlegroups.com> <r0n95e$35l$1@dont-email.me> <f3df206c-11d4-4b22-87ff-fc7aa00935f3@googlegroups.com> <r0nevq$9iq$1@dont-email.me> <ecae4ae1-0b06-4956-8df0-593fa0f1cd01@googlegroups.com> <r0njjv$740$1@dont-email.me> <0e0786af-7b58-4070-b8cd-81f1bda1f432@googlegroups.com> <r0q9iv$23b$1@dont-email.me> <b7cfec93-1d13-44e3-a924-0869447ed3c7@googlegroups.com> <r0seqp$av0$1@dont-email.me> <462689f9-f50d-4a96-8910-cb65757a017a@googlegroups.com> <r0st86$956$1@dont-email.me> <cc360fba-2eab-4928-8e14-36db20fa4a96@googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!fu-berlin.de!news.unit0.net!eternal-september.org!feeder.eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mail
From: heby <heby@poczta.onet.pl>
Newsgroups: pl.comp.lang.c
Subject: Re: Coroutines w (GNU) C
Date: Wed, 29 Jan 2020 22:56:29 +0100
Organization: A noiseless patient Spider
Lines: 72
Message-ID: <r0sv2c$k80$1@dont-email.me>
References: <4375b52d-ba21-462a-8844-9bd1a02e9ece@googlegroups.com> <r0k8i5$ifg$1@dont-email.me> <ce3f0b08-658f-4248-b82c-09f093a7f20c@googlegroups.com> <r0kq6d$v6h$1@dont-email.me> <748c5d16-f4a8-43a0-8a56-bea0800e1e04@googlegroups.com> <r0n95e$35l$1@dont-email.me> <f3df206c-11d4-4b22-87ff-fc7aa00935f3@googlegroups.com> <r0nevq$9iq$1@dont-email.me> <ecae4ae1-0b06-4956-8df0-593fa0f1cd01@googlegroups.com> <r0njjv$740$1@dont-email.me> <0e0786af-7b58-4070-b8cd-81f1bda1f432@googlegroups.com> <r0q9iv$23b$1@dont-email.me> <b7cfec93-1d13-44e3-a924-0869447ed3c7@googlegroups.com> <r0seqp$av0$1@dont-email.me> <462689f9-f50d-4a96-8910-cb65757a017a@googlegroups.com> <r0st86$956$1@dont-email.me> <cc360fba-2eab-4928-8e14-36db20fa4a96@googlegroups.com>
Mime-Version: 1.0
Injection-Date: Wed, 29 Jan 2020 21:56:29 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="139efa17e3b50ff7a55c5d56671ca15d"; logging-data="20736"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+kwUrAFTGv/nsvmdWOGazB"
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.9.1
Cancel-Lock: sha1:Bgx/8oNgFh6bAfCdw/9Ujkb/u1o=
In-Reply-To: <cc360fba-2eab-4928-8e14-36db20fa4a96@googlegroups.com>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit