KDE spece.

Marcin 'Qrczak' Kowalczyk qrczak w knm.org.pl
Wto, 25 Maj 1999, 20:07:07 CEST


Mon, 24 May 1999 20:19:53 +0200 (CEST), Tomasz Kłoczko <kloczek w rudy.mif.pg.gda.pl> pisze:

> On Sun, 23 May 1999, Jacek Konieczny wrote:
> [..]
> > No to ja proponuje odchudzić np. glibca usuwając np. wielowątkowość.
> > Jeśli ktoś użył w swojej aplikacji wyjątki, widać miał ku temu powody.
> > Gdyby wszyscy mieli się trzymać przestarzałych schematów, całe KDE
> > byłoby napisane w C i problem bbyłby z głowy tylko, czy wtedy KDE by
> > wogóle powstało.

O, a ten list do mnie nie doszedł. Pewnie przez kłopoty z moim kontem
na MIMUWie...

Ale mimo małego doświadczenia w tych sprawach, zgadzam się z nim.
Kiedyś chciałem w tym guście odpisać.

> Hmm .. jeżeli włączenie wyjątków powoduje, że kod wszystkiego jest o
> 20-30% większy, a całość przez to wolniejsza (w zwiazku z więskzym
> kodem o wiele jest większe prawdopodobieństwo, że cache będzie
> przeładowywany) to ja dziękuję za takie wyjątki. Zrozumiełbym kilk
> procent (4-5) ale nie 20-30.

Cóż, bez wyjątków to się podobno w ogóle nie kompiluje, więc w tym
przypadku nie bardzo jest jak rozważać "co by było gdyby"...

> Zauważ, że użycie wątków prawie zawsze przysiesza program i usprawnia jego
> konstruowanie. Czy to samo możesz w tym wypadku powiedzeć o wyjątkach ?
> I druga sprawa .. usprawnienie pisanai programu .. być może ale jakim
> kosztem ?

Często bywa tak, że używanie konstrukcji wyższego poziomu abstrakcji
powoduje, że otrzymany kod nie będzie tak optymalny jak mógłby być,
gdyby rzeźbić ręcznie niżej. Coś za coś.

Akurat wyjątki są IMHO przykładem czegoś odwrotnego. gcc jest
zoptymalizowany pod kątem szybkiego działania programu w sytuacjach,
w których wyjątki nie są rzucane. Kosztem wolniejszej operacji
rzucenia wyjątku oraz, jak widać, kosztem objętości programu (jakieś
statyczne tablice przy każdej funkcji mogącej rzucić wyjątek - a więc
m.in. wołającej taką która może).

Wyjątki trudno w ogólnym przypadku zasymulować w języku, który ich
nie ma. Zwłaszcza w taki sposób, żeby nie spowalniało to działania
programu rzucającego mało wyjątków - chyba w C/C++ trzeba by dodawać
jawne zwracanie jakiegoś statusu jako wynik funkcji i jawne jego
sprawdzanie po wywołaniu funkcji, właściwy wynik funkcji przekazując
bokiem. Bardzo możliwe, że program napisany bez użycia wyjątków
chodziłby wolniej, abstrahując nawet od wygody jego pisania.

> Daje się zauważyć, że kilka rzeczy (octave, Gtk--) wręcz sprawdza
> na etapie wołania ./configure czy ma sie do czynienia z gcc i same
> dołączają do własnych opcji wyłączanie wyjątków. Widać ktoś zauważył,
> że ich włączenie domyślne jest bez sensu w tych wypadkach. IMHO
> o wiele lepiej by było gdyby takie rzeczy jednak domyślnie były
> wyłączane w kernelu i włączane tylko na wyrazne rzyczenie (to już
> na marginesie).

Wyjątki są nieodłączną cechą C++. AFAIK oficjalnie nie ma żadnego "C++
bez wyjątków". To dodatkowy bonus gcc, że w ogóle pozwala je wyłączyć,
i nie jest jasne, co powinien wtedy robić np. operator new zamiast
rzucenia wyjątku przy niepowodzeniu w alokacji pamięci.

-- 
 __("<    Marcin Kowalczyk * qrczak w knm.org.pl http://kki.net.pl/qrczak/
 \__/       GCS/M d- s+:-- a22 C+++>+++$ UL++>++++$ P+++ L++>++++$ E->++
  ^^                W++ N+++ o? K? w(---) O? M- V? PS-- PE++ Y? PGP->+ t
QRCZAK                  5? X- R tv-- b+>++ DI D- G+ e>++++ h! r--%>++ y-



Więcej informacji o liście dyskusyjnej pld-devel-pl