🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Coroutines w (GNU) C

#310202
From: heby
Date: Wed, 29 Jan 2020 23:01
89 lines
5224 bytes
On 29/01/2020 23:05, Maciek Godek wrote:
>> Się stan może pomieszać między korutynami.
> Pokaż przykład.

static int a = 1;
a = 2;

Ku naszemu zaskoczeniu a będzie równe 2.

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

Ten powyżje powinien wystarczyć.

>> Dwie identyczne korutyny nie przeplatajace się, ale będące w różnych
>> wątkach będa się zakłucać.
> Semantyka korutyn w różnych wątkach nie jest nawet dobrze określona.

Jest określona dokłądnie tak samo jak zwykłych funkcji. Pod warunkeim że 
to korutyny a nie jump oriented programming.

> Nie wiadomo, jak się powinno zachowywać.

Dokładnie wiadomo. Tak samo jak funkcje/procedury.

>>> Korutyna nie jest "pure function".
>> Nie ma przeszkód aby była. 
> Jest zasadnicza. Korutyna ma swój stan wewnętrzny, który z definicji jest mutowalny.

Może sobie mieć. Istotne jest że stan ten nie przecieka nigdzie poza nią.

Tak samo pure funkcja może mieć sobie w środku mutowalne "int a".

I sobie mutuje.

I nie przecieka poza tą funkcję.

Własnie odkryłeś że funkcje pure mogą mieć mutowalne, prywatne zmienne w 
środku i dalej być pure.

> A czysta funkcja robi tylko jedno: odwzorowuje wejście w wyjście. Zawsze dla tego samego wejścia ma dać to samo wyjście. Nie ma stanu wewnętrznego.

Ależ ma. Na ten przykład :

foo() {
int a = 1;
a = 2
return a;
}

Jeśli zatrzymasz ja w połowie to ma stan wewnętrzny. Ale on nie jest 
widoczny poza tą funkcją, nie jest dostępny również w korutynie poza nią.

Bycie pure to nie jest nie posiadanie kompletnie żadnego stanu. To jest 
nie ingerowanie w stan poza tą funkcją. W C/C++ do tego używa się 
zazwyczaj stosu.

> I to jest dość kolosalna przeszkoda.
>>> Czyste funkcje w ogóle nie mają czegoś takiego, jak "przebieg sterowania".

To zabawne, bo moje korutyny też nie mają. Robią yield() i z ich puktu 
widzenia nic się nie stało, jadą dalej. yield() to takie puste wywołanie 
która nic ciekawego nie robi z ich puktu widzenia.

>> No i wychodzi na to że nie czaisz bazy. Moja *funkcja* jest pure. Twoja
>> nie. Obie są korutynami.
> Korutyna to nie jest funkcja. Tutaj masz definicję, proszę:
> https://pl.wikipedia.org/wiki/Funkcja

Korutyna zachowuje się jak funkcja z wieloma punktami wyjścia i 
hermetycznym stanem pomiędzy.

Natomaist jeśli chcesz sprowadzić dyskusję do poziomu upierdlowego 
profesora to trudno. Sedno tkwi nawet nie w tym czy korutyna to funkcja 
czy nie. Sedno jest w tym że masz gównianą impelemntację na którą nawet 
w głupiej wikipedii wylali wiado pomyj bo tylko tyle można o niej 
powiedzieć.

>> Och, puśc tą samą korutynę 2x w jednym flow, na przemian.
> Nie wiem o czym mówisz. Napisz kawałek kodu, to będę wiedział.
> Problem jest taki, że określenie "ta sama korutyna puszczona 2x w jednym flow" nie jest jednoznaczna, bo nie wiem, co masz na myśli mówiąc "ta sama korutyna". Kawałek kodu wszystko wyjaśni.

Napisz w swoim kodzie flow w którym ta sama korutyna pracuje na przemian 
na dwóch róznych danych wejściowych.

I odpal ją naprzemiennie.

I wiesz co, postanowiłem że kodu nie napiszę. To poniżej godności żeby 
udowaniać komuś rzeczy oczywiste.
Technical Details
Message-ID: <r0t2t5$bun$1@dont-email.me>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!goblin2!goblin1!goblin.stu.neva.ru!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> <r0sv2c$k80$1@dont-email.me> <c4bfeba1-23f9-4307-a084-078282879401@googlegroups.com>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!goblin2!goblin1!goblin.stu.neva.ru!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: Thu, 30 Jan 2020 00:01:58 +0100
Organization: A noiseless patient Spider
Lines: 89
Message-ID: <r0t2t5$bun$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> <r0sv2c$k80$1@dont-email.me> <c4bfeba1-23f9-4307-a084-078282879401@googlegroups.com>
Mime-Version: 1.0
Injection-Date: Wed, 29 Jan 2020 23:01:58 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="3716540961fe64618de2072a8fc60514"; logging-data="12247"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX185CEVXihuEsw/rmupza+ze"
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.9.1
Cancel-Lock: sha1:CEK5QCMYfA3UKON0/J06J6k0DTo=
In-Reply-To: <c4bfeba1-23f9-4307-a084-078282879401@googlegroups.com>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit