-
Data: 2013-02-16 13:22:05
Temat: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
Od: Edek Pienkowski <e...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie 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
- Can you activate BMW 48V 10Ah Li-Ion battery, connecting to CAN-USB laptop interface ?
- We Wrocławiu ruszyła Odra 5, pierwszy w Polsce komputer kwantowy z nadprzewodzącymi kubitami
- Ada-Europe - AEiC 2025 early registration deadline imminent
- John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- Ada-Europe Int.Conf. Reliable Software Technologies, AEiC 2025
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- ,,Polski przemysł jest w stanie agonalnym" - podkreślił dobitnie, wskazując na brak zamówień.
- Rewolucja w debugowaniu!!! SI analizuje zrzuty pamięci systemu M$ Windows!!!
- Brednie w wiki - hasło Dehomag
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- Instytut IDEAS może zacząć działać: "Ma to być unikalny w europejskiej skali ośrodek badań nad sztuczną inteligencją."
- U nas propagują modę na SI, a w Chinach naukowcy SI po kolei umierają w wieku 40-50lat
- C++. Podróż Po Języku - komentarz
Najnowsze wątki
- 2025-07-03 Trybik
- 2025-07-04 Renault Symbioz
- 2025-07-04 Architektura IIIRP: Wyjątkowa, a prymitywniejsza niż stodoła pod zaborami
- 2025-07-04 Warszawa => International Freight Forwarder <=
- 2025-07-04 Wrocław => SAP ABAP Developer <=
- 2025-07-04 Warszawa => Mid/Senior IT Recruiter <=
- 2025-07-04 Białystok => Kotlin Developer <=
- 2025-07-04 Bieruń => Spedytor Międzynarodowy (handel ładunkami/prowadzenie flo
- 2025-07-04 Warszawa => Specjalista wsparcia IT - analiza techniczna sprzętu IT <
- 2025-07-04 Zakrzewo => Konsultant SAP HCM <=
- 2025-07-04 Łódź => Programista Mainframe (z/OS, Assembler) <=
- 2025-07-04 Szczecin => Key Account Manager IT <=
- 2025-07-04 Warszawa => Technik IT - Konfiguracja i Wsparcie Sprzętowe <=
- 2025-07-04 Warszawa => Technique IT - Hardware Configuration and Support <=
- 2025-07-04 Warszawa => Specjalista ds. Sprzętu IT i Wsparcia Technicznego <=