Article View: pl.comp.lang.c
Article #310076Re: Coroutines w (GNU) C
From: Maciek Godek
Date: Mon, 27 Jan 2020 20:32
Date: Mon, 27 Jan 2020 20:32
80 lines
6190 bytes
6190 bytes
W dniu poniedziałek, 27 stycznia 2020 20:51:25 UTC+1 użytkownik heby napisał: > On 27/01/2020 20:24, Maciek Godek wrote: > > Konkretnie dlatego, że rozwijam system w języku C, i potrzebuję mechanizmu dla języka C. > > I dlaczego nie możesz uzy kompilatora C++? Mam wiele powodów. Ale nie tego dotyczy ten wątek. > >> W systemach gdzie się przydaje na 100% jest C++. W 99.9% > >> wypadków wystarczy zamienić gcc na g++. > > Tak. Można też np. osadzić interpreter Lua, który też wspiera coroutines. > > 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. Pomijając jeszcze tę kwestię, że trzeba go jeszcze najpierw zainstalować. A później jeszcze zainstalować boosta. I to u każdego developera, który pracuje nad tym projektem. Żeby używać ficzeru, którego zaimplementowanie zajmuje 20 linijek w C. I to w dodatku implementacji, co do której nie wiem, czy nie będzie z nią problemu w kontekście, w którym chcę go użyć. I to po to, żeby później refaktoryzować kod, kiedy ficzer wejdzie do standardu. O ile oczywiście komitet nie zmieni go na tyle, że przestanie się nadawać do moich zastosowań. Dzięki, ale nie, dzięki. > >> Po co komu coroutines w C skorą są/będą w C++? > > To teraz powiedz mi: > > - czy powinienem teraz korzystać z coroutines ze standardu, który jeszcze nie został zatwierdzony, czy może raczej wziąć teraz boosta, a później usuwać zależności i refaktoryzować do standardu? > > Użyć boosta, dorobić abstrakcję i zrefaktoryzować jak będzie po co za > kilka lat. "Dorobić abstrakcję"? A nie mogę od razu użyć docelowego rozwiązania? To jest 20 linijek kodu. A boost ma... no, ile linijek? > > - w jaki sposób te korutyny są w booście albo w standardzie zaimplementowane? Czy potrafisz z całą pewnością powiedzieć, że nie będzie problemu ze wznawianiem ich w interrupt handlerach na ARMach? > > "[...] Pomysł opiera się na rozszerzeniu kompilatora GCC [...]" > > 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 to nie jest "side effect", tylko udokumentowane rozszerzenie języka. I to nie jest "jakaś implementacja", tylko jedna z najczęściej używanych implementacji. > 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. Żeby móc sobie pisać wątki na przerwaniach. Więcej na ten temat pisałem na comp.lang.c. Widzisz w tym jakiś problem? > > Czy może potrzebuję nadać im jakiś magiczny atrybut w rodzaju "nothrow", żeby mieć pewność, że to zadziała dla mojego use case'u? > > Dlaczego masz nadawać nothrow? Jak exception spadnie na dno stosu to w > dowolnej implementacji dzieją się interesujace rzeczy. 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++. 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. 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? > A już najbardziej interesujace rzeczy dzieją się jak ten exception jest > wywołany z Twojego C... Cóż. Rzecz wygląda tak, że zarówno wątki, jak i korutyny, to mechanizmy kontroli sterowania. Byłbym wręcz zaskoczony, gdyby okazało się, że te dwa mechanizmy w standardzie C++20 nie będą wchodziły sobie w paradę, i trzeba będzie czekać do C++32, aż to naprawią. Takie historie przecież już były. Choćby z "range based for", na którą trzeba było czekać kilkanaście lat, a jak już dodali, to okazało się, że jest skopana. > > Bo u mnie to jest 20 linijek bardzo prostego kodu. > > 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"? GCC jest, przede wszystkim, szeroko używanym kompilatorem o otwartych źródłach i bogatej dokumentacji, z dużym wsparciem ze strony przemysłu hardware'owego.
Technical Details
Message-ID:
<ecae4ae1-0b06-4956-8df0-593fa0f1cd01@googlegroups.com>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin1!goblin.stu.neva.ru!g89no5149425qtd.0!news-out.google.com!w29ni691qtc.0!nntp.google.com!g89no5149419qtd.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>Show Full Headers
Complete Article Headers
X-Received: by 2002:ae9:c317:: with SMTP id n23mr18477507qkg.356.1580157174064; Mon, 27 Jan 2020 12:32:54 -0800 (PST) X-Received: by 2002:a25:2348:: with SMTP id j69mr14505075ybj.465.1580157173883; Mon, 27 Jan 2020 12:32:53 -0800 (PST) Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!goblin1!goblin.stu.neva.ru!g89no5149425qtd.0!news-out.google.com!w29ni691qtc.0!nntp.google.com!g89no5149419qtd.0!postnews.google.com!google-groups.googlegroups.com!not-for-mail Newsgroups: pl.comp.lang.c Date: Mon, 27 Jan 2020 12:32:53 -0800 (PST) In-Reply-To: <r0nevq$9iq$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> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <ecae4ae1-0b06-4956-8df0-593fa0f1cd01@googlegroups.com> Subject: Re: Coroutines w (GNU) C From: Maciek Godek <godek.maciek@gmail.com> Injection-Date: Mon, 27 Jan 2020 20:32:54 +0000 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit