🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Coroutines w (GNU) C

#310196
From: heby
Date: Wed, 29 Jan 2020 17:19
160 lines
8294 bytes
On 29/01/2020 08:31, Maciek Godek wrote:
> Wolę po prostu nie dokładać niepotrzebnych zależności.

Przecież własnie dołożyłeś niepotrzebną zależnośc of ficzera w kompilatorze.

> Język C to jest technologia, i język C++ to jest inna technologia.

Język C++ to rozwinięcie jęyka C. Jeśli tylko nie będziesz udawał 
czepialskiego profesora to okaże się że C jest podzbiorem C++ z 
nieistotnymi róznicami w detalach dla programisty (albo poprawialne albo 
głupie - tak czy inaczej do zmiany).

> Chyba trochę przeszkadza, skoro atakujesz mnie z tego powodu.

Tu Cie nikt nie atakuje.

Masz kiepski kod. Ten kod nazywasz "korutynami".

To nie są korutyny. W dodaku okazuje się że wymagają workaroundu aby być 
w ogóle użyteczne do normalnego programowania, inaczej to pistolecik na 
kapiszony. Z workaroundem to odbezpieczony granat w gaciach.

Jak się okazuje że ktoś pyta "po co" to nerwowo marudzisz o jakiś 
powodach. Nie ma ich. To tylko takie hackerstwo. Wylatuje na pierwszym z 
brzegu code review.

> C też jest innym językiem, niż C++.

Nie, jest podzbiorem C++.

> Po pierwsze, C i C++ są niekompatybilne.

Nikt tak nie twierdzi, ale śmiem twierdzić że w Twoim wypadku zmiana z 
gcc na g++ nic nie spowoduje a może nawet pomoże (warningi, nielegalne 
konstrukcje itd itp). Czyli są komatybilne w jedną stronę.

> A jeżeli używam rozszerzeń GNU C

Przecież nie chcesz dodatkowych zależności, prawda?

>, to jest już w ogóle niekompatybilne, i zamiana jednego kodu na drugi jest nietrywialna.

Jak się popsuło kod to trzeba refaktorować. To tylko zwykły dług 
technologiczny a bywa że i vendor lockin. Pierwszy raz programujesz że 
nie wiesz że używanie niszowych rozwiązań generuje dług?

> Po drugie, mi się dużo przyjemniej pisze w GNU C, niż w C++.

Ludzie maja rózne gusta. Nic na to nie poradzę.

> Jeżeli nie potrafisz sobie z tym poradzić, to może idź do terapeuty.

Ja sobie z tym radzę doskonale. Czyli używam właściwych narzędzi tam 
gdzie rozwiązują one prawidłowo problemy. Uzywam C tam gdzie nie mam 
wyjścia, używam C++ tam gdzie mi to pomaga, używam Prologa tam gdzie 
trzeba wyrwać lachona. Każdy język ma zastosowanie.

Problem w tym że "uzywam C bo nie mam wyjścia" sprowadza się zazwyczaj 
do jakiś absurdalnych przypadków 8051 z kompiltorem pisanym przez 
dyletantów. Tam nie mam wyjścia.

>>> 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.

a) nigdzie ich na poczatku nie było
b) jak się pojawiły to zaproponowałem lepsze rozwiązanie
c) rozwiązanie nie pasuje
d) prawdopodobnie go to b) aż wyjdzie na to że masz rację bo w 
specyfikacji napisali że kod ma mieć popsute korutyny na makrach w C. No 
to wtedy nic nie poradzę. Deadlock.

> I to zaproponowałeś, mimo że nikt Cię o to nie prosił.

Taka natura ludzka: jesli ktoś się przewróci to staram się mu pomóc.

> Dzięki temu straciłeś czas zarówno swój, jak i mój.

Mój nie jest nic wart więc nie ma czego żałować. Za Twój przepraszam.

>> To musiała być inna firma. Nic się nie zgadza.
> Tam pomiędzy Ikeą a lotniskiem.

Dalej się nic nie zgadza.

>> 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ć

Nie dowiem się już nigdy. Jestem przekonany że bez względu na to co nie 
wymyślisz i tak na koniec okaże się że to problem wyssany z palca.

>, ani jakie są jego uwarunkowania.

Poza pewnymi wąskimi dziedzinami inzynierii wysokiego ryzyka, kod pisze 
się pod narzędzami do tego przystosowanymi. Nie wiem czy korutyna za 
zmiennymi gobalnymi do czegokolwiek pasuje. Nie, nie pasuje.

> A mimo tego cały czas gadasz, jakbyś wiedział lepiej.

Być może to doświadczenie. Ale przypuszczalnie tylko złudzenie.

>> 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ą".

W C masz stos jako integralną częśc jezyka. Wiec aby coroutines działały 
w C musisz w nich *jakoś* obsługiwać stos. Teraz lepiej?

> Uuu, "aż wołać preprocesor".
> <grzmoty i pioruny>

Nie, nie grzmoty i piuruny tylko wyrzucenie z review. Przyznaje, efekty 
mniej spektakularne.

>> 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.

Cały czas chcesz by Ci czytać w myślach. To nie jest możliwe.

>> 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.

[...]
yeld( 42 );
for( i = 6 ; i < 10 ; ++i )
    [...]
    yeld( i );
    [...]

W zasadzie napisanie dowolnego nieco bardziej skomplikowanego generatora 
wymaga natychmiast użycia workaroundu ze zmiennymi statycznymi.

PS. Zmienne statyczne tez nie są potrzebne. Wystarczy dowolny obiekt 
trzymający stan korutyny. Zaznaczam że jest to tylko niewiele lepsze 
rozwiązanie bo ten obiekt też musi być śledzony jeśli nie daj Panie 
korutyny będą się przeplatać. Tak czy owak d...z tyłu.

>>> 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?

Tym że do tego systemy operacyjne wynalazły różne metody IPC ponieważ 
jest nieuniknione.

W Twoim wypadku używanie zmiennych globalnych nie jest nieuniknione 
tylko wynika z kiepskiej implementacji.

>> 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.

Może coś narzeźbię w wolnej chwili. Uzywałem tego przez jakiś czas z 
miernym skutkiem i raczej nie znajduje powodów do powrotu.
Technical Details
Message-ID: <r0seqp$av0$1@dont-email.me>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!goblin3!goblin.stu.neva.ru!news.mb-net.net!open-news-network.org!eternal-september.org!feeder.eternal-september.org!reader01.eternal-september.org!.POSTED!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> <b7cfec93-1d13-44e3-a924-0869447ed3c7@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!goblin3!goblin.stu.neva.ru!news.mb-net.net!open-news-network.org!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 18:19:23 +0100
Organization: A noiseless patient Spider
Lines: 160
Message-ID: <r0seqp$av0$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>
Mime-Version: 1.0
Injection-Date: Wed, 29 Jan 2020 17:19:22 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="139efa17e3b50ff7a55c5d56671ca15d"; logging-data="11232"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19TjFMssL5j1vE4L1cyg5T5"
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.9.1
Cancel-Lock: sha1:w8Y3Z0AwglRqa3VTKCbNI5MLjGA=
In-Reply-To: <b7cfec93-1d13-44e3-a924-0869447ed3c7@googlegroups.com>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit