Article View: pl.comp.lang.c
Article #310202Re: Coroutines w (GNU) C
From: heby
Date: Wed, 29 Jan 2020 23:01
Date: Wed, 29 Jan 2020 23:01
89 lines
5224 bytes
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-mailReferences:
<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