Article View: pl.comp.lang.c
Article #310195Re: Coroutines w (GNU) C
From: Maciek Godek
Date: Wed, 29 Jan 2020 07:31
Date: Wed, 29 Jan 2020 07:31
134 lines
8347 bytes
8347 bytes
W dniu wtorek, 28 stycznia 2020 22:37:38 UTC+1 użytkownik heby napisał: > >> Biliard. W sumie bez znaczenia. U mnie to i tak jeden #include. > > A o ile wydłuża czas kompilacji? > > Dopadła Cie reglamentacja czasu kompilacji? Masz ograniczenie na > produkcje promieniowania termicznego w procesach kompilacji wynikające z > troski o polską energetykę? Kompilujesz całosć za każdym razem? Widzisz > różnicę pomiedzy 10ms vs 20ms? Wolę po prostu nie dokładać niepotrzebnych zależności. Nie wiem, co w tym dziwnego. > > że Ty sobie używasz jakiejś technologii, i ja sobie używam innej technologii > > Kilka kiepskich makr cieżko nazwać technologią. Język C to jest technologia, i język C++ to jest inna technologia. > >, i wygląda na to, że z jakichś względów Tobie strasznie przeszkadza to, że nie używam tej technologii, której Ty używasz. > > Mi nie przeszkadza bo nie używam popsutych makr które rozwiązują jakiś > problem generujac inny problem. Przestrzegam innych. Chyba trochę przeszkadza, skoro atakujesz mnie z tego powodu. > > Czasem, kiedy w odpowiedzi na moje różne krytyki C++ pojawiają się gorliwi wyznawcy, którzy przekonują mnie, że "chuja się znam", odsyłam ich do tej listy problemów. > > Całość tego blogowego wpisu była C++ vs inne języki. A tu rozmawiamy C++ > vs C. Musiałem wiec przegapić tą "listę" która ma odniesienie do naszej > dyskusji. C też jest innym językiem, niż C++. > Nikt tutaj nie przekna Cie do pisania w C++ bo wcale nie musisz. Skoro > piszesz programy używając muzealnych technik zamiast wspaniałego > scheme/lispa to możesz miec "jakieś powody". Ja tylko zwracam uwagę że > zamiana technologii na C++ i pisanie dalej w C z małymi wstawkami w C++ > nikomu dupy nie urwało choć nie jednego pewnie zmusiło do spowiedzi i > pokuty w lokalnej grupie wyznaniowej. Po pierwsze, C i C++ są niekompatybilne. A jeżeli używam rozszerzeń GNU C, to jest już w ogóle niekompatybilne, i zamiana jednego kodu na drugi jest nietrywialna. Po drugie, mi się dużo przyjemniej pisze w GNU C, niż w C++. Jeżeli nie potrafisz sobie z tym poradzić, to może idź do terapeuty. > > W każdym razie żaden jeszcze nie zaproponował jakiegokolwiek rozwiązania któregokolwiek z tych problemów. > > Zabawne bo ja własnie zaproponowałem. Zmień na C++, użyj > boost::coroutine. Potem dorzuciłeś że to arm i przerwania. Skoro tak to: > nie uzywaj coroutines, użyj FreeRTOSa Dokładnie tak. Zaproponowałeś wiele rozwiązań, zupełnie nie rozumiejąc uwarunkowań problemu. I to zaproponowałeś, mimo że nikt Cię o to nie prosił. Dzięki temu straciłeś czas zarówno swój, jak i mój. > > Ja w swoim życiu widziałem projekty, które grzęzły tylko od tego, że ktoś na początku podjął decyzję o użyciu tego właśnie języka. > > (Nota bene, widziałem je właśnie w tej firmie, w której pracujesz) > > To musiała być inna firma. Nic się nie zgadza. Tam pomiędzy Ikeą a lotniskiem. > > I jeżeli Ty masz ochotę dostrajać się do tempa pracy komitetu standaryzacyjnego C++, to to jest Twoja sprawa. Ja mam inne pomysły na korzystanie ze swojego życia, i wolę korzystać z rozwiązań, które rozumiem, i które działają już teraz. > > Ale one nie działają. Dostarczyłeś popsutą bibliotekę do coroutines > która ma rozwiązywać problemy które rozwiązuje się inaczej. Cały czas nie wiesz, jaki problem chcę rozwiązać, ani jakie są jego uwarunkowania. A mimo tego cały czas gadasz, jakbyś wiedział lepiej. > >>> Żeby móc sobie pisać wątki na przerwaniach. > >> OK, oczywisćie sprawdziłeś overheat przełaczanai stosów i zapisywania > >> kontekstu rejestrów? > > Jakiego przełączania stosów? > > Tak działają coroutines w C/C++ bo w tym języku stos jest elementem > kontekstu wykonywania kodu. W C jako takim nie ma czegoś takiego, jak "coroutines", więc nie można powiedzieć, że "tak działają". > I dlatego nie masz tak naprawdę coroutines. Masz popsutą bibliotekę do > rozwiązywania absurdalnie nikłego zakresu problemów w porównaniu do > prawdziwych coroutines. Nie wykluczam że wystarczającą do "przerwania w > ARMie" aczkolwiek dalej jestem zaszokowany ile się w tym przerwaniu musi > dziać że aż trzeba na pomoc wołać preprocesor ... Uuu, "aż wołać preprocesor". <grzmoty i pioruny> > >> Zaryzykuje: a sprawdziłeś co oferuje FreeRTOS? > > Oczywiście. Mam dobre powody, dla których stosuję właśnie to rozwiązanie, które stosuję. > > Masz dobre powody aby nie używać C++ i FreeRTOSa. Poza religią nie znam > sensownych, "blog" nie pomógł w ich identyfikacji. Co robić... To nie moja wina, że brakuje Ci wyobraźni. > >> W zasadzie tak: przerwania, jak to przerwania, powinny być szybkie. > >> Korutyn bym tam nie wsadzał. Szczególnei takich z okolic "workaround > >> przez zmienne statyczne". > > Jaki "workaround"? > > Niemożność używania stosu. To ogranicza zastosowanie do marginalnej > ilosci przypadków, w dodatku prawdopodobnie rozwiązywalnych ładniej > switch/case. No dobrze, to może pokaż, czego nie możesz zrobić bez stosu, a co mógłbyć zrobić, gdybyś miał korutyny ze stosem. > >> 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? > > A w czym to przeszkadza? > > W niczym. Przy bardzo dużej uwadze, wyszarpaniu sobie żył i głebokiej > modlitwie masz szansę napisać cały program na side effectach przez > zmienne globalne i może nawet cudem zadziała. W końcu jakoś te programy > w BASICu na 8-bit pisali. Rozumiem. Czyli tak sobie gadasz. > >Jeżeli chcę się komunikować z przerwania z innymi komponentami systemu, to muszę użyć zmiennej globalnej. > > To inny przypadek. A czym się różni? > > Zmienna statyczna to to samo, tyle że komunikuję się jedynie z innymi fragmentami korutyny. > > Ale prawdziwe korutyny *NIE* ograniczają używania stosu. Używasz i > działa tak jak się spodziewasz. > PS. Podpowiem Ci: Twój pomysł da się rozwiązać kilkoma makrami i > ukrytymi w nich "switch/case" bez używania magicznych ficzerów > kompilatora. No to dajesz. Pokaż te kilka makr.
Technical Details
Message-ID:
<b7cfec93-1d13-44e3-a924-0869447ed3c7@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin2!goblin3!goblin.stu.neva.ru!news.neodome.net!news.uzoreto.com!feeder1.cambriumusenet.nl!feed.tweak.nl!209.85.160.216.MISMATCH!g89no9991781qtd.0!news-out.google.com!w29ni898qtc.0!nntp.google.com!g89no9991675qtd.0!postnews.google.com!google-groups.googlegroups.com!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>Show Full Headers
Complete Article Headers
X-Received: by 2002:a05:620a:211c:: with SMTP id l28mr25955351qkl.423.1580283076312; Tue, 28 Jan 2020 23:31:16 -0800 (PST) X-Received: by 2002:a81:ac4a:: with SMTP id z10mr18897643ywj.235.1580283075946; Tue, 28 Jan 2020 23:31:15 -0800 (PST) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin2!goblin3!goblin.stu.neva.ru!news.neodome.net!news.uzoreto.com!feeder1.cambriumusenet.nl!feed.tweak.nl!209.85.160.216.MISMATCH!g89no9991781qtd.0!news-out.google.com!w29ni898qtc.0!nntp.google.com!g89no9991675qtd.0!postnews.google.com!google-groups.googlegroups.com!not-for-mail Newsgroups: pl.comp.lang.c Date: Tue, 28 Jan 2020 23:31:15 -0800 (PST) In-Reply-To: <r0q9iv$23b$1@dont-email.me> Complaints-To: groups-abuse@google.com Injection-Info: google-groups.googlegroups.com; posting-host=83.25.200.96; posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r NNTP-Posting-Host: 83.25.200.96 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> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <b7cfec93-1d13-44e3-a924-0869447ed3c7@googlegroups.com> Subject: Re: Coroutines w (GNU) C From: Maciek Godek <godek.maciek@gmail.com> Injection-Date: Wed, 29 Jan 2020 07:31:16 +0000 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit