Article View: pl.comp.lang.c
Article #310196Re: Coroutines w (GNU) C
From: heby
Date: Wed, 29 Jan 2020 17:19
Date: Wed, 29 Jan 2020 17:19
160 lines
8294 bytes
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-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>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