🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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

Re: Ciemna strona C++

#267658
From: Seweryn Habdank-Wojewódzki
Date: Thu, 08 Nov 2007 18:45
180 lines
8383 bytes
Witam

Sebastian Kaliszewski wrote:

>> 19 -- o czym on mówi? Czy on może chce, aby iterator był dołączony do
>> obiektu, a może jak obiekt ma 5 MB, to też ma wszystko wiedzieć o
>> pojedynczym obiekcie?
> 
> Po co? Wzkaźniki już nie istnieją?

Wskaźnik przecież może pokazywać na NULL? Przecież wskaźnik nie wie czy
obiekt się zmienił (wzorzec obserwator się kłania).
Pan F. nie pokazuje jak coś nie działa i jest to zrobione w dobrym stylu
C++. Wymaścił jakieś kodziki i płacze, że mu nie działa. W tym stylu
potrafię rozwalić każdy kod w C, J, i Py. # nie umiem na tyle, aby to
zrobić, ale na pewno na tej grupie są geekowie, co potrafią grzebać we
wnętrznościach #.

>> A jak tych obiektów w kolekcji jest dzikie mnóstwo
>> to, co? Ile informacji potrzebuje mieć iterator, aby wszyscy przestali
>> się czepiać, że on czegoś nie wie.
> 
> Powinien wiedzieć po czym iteruje. Tak, żeby nie było UBecji.

O tak. Każdy iterator powinien być wizytatorem, obserwatorem, kompozytem,
mózgiem i wiedzą kodera w jednym.

Iterator przede wszystkim ma być efektywną abstrakcją, a nie kombajnem.
 
>> Zresztą banalne jest związanie iteratora i
>> kontenera wrapując oba w jednym obiekcie.
> 
> Typowe gadanie z C++ -- zrób se sam. W C++ wszystko jest zrób se sam, bo
> biblioteka standardowa jest biedna i prymitywna.

Tak. A i tak kolesie pokroju Pana F. nie używają jej -- przykład tablica
obiektów typu foo rzutowana na bar*. Użycie STL na poziomie 0.

Poza tym już nie traz narzekałeś na STL więc skąd nagle gadanie o tym,
że "zrób se sam" jest złe? Pan F. jak widać STL'a nie używa tak jak to
należy robić -- jedyne co potrafi to napisać baziewny kod, aby wykazać, że
gcc generuje długie błędy.
 
>> 32 i 33 -- zapomniał Pan Felix o const, czy to go boli? Czy jeśli żąda
>> czegoś innego od referencji niż od wartości, to może operować constem.
>> A może ma jeszcze coś innego na myśli?
> 
> To, że w wywołaniu nie wiesz czy parametr będzie modyfikowany czy nie.

Do tego właśnie służy CONST!!!
 
>> 34 i 35 -- Super. Język ma być łatwy! Też tak, chce, aby Haskel i Lisp
>> były łatwe, aby asembler był łatwy. Jakoś jest tak, że język, który
>> oferuje więcej niż Logo, musi być nieco trudniejszy.
> 
> Taaak, bo takie potworki jak boost::mpl czy boost::spirit to są niezwykle
> potrzebne

Oh. Przeszkadza Ci, że ktoś myśli bardziej abstrakcyjnie niż łepsajty tego
wymagają? Pokaż mi takie cos jak MPL i SPIRIT w J i w Py.

J wyciera sobie twarz XML i to równiutko, a jak chcesz mieć coś innego niż
XML, to ci mówią, że ... hmm ... ę ... tego ... yyy ... ten tego,
"poco ci coś innego niż XML?"

Parsery wszędzie pisze się parszywie. Więc Twój argument, że Spirit jest
potworny jest nietrafiony.

Co do MPL. Np. w konstrukcji rozmytego algorytmu predykcyjnego mam kawałki z
boost::mpl (dziś lepiej jest używać boost::fusion).

Jest to raczej poprawa czytelności, niż utrudnienie. Np. mam takie coś:

mpl::vector < TrapMf, TriMf, TriMf, TriMf, TrapMf >

a w bardziej dynamicznym kontekście:

mpl::vector < shared_ptr<MembershipFunction>, ...
shared_ptr<MembershipFunction>, >

Co można jeszcze bardziej zdynamizować:

std::vector < shared_ptr<MembershipFunction> >

Kłopot polega na tym, w którym miejscu żądam jakich gwarancji. Każda z tych
wersji jest w różnych miejscach kodu. W szczególności mam takie miejsca
gdzie pierwszy kod jest jedynym słusznym rozwiązaniem (zamienić MPL można
na boost::tuple), ale kod jest podobny.

To oczywiście nie jest łepsajt i daleko temu do tego. 
Ale to też nie jest "wydumana sprawa" bo takie konstrukcje stanowią podstawę
Data Miningu. Dla którego powoli oficjalnie jest wsparcie zarówno bazach
danych (Oracle) jak i w językach -- J2EE wyposażone jest w pewien ubogi
projekt do Data Miningu.

>> 36 -- zgada się, tylko co to wnosi?
> 
> W koślawym języku traci się kupę czasu na przeskakiwanie koślawości?

Ha, ha, ha. Tylko, że Pan F. pisze, że lubi C, a tam aż roi się o void* (*)
(void*). I to boli nie na żarty.
 
>> 38 -- mówił, że lubi C, a tam są te same problemy i na dodatek łata się
>> je o wiele gorzej niż w C++.
> 
> W C są wyjątki??? iteratory??? desytuktory????

Nie ma. Są za to inne kwiatki. A w innych językach? Wystarczy sprawnie jak w
dobrej szkole Troli zapodać na grupę post typu. "Słyszałem, że w języku XXX
nie da się zrobić czegoś takiego jak YYY". Ach zaraz masz 1001 przepisów
jak w dowolnym języku XXX można zrobić paskudniaczka. Do tego jeszcze
chłopaki prześcigać się będą jak to wykonać najbardziej ekstremalnie -- bo
przecież się da. Wszędzie się da kod spaskudzić.
 
>> 40 -- no tak, a kto tak projektuje kod nawet w języku C. Co to za
>> zwyczaj, aby obiekt kasował nie ten co go przydziela?
> 
> To jest normalny zwyczaj. Tylko w nienormalnych językach to sprawia
> problem :)

Tak? A gdzie to jest normalny zwyczaj? Jeśli gdzieś są takie zwyczaje to
kończy się to na posiadaniu GC. A ciekawie się dzieje, kiedy sam zaczniesz
grzebać w tym co robi GC i np. rozgrzebiesz w GC to na czym pracuje GC.
 
>> ... męczące jest zastanawianie się ile można brzydkich przykładów podać w
>> dowolnym języku programowania ... bo w każdym to jest możliwe.
> 
> Ale w innych językach tego problemu po prostu nie ma.

Nie prawda. Zobacz sobie na to:

http://qsorix.jogger.pl/2006/12/14/java-jezyk-pelen-niespodzianek

To jest właśnie poziom haków Pana F.

Zrobić coś nie całkiem tak, jak to się powinno robić, a potem gadać o
wadach.

Dorzucam do tego jeszcze mój stary problem jak wyleczyć wadę projektową
generyków J, która nazwana jest ficzerem "erasure". 
Wiesz jaki potworek trzeba napisać, aby twój generyk pomimo wszystko
nie "erasurował się"? Oczywiście (na szczęście) da się to wyleczyć.

>> 47 -- chłopina rzutuje obiekt foo na bar a potem dziwi się, że "mu to nie
>> działa".
> 
> Co rzutuje? Przecież to jest "normalny" polimorfizm.

Tak? Jeśli tak piszesz normalne programy. To nie dziwię się, że uciekasz od
C++.
 
> Pokazana jedna z projektowych przypadłości C++ -- niekontrolowane
> nakłądanie się na siebie cech, na skutek niedostatecznego przemyślenia
> skutków dodawania określoncyh ficzerów -- połączenie odziedziczonego z C
> pomieszania wskaźników z tablicami z obiektowym polimorfizmem rodzi
> kaszanę.

C++ zawrapował C bardziej dosłownie niż to robią inne języki, np. CPython.
Czy wadą CPythona jest to, że możesz też kod napisać w C?
 
> Inny przykład to słynne >> w szablonach.

A gdzie nie ma słynnych przykładów? W Pythonie jak dla mnie słynnym
przykładem jest kasowanie metod z klas. Wada czy zaleta?

I pytanie bonus jak skasujesz metodę z klasy, to jak ją odzyskać?
 
>> Mi to w ogóle ten kod nie działa, a jak go poprawiłem to mi działa
>> dobrze.
> 
> Taaaak??!?!?!? O, to ciekawe!

Po prostu wystarczy ten kod napisać sensownie, a nie udowadniając tego co
Pan F. chciał wykazać.

Pozdrawiam.

-- 
|\/\/|   Seweryn Habdank-Wojewódzki
 \/\/
Technical Details
Message-ID: <fgvkne$u3b$1@news.vectranet.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.vectranet.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>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.vectranet.pl!not-for-mail
From: Seweryn Habdank-Wojewódzki <shw_mail@wp.pl>
Newsgroups: pl.comp.lang.c
Subject: Re: Ciemna strona C++
Date: Thu, 08 Nov 2007 19:45:33 +0100
Organization: VectraNET - http://www.vectranet.pl
Lines: 181
Message-ID: <fgvkne$u3b$1@news.vectranet.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>
Reply-To: shw_mail@wp.pl
NNTP-Posting-Host: 078088193244.osw.vectranet.pl
Mime-Version: 1.0
X-Trace: news.vectranet.pl 1194546737 30827 78.88.193.244 (8 Nov 2007 18:32:17 GMT)
X-Complaints-To: usenet@news.vectranet.pl
NNTP-Posting-Date: Thu, 8 Nov 2007 18:32:17 +0000 (UTC)
User-Agent: KNode/0.10.5
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit