Article View: pl.comp.lang.c
Article #310085Re: Coroutines w (GNU) C
From: M.M.
Date: Wed, 29 Jan 2020 18:50
Date: Wed, 29 Jan 2020 18:50
74 lines
5862 bytes
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-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> <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