Dziś jest poniedziałek, 13 października 2008 roku (z kalendarza...)

Języki programowania

Icon

22.09.2005, 19:24

Przegląd

Komentarze (19)

Powrót

W związku z moim niedawnym powrotem do Pascala postanowiłem zainaugurować nową kategorię porównaniem języków programowania, z jakimi miałem dotąd do czynienia. Nadmienię, że są to języki z różnych dziedzin, a ja nie staram się uchwycić przydatności ich zastosowania, ale łatwość użycia, intuicyjność i prostotę.

Na pierwszy rzut pójdzie PHP, które dominowało u mnie przez ostatnie dwa lata. Jeśli chodzi o tworzenie jakiegoś narzędzia "na teraz", jest on po prostu niezrównany. Mnóstwo bibliotek służących do różnych celów oraz składnia typowego języka skryptowego wzorowanego na C/C++ to doskonałe połączenie. Przydaje się tu w szczególności obsługa zmiennych, których nie trzeba deklarować i nie mają predefiniowanego typu. Jednak choć w teorii jest to język "powszechnego użytku", czarno na białym widać, że projektuje się go pod kątem WWW, przez co jego zastosowania w charakterze języka do pisania "normalnych" programów są mocno ograniczone. Dla uproszczenia wolę go łączyć z przeglądarką.

Java. Nie programowałem może w niej za dużo, ale mam wyrobione zdanie. Język jest ciekawie zaprojektowany i naprawdę mi się podoba. Jeśli zna się już programowanie, po paru dniach z pomocą dokumentacji osiąga się ciekawe rezultaty. Java wypada słabiej, jeśli weźmiemy pod uwagę wydajność. Edytor tekstu NetBeans w niej napisany, zajął CAŁE 512 MB pamięci RAM, wykorzystał wszystką moc procesora i omal nie zawiesił bardzo stabilnego skądinąd Windowsa XP. A przecież to jest "tylko" edytor. IDE do Delphi stworzone w normalnym, kompilowanym języku, bez trudu działało na 64 MB RAM na procesorze z zegarem 600 mHz. Niech to wystarczy za porównanie. Nie podoba mi się też sposób zarządzania obiektami. Kompletnie nie mogę pojąć, dlaczego stosowany jest Garbage Collector do usuwania "nieużywanych" obiektów, skoro można użyć rozwiązania zastosowanego w PHP - kiedy nie ma zmiennych wskazujących na obiekt, jest on niepotrzebny i idzie do usunięcia. Przynajmniej nie powodowałoby to marnotrawienia pamięci wtedy, gdy trzeba jej mnóstwo przydzielać i zwalniać, a swego czasu mi się ktoś żalił, gdyż natrafił na taki właśnie problem.

Kończąc języki poniekąd interpretowane, przechodzimy do kompilowanych. Assembler - wiadomo. Piszemy niemal bezpośrednio w kodzie maszynowym, co jest toporne, ale w niektórych sytuacjach zbawienne. W normalnej pracy wykorzystujemy tzw. język wyższego poziomu, czyli C. Ma on swój klimat i w większości przyzwoitą składnię (dziwne są tylko wskaźniki, które trzeba wstawiać w nawiasy), ale "opakowanie", czyli standardowy zestaw bibliotek, woła o pomstę do nieba. Odnoszę wrażenie, że projektował go masochista z 20-letnim stażem po ciężkim dniu w pracy. W praktyce wygląda to tak, że jak już uporasz się z podstawowymi problemami (już konwersja liczby na ciąg tekstowych może przyprawić o mdłości), jesteś tak wyczerpany, że odechciewa ci się pisać właściwej części. C++ ma już bardziej obiektowy interfejs, który jest całkiem przyjazny. Jednak jako że jest to rozwinięcie C, dziedziczone są też jego wady, m.in. beznadziejny system linkowania, który lubi marudzić. Po przeciwnej stronie skali stoi tutaj Pascal. Jego projektant pomyślał o możliwości dzielenia kodu źródłowego na mniejsze pliki i "domyślnie" przewidział tworzenie tzw. modułów. Również pakiet podstawowych funkcji jest przyjemny w użytkowaniu. Nie zdarzyło mi się mieć do niego jakichś większych pretensji. Tak się jednak składa, że tutaj z kolei ludzie mają pretensje do składni. Oparta na zwyczajnych angielskich słowach, może wydawać się nazbyt rozwlekła, a czasem prowadzi do pomyłek (np. nie ma rozróżnienia między identyfikatorem zmiennej, a funkcji/procedury bez parametrów). Tak samo brakuje jej niektórych podstawowych struktur, m.in. operatora ++.

Jaki jest mój werdykt? Marzy mi się język, który połączy w sobie elegancję pascalowych bibliotek oraz niektóre elementy jego składni (moduły, ujednolicone tworzenie typów) z "tą lepszą" częścią składni C/C++. Kto wie... znając moje zamiłowanie do kompilatorów i wszelkiej maści przetwarzaczy tekstu może kiedyś stworzę coś takiego? Czas pokaże.

Powrót

Komentarze

Napisał darkspirit w czwartek, 22 września 2005 o 20:15

noi przydałaby się obsłguga obiektów niczym w javie ;)

Napisał radziel w czwartek, 22 września 2005 o 20:50

I oczywiscie automatyczne powiekszanie obszaru pamieci dla zmiennych. Pascal przy duzej liczbie operacji zmiennoprzecinkowych wykrzaczal sie :(. Pomagalo wtedy tylko new(); o ile dobrze pamietam. Jeżeli mowimy o jezyku for stand-alone programs to przydalby sie interfejs z borlandowskich aplikacji ;]

Napisał Cudi w czwartek, 22 września 2005 o 21:01

A próbowałeś C#? :) Myśle, że bardzo by Ci się spodobał ten język. Zespołem, który go tworzył kierował nie kto inny jak Anders Hejlsberg, twórca Turbo Pascala i główny projektant Delphi. A nazwa sama już mówi jaka składnia została użyta. Dodatkowo, dzięki integracji z systemem język ten, pomimo tego, że podobnie jak Java jest wykonywany przez maszynę wirtualną (czyli .NET Framework), jest na tyle szybki by pisać w nim gry 3D za pomocą DirectX. Naprawdę polecam ten język, szczególnie wersje 2.0. Microsoft udostępnia darmowe narzędzia do celów niekomercyjnych - MS Visual Studio Express. Dokumentacja też jest całkiem niezła, a artykułów w sieci można znaleźć całkiem sporo, choć większość w języku angielskim. Wyszła mi prawie recenzja, ale zakochołem się w tym języku poprostu i nie umiem go opisać w kilku słowach :)

Napisał bela_666 w czwartek, 22 września 2005 o 22:06

A próbowałeś Pythona? :) Posiada wspaniałą bibliotekę standardową, ponadto jest masa dobrych do ściągnięcia. Poza tym składnia banalna ;p

Napisał Cudi w czwartek, 22 września 2005 o 22:14

Ale obiektowość mocno kuleje w Pythonie, przez co do większych aplikacji (szczególnie okienkowych) nadaje się on raczej średnio. Ale do mniejszych zastosowań, czy choćby do skryptów konsoli, nadaje się wręcz idealnie (portage - serce Gentoo - jest w nim napisane :))

Napisał Zyx w czwartek, 22 września 2005 o 22:22

radziel -> to chyba jakiś ruski kompilator Pascala miałeś :). Ja wiem tylko, że w TP był błąd z "division by 0", na który jednak jest odpowiedni patch. Cudi -> jakby jeszcze C# był do kodu maszynowego kompilowany... to by było super :). Bądź co bądź maszyny wirtualne trochę ograniczają programistę pod względem możliwości. W każdym razie systemu operacyjnego w tym nie napiszesz :).

Napisał radziel w piątek, 23 września 2005 o 18:33

Zyx -> Nie ruski a oryginalny, na 4 dyskietkach Turbo Pascal 7.0 :D :P. Co do division by 0 - tak, dosc czesty problem przy nowych procesorach ale moj problem byl nieco inny. Nie pamietam jaki to byl komunikat ale wiem jedno - dotyczyl przepelnienia przydzielonej pamieci (tysiace sin/cos/tg na sekunde + przeliczanie na radiany i zaokraglanie.) Po 1 min sie sypal i tylko new() pomagalo... Cudi -> C#? Wszedzie spotykalee kojarze...m sie z C/ C++ ale C# ni

Napisał shw w sobotę, 24 września 2005 o 01:26

Po krotce - php - fajny jezyczek skryptowy, bajecznie prosty - to dobre na poczatek, ale po pewnym czasie przeszkadza. Brak w 99.9% skompilowania go, a ciagla interpretacja najlepszym sposobem tworzenia czegokolwiek uzywanego nieustannie dobrym pomyslem nie jest. Moooze autorzy pojda po rozum do glowy i zrobia cos takiego w 6, ale patrzac na to jak wooolno adaptuje sie 5 - bedzie to za 10 lat :P Java? Ledwo liznolem, ogolnie nie lubie javy z powodu jej pooowooolnooosciii. Poza tym smieszne dolaczanie bibliotek po smiesznych nazwach, jakies gwiazdki, startki - nie podoba mi sie i tyle. Aplet bym w tym napisal, ale nic poza tym. C/C++ wrzucilbym do jednego wora i powiedzial - dobrze sie w tym pisze cos co ma wydajnie chodzic, ale nie oznacza to, ze sie to pisze milo. Pascal? Uczylem sie odrobinke i jakos nie przypadl mi do gustu. Co jak co, ale uwazam ten jezyk za jezyk do nauki programowania w "szkolach nizszych", ale nie jestem przekonany, zeby mozna bylo w tym zrobic cos naprawde na poziomie - ale mowie - malo wiem, moge sie mylic. C#... hmmm - poniewaz jestem zapalencem platformy .NET, to niczego zlego nie moge powiedziec o tym jezyku. Co prawda nie rozumiem sensu wprowadzenia kilku rzeczy do niego (jak np. po co 2 razy pisac, ze przekazuje sie cos przez referencje?), ale zarowno do C#, jak i do .NET'a nic nie mam (a wrecz bardzo przeciwnie :)). Ogolnie zyx powiem tak - podoba ci sie Java? Sprobuj C# - ludzie z MS'a w wielu miejscach mocno sie Java inspirowali, ale z glowa i wyszedl im naprawde przyjemny jezyk. Ogolnie tez .NET daje ogromne mozliwosci - dziala toto szybciej (i to nie malo szybciej) od Javy, tworzy kod cross-platformowy, umozliwia szybkie tworzenie aplikacji, przy uzyciu np. Mono mozna wykorzystywac takze biblioteki z Javy, wybierasz sobie jezyk jaki ci sie podoba w danym momencie. Jedynym malym minusem (w porownaniu z plusami) jest wlasnie niemoznosc kompilacji do kodu maszynowego (ale mozna tworzyc tzw. obrazy dla danej maszyny), no ale - tak to bywa w technologiach cross-platformowych. A na koniec - co do Garbage Collectora - o co ci chodzi zyx - przeciez wlasnie opisales sposob dzialania GC - nie ma odwolan do danego obiektu - obiekt idzie do usuniecia.

Napisał Zyx w sobotę, 24 września 2005 o 07:33

Wiem, że idzie, ale nie od razu, jak w PHP. Jakiś rok temu mi się ktoś żalił, że Java za rzadko przegląda pamięć, a on musi stworzyć i zniszczyć bardzo dużo obiektów w bardzo krótkim czasie, przez co mu się pamięć zawala. Co do Pascala -> zdecydowanie zaniżasz wartość tego języka. W szkołach korzysta się głównie z 16-bitowej wersji, która nie ma zadowalających możliwości, ale już 32-bitowy Free Pascal Compiler zrobi ci wszystko: WinAPI, OpenGL, ODBC, libMySQL - wszystko jest.

Napisał bela_666 w sobotę, 24 września 2005 o 11:20

shw: nie prawda, że java jest wolna, wolne są aplikacje np. desktopowe pisane w swingu pod moim freebsd z 256 ramu, działa tomcat i eclipse 3.1 baaaaaaaaardzo szybko ;)

Napisał Cudi w sobotę, 24 września 2005 o 13:58

@Zyx: a czy języki, które Ty wymieniłeś służą do pisania OSów? Przecież sam wymieniałeś listę ciekawych języków do RÓŻNYCH celów. W C# należy zwrócić uwagę głównie na genialną składnie i dużą ilość gotowych, uniwersalnych bibliotek. Dla mnie jest to poprawiona wersja Javy, z dużo lepszymi rozwiązaniami składniowymi. Maszyna wirtualna ogranicza, to jasne i oczywiste, ale nie powiedziałem, że C# to język do wszystkiego :) Jego główne zastosowanie to aplikacje okienkowe i aplikacje webowe (można go używać w ASP.NET). Jednak jeśli .NET będzie dobrze zintegrowany z Vistą, istnieje duże prawdopodobieństwo, że C# będzie powoli wypierał swoich starszych, niskopoziomowych braci :)

Napisał shw w sobotę, 24 września 2005 o 17:52

zyx: Bo php dziala na zupelnie innej zasadzie - w GC nie da sie tego fizycznie zrobic - jest to robione tak szybko jak sie da. Jednak taki GC musi obsluzyc znacznie bardziej skomplikowane rzeczy i aplikacje niz PHP. A co do zwalniania - nie wiem jak w javie, ale w .NET'ie mozna, w pewien (chociaz nie idealny) sposob wymusic zwalnianie okreslonych zasobow. co do pascala - jednak nadal bede twierdzil, ze jakby go nie skomplikowali i nie rozbudowali, to bedzie to jezyk, ktory ma nauczyc programowania, przyzwyczaic do skladni. po prostu takim jezykiem bedzie dla mnie - niemile wspomienia moze :P bela_666: nie czepiaj sie slowek - predkosc jezyka okreslaja aplikacje z nim napisane - jezeli na te kilka aplikacji jakich uzywalem, napisanych w Javie (glownie edytorow), 100% z nich chodzila nieprzyjemnie wolno, to dla mnie java jest wolna. probowalem sie przekonac do tego jezyka niejednokrotnie, ale - bez skutku. co do OS'ow - napisz maszyne wirtualna, ktora bedzie niezalezna od zadnego OS'u i mozesz stworzyc OS :) co do .NET'a - maszyna wirtualna, to maszyna wirtualna - nigdy toto nie bedzie chodzilo tak szybko jak program chociazby w c++, ale im szybsze beda maszyny, im bardziej dopracowane implementacje, tym szybciej bedzie toto dzialalo. przy predkosci wiekszej od Javy i ze skladnia znacznie bardziej przyjazna (w przypadku chociazby C#, chociaz duzym plusem jest to, ze w javie piszesz w javie, a w .NET'ie masz do wyboru jeden z wieeelu jezykow), to baaardzo ciekawa alternatywa dla javy (ktora - mam nadzieje - .NET niedlugo calkowicie wyprze). co do implementacji .NET'a w Windowsach - na pewno bedzie ona dopracowywana. Juz teraz mimo iz MS jest autorem specyfikacji i standardow .NET'a stosuje on rozne hacki, zeby jego implementacja dzialala szybciej. Z kolei Mono trzyma sie specyfikacji (jak na razie), ale i jest dostepny na kupe systemow i konfiguracji (od wersji 1.1.9 - dziala toto na procesorac ARM - czyli mozemy sobie pisac aplikacje na taka Nokie 770 ;) co bede czynil, jak tylko bedzie mnie stac na taki telefon :P). Moge dlugo wychwalac .NET'a - dla niego porzycilem niejako c++, php, pogodzilem sie z ASP (w wersji .NET), z ktorym wyjatkowo sie nie lubilem.

Napisał alienjr w sobotę, 24 września 2005 o 22:22

@Cudi W pythonie napisane jest sporo drobnych aplikacji okienkowych pod gnomem, ale takze sa wieksze np. anacodna - graficzny instaltor Fedory/RHEL'a albo np. kahakai - caly windows manager w pythonie napisany, podobny do fluxboksa całkiem, no jest kilka na stronie pythona sa chyba wymienione (afair) Python fajny jezyk. ;)

Napisał alienjr w sobotę, 24 września 2005 o 22:30

@Bela A mi Eclipse na fedorze zamula nielicho ;) za to mono smiga, ze hoho.. ktoregos dnia znalazlem tutorial jak napisac przegladarke w C#, fajna sprawa, szybko, latwo, przyjemnie.. Java jest fuj ;] Lubie mono choc same .Net przyprawia u mnie dreszcze (patenty i inne zagorzenia ze strony ImperiumZla)

Napisał shw w sobotę, 24 września 2005 o 23:32

Wiesz alien - na szczescie sam standard rdzenia .NET'a jest wolny od patentow i ustandaryzowany. a mono pisza ludzie madrzy, ktorzy mysla tak samo jak ty i tworza Mono tak, zeby w razie problemow z patentami mozna bylo dana czesc wymienic bez problemu. a co do przegladarki - heh - przy uzyciu gtk# i gecko to doslownie kilka linijek kodu i masz dzialajaca przegladarke :D

Strona 1 z 2 :: 1 2

Skomentuj

NickInformacja
E-mailTylko do użytku wewnętrznego.
WWWNie zapomnij o http://
LayoutNapisz tu, czy widzisz dzienny czy nocny layout.
WpisFormatowanie wiki
Internauto, pamiętaj! Wolność to nie samowola - dbaj o kulturę wypowiedzi oraz dyskusji w sieci.

Na Zyxist.com panuje swoboda wyrażania opinii oraz krytyki pod dowolnym adresem. Jedyny warunek: musi być ona kulturalna i rzeczowa. Na chamstwo, prostactwo lub jawne obrażanie kogokolwiek nie ma tu miejsca i takie komentarze są bardzo szybko usuwane. Jeśli zamierzasz polemizować z treścią wpisu, wpierw uważnie ją przeczytaj.

© Tomasz "Zyx" Jędrzejewski 2005 - 2008 | Wykonanych zapytań: 2 | Serwer wirtualny zapewnia