🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Coroutines w (GNU) C

#310181
From: Maciek Godek
Date: Wed, 11 Mar 2020 20:35
140 lines
9048 bytes
W dniu środa, 11 marca 2020 18:37:11 UTC+1 użytkownik heby napisał:
> On 11/03/2020 07:42, Maciek Godek wrote:
> >>> Abstrakcje w C są dobrze dobrane do zadań, do których używa się C.
> >> C nie ma abstrakcji poza void*.
> > Mechanizmy abstrakcji w C:
[...]
> Natomaist C++ dodaje Ci masę innych rzeczy to tych pseudo abstrakcji. 
> Między innymi dodaje prawdziwe abstrakcje takie jak szablony.
> 
> Można oczywiście bredzić o tym że funkcja to taki rodzaj abstrakcji.

"Bredzić"?
Funkcja i abstrakcja to w zasadzie synonimy.
(Inna rzecz, że funkcje w C - i za nim C++ - są "koślawymi abstrakcjami", podobnie jak enumy i unie. Ale w C są koślawe z uzasadnieniem)

> >, który będzie udowadniał innym, że technologia, której używają, jest zacofana, bo nie jest technologią, której on używa.
> 
> Wiadomo, Twój punkt widzenia jest bardziej obiektywny bo jest bardziej 
> subiektywny, najmojszy.

Nie jest. To nie ja wyskakuję ze stwierdzeniami typu "po co używać C, jak jest C++" albo "używanie C w obliczu istnienia C++ może mieć wyłącznie podłoże religijne".

Jak mówię, jeśli lubisz, to sobie pisz w C++.
Ja zaprezentowałem coś tam dla języka C. To są różne języki.

> > A jak mu wykażą, że ta ich technologia jest adekwatna do problemów, które rozwiązują
> 
> Ale ty dopiero po solidnym pieprzenięciu w głowę argumentacją wymyśliłeś 
> sobie że to ma zastosowanie w jakimś marginalnym, niszowym embedded

?

Rozwiązanie wymyśliłem właśnie w kontekście systemu embedded, i problemu, jaki tam miałem. I w tamtym kontekście sprawdza się wystarczająco dobrze.


> Masz straszne parcie na udowodnienie światu że te dziadowskie korutyny 
> mają sens. Sorry, nie mają, tak ogólnie.

Nie mam żadnego parcia. W tym temacie powiedziałem wszystko, co miałem do powiedzenia. To Ty się na tym jakoś zafiksowałeś.

> > I tyle z opowieści. Język C nie miał "nic zastępować", tylko miał służyć pewnemu konkretnemu celowi.
> 
> Nie, nie masz chyba jednak pojęcia po co męczono się z BCPL, B i C. 
> Męczono się bo pisanie kernela w asm przestało mieć sens.
> 
> https://en.wikipedia.org/wiki/C_(programming_language)

Łał, umiesz wklejać linki do Wikipedii.

> Ich jedynym zadaniem było przeportowanie kernela. W tym celu zrobili 
> sobie lepszy asembler wysokiego poziomu bo inny asembler (BCPL) był 
> idiotyczny z uwagi na absurdalne ograniczenia.

?

Nie wiem, skąd sobie wyssałeś taką teorię.

> > Cóż, w moim doświadczeniu C++ łączy raczej wady pisania niskopoziomowego (segmentation fault i undefined behavior)
> 
> Których używasz w C.

Który przynajmniej nie udaje, że jest czymś więcej, niż jest.

> > z nieergonomicznymi interfejsami biblioteki standardowej
> 
> Których nie musisz używać.

Otóż to jest sedno wszystkiego. Nie muszę i nie używam.


> > i semantyką (glvalue reference? prvalue reference? xvalue reference? poważnie?).
> 
> Widzisz, one wszystkie powstają po to aby udoskonalić jakość kodu

One powstają dlatego, że czasem coś się komuś przywidzi, i będzie bił pianę dostatecznie energicznie, żeby weszło do standardu.

> > No, ale to tylko moje doświadczenie.
> 
> Idę o zakłąd że nie masz nawet śladu doświadczenia z C++.

Ktoś mnie kiedyś o to zapytał, i opisałem:
https://www.quora.com/What-is-your-experience-related-to-learning-C/answer/Panicz-Godek

(a Ty przegrałeś zakład)

> > Jak lubisz, to sobie używaj.
> 
> Nie mam wyjścia. Jeśli mam bilardy lini kodu to wole je mieć w C++ niż w 
> asm, pardon, C. Wolałbym mieć je w czym innym, ale to nie ode mnie już 
> zależy.

Dlaczego nie od Ciebie?

> >>> To twierdzenie jest o tyle głupie że C++ ma takie same abstrakcjie jak
> >>> duże języki (klasy, obiekty, interfejsy) i jednoczesnie kontrole
> >>> niskopopziomową z C. Połaczono zalety pisania niskopoziomowego z
> >>> abstrakcją w jednym jezyku. Niczego istotnego z C nie zabrano, więc jest
> >>> równie dobry jak C + dodatkowe zalety.
> > Trochę też można to porównać do Ferrari, na siedzeniu którego leży gówno.
> 
> Nie, to raczej porównanie do Malucha. C++ to taki Maluch opakowany w 
> masę poduszek i domalowany na zewnątrz jak Ferrari.

To nie miała być metafora, tylko analogia, która pokazuje, że rozumowanie postaci "Y ma wszystko to samo, co X plus coś jeszcze, więc jest co najmniej równie dobre jak X" jest wadliwe.

Jeżeli C albo C++ byłoby Maluchem, to nie wiem, czym miałoby być owo Ferrari.

> > Jednak, jeżeli idzie o mnie, raczej bym wolał wariant bez gówna.
> 
> Niezupełnie, Twój warian to własne gówno w postaci korutyn, bez stosu, 
> na makrach. Prawda jest taka, drogi misiaczku, że NAWET doświadczony 
> programista C pogonił by Cie za to kijem na code review. Wiem, bo 
> pytałem. Nawet programiści C kreślą pewną granicę dziadostwa której nie 
> przekraczają.

A ci programiści, których pytałeś, to jakie systemy zbudowali?

I jakie alternatywy proponowali dla rozwiązania tego problemu?

Zresztą programowanie jednak ma to do siebie, że jest mocno subiektywne, i różni ludzie mają różne style. Na przykład gość, który określił to rozwiązanie "worst piece of C hackery", sam zastosował je w swoim kodzie.

Bo najwidoczniej alternatywy były jeszcze gorsze.

> Masz hiper ważny powód aby obronić te makra.

Jaki niby mam powód?

> On 11/03/2020 15:00, Mateusz Viste wrote:
> >Tak czy siak - nikt nikogo tu nie przekona.
> 
> Dyskusja o C++ to tylko taki wabik. Tak naprawdę Maćkowi chodzi o to aby 
> ktoś w końcu te makra przytulił, pogłaskał i powiedział "już, już 
> dobrze, Ci źli hejterzy się przyczepili tylko, jesteście śliczne". 

Jest dokładnie przeciwnie. Rozwiązanie zostało już skrytykowane, nawet przeze mnie samego, i nie mam w tym temacie już nic więcej do dodania.

To Ty twierdzisz, że jeżeli ktoś preferuje C nad C++ to jego powody są natury religijnej. Ja tak nie uważam. Może w dużej mierze jest to kwestia osobistych preferencji - i pod tym względem zgadzam się z Mateuszem.
Tym niemniej, C++ jest obiektywnie bardziej skomplikowany niż C. Istnieją języki, które są mniej komplikowane od C++ i jednocześnie potężniejsze od niego (chociażby Scheme). Ale to nie znaczy, że do wszystkiego nadają się lepiej.

W każdym razie zgadzam się ze stwierdzeniem JDX, że jeżeli ktoś miałby brać bezpieczeństwo swojego kodu na serio, to raczej powinien się zastanowić nad Rustem, niż nad C++ (w którym można zrobić każdą tę samą głupotę, co w C, plus jeszcze sporo nowych głupot).
Technical Details
Message-ID: <dc2df496-2154-4f6b-949e-a326b66b7fe9@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!news.etla.org!news.uzoreto.com!tr3.eu1.usenetexpress.com!feeder.usenetexpress.com!tr3.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
References: <4375b52d-ba21-462a-8844-9bd1a02e9ece@googlegroups.com> <0e0786af-7b58-4070-b8cd-81f1bda1f432@googlegroups.com> <r0q9iv$23b$1@dont-email.me> <20200128233003.4bf9d9eb@mateusz> <1a207604-09fa-43f2-8d0a-e3ff51b183f4@googlegroups.com> <r0sf4i$d46$1@dont-email.me> <5e5f4069$0$519$65785112@news.neostrada.pl> <r3t1sc$r41$1@dont-email.me> <5e645e9a$0$17354$65785112@news.neostrada.pl> <r42dg3$r77$1@dont-email.me> <5e64e5a9$0$17350$65785112@news.neostrada.pl> <r42p67$o5b$1@dont-email.me> <5e6555bd$0$554$65785112@news.neostrada.pl> <r43mjb$fg2$1@dont-email.me> <5e6595ce$0$17348$65785112@news.neostrada.pl> <r46320$5hf$1@dont-email.me> <44f694e7-bd52-4b71-aa69-678f8840c27c@googlegroups.com> <r46apv$q4c$1@dont-email.me> <d42e80c7-3cd2-4ce7-a31c-5e39278bffa7@googlegroups.com> <r48ppk$aoi$1@dont-email.me> <89cfb34d-bd57-4a7a-8c94-c2dcdeb02e03@googlegroups.com> <r49vg7$fa1$1@dont-email.me> <31adf521-11e2-4e85-ae62-2e9bb7b9f0a6@googlegroups.com> <20200311150044.15019d69@mateusz> <r4b8nv$oiq$2@dont-email.me>

Show Full Headers
Complete Article Headers
X-Received: by 2002:a05:620a:3dc:: with SMTP id r28mr4692641qkm.373.1583958941649; Wed, 11 Mar 2020 13:35:41 -0700 (PDT)
X-Received: by 2002:a81:3d86:: with SMTP id k128mr5350043ywa.132.1583958941375; Wed, 11 Mar 2020 13:35:41 -0700 (PDT)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!3.eu.feeder.erje.net!feeder.erje.net!news.etla.org!news.uzoreto.com!tr3.eu1.usenetexpress.com!feeder.usenetexpress.com!tr3.iad1.usenetexpress.com!border1.nntp.dca1.giganews.com!nntp.giganews.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.c
Date: Wed, 11 Mar 2020 13:35:41 -0700 (PDT)
In-Reply-To: <r4b8nv$oiq$2@dont-email.me>
Complaints-To: groups-abuse@google.com
Injection-Info: google-groups.googlegroups.com; posting-host=83.25.201.67; posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r
NNTP-Posting-Host: 83.25.201.67
References: <4375b52d-ba21-462a-8844-9bd1a02e9ece@googlegroups.com> <0e0786af-7b58-4070-b8cd-81f1bda1f432@googlegroups.com> <r0q9iv$23b$1@dont-email.me> <20200128233003.4bf9d9eb@mateusz> <1a207604-09fa-43f2-8d0a-e3ff51b183f4@googlegroups.com> <r0sf4i$d46$1@dont-email.me> <5e5f4069$0$519$65785112@news.neostrada.pl> <r3t1sc$r41$1@dont-email.me> <5e645e9a$0$17354$65785112@news.neostrada.pl> <r42dg3$r77$1@dont-email.me> <5e64e5a9$0$17350$65785112@news.neostrada.pl> <r42p67$o5b$1@dont-email.me> <5e6555bd$0$554$65785112@news.neostrada.pl> <r43mjb$fg2$1@dont-email.me> <5e6595ce$0$17348$65785112@news.neostrada.pl> <r46320$5hf$1@dont-email.me> <44f694e7-bd52-4b71-aa69-678f8840c27c@googlegroups.com> <r46apv$q4c$1@dont-email.me> <d42e80c7-3cd2-4ce7-a31c-5e39278bffa7@googlegroups.com> <r48ppk$aoi$1@dont-email.me> <89cfb34d-bd57-4a7a-8c94-c2dcdeb02e03@googlegroups.com> <r49vg7$fa1$1@dont-email.me> <31adf521-11e2-4e85-ae62-2e9bb7b9f0a6@googlegroups.com> <20200311150044.15019d69@mateusz> <r4b8nv$oiq$2@dont-email.me>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <dc2df496-2154-4f6b-949e-a326b66b7fe9@googlegroups.com>
Subject: Re: Coroutines w (GNU) C
From: Maciek Godek <godek.maciek@gmail.com>
Injection-Date: Wed, 11 Mar 2020 20:35:41 +0000
Lines: 206
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit