Article View: pl.comp.lang.c
Article #309902Re: W której wersji standardu C lub C++ pracujecie?
From: Maciek Godek
Date: Mon, 02 Sep 2019 20:03
Date: Mon, 02 Sep 2019 20:03
68 lines
6034 bytes
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-mailReferences:
<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