Article View: pl.comp.lang.c
Article #310077Re: Coroutines w (GNU) C
From: heby
Date: Mon, 27 Jan 2020 21:10
Date: Mon, 27 Jan 2020 21:10
110 lines
6378 bytes
6378 bytes
On 27/01/2020 21:32, Maciek Godek wrote: >> I dlaczego nie możesz uzy kompilatora C++? > Mam wiele powodów. Ale nie tego dotyczy ten wątek. Rozumiem, więc to kwestie religijne jednak. >> Nie, poniewa zmiana z gcc na g++ to jaki 10 sekund, a zmiana na Lua to >> od kilku do kilkuset godzin i zerowy sens. > Zmiana na g++ to też zerowy sens. Wręcz przeciwnie. To troche jak zamiana łopaty na koparkę. Też sensu brak jak się kopie dziurę pod kwiatek. Tylko po co wtedy komu korutyny. > Pomijając jeszcze tę kwestię, że trzeba go jeszcze najpierw zainstalować. To faktycznie showstopper. > A później jeszcze zainstalować boosta. A to już overkill. Ze dwa polecenia w konsoli to o trzy za dużo. > I to u każdego developera, który pracuje nad tym projektem. Nie do ogarnięcia przez IT ani tym bardziej developerów, oni się gubią przy byle pingu a co dopiero apt-geta użyć. >> Użyć boosta, dorobić abstrakcję i zrefaktoryzować jak będzie po co za >> kilka lat. > "Dorobić abstrakcję"? Chyba nie podziewasz się że ktoś będzie chciał używać niestandardowych makr wprost w kodzie w których aż roi się od śmiesznych problemów z okolic "zapomiałem dodać makra _START i wylatuje"? > A nie mogę od razu użyć docelowego rozwiązania? Możesz. Ale boost::context/coroutine nie jest jeszcze "docelowy". Dlatego owija się w to abstrakcję i izoluje granicę refaktoringu. > To jest 20 linijek kodu. > A boost ma... no, ile linijek? Biliard. W sumie bez znaczenia. U mnie to i tak jeden #include. >> Czy potrafisz z całą pewnością wskazać sensowną zaletę side effects >> jakiejś implementacji vs szeroko używana bibliteka ktorej spore >> fragmenty lądują co jakiś czas w standardzie? > Projekt, nad którym pracuję, i tak korzysta już z tego kompilatora i jego różnych rozszerzeń. I dlaczego tym rozszerzeniem kompilatora nia ma być g++/boost? Znowu religia? > I to nie jest "side effect", tylko udokumentowane rozszerzenie języka. Ja mówie o "[...]żeby wartości argumentów były przechowywane między wywołaniami, to musimy je zapisywać w zmiennych statycznych.[...]". No to się ktoś by zdziwił w handlerze przerwania ARMa że mu się jakieś zmienne statyczne nadpisują w sąsiednim przerwaniu z sąsiedniego przerwania. >> Jesteś pewny że ktokolwiek będzie uzywać *KORUTYN* w handlerach przerwań >> na ARMie czy innym 6502? Żartujesz, powiedz proszę. > No, ja będę. Właściwie to głównie po to opracowałem ten mechanizm. A po co w przerwaniu korutyny? Impelemntujesz maszynę stanów? Korutyny są potrzebne kiedy algorytm jest złożony i nie da się go spłaszczyć bez poświęcenia czytelności. Masz aż tak złożone algorytmy w przerwaniach? Jesteś pewny że nie da się ich wyrzucić poza przerwania? > Żeby móc sobie pisać wątki na przerwaniach. OK, oczywisćie sprawdziłeś overheat przełaczanai stosów i zapisywania kontekstu rejestrów? Zaryzykuje: a sprawdziłeś co oferuje FreeRTOS? > Więcej na ten temat pisałem na comp.lang.c. > Widzisz w tym jakiś problem? W zasadzie tak: przerwania, jak to przerwania, powinny być szybkie. Korutyn bym tam nie wsadzał. Szczególnei takich z okolic "workaround przez zmienne statyczne". > Rzecz w tym, że zarówno wyjątki, jak i korutyny są mechanizmem transferu sterowania. Nie do końca rozumiem, jak działają wątki w C++, ani tym bardziej jak działają korutyny w C++. Korutyny w c++ działaja tak samo jak cooperative mutitasking w C. Zapamiętuje się stos, rejestry i przepina na inny "fiber". Wsio. Technologia z lat 70 gdzieś chyba. > Co więcej, nie interesuje mnie to do tego stopnia, żebym chciał poświęcać czas na uczenie się tego i analizę wszystkich sytuacji, w których coś może pójść nie tak. Ależ niestety musisz. Przez ten kod na statycznych zmiennych jesteś zmuszony do analizy i to choelrnie cieżkiej bo masz praktycznie preemptive multitasking, w przerwaniach. Albo ciezka analiza albo game over. > A Ty w dalszym ciągu nie odpowiedziałeś mi na moje pytanie. Czy będzie problem ze wznawianiem tych korutyn w przerwaniach, czy nie będzie? Oczywiscie że odpowiedź zależy od zabyt dużej liczby czynników aby miała sens. Ale ponieważ mam pod ręką fusy: masz problem z przekazywaniem wartości pomiędzy wywołaniami i sugerujesz zmienne statyczne i pracujesz z przerwaniami. Co może pójść źle? >> Bazującego feature jakiegoś kompilatora o niejasnej przyszłosci i >> przenośności. > Tzn. GCC jest "jakimś kompilatorem o niejasnej przyszłości i przenośności"? Feature tego kompilatora jest o niejasnej przyszłości. PS. Mała uwaga: coroutines wymagają *czegoś* ze stosem. kopiowania, podmieniania, czegokolwiek. To jest ten brakujący ficzer w implementacji.
Technical Details
Message-ID:
<r0njjv$740$1@dont-email.me>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.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>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.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: Mon, 27 Jan 2020 22:10:23 +0100 Organization: A noiseless patient Spider Lines: 110 Message-ID: <r0njjv$740$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> Mime-Version: 1.0 Injection-Date: Mon, 27 Jan 2020 21:10:23 -0000 (UTC) Injection-Info: reader02.eternal-september.org; posting-host="a142005fc87d8a3409f6f9b4ffde8cce"; logging-data="7296"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18UukmoUzV8xMNRggCmj3Eh" User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.9.1 Cancel-Lock: sha1:hJqRqCW9TUcaZZSlssLRCQz8Lgw= In-Reply-To: <ecae4ae1-0b06-4956-8df0-593fa0f1cd01@googlegroups.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit