-
Data: 2017-08-24 21:32:49
Temat: Re: Co jest nie tak z C++ (było: Rust)
Od: g...@g...com szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]W dniu czwartek, 24 sierpnia 2017 17:32:35 UTC+2 użytkownik M.M. napisał:
> > i oczywiście w jakimś sensie jest to truizm. Tyle
> > że może wytwarzać fałszywe przeświadczenie, że
> > jakość języka programowania nie ma żadnego znaczenia,
> > a jakość programisty ma wyłączne znaczenie.
> > Wydaje mi się, że przykład Allena Newella i Alana Kaya
> > pokazuje, że tak nie jest.
>
> Rozumiem. Ale powiedz mi jeszcze, co myślisz o dobrych
> bibliotekach w C++, które w praktyce są dostępne od
> wielu lat. Czy te biblioteki nie czynią z C++ właśnie
> dobrego środowiska?
Zależy do czego. Rzecz z bibliotekami ma się tak,
że ich użyteczność ogranicza się zazwyczaj do celu,
w jakim zostały zrobione. Mówiąc inaczej, to są przetarte
szlaki, i do rozwiązania typowych problemów z reguły
pewnie wystarczą.
Dlatego jeżeli C++ pomaga Ci w osiąganiu Twoich celów,
to jak najbardziej korzystaj z niego.
Ale stąd jest jeszcze daleka droga do powiedzenia, że jest
"najlepszy", tak jak niektóre osoby by chciały. Być może
w niektórych sytuacjach rzeczywiście będzie najlepszy,
ale nie w jakimś absolutnym sensie, tylko w sensie przygodnym
-- bo akurat nikt nie zrobił lepszych bibliotek dla innych
języków. C++ jako abstrakcyjna notacja do komunikowania
i zapisywania idei raczej się nie nadaje. Nie jest dobrym
narzędziem dla umysłu (choć może jest dobrym narzędziem
dla przemysłu)
> W sumie o tym pisałem wcześniej,
> tylko nie użyłem słowa "biblioteka". Pewnie że nie
> zawsze chce mi się pisać w C++ wyrażeń regularnych, ale
> kiedyś miałem przypadek, w którym program słabo działał
> na gotowacach. Problemem była wydajność. Wyrzeźbiłem
> ręcznie jakiś podzbiór funkcjonalności regexp i mógł
> działać. C++ to język który daje dwie możliwości na
> raz - ręcznie rzeźbienie z którym poradzi sobie tylko
> dobry programista, albo dobre biblioteki przy
> pomocy których każdy programista stosunkowo szybko
> napisze działającą aplikację.
Dziś rozmawiałem o tym z kolegą z pracy. Opowiadał, że
na pierwszym roku studiów miał za zadanie zrobienie kalkulatora
GUI na Windows. Powiedział, że męczył się z tym zadaniem
3 dni w C++, podczas gdy jego kolega przyszedł i zrobił w C#
w 3 godziny.
Z C++ jest taki problem, że to nie jest język, tylko
worek różnych ficzerów, które czasem do siebie pasują,
a czasem nie. Jeżeli chcesz pisać w C++ tak jakby był
Javą, to możesz to zrobić. Jeżeli chcesz w nim pisać
tak, jakby to było C, to też możesz. Niektórzy powiedzą,
że to dobrze, bo "język daje wolność". Jednak ja nie
uważam, że to jest dobra wolność, bo jeżeli masz w zespole
programistów z różnym backgroundem, to każdy będzie mógł
pisać po swojemu.
Dla odmiany, wydaje mi się, że języki, które narzucają
na programistę więcej ograniczeń, jak np. Clojure, w którym
wszystko jest niemutowalne, w rezultacie dają kod dużo
lepszej jakości. Ładnie to ujął Runar Bjarnason w swojej
prezentacji, której tytuł mówi już dość wiele: "Constraints
Liberate, Liberties Constrain":
https://www.youtube.com/watch?v=GqmsQeSzMdw
> > Dobry programista poradzi sobie z C++ -- z czasem nauczy
> > się omijać pułapki i obchodzić jego ograniczenia.
> Zastanawiam się, czy w moim przypadku nie było inaczej.
> Na początku, gdy po ludzku programowałem w C++, nie
> wpadałem zbyt często w zbyt duże pułapki. Potem przyszła
> Java, w Javie programowałem w bardzo podobny stylu jak w
> C++. Ale jeszcze potem napotykałem często na problemy
> wydajnościowe i musiałem wrócić do C++, tyle że w C++
> już po ludzku nie programowałem - a to powodowało że
> czasami doprowadzałem aplikację do stanu w którym była
> mało podatna na rozwój - ale dzialała szybko na tanim
> sprzęcie. W zasadzie w pułapki wpadałem częściej jako
> doświadczony programista, jako początkujący nie
> prowokowałem sytuacji prowadzących w ślepe uliczki.
Pytanie, skąd się uczyłeś C++a
> > Wytworzy
> > "swój własny" sposób programowania w C++, w którym będzie
> > się w stanie bez problemu poruszać. Wytworzy sobie swoją
> > własną bibliotekę klas, metod i definicji, w którym będzie
> > w stanie "rozwiązywać problemy" czy budować systemy. Jeśli
> > będzie musiał.
> Tak, coś takiego mialem na myśli, albo po prostu weźmie QT.
> W co większych firmach mają swoje gotowe i bardzo dobre
> biblioteki.
I jeżeli im mają i im działa, to dobrze. Ale trzeba mieć
świadomość, że to jest w dużej mierze owoc tego, co się im
jako firmie udało wyrzeźbić z tego kloca, jakim jest C++.
A jeśli rzeźbili, to podejrzewam, że było dużo prób i błędów.
Pytanie, ile te próby i błędy kosztowały.
> > Tyle że moim zdaniem to nie jest dobra droga dla rozwoju
> > przemysłu i programisty. Lepiej mieć wspólny język, którym
> > możemy się bez problemu porozumieć -- tym bardziej, że
> > często samo sformułowanie problemu jest już jego rozwiązaniem
> > (albo jego kluczową częścią).
> Że wspólny się zgadzam. Jestem za tym, aby rozbudować bibliotekę
> QT np. 10 razy pod względem funkcjonalności. Jestem też za tym,
> aby dodać wersje klas nastawione na wydajność, a nie na wygodę
> programisty.
Ja jestem całkowicie przeciwny. Jedyną rzeczą, jaka powinna się liczyć
przy pisaniu kodu, jest wygoda programisty i łatwość refaktoryzacji.
Jeżeli wszystko ma działać szybko, powinniśmy tworzyć dobre narzędzia
optymalizujące.
> Potem niech komitet wykupi prawa do tej biblioteki i
> ustali bibliotekę QT jako bibliotekę standardową.
To też jest problem, że jak chcesz mieć kontener, to musisz
wybrać, czy to jest kontener z STL, czy Qt. Ale tego problemu
nie da się rozwiązać, zachowując kompatybilność wsteczną.
> A różni
> producenci niech dostarczają swoje implementacje. Pewnie że
> lepiej byłoby, gdyby wszyscy na Ziemie gadali w jednym języku, ale
> czy angielski jest lepszy od hiszpańskiego, to nie wiem.
Też nie wiem. Języki etniczne ciężko jest ze sobą porównywać,
bo wszystkie są raczej złożone i idiosynkratyczne.
> > > > W jakimś sensie jest to wartościowy eksperyment dla tych, którzy
> > > > potrafią się uczyć na cudzych błędach, bo wydaje mi się, że
> > > > nie ma błędu, którego projektanci C++ by nie popełnili.
> > > C++ to asembler obiektowy. Dużo lepiej nie da się takiego
> > > języka zaprojektować.
> >
> > Nie rozumiem. Co to jest "asembler obiektowy"?
>
> To powszechnie znana drwina z obiektowości-wskaźnikowej jaką
> wprowadza C++ :D
Tyle że programiści często myślą, że to, że C++ daje dużą kontrolę
nad sprzętem, to dobra rzecz.
Myślę, że jest dokładnie odwrotnie. Im mniej intymnych szczegółów
język może wiedzieć o systemie, na którym jest uruchamiany, tym
lepszą robotę mogą odwalić narzędzia uruchomieniowe.
> > > Ja czasami też bym chciał w C++ programować
> > > ciut dalej od warstwy sprzętowej. Ale cóż, jest jak jest.
> > >
> > > Projektanci C++ mogli zrobić dwa języki wywodzące się z C:
> >
> > Projektanci C++ nie są jedynymi osobami na świecie, które
> > mogą robić języki programowania. (często mam wrażenie, że
> > sukces C++ wziął się stąd, że było wiele osób, którym wydawało
> > się, że jest inaczej)
>
> Jakiś język programowania kompilowany do C można napisać :)
Nawet nie tylko można, ale i się pisze. Całą masę. Zresztą
C++ też tak zaczynał.
> > > > Jeżeli Twój stosunek do C++ jest równie sceptyczny, co mój,
> > > > to może ten apel powinienem skierować do entuzjastów tego
> > > > języka. Ktoś się podejmie?
> > > W wielu praktycznych zastosowaniach nie ma alternatywy.
> >
> > Zawsze jest jakaś alternatywa. Czasem po prostu trzeba włożyć
> > nieco pracy, żeby jej poszukać.
>
> Ale chodzi o sensowne alternatywy. Czasami chciałbym język javo-podobny,
> kompilowany, bez wywoływania metod po nazwie, bez automatycznego
> zwalniania pamięci, bez plików nagłówkowych, bez sieczki składniowej w
> szablonach, bez wskaźników... Ale ostatnio... mało używam malloc i new,
> wskaźników używam tylko w gorącej pętli, za to mam 3-4-krotnie
> zagnieżdżone szablony i edytor głupieje, zamiast mnie wspierać.
Dlaczego miałbyś chcieć język bez automatycznego zwalniania pamięci?
> Zobacz kod drzewa i testu które niedawno wrzuciłem, tam bezposrednio
> nie operuję na new i malloc, a wskaźniki są tylko w tych pętelkach,
> które są ważne dla wydajności.
>
> https://drzewa-czerwono-czarne.blogspot.com/p/kod-zr
odowy-programu-testujacego.html
>
> https://drzewa-czerwono-czarne.blogspot.com/p/kod-zr
odowy-c-drzewa-czerwono-czarne.html
>
> Używanie tego drzewa nie jest strasznie trudne, a daje bardzo dużą
> wydajność. Jak w haskelu i lispie używa się drzew czerwono-czarnych?
Nie wiem, nie używałem nigdy (i wolałbym nie używać), ani nie implementowałem.
Ostatnio implementowałem dużo algorytmów grafowych czysto funkcyjnie,
ale niestety powodowało to narzut złożoności algorytmicznej w stosunku
do wersji korzystających z mutacji.
Stąd teraz mam taką zabawę, że wymyślam metody automatycznej
transformacji programów napisanych funkcyjnie w wydajniejsze
programy stosujące mutację.
Następne wpisy z tego wątku
- 24.08.17 23:48 Adam M
- 25.08.17 00:23 g...@g...com
- 25.08.17 01:12 M.M.
- 25.08.17 06:04 AK
- 25.08.17 06:05 AK
- 25.08.17 06:06 AK
- 25.08.17 06:07 AK
- 25.08.17 06:08 AK
- 25.08.17 06:14 AK
- 25.08.17 06:29 AK
- 25.08.17 06:37 AK
- 25.08.17 07:08 AK
- 25.08.17 07:51 g...@g...com
- 25.08.17 09:42 Maciej Sobczak
- 25.08.17 09:45 Maciej Sobczak
Najnowsze wątki z tej grupy
- 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
- Młodzi programiści i tajna policja
Najnowsze wątki
- 2024-12-16 W telefonie brak szufladki na drugą kartę SIM
- 2024-12-16 Szukam monitora HDMI ok. 4"
- 2024-12-16 Poznań => Key Account Manager <=
- 2024-12-16 Akwarium w aucie
- 2024-12-16 Warszawa => Account Manager - Usługi rekrutacyjne <=
- 2024-12-16 Warszawa => Expert Recruiter 360 <=
- 2024-12-16 Gdańsk => System Architect (background deweloperski w Java) <=
- 2024-12-16 Warszawa => Key Account Manager <=
- 2024-12-16 Warszawa => Spedytor Międzynarodowy <=
- 2024-12-16 Białystok => Analityk w dziale Trade Development (doświadczenie z Po
- 2024-12-16 Warszawa => Programista Microsoft Dynamics 365 Business Central <=
- 2024-12-16 Wrocław => Konsultant wdrożeniowy Comarch XL/Optima (Księgowość i
- 2024-12-16 Szczecin => Key Account Manager (ERP) <=
- 2024-12-16 Lublin => Inżynier Serwisu Sprzętu Medycznego <=
- 2024-12-16 Gdańsk => Specjalista ds. Sprzedaży <=