Article View: pl.comp.lang.c
Article #310200Re: Coroutines w (GNU) C
From: heby
Date: Wed, 29 Jan 2020 21:56
Date: Wed, 29 Jan 2020 21:56
72 lines
5014 bytes
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-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>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