-
Data: 2013-02-13 18:55:37
Temat: Re: Jakie typowanie jest najlepsze i dlaczego statyczne?
Od: Andrzej Jarzabek <a...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]On Feb 13, 9:10 am, Maciej Sobczak <s...@g...com> wrote:
> W dniu wtorek, 12 lutego 2013 20:14:34 UTC+1 użytkownik Andrzej Jarzabek napisał:
>
> > > > > Poza tym, że obiektowość powstała z myślą o dużych systemach
> > > > W którym momencie?
>
> > > W takim, że w małych nie było powodów, żeby powstała.
>
> > Kto konkretnie, kiedy i co takiego zrobił z myślą o dużych systemach?
>
> > Bo mi wygląda na to, że opowiadasz o wymyślonej przez siebie historii
> > OO, a nie tej, która faktycznie miała miejsce.
>
> Bo ta, która miała miejsce, absolutnie nie dotyczyła dużych systemów,
> tylko systemów sztucznej inteligencji i symulacji? Bo, jak wszyscy wiedzą,
> sztuczna inteligencja i symulacje to malutkie programiki, i właśnie w takim
> kontekście wymyślono OO, żeby te malutkie programiki pisało się jeszcze fajniej?
Krótko: masz mniej więcej dwa etapy wymyślania OO, w uproszczeniu
Simula i Smalltalk. Simula została wymyślona pod kątem symulacji;
symulacje jako takie moga być różnej wielkości systemami,
niekoniecznie dużymi.
Drugi etap to wymyślanie ogólnego paradygmatu programowania na
zasadzie "jak pisać programy, żeby było dobrze" - bez szczególnego
skupiania się ani nad konkretnymi zastosowaniami, ani nad skalą.
Smalltalk był stosowany w biznesie, ale został wymyślony jako język do
celów edukacyjnych - czyli raczej do pisania małych programów.
> > > Przewinąłem losowo i trafiłem na argument "Everything has to be an object".
> > Poszczególne argumenty odnoszą się do różnych definicji
> > obiektowości...
>
> Do jakich? Nie napisali a ja nie znam żadnej definicji, do której przykładowe dwa
argumenty by się odnosiły.
To się odnosi do tego, co pisałem powyżej: Simula wprowadziła pewne
cechy języka programowania, które dzisiaj są uważane za
charakterystyczne dla OO, ale nikt wtedy nie mówił o "object oriented
programming". Taka koncepcja została wymyślona później, biorąc to, co
było w Simuli-67 za podstawę i rozwijając to w ogólny paradygmat
programowania.
To, co natomiast jest w popularnym rozumieniu sprzedawane jako OO jest
jakąś tam, zazwyczaj mocno niepełną, adaptacją tej koncepcji. C++
nigdy nie był tworzony jako język OO, jest natomiast bezpośrednio
adaptacją koncepcji z Simuli na grunt języka C. Można w C++ pisać OO w
pierwotnym sensie, i na pewno klasy i dziedziczenie w tym pomagają.
Java pierwotnie miała być językiem w miarę wiernie realizującym tę
koncepcję OO, do której należy również zasada "everything is an
object", ale zdecydowano się złamać między innymi tę zasadę, bo było
"too slow".
Jeśli chodzi o takie OO jak jest w Javie czy C++, to oczywiście
nietrudno znaleźć problemy przeszkadzające w tworzeniu dużych
systemów, dla których "prawdziwe" OO ma dobre rozwiązanie. Na dzień
dobry - kiepskie wsparcie dla współbieżności i związane z tym wyścigi
i problemy z synchronizacją.
> > Technicznie nawet assembler nie posiada cech sprzecznych z dużymi
> > systemami,
>
> Ma, bo przez brak czytelnego wsparcia dla tworzenia abstrakcji nie sprzyja
Nie załapałeś. "Sprzeczne" nie znaczy "nie sprzyja", "sprzeczne"
znaczy obiektywnie uniemożliwia.
Ja rozumiem, że chodziło ci o cechy nie sprzyjające, ale tu właśnie
wychodzi kwestia subiektywności - sprzeczność można uznać za cechę
obiektywną (jeśli coś jest z czymś sprzeczne, to nikt nie da rady).
Sprzyjanie lub nie sprzyjanie jest subiektywne, ale można postulować
intersubiektywny konsensus: assembler nie sprzyja tak w ogóle, bo
prawie każdemu przeszkadza, a ci, którym sprzyja, i tak gorzej (mniej
wydajnie, z większą ilością błędów, z wadami typu brak przenośności)
tworzą w assemblerze niż inni w językach wyższych poziomów.
Podobny konsensus masz w sprawie goto czy nawet powiedzmy w kwestii OO
(choć ta ostatnia jest bardziej kontrowersyjna).
Natomiast w kwestii dynamicznego typowania nie ma takiego konsensusu.
Dynamiczne programowanie ma długą tradycję i przydatne dla wielu ludzi
techniki dla języków takich jak Lisp, Smalltalk, Erlang czy nawet
Python czy Ruby nie są łatwe ani tanie do odtworzenia w językach ze
statycznym systemem typów. Systemów w tych językach powstało i nadal
powstaje sporo i nie ma przekonywaujących dowodów empirycznych na to,
że mają znacząco większe problemy z niezawodnością niż systemy pisane
w C++ czy w Javie.
> > okoliczności. Jeśli np. chcesz mieć UI w przeglądarce, to możesz
> > zaimplementować go:
>
> > * w dynamicznym Javascript
> > * jako aplikacja flashowa w dynamicznym actionScript czy jak to się
> > tam nazywa
> > * jako applet Javowy
> > * w C++ jako komponent ActiveX
>
> > Nie powiesz chyba, że skoro używasz już C++ albo Javy, to rozwiązanie
> > z tym właśnie językiem jest oczywistym wyborem.
>
> Nie jest.
> Mogę jedynie ubolewać, że w kategorii "UI w przeglądarce" rynek nie wypracował
> safysfakcjonyjących rozwiązań.
Jest całkiem sporo ludzi, których wystarczająco satysfakcjonuje
Javascript.
> Niektórzy pokładają nadzieje w HTML5, ale to tylko czas pokaże, czy te nadzieje się
spełnią.
HTML5 nadal będzie programowany w Javascripcie.
[...]
> > postanowiłem zaimplementowac embedded DSL i wybrałem do tego język
> > Groovy,
> [...]
>
> Tak, też tego używamy.
No i popatrz, wcale nie musze cie przekonywać do używania języka
dynamicznie typowanego, bo już używacie.
> > Na zasadzie: "postawiliśmy checkboxa dla Scali bo ma lambdy? Proszę o
> > konkretny dowód na to, że języki z lambdami są mniej błedogenne niż
> > języki bez lambd".
>
> To bardzo dobry argument. Dlatego nie wprowadziłbym Scali dlatego że ma
> lambdy myśląc o mniejszej błędogenności.
No to immutable data czy cokolwiek. Problem oglnie taki, że bardzo
trudno udowodnić takie rzeczy inaczej niż "mnie się tak wydaje".
Dobrych danych empirycznych nie ma, więc nie wiadomo co innego miałoby
być dobrym argumentem. Jeśli można argumentować z autorytetu, to
przecież bez problemu znajdziesz wielu guru którzy twierdzą, że języki
dynamicznie typowane rządzą (i równie wielu, którzy twierdzą dokładnie
przeciwnie).
Następne wpisy z tego wątku
- 13.02.13 19:09 AK
- 13.02.13 23:25 Maciej Sobczak
- 14.02.13 09:18 Andrzej Jarzabek
- 14.02.13 10:22 Maciej Sobczak
- 14.02.13 11:11 firr kenobi
- 14.02.13 23:57 Andrzej Jarzabek
- 15.02.13 01:08 Andrzej Jarzabek
- 15.02.13 09:20 firr kenobi
- 15.02.13 10:37 Maciej Sobczak
- 15.02.13 10:59 Maciej Sobczak
- 15.02.13 11:20 AK
- 15.02.13 11:52 Andrzej Jarzabek
- 15.02.13 12:20 AK
- 15.02.13 12:29 Andrzej Jarzabek
- 15.02.13 15:34 firr kenobi
Najnowsze wątki z tej grupy
- 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
- Ada 2022 Language Reference Manual to be Published by Springer
Najnowsze wątki
- 2024-11-08 Belka
- 2024-11-09 pierdolec na punkcie psa
- 2024-11-09 Warszawa => Sales Executive <=
- 2024-11-09 Wrocław => SAP BTP Consultant (mid/senior) <=
- 2024-11-09 Warszawa => ECM Specialist / Consultant <=
- 2024-11-09 Warszawa => Senior Frontend Developer (React + React Native) <=
- 2024-11-10 TVN donosi: Obywatelskie zatrzymanie policjanta (nie na służbie)
- 2024-11-08 Warszawa => Head of International Freight Forwarding Department <=
- 2024-11-08 Warszawa => Key Account Manager <=
- 2024-11-08 Szczecin => Key Account Manager (ERP) <=
- 2024-11-08 Białystok => Full Stack web developer (obszar .Net Core, Angular6+) <
- 2024-11-08 Wrocław => Senior PHP Symfony Developer <=
- 2024-11-08 Warszawa => QA Engineer <=
- 2024-11-08 Warszawa => QA Inżynier <=
- 2024-11-08 Warszawa => Key Account Manager <=