-
Path: news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.
atman.pl!.POSTED!not-for-mail
From: Edek Pienkowski <e...@g...com>
Newsgroups: pl.comp.programming
Subject: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
Date: Sat, 16 Feb 2013 12:22:05 +0000 (UTC)
Organization: ATMAN - ATM S.A.
Lines: 101
Message-ID: <kfntld$aep$1@node1.news.atman.pl>
References: <f...@g...com>
<kf1b5r$cvj$1@somewhere.invalid>
<51152b96$0$1306$65785112@news.neostrada.pl>
<3...@x...googlegroups.com>
<4...@g...com>
<kf61vl$fh0$1@somewhere.invalid>
<c...@g...com>
<kf8mrj$piq$1@somewhere.invalid>
<3...@g...com>
<kf9c7i$61o$1@somewhere.invalid>
<8...@g...com>
<kfbuak$lvs$1@somewhere.invalid>
<0...@g...com>
<5...@h...googlegroups.com>
<8...@g...com>
<a...@d...googlegroups.com>
<9...@g...com>
<kfi6js$tpj$1@somewhere.invalid>
<2...@g...com>
<kfju98$ccq$1@somewhere.invalid>
NNTP-Posting-Host: 77-255-207-227.adsl.inetia.pl
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-2
Content-Transfer-Encoding: 8bit
X-Trace: node1.news.atman.pl 1361017325 10713 77.255.207.227 (16 Feb 2013 12:22:05
GMT)
X-Complaints-To: u...@a...pl
NNTP-Posting-Date: Sat, 16 Feb 2013 12:22:05 +0000 (UTC)
User-Agent: Pan/0.139 (Sexual Chocolate; GIT bf56508 git://git.gnome.org/pan2)
Xref: news-archive.icm.edu.pl pl.comp.programming:202068
[ ukryj nagłówki ]Dnia Fri, 15 Feb 2013 00:08:08 +0000, Andrzej Jarzabek wyszeptal:
>> Ja nadal nie widzę w OO niczego, co by miało mieć problem ze
>> współbieżnością.
>
> No przecież właśnie cały model, gdzie możesz mieć równolegle działający
> kod który ma dostęp do tego samego zmiennego stanu jest tym problemem.
> No chyba że powiesz, że w rzeczywistości w dużych systemach napisanych w
> językach wspierających OO błędy polegające na data races, deadlocks,
> livelocks i tym podobnych atrakcjach nie są poważnym problemem, bo
> zdarzają się niezmiernie rzadko, a jak już się zdarzą, to są łatwe do
> zdiagnozowania, znalezienia i poprawienia.
Dzięki za link na c2.com. Nigdy nie wpadłem wcześniej na taki pomysł,
żeby czytać tam o czymś takim podstawowym jak OO, a jednak warto.
Ja powiem:
> w rzeczywistości w dużych systemach napisanych w
> językach wspierających OO błędy polegające na data races, deadlocks,
> livelocks i tym podobnych atrakcjach nie są poważnym problemem, bo
> zdarzają się niezmiernie rzadko, a jak już się zdarzą, to są łatwe do
> zdiagnozowania, znalezienia i poprawienia.
W tej dyskusji padło wiele ciekawych twierdzeń, m.in. o typach w Javie.
Główną różnicą pomiędzy definicjami teoretycznymi (Java: taki a taki
system typów) i "OO ma problemy z współbieżnością" a praktyką jest
dokładnie to, co opisane jest na c2.com: teoria języka to jedno, praktyka
używania języka to drugie. Po kolei.
Ani Java ani taki Go nic nie wnoszą do teorii języków programowania.
Nie taki jest ich cel. Mają zmienić praktykę. Ja nawet nie widzę
sensu w zastanawianiu się, czy Java ma statyczny silny system typów - ok,
może, nie dotyczy kolekcji, kto dzisiaj używa kolekcji? - bo liczy się
praktyka pisania w tym języku. Mówiąc "OO is too slow" nikt nie ma
na myśli faktycznie że OO is too slow, tylko że taki bywa argument
przeciwko OO - praktycznie pojawia się tylko wtedy, gdy liczą się
pojedyncze procenty wydajności. Znowu argument taki że "OO is too slow"
na podstawie Javy ma jedną wadę: to nie wina OO tylko Javy, która
wiele zasad łamie po to, żeby była użyteczna. Podobnie w Javie było
z współbieżnością: do czasu Memory Model (jsr-133 chyba) NIE DAŁÓ
SIĘ pisać programów współbieżnych w Javie, które używałyby większość
cech języka i mogły być poprawne. Jednak programy współbieżne w Javie
okazały się praktycznie istotne i zmienił się Memory Model - kolejna
zmiana złamanych zasad w Javie podyktowana praktyką. Praktyką,
która wskazała na to, że chociaż większość programistów nawet
nie słyszało o Memory Model a pisze w Javie, to jednocześnie są
tacy, którzy potrzebują rozwiązania podstawowych trywialnych problemów
ze współbieżnością, a język tego nie umożliwia.
OO ma problemy z współbieżnością w tym sensie, że problemy ze
współbieżnością istnieją w programach OO, plus kilka argumentów
o związkach pomiędzy współbieżnością a praktyką OO (na c2.com),
m.in. takim,
że stos ywołań w obiektach połączony z więcej niż jednym lockiem
bywa trudny do analizy. Taka jest praktyka OO (Java, C++), że
wielu programistów źle projektuje programy współbieżne. Natomiast
jest znacząca różnica pomiędzy "w X nie da się Y" i "praktycznie
w X często jest źle z Y". "OO powoduje problemy z współbieżnością"
= false, "Java przed memory model nie pozwalała pisać poprawnych
współbieżnych" = true (chyba że ktoś potrafił omijać problemy
starego modelu pamięci, albo akceptował sporadyczne błędy).
Wracając do cytatu o systemach i ich problemach ze współbieżnością
oraz do linka do c2.com: przyczyny problemów ze współbieżnością
są głównie kognitywne (na ArgumentsAgainstOop wymieniona jest
cała lista kognitywnych argumentów, m.in. to, że mapowanie domeny
na typy jest strukturą poznawczą z wstępnych książek, która
ułatwia zrozumienie OO, ale prawdziwa to ona nie jest poza
relacyjnym mapowaniem - a w OO pisze się wiele innych rzeczy też.
Jak ktoś zna kraj, gdzie rośnie sobie AVLTree, rozważę wycieczkę.
Chciałbym zobaczyć, jak to drzewko wygląda ;).
Problemy ze współbieżnością biorą się najczęściej stąd, że
programiści mają wyrobiony (w nature-vs-nurture byłoby to nurture)
mechanizm, że kod wykonuje się linijka po linijce. Dodatkowo
często brakuje po prostu wiedzy na ten temat. Stąd pojęcie
o tym że w drugiej linijce zmienna i może mieć wartość 1 LUB 2 bywa
trudny do ogarnięcia:
i = 1
print i # jak to: nie 1 ?!
... a tak bywa w programach współbieżnych, piszący kod lub
szukający błędu często tego nie widzi - z przyczyn kognitywnych,
konkretnie zwykłego przyzwyczajenia.
Wracając do dużych systemów i problemów ze współbieżnością:
po pierwsze się DA, po drugie jest to szukanie błędów takie jak
każde inne (inne techniki, zasada ta sama) - jeżeli program jest usiany
błędami, to faktycznie poprawienie "buga" (czyli sterty bugów
i złego projektu) zajmuje trochę czasu. Znalezie źródła zwykłego
pojedynczego problemu zajmuje z grubsza tyle co każdego innego.
Pisanie dużych systemów bez większych problemów ze współbieżnością
to też żadna kosmiczna technologia.
No to się rozpisałem. Mi się nóż otwiera w kieszeni czasami
jak słyszę dyskusję o typach w Javie czy takie demonizowanie
współbieżności, i to przy okazji całkiem rozsądnego cytatu ze strony,
gdzie analizuje się "czy i ewentualnie dlaczego". Ale nie przerywam
dyskusji.
--
Edek
Następne wpisy z tego wątku
- 17.02.13 17:56 R.e.m.e.K
- 17.02.13 19:06 Michal Kleczek
- 17.02.13 22:00 Piotr Chamera
- 19.02.13 09:39 Michal Kleczek
- 19.02.13 10:44 AK
- 19.02.13 11:06 Michal Kleczek
- 19.02.13 14:32 Piotr Chamera
- 19.02.13 16:08 Michal Kleczek
- 19.02.13 17:16 AK
- 21.02.13 09:18 Andrzej Jarzabek
- 21.02.13 09:34 AK
- 22.02.13 00:11 Andrzej Jarzabek
- 22.02.13 11:07 Michal Kleczek
- 24.02.13 22:57 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-01 Rambo 2024. Co z radio-stopem
- 2024-12-01 Pijani kierowcy
- 2024-12-01 "Chciałem zamówić kurs tym"
- 2024-11-30 Windykatorzy ścigają spadkobierców z mandat nieboszczyka za przekroczenie prędkości???
- 2024-11-30 Łódź => Technical Artist <=
- 2024-11-30 Lublin => Inżynier Serwisu Sprzętu Medycznego <=
- 2024-11-30 Warszawa => Microsoft Dynamics 365 Business Central Developer <=
- 2024-11-30 Bieruń => Team Lead / Tribe Lead FrontEnd <=
- 2024-11-30 Zielona Góra => Senior PHP Symfony Developer <=
- 2024-11-30 Gdańsk => Specjalista ds. Sprzedaży <=
- 2024-11-30 Lublin => Spedytor międzynarodowy <=
- 2024-11-30 Warszawa => Mid IT Recruiter <=
- 2024-11-30 Warszawa => Fullstack Developer <=
- 2024-11-30 Żerniki => Dyspozytor Międzynarodowy <=
- 2024-11-30 Warszawa => System Architect (background deweloperski w Java) <=