🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Coroutines w (GNU) C

#310067
From: Maciek Godek
Date: Fri, 24 Jan 2020 21:26
21 lines
2343 bytes
W dniu piątek, 24 stycznia 2020 20:44:01 UTC+1 użytkownik Borneq napisał:
> On 1/24/20 12:44 PM, Maciek Godek wrote:
> > Jeśli by to kogoś interesowało, to dziś "wymyśliłem" prosty sposób na implementację "coroutines" w C.
> > 
> A nie znane z C : setjmp/longjmp?

Kiedyś dla zabawy napisałem sobie implementację wątków w oparciu o setjmp.h:

https://github.com/panicz/hubertos/blob/master/hubertos.c

Ale to jest w moim odczuciu raczej ciężki mechanizm (podobnie 
jak call/cc w Scheme) i raczej wolę go nie używać w produkcyjnym kodzie.

Natomiast jeżeli idzie o powyższą implementację coroutines, to jest
bardzo prosta, i chociaż jest parę sposobów, na jakie można ją źle użyć
(np. zmienne automatyczne będą miały w po przywróceniu sterowania
nieokreślone wartości, i można omyłkowo napisać "return" zamiast 
COROUTINE_RETURN), to ogólnie wydaje się raczej spolegliwym mechanizmem.

Zresztą moja intencja użycia jest właśnie taka, żeby sobie przy ich
pomocy robić "takie jakby wątki" w kodzie opartym na przerwaniach.
Technical Details
Message-ID: <516970d0-ceb8-4778-b53d-7ddb86d38aed@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!g89no7317766qtd.0!news-out.google.com!w29ni298qtc.0!nntp.google.com!g89no7317762qtd.0!postnews.google.com!google-groups.googlegroups.com!not-for-mail
References: <4375b52d-ba21-462a-8844-9bd1a02e9ece@googlegroups.com> <5e2b48e2$0$31100$65785112@news.neostrada.pl>

Show Full Headers
Complete Article Headers
X-Received: by 2002:ac8:42d7:: with SMTP id g23mr4480188qtm.206.1579901220598;        Fri, 24 Jan 2020 13:27:00 -0800 (PST)
X-Received: by 2002:a25:9cc7:: with SMTP id z7mr3962759ybo.309.1579901220399; Fri, 24 Jan 2020 13:27:00 -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!g89no7317766qtd.0!news-out.google.com!w29ni298qtc.0!nntp.google.com!g89no7317762qtd.0!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.c
Date: Fri, 24 Jan 2020 13:26:59 -0800 (PST)
In-Reply-To: <5e2b48e2$0$31100$65785112@news.neostrada.pl>
Complaints-To: groups-abuse@google.com
Injection-Info: google-groups.googlegroups.com; posting-host=83.25.216.212; posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r
NNTP-Posting-Host: 83.25.216.212
References: <4375b52d-ba21-462a-8844-9bd1a02e9ece@googlegroups.com> <5e2b48e2$0$31100$65785112@news.neostrada.pl>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <516970d0-ceb8-4778-b53d-7ddb86d38aed@googlegroups.com>
Subject: Re: Coroutines w (GNU) C
From: Maciek Godek <godek.maciek@gmail.com>
Injection-Date: Fri, 24 Jan 2020 21:27:00 +0000
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit