26

Kiedyś słyszałem takie porównania różnych języków programowania:
1. assembler - gokart - mały, piekielnie  szybki i raczej niebezpieczny
2. FORTRAN - amerykański krążownik ze skrzydłami - rusza powoli ale gdy ruszy to jedzie i jedzie i jedzie
3. MODULA-2 - auto z podwójnymi pasami dla każdego z pasażerów, poduszki i kurtyny z każdej strony - bezpieczne aczkolwiek trochę uciążliwe w użyciu
4. Pascal - garbus - brzydki ale wszyscy go kochają
5. C - jeep - potrzęsie, potrzęsie ale wszędzie przejedzie.

A tak w ogóle, to odnoszę wrażenie, że teraz programowanie sprowadza się do "drag'n'drop" i nie trzeba już umieć programować tylko sklejać klocki. Niestety klocki składają się z klocków i nawet 640MB nie wystarczy. I w tym kontekście rodzaj języka programowania traci na znaczeniu wobec sprawności w posługiwaniu się myszką i rozpoznawaniu piktogramów.

I dlatego coraz mniej MakGajwerów, którzy z niczego robią prom kosmiczny :)

27

He, he. Można by dodać:
6. Java - SUV. Na każdą drogę, ale cholernie trudny w prowadzeniu i dużo żre
7. C# - Chrysler z licznikiem w mph. W zasadzie nadaje się głównie na drogi w USA
8. Python - kompaktowa Toyota z automatyczną skrzynią biegów
9. Ruby - j.w. ale skrzynia manualna
10. Visual Basic - Fiat Panda z płytą na lusterku wstecznym. Dla niewymagających
11. PHP - stary VW Golf sprowadzany z Niemiec na lawecie. Co drugi samochód, który mijasz na drodze; przy bardziej wymagającej trasie rozkracza się i nie jedzie dalej.
:D

800 XE + CA 2001; Portfolio; 1040 STfm; Lynx II
Psion Organiser II XP, LZ64; Series 3a, 3c, 5mx; Siena; Workabout; HP 95LX, 200LX, 620LX; Amiga 1200; Amstrad NC100, NC200; Game Boy Color
http://palmtop.cosi.com.pl -- nie tylko o Atari Portfolio

28

To Flash dużo żre a nie Java, nawet więcej niż stary Ził :) I też jest wszędzie

29

laoo/ng napisał/a:

Języki obiektowe zaś chronią dane i w poprawnym projekcie to kompilator powie ci, że czegoś ci nie wolno (bo dobierasz się do cudzego obiektu i nie za bardzo wiesz jak, bo kolega nie napisał dokumentacji) i to kompilator automatycznie zwolni zasób, gdy nie jest ci już potrzebny. To nie moda. To odciążenie.

Ponieważ wpisuje się to w moją prośbę do Nosty'egp, pozwolę się ustosunkować: ochrona danych i operacji wewnętrznych nie jest cechą języków obiektowych: np. w C mamy static i pliki nagłówkowe zawierające interfejs, co jest nawet bardziej elastyczne od public/protected/private. Poza tym public/protected/private ma ograniczoną siłę wyrazu i nie zastąpi całkiem dokumentacji - wystarczy spojrzeć na metody publiczne udokumentowane w .NET jako "infrastructure", to samo w Javie. Garbage collector też nijak ma się do paradygmatu programowania obiektowego.
Nie mówię, że programowanie obiektowe jest niepotrzebne - ma swoje zastosowania. Jednak niepotrzebnie wciska się je do głowy studentom pierwszego roku, którzy w ogóle nie potrafią programować.

https://www.youtube.com/watch?v=jofNR_WkoCE

30 Ostatnio edytowany przez jer (2024-08-15 06:26:19)

jellonek napisał/a:

edited: jer - tam jest algol 60  :p

Ha, tu mnie masz :) Z pamięci (dobrej, ale krótkiej napisałem Algol 65, a takiego nie było.
Przepraszam.

31

BartoszP napisał/a:

To Flash dużo żre a nie Java, nawet więcej niż stary Ził :) I też jest wszędzie

to ile flash żre w bardzo dużym stopniu zależny od umiejętności tego kto mu kazał jechać

32

pisanie w c pod glib/gobject (albo zamiast samemu w c, stosujac jezyk vala) to tez dobry przyklad ze mozna programowac objektowo, bez do tego specjalizowanego jezyka (vala to tak na prawde lukier skladniowy na c+gobject).
i tak jak pisal fox - bez GC.

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

33

Pierwsze kompilatory C++ kompilowały się do C. Składnia Objective-C też jest tylko lukrem. Ale nie o to chodzi. Obiektowo możesz programować i w asemblerze co wielokrotnie udowadniano. Najistotniejszą cechą języków wspomagających obiektowość jest wbudowanie pojęcia obiektu w strukturę języka, co pozwala na wczesne wykrywanie błędów.
W sprawie GC osobiście uważam, że błędem jest zabranie programiście władzy nad żywotnością jego obiektów i wbudowanie szemranych, niedeterministycznych mechanizmów w sam język. Wg mnie wzorcem w tej mierze jest C++, w którym zasobami można zarządzać jak komu się żywnie podoba od ręcznego wołania delete, poprzez automatykę bazującą na RAII, aż po GC implementowane bibliotecznie.

34

A propos C++:
http://confiable.nazwa.pl/texty/text_Wywiad_Cpp.htm
Wiem, że to apokryf, ale czasem nawet w największej bzdurze może się znaleźć ziarnko prawdy ;)

A co do GC, to uważam to za naprawdę dobrą rzecz, pozwalającą skupić się na celu, a nie na tym, czy nie wysypiemy systemu, nadpisując gdzieś jeden bajt (piję do malloc, nie do mechanizmów z C++) :)

800 XE + CA 2001; Portfolio; 1040 STfm; Lynx II
Psion Organiser II XP, LZ64; Series 3a, 3c, 5mx; Siena; Workabout; HP 95LX, 200LX, 620LX; Amiga 1200; Amstrad NC100, NC200; Game Boy Color
http://palmtop.cosi.com.pl -- nie tylko o Atari Portfolio

35 Ostatnio edytowany przez epi (2010-08-07 17:10:11)

laoo/ng napisał/a:

W sprawie GC osobiście uważam, że błędem jest zabranie programiście władzy nad żywotnością jego obiektów i wbudowanie szemranych, niedeterministycznych mechanizmów w sam język. Wg mnie wzorcem w tej mierze jest C++, w którym zasobami można zarządzać jak komu się żywnie podoba od ręcznego wołania delete, poprzez automatykę bazującą na RAII, aż po GC implementowane bibliotecznie.

Por. D.

Cosi napisał/a:

A co do GC, to uważam to za naprawdę dobrą rzecz, pozwalającą skupić się na celu, a nie na tym, czy nie wysypiemy systemu, nadpisując gdzieś jeden bajt (piję do malloc, nie do mechanizmów z C++) :)

Za ochronę przed skutkami pisania po nie swojej pamięci odpowiada współcześnie system operacyjny wespół z MMU.
Pisanie np. poza zakresem tablicy ale w pamięci tego samego procesu to już inna sprawa i w różnych językach można się przed tym bronić łatwiej lub trudniej.
Obie sytuacje mają jednak niewielki związek z GC lub jego brakiem.

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

36

Cosi: co ma GC do pisania nie tam gdzie trzeba?

wlasnie poprzez nadmierne poleganie na GC java ssie (choc nowy wielowatkowy/wspolbiezny GC (poki co eksperymentalny) ma nieco sprawe poprawic...

The UNIX Guru`s view of Sex:
unzip; strip; touch; finger; mount; fsck; more; yes; umount; sleep

37

epi, jell: To był taki skrót myślowy, faktycznie dość niezrozumiały. Miałem na myśli automatyczne zarządzanie pamięcią, w tym alokację i zwalnianie pamięci. Dzięki temu, że nie trzeba przydzielać dodatkowego miejsca przy każdej operacji np. na tablicy, nie ma znanego z C ryzyka "pisania po nie swoim", a automatyczne usuwanie nieużywanych obiektów zapobiega wyciekom pamięci. Bardziej w tych kwestiach ufam twórcom (dojrzałych) języków, niż sobie.
Wiem, że niewiele to ma wspólnego z samym garbage collection; chyba po prostu chciałem wyrzucić z siebie swoją głęboko tłumioną niechęć do C ;)

800 XE + CA 2001; Portfolio; 1040 STfm; Lynx II
Psion Organiser II XP, LZ64; Series 3a, 3c, 5mx; Siena; Workabout; HP 95LX, 200LX, 620LX; Amiga 1200; Amstrad NC100, NC200; Game Boy Color
http://palmtop.cosi.com.pl -- nie tylko o Atari Portfolio

38

mac_z napisał/a:

to ile flash żre w bardzo dużym stopniu zależny od umiejętności tego kto mu kazał jechać

I to jest kwintesencja tematu. Teraz w większości mamy wyrobników a nie artystów programowania. I nie ma tu znaczenia język.  Bo zamiast optymalizować programy nakazuje się zwiększenie mocy komputera.
To tak jakby zamiast zmniejszać zużycie paliwa w samochodzie kazać mniej nim jeździć aby było taniej.

39

BartoszP: W samochodzie, aby zmniejszyć zużycie paliwa można po prostu "słabiej naciskać pedał gazu" i jeździć bardziej optymalnie (zwalnianie poprzez zdejmowanie nogi z gazu, a nie częste naciskanie hamulca, hamowanie silnikiem itp) wtedy przy tym samym silniku zużyjemy mniej paliwa :P I wtedy nie jeździ się mniej, tylko nawet więcej, bo nie dość że paliwa wystarczy na większą odległość, to jeszcze czasowo się dłużej jedzie, chcąc jechać ekonomicznie ;P

40

I w tym rzecz. Zamiast stosować podczas programowania wielkie i pamięciożerne "klocki" wybierane z menu można to samo zrobić lepiej/zgrabniej/optymalniej ale niestety DŁUŻEJ czego rynek nie chce zrozumieć bo musi mieć już-natychmiast nowe fajerwerki graficzne.

41

BartoszP napisał/a:

można to samo zrobić lepiej/zgrabniej/optymalniej ale niestety DŁUŻEJ czego rynek nie chce zrozumieć bo musi mieć już-natychmiast

Jest to zachowanie racjonalne, bo komputer (a co za tym idzie program) to tylko narzędzie do wykonania konkretnych czynności. Coś jak grabie: mogę mieć ręcznie kute grabie z trzonkiem z rzeźbionego dębu, za 1500 złotych, wytrzymujące sto lat celnego ostrzału artyleryjskiego, robione przez artystę na zamówienie, a na realizację będę czekał 3 miesiące.

Ale jeśli potrzebuję zagrabić trawnik teraz, to coś takiego nie wchodzi w rachubę: trzeba kupić za 20 złotych chińskie grabki z plastiku, które połamią się przy drugim grabieniu, ale dostępne są natychmiast i w milionach sztuk.

KMK
? HEX$(6670358)

42

BartoszP napisał/a:
mac_z napisał/a:

to ile flash żre w bardzo dużym stopniu zależny od umiejętności tego kto mu kazał jechać

I to jest kwintesencja tematu. Teraz w większości mamy wyrobników a nie artystów programowania. I nie ma tu znaczenia język.  Bo zamiast optymalizować programy nakazuje się zwiększenie mocy komputera.
To tak jakby zamiast zmniejszać zużycie paliwa w samochodzie kazać mniej nim jeździć aby było taniej.

Zawsze mnie zastanawiało, czy osoby, które tak piszą są zawodowymi programistami ? :P

What can be asserted without proof can be dismissed without proof.

43 Ostatnio edytowany przez BartoszP (2010-08-08 14:22:49)

sqward napisał/a:

....Zawsze mnie zastanawiało, czy osoby, które tak piszą są zawodowymi programistami ? :P

Jak by to rzec... zależy co rozumiemy przez "zawodowego programistę":

1. Już raczej nie.
2. Miałem kiedyś wizytówkę "Kierownik działu programowania obiektowego.".
3. Wykształcenie kierunkowe mam.

drac030 napisał/a:

....Coś jak grabie: mogę mieć ręcznie kute grabie z trzonkiem z rzeźbionego dębu, za 1500 złotych...ale jeśli potrzebuję zagrabić trawnik teraz, to coś takiego nie wchodzi w rachubę: trzeba kupić za 20 złotych chińskie grabki z plastiku....

Tylko, że te grabie z rzeźbionego dębu będą twoje prawnuki używać cmokając nad jakością i finezją producenta.

44

D:
Nie odważyłbym rozpoczynać dużego projektu w tym języku. Jest zbyt młody i zbyt mało powszechny (tylko trzy implementacje). Póki co wśród niezarządzanych języków nie widzę alternatywy do C++.

GC:
To półśrodek. Zarządza tylko pamięcią ignorując inne zasoby, o które trzeba dbać innymi mniej lub bardziej prymitywnymi metodami. Biblioteka standardowa C++ udostępnia zaś cały arsenał sprytnych wskaźników, które wystarczy tylko stosować, aby zapomnieć o wyciekach wszelkich zasobów.

45

Co do D, zgadzam się. Implementacje są w zasadzie cztery, każda "działa, ale". ;)

Co do arsenału wskaźników, masz oczywiście na myśli Boost i Loki?

Hitler, Stalin, totalniak, SSman, NKWDzista, kaczor dyktator, za długo byłem w ChRL, wypowiadam się afektywnie.

46

Loki::SmartPtr jest trochę zbyt przerośnięty (Alexandrescu przesadził ze strategiamie (policies); w Singletonie to jest przydatne, ale wskaźnik jest zbyt kompaktowy, żeby go aż tak konfigurować). Boostowe są bardzo dobre (zresztą boost to niezbędnik każdego C++sowca :)). Ich specyfikacja przeszła do std::tr1 i np visual C++ 10 ma już ich rewelacyjne implementacje (przesiedliśmy się ostatnio w pracy na nowego visuala, robiłem testy i wyszły nadspodziewanie dobrze).

47 Ostatnio edytowany przez jer (2010-08-08 20:23:59)

epi napisał/a:

Co do arsenału wskaźników(...)

Poczułem zapach spalonego prochu... :D

48

laoo/ng napisał/a:

Boostowe są bardzo dobre (zresztą boost to niezbędnik każdego C++sowca :))..

Każda implementacja "cwanego" wskaźnika bazująca na liczniku odwołań zawiedzie przy odniesieniach wzajemnych dwóch obiektów (wycieki pamięci). Jeśli nie zna się tego ograniczenia, można nieźle się wkopać. To b. prawdopodobne, gdyż dokumentacja do klasy boost::smart_ptr nie wspomina o tym ani mru mru. Książka "Beyond the C++ Standard Library - An Introduction to Boost" również pozostawia nas w tym błogostanie.

49

No ale to jest oczywiste. SmartPointery tylko przesuwają problem. Rozwiązania dobrego nie ma (można używać weak pointerów, ale nie zawsze się da). W naszej firmie staramy się odejść od IntrusivePtr.

What can be asserted without proof can be dismissed without proof.

50

No to czas wrócić do COBOLA'a. Zero wskaźników...