🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: W której wersji standardu C lub C++ pracujecie?

#309902
From: Maciek Godek
Date: Mon, 02 Sep 2019 20:03
68 lines
6034 bytes
W dniu poniedziałek, 2 września 2019 19:59:36 UTC+2 użytkownik Wojciech Muła napisał:

> > Klasa std::initializer_list nie ma zdefiniowanego operatora indeksowania.
> > Dlaczego? Bo nikt nie wpadł na to, żeby go dodać.
> 
> std::initializer_list fajnie wygląda na slajdach, ja ostatni raz std::initializer_list
> użyłem, gdy pisałem implementację std::string. W kodzie produkcyjnym ta klasa ma
> zastosowanie zerowe i są głosy, żeby ją wywalić.

W takim razie dlaczego ją dodano?
(Nota bene, to samo słyszałem o std::vector)

> > Inny przykład, z prezentacji Scotta Meyersa na DConfie w 2014 roku
> > https://www.youtube.com/watch?v=KAWA1DuvCnQ&feature=youtu.be
> > (fragment między 16:40 a 22:00)
> 
> Ojej, bo taka jest definicja domknięcia w C++... przykład kompletnie
> z międzypośladzia.

Nie. Przykład jest bardzo konkretny. Że język jest niesystematyczny, bo szanowny komitet zapomniał dodać do gramatyki regułę produkcji dla przypadku, gdy gdzieś tam się pojawia jakieś tam słowo kluczowe.
Z czego można wyciągnąć taki wniosek, że składnia C++ jest nawet zbyt skomplikowana dla osób, które się zajmują standaryzacją języka.

> > Albo wykwity w rodzaju xvalue reference.
> 
> O których w codziennej pracy nie ma potrzeby wiedzieć.

Jasne. Można znaleźć jakiś dowolny minimalny podzbiór C++ który będzie "Turing-complete" i sobie w nim programować. Ale za czym to jest argument?
Jeżeli w języku są rzeczy, które są niepotrzebne, to po co je dodawać?

> Zresztą, w tym zachwalanym C masz jakieś rvalue i lvalue.

Które bardzo łatwo wytłumaczyć.
lvalue - to, co może się znaleźć po lewej stronie operatora przypisania
rvalue - to, co musi się znaleźć po prawej stronie operatora przypisania

Albo można jeszcze powiedzieć "lokacje i wartości".

A w C++ masz kompletną sieczkę, bo ktoś kiedyś wymyślił zupełnie głupi typ o nazwie "referencja", który do siły wyrazu języka nic nie wnosi, i się nagle okazało, że nie można jako argumentów do wywołań funkcji przekazywać literałów.

> > Co do generycznych rozwiązań, napisałem kiedyś na Quorze taką odpowiedź:
> > https://www.quora.com/What-are-some-examples-of-bad-code/answer/Panicz-Godek
> 
> No proszę Cię, wziąłeś mega chujowy kod (który wygląda jak port z plain C)
> i oczekujesz, że w takim ścierwie ktoś stworzył dobre abstrakcje?

Nie. Ja próbowałem to napisać w C++. I nie zdołałem.
Później jak prosiłem różnych zwolenników C++, żeby podali, jeśli nawet nie implementację, to chociaż dobry projekt interfejsu dla algorytmu A* w C++, to nikt do tej pory nie podołał temu zadaniu.

Jeśli masz ochotę się z tym zmierzyć, i stworzyć dobry interfejs do algorytmu A*, to ja się z chęcią z tym zapoznam.

> > Generyczność w C również jest ułomna, ale przynajmniej dla tej ułomności można znaleźć jakieś uzasadnienie.
> 
> Mhm, a ułomności C++ nie mają źródła, siły nadprzyrodzone. :)

Mają oczywiście źródło. Ale nie mają dobrego uzasadnienia.
Język C jest często nazywany przenośnym asemblerem - i można znaleźć języki, które się do C kompilują.
Natomiast nie do końca wiadomo, jaka idea stoi za tym całym C++em. Po prostu zbiór randomowo dodawanych ficzerów. "Obiektowość". "Referencje". "Szablony". "Meta-programy w szablonach". "Automatyczne wnioskowanie o typach". "Perfect forwarding". "Koncepty".
I ja oczywiście nie mam nic przeciwko eksperymentowaniu przy projektach języków programowania. Bardziej mierzi mnie to, jak takie języki eksperymentalne nazywa się "produkcyjnie gotowymi".

> > Natomiast pracując w C++ zawsze miałem wrażenie, jakbym - oprócz zmagania się z problemem - musiał dodatkowo ładować energię w zmaganie się z językiem.
> 
> Owszem, język jest koślawy i trzeba czasu, żeby dobrać sobie pasujący zestaw
> narzędzi. Problemem jest też to, że jego biblioteka standardowa przez długi
> czas była cholernie słaba, co spowodowało powstanie dużej liczby
> rozwiązań własnych wzajemnie niekompatybilnych.

Można też poszukać lepszego języka.
(Albo nawet pozostać przy C)
Technical Details
Message-ID: <5509eda1-86b1-4d28-9748-5e82c26e6cab@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!feeder.erje.net!2.eu.feeder.erje.net!feeder1.usenet.farm!feed.usenet.farm!newsfeed.xs4all.nl!newsfeed8.news.xs4all.nl!85.12.16.70.MISMATCH!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!peer03.am4!peer.am4.highwinds-media.com!peer03.iad!feed-me.highwinds-media.com!news.highwinds-media.com!o24no3781505qtl.0!news-out.google.com!d29ni427qtg.1!nntp.google.com!o24no3781501qtl.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
References: <a1fbe21b-aed9-4b32-9691-a824c4e31a21@trust.no1> <3f1215b5-3c16-4248-a74f-1b57d21d4c98@googlegroups.com> <87bc6801-f62d-410e-831c-0e92d68705a5@trust.no1> <b5f4eb95-eaf8-42e5-8335-8ca1e576adfc@googlegroups.com> <5b3e4b0c-491c-4b07-a9cd-46ac32ab6cbe@googlegroups.com>

Show Full Headers
Complete Article Headers
X-Received: by 2002:a37:bd5:: with SMTP id 204mr6503455qkl.330.1567454616417;        Mon, 02 Sep 2019 13:03:36 -0700 (PDT)
X-Received: by 2002:a25:b90d:: with SMTP id x13mr21561940ybj.201.1567454616132; Mon, 02 Sep 2019 13:03:36 -0700 (PDT)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!feeder.erje.net!2.eu.feeder.erje.net!feeder1.usenet.farm!feed.usenet.farm!newsfeed.xs4all.nl!newsfeed8.news.xs4all.nl!85.12.16.70.MISMATCH!peer03.ams1!peer.ams1.xlned.com!news.xlned.com!peer03.am4!peer.am4.highwinds-media.com!peer03.iad!feed-me.highwinds-media.com!news.highwinds-media.com!o24no3781505qtl.0!news-out.google.com!d29ni427qtg.1!nntp.google.com!o24no3781501qtl.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.c
Date: Mon, 2 Sep 2019 13:03:35 -0700 (PDT)
In-Reply-To: <5b3e4b0c-491c-4b07-a9cd-46ac32ab6cbe@googlegroups.com>
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=83.25.253.100; posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r
NNTP-Posting-Host: 83.25.253.100
References: <a1fbe21b-aed9-4b32-9691-a824c4e31a21@trust.no1> <3f1215b5-3c16-4248-a74f-1b57d21d4c98@googlegroups.com> <87bc6801-f62d-410e-831c-0e92d68705a5@trust.no1> <b5f4eb95-eaf8-42e5-8335-8ca1e576adfc@googlegroups.com> <5b3e4b0c-491c-4b07-a9cd-46ac32ab6cbe@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <5509eda1-86b1-4d28-9748-5e82c26e6cab@googlegroups.com>
Subject: Re: W której wersji standardu C lub C++ pracujecie?
From: Maciek Godek <godek.maciek@gmail.com>
Injection-Date: Mon, 02 Sep 2019 20:03:36 +0000
X-Received-Bytes: 6863
X-Received-Body-CRC: 1017252191
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit