-
X-Received: by 10.31.191.67 with SMTP id p64mr111862vkf.4.1502603090632; Sat, 12 Aug
2017 22:44:50 -0700 (PDT)
X-Received: by 10.31.191.67 with SMTP id p64mr111862vkf.4.1502603090632; Sat, 12 Aug
2017 22:44:50 -0700 (PDT)
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!go
blin3!goblin.stu.neva.ru!news.misty.com!border2.nntp.dca1.giganews.com!border1.
nntp.dca1.giganews.com!nntp.giganews.com!m34no579776iti.0!news-out.google.com!i
9ni421qte.0!nntp.google.com!w51no960848qtc.0!postnews.google.com!glegroupsg2000
goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.programming
Date: Sat, 12 Aug 2017 22:44:50 -0700 (PDT)
In-Reply-To: <1...@g...com>
Complaints-To: g...@g...com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=46.186.90.250;
posting-account=f7iIKQoAAAAkDKpUafc-4IXhmRAzdB5r
NNTP-Posting-Host: 46.186.90.250
References: <f...@g...com>
<1...@g...com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <7...@g...com>
Subject: Re: Co jest nie tak z C++ (było: Rust)
From: g...@g...com
Injection-Date: Sun, 13 Aug 2017 05:44:50 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Lines: 227
Xref: news-archive.icm.edu.pl pl.comp.programming:211005
[ ukryj nagłówki ]W dniu niedziela, 13 sierpnia 2017 05:17:23 UTC+2 użytkownik M.M. napisał:
> On Saturday, August 12, 2017 at 11:07:20 PM UTC+2, g...@g...com wrote:
> > W dniu sobota, 12 sierpnia 2017 15:59:27 UTC+2 użytkownik s...@g...com
napisał:
>
> > I z pewnością, żeby odpowiedzieć na to pytanie, najpierw
> > należałoby ustalić nasze oczekiwania względem danego języka,
> > żeby można było zastosować jakieś kryteria, a nie prowadzić
> > dyskusji na poziomie "język X jest zły, bo nie ma ficzera Z",
> > albo "język X jest zły, bo nie jest językiem Y".
> Kryterium porównawcze to dobra rzecz.
Mógłbyś doprecyzować, co masz na myśli, używając frazy
"kryterium porównawcze"? (ja ją rozumiem w taki sposób,
że to jest "kryterium, względem którego porównujemy",
ale to ma sens dopiero wtedy, kiedy porównujemy, a nie
kiedy próbujemy ustalić, jakie coś ma wady)
> > Moim zdaniem, dużą wadą C++ jest to, że nie daje programiście
> > środków do tego, żeby mógł go używać stosownie do swoich
> > upodobań -- oczywiście w niektórych kontekstach można by to
> > było uznać za zaletę, jednak "w ogólności" wydaje się to raczej
> > wadą.
> Tutaj pozwolę sobie trochę się nie zgodzić. W C++ generalnie
> jest dużo środków i można w nich przebierać. No chyba chodzi o
> biblioteki, w przypadku bibliotek trzeba brać albo taką jaka
> jest, albo se napisać swoją.
Nie chodzi o biblioteki. Chodzi o to, że jako programista
nie możesz sobie napisać pętli for(iterator : kolekcja),
tylko musisz poczekać, aż przyjdzie Komitet i Ci to zrobi.
Tzn. ostatnio odkryłem, że jakieś 10 lat temu się bawiłem w takie
rzeczy, i sobie sam zrobiłem (dla gcc)
#define for_every(ITERATOR, COLLECTION) \
for(typeof(COLLECTION.begin()) ITERATOR = COLLECTION.begin(); \
ITERATOR != COLLECTION.end(); ++ITERATOR)
ale niewykluczone, że od takich rzeczy głupieją narzędzia w rodzaju IDE.
> Właśnie kolekcje do uporządkowanych
> zbiorów mi nie odpowiadają ani w QT, ani w STD, więc napisałem
> swoją. Ale to jest wada każdego języka. Chociaż taka Java od
> razu była nastawiona na prostotę i standaryzację ogromnej
> biblioteki...
Dla mnie wygląda tak, jakby C++ był ofiarą swojego procesu
standaryzacyjnego, który jest kumulatywny -- ficzery do języka
są tylko dodawane, i kompatybilność wsteczna jest świętością.
(Z Javą zresztą jest podobnie).
Proces standaryzacyjny np. w Haskellu nie miał problemów z tym,
żeby eksperymentować i zrywać z różnymi decyzjami projektowymi,
które były uważane za błędne. Użytkownicy może trochę na tym
ucierpieli, co z pewnością odbiło się na popularności tego systemu,
ale wpływ na sam projekt języka miało dobry.
> > Przykładowo, gdybym chciał, żeby wszystkie zmienne w C++
> > były domyślnie zadeklarowane jako "const", i tylko te, które
> > zasadniczo chcę zmieniać, były zadeklarowane (np. jako "var"),
> > C++ (z tego co wiem) nie daje mi możliwości uzyskania takiego
> > zachowania.
> Ale takiego efektu w żadnym języku nie można uzyskać, o ile
> zrozumiałem co masz na myśli. Jeśli zostanie przewidziane
> przed pisaniem kodu, to można sprytne define zrobić, jeśli nie,
> to w żadnym języku tak się nie da.
W Scali masz zasadniczo coś podobnego -- deklarujesz, czy określona
zmienna jest "var", czy "val", tzn. czy jest mutowalna czy niemutowalna.
W Scheme mógłbym bez problemu przesłonić operator przypisania, żeby
sprawdzał, czy dana zmienna posiada deklarację pozwalającą na jej zmianę.
> > Podobnie, interfejsy dostarczane przez STL są bardzo dziwne.
> > Jest sobie chociażby taki kontener "stack". Jak można się spodziewać,
> > stack<T> ma funkcję push(T element), która kładzie element na stosie,
> > oraz pop(), która zdejmuje element ze stosu.
> Idzie z tym żyć. Ja na tę sprawę mam inny pogląd. W innych językach,
> jest mniej możliwości. Naturalne dla innych języków jest to, że
> biblioteka zazwyczaj jest taka jaka powinna być w danym języku. A w
> C++ jest bardzo dużo środków wyrazu. Zazwyczaj z biblioteką taką jak
> STL czy QT można żyć. Problem w tym, że czasami chce potrzeba
> biblioteki "skrojonej na miarę" do danego programu. Przy czym
> skrojona na miarę oznacza albo wygodę programowania, albo
> bezpieczeństwo, albo przejrzysty kod, albo ekstremalną wydajność.
> W innych językach nie tylu środków wyrazu, więc inne języki
> nie dają okazji do dzielenia włosa na czworo. W Javie nigdy w
> życiu nawet bym nie pomyślał o pisaniu swojego kontenera, bo
> po co? W C++ zazwyczaj używam swoich drzew, tablic hashujących, itd,
> ponieważ (w moim przypadku najczęściej) to skraca czas obliczeń.
> > Problem w tym, że funkcja pop() nie zwraca zdejmowanego elementu.
> > Uzasadnienie autorów biblioteki jest takie, że w ten sposób można
> > uzyskać większą wydajność, i że STL jest projektowany w taki sposób,
> > żeby "nie płacić za to, czego się nie używa" -- jednak brak
> > ergonomii biblioteki jest w istocie pewną ceną -- tym więszką, gdy
> > programiści przyzwyczają się, że zepsute interfejsy to norma.
> Zazwyczaj jest bardzo wysoka cena za bardzo małe zwiększenie wydajności.
> Stos ma metodę top która zwraca. Można wywołać top a potem pop. I
> pewnie w konkretnym przypadku będzie efekt przeciwny do zamierzonego,
> pewnie wydajność będzie gorsza dla dwóch wywołań niż dla jednego z
> odpowiednim typem zwracanym. A jakby dziedziczyć po stosie i sobie
> napisać taką metodę pop? W QT chyba nazywa się taka metoda take.
możliwości są różne. projektanci C++ mogliby zrobić "dispatch on return
value" (Haskell ma coś takiego), i wówczas stack mógłby dostarczać dwóch
implementacji "pop" -- jednej z typem void, a drugi z typem T.
> > Jeśli ktoś ma ochotę posłuchać sobie tego rodzaju narzekań, to jest
> > ten gość, Scott Meyers, który najpierw pisał dużo książek o C++,
> > a później zaczął jeździć po konferencjach, narzekając na dziwność
> > interfejsów C++ (sławiąc taką mantrę, żeby projektować interfejsy
> > w taki sposób, żeby łatwo było ich używać poprawnie, i żeby trudno
> > było ich używać niepoprawnie), i teraz zdaje się zajmuje się
> > rozwijaniem języka D. Można sobie go w wolnej chwili obejrzeć
> > np. tutaj
> Nie, mam dosyć swojego narzekania ;-)
>
> > Poza tym długie czasy kompilacji i niezrozumiałe komunikaty diagnosyczne
> > również są pewną ceną, którą programiści C++ muszą płacić.
> Kompilacje można zrównoleglać w make. Komunikaty diagnostyczne...
> nie wiem.. zazwyczaj wiem co kompilator do mnie mówi, czasami
> tylko muszę chwilę się zastanowić.
to musisz spróbować boosta ;]
> > W każdym razie jeżeli używasz C++ i jesteś z tego zadowolony,
> > to ja nie zamierzam Cię przekonywać, że nie jesteś. Jednak dla mnie
> > duży stopień komplikacji tego języka (np. skomplikowana
> > składnia i różne założenia utrudniające formułowanie wniosków
> > dotyczących programów napisanych w C++) są na tyle poważnym problemem,
> > że jeśli nie muszę, raczej staram się z niego nie korzystać.
> Dla mnie to co nazywasz komplikacją, jest bogactwem możliwości.
> Ale jeśli nie muszę, to też wolę np. Jave, PHP.
Raczej miałem na myśli n. to, o czym wspominał Meyers w prezentacji.
Że poziom skomplikowania C++ doprowadził do tego, że dające się
używać narzędzia do refaktoryzacji kodu dla C++ pojawiły się
w środowiskach IDE o dekadę później, niż dla innych języków.
Co do owego "bogactwa możliwości" to C++ w istocie daje dużą kontrolę
nad tym, co będzie robił komputer w trakcie wykonywania programu.
Osobiście nie sądzę, żeby taka kontrola była potrzebna. Raczej
wolałbym mieć narzędzie, które samo dobierze optymalne struktury
danych do mojego programu, żebym mógł korzystać tylko z jednego
prostego interfejsu do kolekcji (interfejsy w STLu wołają o pomstę
do nieba). Sądzę, że takie podejście na dłuższą metę miałoby lepszy
wpływ na wydajność programów, niż to, co oferuje C++.
Następne wpisy z tego wątku
- 13.08.17 11:23 M.M.
- 13.08.17 15:01 slawek
- 13.08.17 16:16 M.M.
- 13.08.17 16:52 w systemie siła 'POPIS/EU
- 13.08.17 18:15 slawek
- 13.08.17 18:44 w systemie siła 'POPIS/EU
- 13.08.17 20:32 slawek
- 13.08.17 21:23 w systemie siła 'POPIS/EU
- 16.08.17 18:47 Wojciech Muła
- 16.08.17 20:28 slawek
- 16.08.17 20:35 Mateusz Bogusz
- 16.08.17 22:21 slawek
- 18.08.17 18:46 Mateusz Bogusz
- 21.08.17 22:15 s...@g...com
- 21.08.17 23:49 g...@g...com
Najnowsze wątki z tej grupy
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
Najnowsze wątki
- 2024-12-21 Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 2024-12-21 Ideologia Geniuszy-Mocarzy dostępna na nowej s. WWW energokod.pl
- 2024-12-21 ciekawy układ magnetofonu
- 2024-12-21 Bieruń => Spedytor Międzynarodowy (handel ładunkami/prowadzenie flo
- 2024-12-21 Warszawa => Java Developer <=
- 2024-12-21 Zalesie Borowe => Medical Equipment Service Engineer <=
- 2024-12-21 Żerniki => Specjalista ds. Employer Brandingu <=
- 2024-12-21 jak tacy debile
- 2024-12-20 Precedensy politycznie motywowanego nie wydawania w UE
- 2024-12-20 Obrońcy
- 2024-12-20 Obrońcy
- 2024-12-20 Obrońcy
- 2024-12-20 Gdańsk => Inżynier bezpieczeństwa aplikacji <=
- 2024-12-20 czyste powietrze
- 2024-12-20 Katowice => Analyst in the Trade Development department (experience wi