🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Coroutines w (GNU) C

#310085
From: M.M.
Date: Wed, 29 Jan 2020 18:50
74 lines
5862 bytes
On Wednesday, January 29, 2020 at 6:24:36 PM UTC+1, heby wrote:
> On 29/01/2020 13:58, M.M. wrote:
> > No właśnie, są pewne okoliczności w których lepiej użyć C, albo użycie C++
> 
> Pokaż okoliczność kiedy lepiej użyć kompilator C zamiast C++. Dowolną 
> rozsądną.

Firma ma kilku pracowników którzy znają tylko C i mają doświadczenie w pisaniu
aplikacji w C. Przychodzi do firmy zamówienie na aplikację podobną do tych w
jakich mają doświadczenie i aplikacja nie jest kolosalnie duża. Mają do wyboru:
kurs C++ i tworzenie aplikacji w języku w którym nie mają doświadczenia albo 
pisanie w C.

Przy okazji mam pytanie, od dawna się nie interesowałem: czy kompilator gcc i
jądro linuxa, x-server są nadal pisane w C? 


> 
> > że C++ kompiluje C. Ale potocznie zazwyczaj ma się na myśli programowanie w C++
> > pełną gębą.
> 
> Nikt w tym wątklu nie mówi o programowaniu pełną gębą z użyciem 
> obiektowości. 

Ale potocznie często pisząc o C++ ma się na myśli pełny C++, a nawet biblioteki 
do C++, a nawet środowisko programowania wspierające C++, a nawet GUI-bildery i
programy pomocnicze. Z jednej strony to jest totalne mylenie języka programowania z 
narzędziami, z drugiej strony w praktyce po co komu nawet najlepszy język jeśli
ma kiepskie wsparcie? Używanie języka programowania z omijaniem pewnych jego
możliwości to też tak jakby programowanie w innym języku, bo podzbiór danego
języka jest innym językiem.

> W ogóle nie ma tutaj obiektowości poza użyciem jej w celu 
> obsługi *ewentualnych* szablonów, bo tak to się robi w C++.

Nie rozumiem.

 
> > googlałem jak Lambdę przekazać jako parametr template, nigdy wcześniej
> > tego nie robiłem. W C bym dane rzutował na void* i użył wskaźnika na
> > funkcję - banalne.
> 
> I jakie przy okazji bugogenne. Gdzieś musisz mieć cast. Czy aby na pewno 
> znasz wszystkie miejsca gdzie ten cast występuje? Wiesz już dlaczego 
> ogólnie szablon jest lepszy niż void*? Podpowiem: bo wykrywa problem na 
> kompilacji a nie runtime.

Ale zwykle nie ma rzeczy pod każdym względem lepszych. Szablon w C++ jest
dobry, bo kompilator pilnuje zgodności typów, bo można zrobić specjalizację,
można wygenerować wydajną wersję w zależności od parametrów szablonu. Mówią
że szablony są dobre bo się popełnia mniej błędów względem makrodefinicji.
Mnie bardzo dziwi taki sposób porównywania, dlaczego porównywać do czegoś co
powodowało (szczególnie u niedoświadczonych programistów) błędy wykrywalne 
po dwóch dniach debugowania? Szablony mają okropną składnię i podobno lepsza w
ogóle nie istnieje. Osobiście wcale nie popełniam mniej błędów w szablonach niż
bez szablonów, właściwie to wielokrotne dziedziczenie z szablonów masakrycznie
komplikuje kod, debugowanie takiego kodu jest trudniejsze niż zwykłego kodu. W
Javie (poprawcie mnie jeśli się mylę) chyba nie ma szablonów, a wskazywanie 
typów przy kontenerach jest tylko dla kompilatora? Więc na void* też można. Z
kolejnych wad szablonów, długi czas kompilacji gdy w programie jest bardzo 
dużo szablonów. Kolejna wada, trzeba udostępnić kod źródłowy gdy się 
udostępnia bibliotekę napisaną w postaci szablonów. Następna wada, kompilatory
czasami wskazują błąd daleko od jego wystąpienia. Szablony w C++ nadal 
mają braki, ale C++20 już nadciąga.

Podsumowując, kiedyś szablonów używano rzadko albo w ogóle nie używano, miałem
na komputerze 16MB pamięci RAM, 1GB na twardym dysku, procesor może 5tys razy
wolniejszy i działał tam niejeden graficzny system operacyjny, graficzne
środowisko programowania, a nawet program do grafiki trójwymiarowej. Jakby to
było napisane w 'C++ pełną gębą', to nie wiem czy by działało nawet 5 lat
później - ale na pewno jakby już zaczęło działać to by działało lepiej i 
szybciej byłoby rozwijane o nowe cechy.

Pozdrawiam
Technical Details
Message-ID: <c9ada043-010e-41c1-8362-385fcab97fbb@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!goblin3!goblin.stu.neva.ru!news.misty.com!border2.nntp.dca1.giganews.com!nntp.giganews.com!g89no261346qtd.0!news-out.google.com!o19ni1420qtr.1!nntp.google.com!g89no261337qtd.0!postnews.google.com!google-groups.googlegroups.com!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> <20200128233003.4bf9d9eb@mateusz> <1a207604-09fa-43f2-8d0a-e3ff51b183f4@googlegroups.com> <r0sf4i$d46$1@dont-email.me>

Show Full Headers
Complete Article Headers
X-Received: by 2002:a37:de05:: with SMTP id h5mr1234513qkj.474.1580323843716;        Wed, 29 Jan 2020 10:50:43 -0800 (PST)
X-Received: by 2002:a0d:ca8f:: with SMTP id m137mr212786ywd.354.1580323843502; Wed, 29 Jan 2020 10:50:43 -0800 (PST)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!wsisiz.edu.pl!goblin3!goblin.stu.neva.ru!news.misty.com!border2.nntp.dca1.giganews.com!nntp.giganews.com!g89no261346qtd.0!news-out.google.com!o19ni1420qtr.1!nntp.google.com!g89no261337qtd.0!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.c
Date: Wed, 29 Jan 2020 10:50:43 -0800 (PST)
In-Reply-To: <r0sf4i$d46$1@dont-email.me>
Complaints-To: groups-abuse@google.com
Injection-Info: google-groups.googlegroups.com; posting-host=178.37.229.117; posting-account=xjvq9QoAAAATMPC2X3btlHd_LkaJo_rj
NNTP-Posting-Host: 178.37.229.117
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> <20200128233003.4bf9d9eb@mateusz> <1a207604-09fa-43f2-8d0a-e3ff51b183f4@googlegroups.com> <r0sf4i$d46$1@dont-email.me>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <c9ada043-010e-41c1-8362-385fcab97fbb@googlegroups.com>
Subject: Re: Coroutines w (GNU) C
From: "M.M." <mmarszik@gmail.com>
Injection-Date: Wed, 29 Jan 2020 18:50:43 +0000
Lines: 117
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit