🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Coroutines w (GNU) C

#310086
From: heby
Date: Wed, 29 Jan 2020 19:26
155 lines
8157 bytes
On 29/01/2020 19:50, M.M. wrote:
> 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.

A jak im pewnego dnia podmienisz gcc na g++ to co się stanie? A jak 
pewnego dnia dorzucisz im do kodu class scoped_interrupt_disable to co 
się stanie? Wybuchnie im? Odmówią pracy bo niekoszerne? Do spowiedzi pójdą?

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

gcc:

https://lwn.net/Articles/542457/

Kernel to problem białkowy. W zasadzie to problem jednego konkretnego 
zbioru molekuł, ale ludzie i tak robią swoje:

https://pograph.wordpress.com/2009/04/05/porting-cpp-code-to-linux-kernel/

x-server nie wiem. Nie przypuszczam aby komukolawiek opłacało się to 
przepisywać dla idei, to raczej kod muzealny.

>> Nikt w tym wątklu nie mówi o programowaniu pełną gębą z użyciem
>> obiektowości.> 
> Ale potocznie

Czyli mówisz o czymś innym niż ja. Spieraj się więc z kimś innym.

>> 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.

Użycie składni obiektowej (struct/class) nie oznacza że używa się 
obiektowości. Składnia ta bowiem przydaje się w szablonach, jest wręcz 
podstawą pisania z użyciem generycznych typów w C++. Nie mających nic 
wspólnego z programowaniem obiektowym.

>> 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.

Prawda.

> 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?

Mam buga który ukrywał się w void* przed ponad 10 lat. Przed oczami 
doświadczonych programistów. Jedyny powód że udało się go znaleźć to 
*przypadek*.

> Szablony mają okropną składnię i podobno lepsza w
> ogóle nie istnieje.

Lepsza pewnie istnieje, ale też składnia nie jest okropna.

Serio, uważasz że:

traits< int >::max

to jakaś okropna składnia? Nie czerpiesz aby przypadkiem wiedzy o 
szablonach z jakiś grup anonimowych pisaczy w c?

> 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

Całe szczęscie wielokrotne dziedzidzenie szablonów występuje głównie w 
bajkach i ksiązeczkach dla niegrzecznych programistów c.

>, debugowanie takiego kodu jest trudniejsze niż zwykłego kodu.

Robie to codziennie od kilkudziesięciu lat i cieżko mi się zgodzić.

> W
> Javie (poprawcie mnie jeśli się mylę) chyba nie ma szablonów, a wskazywanie
> typów przy kontenerach jest tylko dla kompilatora?

Java ma typy generyczne. Nie ma wprost łatwego przeniesienia na C++. 
Głównie dlatego że typy w C++ są przeliczane na etapie kompilacji i 
generują inne typy. To inna filozofia. Jaba zatrzymała się głównie na 
vector< int >, C++ jest o eniony dalej, choć często eniony krzaków 
dalej, przyznaje.

> Więc na void* też można.

To nie jest dyskucja czy można. Można uzyć popsutych korutyn. No 
przecież jak się ma takąspecyfikację to nawet trzeba. Jak coś działa to 
nie naprawiać. Lepse jest wrogiem dobrego. Itd itp bzdury.

Na void* nie można bo:
a) generuje to więcej błedów runtime
b) uniemożliwia skuteczne refaktoringi
c) narzędzia do lintowania wybijaja sobie zęby
d) narzędzia do statycznych analiz kodu są zagubione
e) code review nie przejdzie

Ale oczywisćie znam milion przykładów że można mimo to. To "można" to 
kwesia zwykłej higieny. Można pisać na void* tak samo jak można mieszkać 
przy wysypisku i udawać że to wiejskie zapachy.

> Z
> kolejnych wad szablonów, długi czas kompilacji gdy w programie jest bardzo
> dużo szablonów.

Jesteś nastepnym developerem w tej dyskusji z Atari 65XE jako ciągłą 
integracją?

Pracuje na *zaje...e* ogromnej bazie kodu w C++. Kompilacja najdłuższego 
i najbardziej popieprzonego pliku (zawiera głównie boost::spirit) 
napisanego z palca trwa coś pod 3 sek. Uwierz mi, to jest makabrycznie 
dużo zaawansowanego C++ i *tylko* 3 sekundy. Czy już umarłeś z nudów?

> Kolejna wada, trzeba udostępnić kod źródłowy gdy się
> udostępnia bibliotekę napisaną w postaci szablonów.

Brednia.

> Następna wada, kompilatory
> czasami wskazują błąd daleko od jego wystąpienia.

Brednia w 99% wypadków.

> Podsumowując, kiedyś szablonów używano rzadko albo w ogóle nie używano

Podobnie jak z papierem toaletowym.

>, 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.

Na patrz, a ja miałem Amigę z 2MB pamięci chip i na tej konfiguracji 
poganiałem SaSC w trybie C++ pisząc obiektowe programy GUIowe. Może to 
czary?

> 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.

A po chwili się budzisz i okazuje się że ten sam program kompilowalny w 
C i C++ generuje dokładnie taki sam kod asemblerowy.

No, ale wiadomo, 100x wolniejszy bo to C++. Dużo NOPów się wstawia na 
złość tym wszystkim zaprzańcom.
Technical Details
Message-ID: <r0sm9p$r2m$1@dont-email.me>
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.unit0.net!eternal-september.org!feeder.eternal-september.org!reader01.eternal-september.org!.POSTED!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> <c9ada043-010e-41c1-8362-385fcab97fbb@googlegroups.com>

Show Full Headers
Complete Article Headers
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.unit0.net!eternal-september.org!feeder.eternal-september.org!reader01.eternal-september.org!.POSTED!not-for-mail
From: heby <heby@poczta.onet.pl>
Newsgroups: pl.comp.lang.c
Subject: Re: Coroutines w (GNU) C
Date: Wed, 29 Jan 2020 20:26:50 +0100
Organization: A noiseless patient Spider
Lines: 156
Message-ID: <r0sm9p$r2m$1@dont-email.me>
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> <c9ada043-010e-41c1-8362-385fcab97fbb@googlegroups.com>
Mime-Version: 1.0
Injection-Date: Wed, 29 Jan 2020 19:26:49 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="139efa17e3b50ff7a55c5d56671ca15d"; logging-data="27734"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/LkDvp+xaFkq+rmUU+QWDm"
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.9.1
Cancel-Lock: sha1:aeQPrsUHIzfcSN8Jy+u9dXw/z4c=
In-Reply-To: <c9ada043-010e-41c1-8362-385fcab97fbb@googlegroups.com>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit