🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Ciemna strona C++

#267806
From: Sebastian Kaliszewski
Date: Thu, 22 Nov 2007 15:11
224 lines
10675 bytes
Sektor van Skijlen wrote:
>>Seweryn Habdank-Wojewódzki wrote:
>>[ o listach]
>>
>>>>, jest lepiej 
>>>>wpasowana do języka
>>>
>>>Nie wydaje mi się, że lepiej.
> 
>>LOL, W pythonie lista ma reprezentację w samej składni.
> 
> I to ma niby świadczyć o lepszym wpasowaniu do języka?

Ddaj do tego for, składnię dla splajsów, itd...


> WSZYSTKIE języki skryptowe mają takie właśnie "wsparcie językowe" do tzw.
> list, bo jest to w tych językach podstawowy i niemalże jedyny zbiornik.

Nie jedyny. Tu masz jeszcze tuple, słownik i zbiór -- czyli cały podstawowy 
zestaw. W bibliotece masz jesczcze następne (np talię).

>>>>a w razie czego podstawienie zamiast niej czegoś 
>>>>własnego nie wpływa mi na miejsca użycia.
>>>
>>>A niby z czym w C++ masz problemy?
> 
>>W C++ niby uniwersalne kontenery uniwersalne nie są, w miarę uniwersalność 
>>kończy się na vector i deque oraz map i multimap.
> 
> 
> Bo mniej więcej na tym kończą się kontenery w C++. Do vector i deque dorzuć
> jeszcze list, do map i multimap dorzuć set i multiset i masz komplet.

Tylko czemu interfejs jest tak parszywie niejednolity? begin/end to trochę mało.

> Poza tym nie wiem, dlaczego właściwie uważasz, że vector jest bardziej
> uniwersalny, niż list.  To prawda, że vector nadaje się do tzw. "większości
> zastosowań", ale ma jedną bardzo paskudną wadę: unieważnienie iteratorów
> następuje tam po każdej modyfikacji liczebności zbiornika.

Po każdej po której zmienia się capacity. capacity zaś zmienia się tylko 
czasami.

> Miałem właśnie
> ostatnio taki przypadek, że musiałem trzymać iteratory do elementów, żeby je
> móc szybko usuwać.

To możesz trzymać indeksy elementów i usuwac po begin()+index.


> Podpowiesz mi może, jakiego rozwiązania powinienem użyć w Pythonie?

wbudowanej listy albo deque -- zależnie co robisz.


>>>Wieź mi tu nie zalatuj przykładami kodu powstałymi w czasie kiedy Python był
>>>co najwyżej w umyśle GvR.
> 
>>Języki bezpieczne znane są od ponad 45 lat. Języki w których nie ma 
>>podstawoych dziur w systemie typów były popularne już blisko 40 lat temu sic(!).
> 
> A są nadal?

Ze dwa się ostały. Czasem pod smutowaną postacią, ale są.

> Powiedz, o które języki ci chodzi, to będziemy przynajmniej wiedzieli, na czym
> stoimy.

Pascal, Algol68, Lisp.

[...]
[o lispie już inni pisali, nie będę powtarzał]

>>>A jednak Ty go wychwalasz. Jakaś sprzeczność.
> 
>>Ja go specjalnie nie wychwalam. Po prostu stwierdzam fakt. Różne inne języki 
>>nieudolnie naśladują rozwiązania w Lispie znane od 30 lat.
> 
> Po prostu tłumaczą te ficzery na "ludzki język" :)

Też tak można przyjąć :) No bo on istotnie jest mało ludzki (szczególnie 
jego najstarsze części, ponoć w nowoczesnym kodzie już rzadko używane, ale 
zawsze co klasyka to klasyka -- car, cdr, cadr, brum-brum-pip ;) ).

>>>>Jak potrzebowałem pożądnego rozwiązania to zrobiłe sobie sam. Mam stukturę
>>>>o niewiadomej wielkości (a skąd mam wiedzieć ile obiektów zaraz zamierza
>>>>utworzyć program korzystający ze Śmieciucha) która często gwałtownie
>>>>rośnie. Wbudowany vector nie ma regulkacji tempa wzrostu a kurczenie jest
>>>>w ogóle arbitrane (i zwykle po prostu nie występuje) -- zrobiłem sobie
>>>>swój.
>>>
>>>O jak mi przykro, że mogłeś się wykazać. A w Pythonie to takie predykcje są
>>>robione w liście i w GC.
> 
>>W Pythonie włąsny kontener zrobię łatwiej i wygodniej niż w C++.
> 
> To ja poproszę o przykład - tak jak wyżej opisałem std::list.

Gdzie opisałeś std::list???

Co do przykładu -- na sieci pełno.


>>>I tak wolę C++ rozwiązania, bo są bardziej
>>>dedykowane -- w zakresie swojego użycia są szybsze i mniej zajmują ramu.
> 
>>Są kiepskie. Sztywne i równocześnie nadmiernie skomplikowane. I niewiedzieć 
>>czemu ponazywali różne rzeczy inaczej niż reszta świata.
> 
> Co nazywasz "resztą świata" - Javę, czy Lispa?

Javę, Smalltalka, skryptowce, itd...


>>>>>Doświadczeni, czy Legacy people(tm)? Jak mnie nauka Haskella idzie
>>>>>opornie, to nie narzekam, że język jest do bani.
>>>>
>>>>Haskell jest bardzo dobrze przemyślany, ale wymaga zupełnie innego
>>>>"mind-set" niż języki imperatywne. C++ jest po prostu nieprzemyślany.
>>>
>>>A może jest tak, że rzeczy proste robi się w nim w dziwny sposób, a rzeczy
>>>dziwne w prosty sposób. Jakoś nie widzę różnicy pomiędzy komplikacją
>>>szablonów i Haskella.
> 
>>Haskell jest starannie przemyślany i ma ogromną wyrażalność. Szablony nie są 
>>ani przemyślane anie nie da się w nich sensownie wyrazić żadnej konkretnej 
>>złożoności -- trzeba stanąć na głowie żeby zrealizować zwykły warunek.
> 
> 
>>Szablony były zresztą (czasami panicznie) łatane. Stąd takie dziwności jak 
>>Koenig lookup, SFiNaE itd.
> 
> Koenig lookup jest tylko uporządkowaniem spraw,

Których nikt za wczasu nie przemyślał.

> a SFiNaE było od samego
> początku podstawą funkcjonowania szablonów w C++.

I wszelakich tricków na nich opartych. Ale od początku to toto nie było. 
Zobacz takie MSVC 5.0 -- tu np. nie działało.

> Można oczywiście kwestionować sensowność "ograniczania przez użycie" oraz
> sensowność sposobu pracy komitetu, który wysysa sobie z palca reguły języka,
> do których potem producenci kompilatorów muszą wyharatać implementacje (bo
> jakby goście wcześniej zauważyli te spaghetti-messages, to może losy wzorców
> potoczyłyby się inaczej). Ale na ówczesny stan wiedzy rozwiązanie wydawało się
> najlepsze.

Wydawało? Czy się raczej wyłoniło się z chaosu (poprzedzających implementacji).


> Ale jeśli wydaje ci się, że języki, których standardy są robione równolegle z
> referencyjną implementacją, nie posiadają idiotyzmów, to jesteś w błędzie.

Nie wydaje mi się.

> Właśnie ostatnio się o tym przekonałem. Java, jako jedyny język z grupy
> Java/C#/C++, posiada ścisłe wyjątki.
[...]
> I to jest ficzer, który mocno utrudnia życie, nie sądzę żeby przyczyniał się
> do zwiększenia jakości developmentu, a zmienić go już nie będzie można. A do
> wzorców w C++ definiowanie ograniczeń dodać można.
> 
> I która z tych pomyłek jest bardziej spektakularna?

Ze specyfikacjami wyjąytków to jest tak, że zwalono je zarówno w C++ jak i w 
Javie, przy czym statyka Javowa lepiej pasuje do C++ a dynamika z C++ do Javy.

[...]
> (przy okazji - część w C++ to w miarę uniwersalny agent zdalnie uruchamianych
> aplikacji; osiągnęła aktualnie jakość przedprodukcyjną - czytaj trzeba
> pousuwać zbędne printy do cerr i zmienić sposób logowania pracy - i w trakcie
> jej developmentu nie napotkałem do tej pory ani jednego UB, ani SIGSEGV.
> Faktem jest jednak, że nie chodzi pod Cygwinem, bo jest jakiś problem z
> pthreads:)

Cóż, pthreads i ich implemetnacje to historia sama w sobie.


>>>>C++ to taki samochód, co przy pierwszej drobnej awarii traci hamulce,
>>>>kierownica się blokuje a na kierowcę leci gorący olej i borygo.
>>>
>>>Tak. To bardzo dobry język, bo low-quality koderzy dostają ciężkie baty.
> 
> 
>>Klient ma gdzieś, czy koder dostał baty czy ucieło mu głowę czy co innego. 
>>Klient nie ma zamiaru bycia oblanym olejem i borygo.
> 
> 
> Moment - może najpierw zastanówmy się, o czym w ogóle rozmawiamy.
> 
> Czy rozmawiamy o języku, który przed każdą operacją wykonuje 10 sprawdzeń, czy
> na pewno tak, czy o platformie wykonania, która potrafi wszelkie tego typu
> wycieki odpowiednio "zamaskować"?

Ani o tym ani o tym. Chodzi o to, by błędy wykonania były "contained". Niech 
sobie będzie abort, wyjątek, cokolwiek, ale niech po pierwsze będzie a po 
drugie niech będzie tylko to (a nie losowa poprawka do przetwarzanych danych).

>>>Rozumiem, że dziś jest potrzeba zawodówek informatycznych -- chłopaki po SP.
>>>nr 1023 z Pustkowia piszą łepsajty. Super nie zamierzam im zabierać chleba.
>>>Są języki trudne i do nich trzeba podchodzić inaczej.
> 
>>Tylko niektóre są trudne nie przez złożoność problemów które się wnich 
>>rozwiązuje tylko przez brak jakiegokolwiek projektu i robienie na zasadzie 
>>zlepku rozmaitych, dobrych i złych, ale dla paru wariatów "sexi" pomysłów.
> 
> Zgadza się - ale na te zwykle są gotowe rozwiązania, tylko wystarczy się
> rozejrzeć.
> 
> Natomiast "łatwe języki" zwykle dają złudzenie łatwości tematu w przypadku
> trudnych zagadnień. Jednym z takich trudnych zagadnień jest wielowątkowość.

Wielowątkowość jest parszywa z zasady. Musi zostać albo ładnie przykryta 
(przy czym nie znam łądnego przykrycia; nie znam Koguta, Qrczak mówi że tam 
jest to ładnie zapakowane, jak rozumiem) albo po prostu zlikwidowana (choćby 
na rzecz włókien i wieloprocesowości).

[...]

pzdr
\SK
Technical Details
Message-ID: <fi458p$fmv$1@bozon2.softax.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!bozon.softax.com.pl!not-for-mail
References: <fghgeo$spf$1@nemesis.news.tpi.pl> <fghsb4$kpq$1@news.dialog.net.pl> <fgo4c7$mtu$1@news.vectranet.pl> <20071106073039.433f4934@Vorago> <fgqn9m$74j$2@news.vectranet.pl> <618565031.20071107113041@pkierski.net> <fgt6sh$jov$1@news.vectranet.pl> <fgtb6j$nur$1@news.vectranet.pl> <fgv6ba$k14$1@bozon2.softax.pl> <fgvkne$u3b$1@news.vectranet.pl> <fh1tjd$dtt$1@bozon2.softax.pl> <fh2lj6$qkh$1@news.vectranet.pl> <fha3as$pap$1@bozon2.softax.pl> <fhaj8u$e02$1@news.vectranet.pl> <fhf09d$ohq$1@bozon2.softax.pl> <fhfi9l$640$1@news.vectranet.pl> <fhurmu$5d9$1@bozon2.softax.pl> <fhv020$8k1$1@news.vectranet.pl> <fi1bs4$nn3$1@bozon2.softax.pl> <fi27ds$gt1$1@kujawiak.man.lodz.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!bozon.softax.com.pl!not-for-mail
From: Sebastian Kaliszewski <s@get.it.off.to.reply.informa.pl>
Newsgroups: pl.comp.lang.c
Subject: Re: Ciemna strona C++
Date: Thu, 22 Nov 2007 16:11:08 +0100
Organization: Softax news server
Lines: 224
Message-ID: <fi458p$fmv$1@bozon2.softax.pl>
References: <fghgeo$spf$1@nemesis.news.tpi.pl> <fghsb4$kpq$1@news.dialog.net.pl> <fgo4c7$mtu$1@news.vectranet.pl> <20071106073039.433f4934@Vorago> <fgqn9m$74j$2@news.vectranet.pl> <618565031.20071107113041@pkierski.net> <fgt6sh$jov$1@news.vectranet.pl> <fgtb6j$nur$1@news.vectranet.pl> <fgv6ba$k14$1@bozon2.softax.pl> <fgvkne$u3b$1@news.vectranet.pl> <fh1tjd$dtt$1@bozon2.softax.pl> <fh2lj6$qkh$1@news.vectranet.pl> <fha3as$pap$1@bozon2.softax.pl> <fhaj8u$e02$1@news.vectranet.pl> <fhf09d$ohq$1@bozon2.softax.pl> <fhfi9l$640$1@news.vectranet.pl> <fhurmu$5d9$1@bozon2.softax.pl> <fhv020$8k1$1@news.vectranet.pl> <fi1bs4$nn3$1@bozon2.softax.pl> <fi27ds$gt1$1@kujawiak.man.lodz.pl>
NNTP-Posting-Host: 83.18.189.42
Mime-Version: 1.0
X-Trace: nemesis.news.tpi.pl 1195743944 21568 83.18.189.42 (22 Nov 2007 15:05:44 GMT)
X-Complaints-To: usenet@tpi.pl
NNTP-Posting-Date: Thu, 22 Nov 2007 15:05:44 +0000 (UTC)
User-Agent: Mozilla Thunderbird 1.0.2 (X11/20050322)
X-Accept-Language: en-us, en
In-Reply-To: <fi27ds$gt1$1@kujawiak.man.lodz.pl>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit