🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Coroutines w (GNU) C

#310195
From: Maciek Godek
Date: Wed, 29 Jan 2020 07:31
134 lines
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-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>

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