Vsadim se, ze jsi v Jave napsal tak maximalne Hello World a mozna ani to ne. A ze jsi ji videl tak nanejvys jako applet v MS JVM :-). Java neni vhodna na vsechno ale tam kde se pouziva je jeji vykon naprosto srovntelny s jinym resenim.
Pouzivame Javu na WWW serveru (jako vetsina bank a dalsich instituci) a s rychlosti rozhodne problemy nejsou. Na svem kompu (1GHz P4) mam kompletni vyvojove prostredi (IDE) NetBenas napsane v Jave s online syntax checking, on-line doplnovanim atd. atd. a slape to perfektne. Na stejnem kompu mi soucasne jede Apache, Tomcat (Java Servlet Engine), Postgres, KDE a dalsi a dalsi veci. Bez nejmensich problemu.
Takze klidek, nejdrive si v tom neco zkus nebo alespon precti.
"Java neni vhodna na vsechno ale tam kde se pouziva je jeji vykon naprosto srovntelny s jinym resenim."
Neni. Mozna po nafouknuti HW do mnohdy makabroznich rozmeru. Konkretne Tomcat a nad nim postavene aplikace se na normalnim HW oproti jinym resenim (Apache + mod_perl, trebas) vlaci nekdy az nesnesitelne.
Stejne tak NetBeans, my co nemame 1 GHz P4 a stovky MB RAM se muzeme na NetBeans divat jako na povedenou slideshow. Swing je co se vykonu tyka bumbrlicek jako vystrizeny ze zurnalu.
Java ma sve vyhody, ale vykon k nim rozhodne nepatri.
T.
To je dan za to, jak je java navrzena.
Vemte si priklad pristupu k nejakemu poli:
Pokazde se (za behu programu) zkontroluje zda index neni mimo pole => musi se sahnout nekam pro 2 adresy (zrejme do tabulky symbolu) a provest 2 porovnani + mozna nejake dalsi akce (snad nekecam) => z toho plyne priserna pomalost. Nemuzete to treba srovnavat treba z C, ktere je prakticky pouze citelnejsi asembler.
Mozna ze programy psane v Jave byvaji pomalejsi, ale zase s v tom rychlejc programuje ... takze je to pak zajimave hlavne pro firmy ... jim pak prijde levnejsi zaplatit 100000 za naprogramovani aplikace v Jave a 100000 za nadupany server nez 200000 za to same v necem rychlejsim a 30000 za levnejsi server :o)
A navenek je to oboji stejne rychly ...
No, dobre, ty cisla jsou dosti mimo a jen ilustrativni ... ale je fakt, ze kdyz se to takhle secte, tak pak Java jasne vyhrava nad assemblerem :O)
A ono taky zavisi na tom, jak je dotycny program napsany, i Jave jdou delat veci rychle....
No, nevim, jestli zrovna kontrola rozsahu poli je to, co dela Javu "priserne" pomalou. Ten proces se (troufam si odhadnout) vejde do 20 strojovych instrukci tedy u jmenovaneho procesoru cca 20 nanosekund (velmi zjednoduseno). To je myslim rozumna dan za skody ktere muze preteceny index napachat.
Jisteze bude aplikace napsana v C (skoro) vzdy rychlejsi. Ale v assembleru to pujde jeste rychleji. Jde o to urcit si pro danou apklikaci pomer bezpecnosti/citelnosti/rychlosti_vyvoje/vykonu. Jina to bude kdyz budu psat driver a jinak kdyz velky webovy projekt.
Prominte, ale Perl NENI srovnatelne reseni. Delal jsem v obojim takze si troufnu porovnavat. V soucasne dobe ma nas projekt (J2EE) tesne pod 1/2 milionu radku a to jen diky tomu, ze hojne vyuzivame existujici projekty (FreeMarker, Jakarta a dalsi). Neumim si predstavit, ze bych neco takoveho mohl nekdy napsat v Perlu. Teoreticky jiste ano, tak jako bych to mohl napsat v C nebo v shellu ale trvalo by to straslive dlouho.
V tom je rozdil mezi profesionalnim resenim a necim, co si zkousim doma nebo na nejakem stredne malem webu. Naklady na HW jsou oproti vyvoji takoveho systemu zanedbatelne.
A mimochodem nase aplikace jede na Resinu (Servlet engine) na AMD 1800+ 1GB RAM, je tam stredne velky provoz (asi 2000 hitu/hodinu), odezva je perfektni a server je 93,5% Idle.
Neni moc reseni pro rozsahle apklikace ale mezi nimi je Java kral :-).
NetBeans: souhlasim s vami, ze Java potrebuje hodne pameti. Pokud ji ma je rychlost vyborna. NetBeans je profesionalni vyvojovy nastroj a predpoklada se, ze 1GHz P4 a 1GB RAM neno pro profesionalni vyvoj nic neprekonatelneho :-).
Nechapu, proč by se Perl nehodil na něco většího? Vemte si projekt http://is.mendelu.cz/, ten je napsaný celý v Perlu. Není tam ani řádek jiného jazyk s výjimkou metadat v XML, SGML, HTML, uložených procedur v PL/SQL nebo stylů pro TeX. Pravda, má to jen 1/4 miliónu přádek kódu, ale co je to za měřítko rozsah programu v řádcích? To bychom museli napřed uvažovat, že schopnost Perlu vyjádřit myšlenku je tolikrát úspornější než schopnost Javy a to už je tenký led. Takže zkuste příště neuvádět takový nesmysl. A považuju ten projekt is.mendelu.cz za profesionální. Za 3 roky vznikl kompletní studijně-provozní webový informační systém školy, což není na jeho rozsah (asi 600 funkčních aplikací) příliš mnoho.
zaoberam sa tvorbou vacsich projektov (pre niekoho hooooodne velkych) projektov pre webove rozhranie a vsetko je to perl. java bola pre pomalost vylucena. vravim o stotisicoch az milionoch pageviews denne pri dynamickych strankach (vratane USRM a podobnych lahodok) a ziaden zvlastny hardware. to najsilnejsie co som mal kedy v rukach bol Sun Solaris 250 s loadavg pri maximalnej zatazi na 0.10 a to na tom nebezali len tie stranky v perli ale i databaza a mediaserver.
Jo, ale ma nesporne jine vyhody. Ostatne kdyby ne tezko by M$ navrhobal neco jako CKanal.
Napr. jista nejmenovana telekomunikacni firma ma uctovaci system v Jave. HW stal nesporne vic, nez by bylo treba pro jina reseni. Duvodem je bezpecnost Javy. Chyby se hledaji mnohem snaz a tudiz kdyz vas vypadek na nekolik minut stoji miliony, trochu vetsi investice do HW se bohate vyplati.
Když se píše něco rychlého, je nejlepší C/ASM. Když něco bezpečného, tak ADA. Když chci rychlý vývoj, pak Python, Ruby nebo eventuelně Perl. Všechny tyto jazyky jsou specializované na určitý typ aplikací. Java je takový slepenec vlatsností všech výše uvedených a nějak mi uniká cílová aplikační skupina.
Zlí jazykové tvrdí, že Java spojuje nevýhody všech ostatních programovacích jazyků :-)
Jistě, Java je použitelná téměř na všechno, ale téměř na všechno existuje i výkonnější/rychlejší/bezpečnější/snažší řešení.
Na Javě mi také vadí, že není free as speech. Tedy alespoň to předpokládám, když není standardní součástí distribucí. Jestli se pletu, prosím poučte mě.
Prenositelnost, bezpecnost, rychli vyvoj ti nestaci jako aplikacni domena jazyka Java? To je slusne na jeden jazyk ne? Ostatni maji po jednom. A java hned tri zajimave ne?
Proc by si ji vybrali vetsina z bank a instituci. Prave pro rychli vyvoj, bezpecnost. Prenositelnost je az na druhem miste, ale ma jednu vyhodu. Musi se drzet standardu a tedy zadne proprietalni reseni. Co vi si prat.
Vam se to zda jako pozbirani spatnych vlastnosti z ostatnich jazyku? Me to zni jako vyhody.
Jen pridam dalsi dobre vlastnosti: jednoduchost a cistota syntaxe a typova kontrola.
Java je jeden z nejhůře přenositelných běžně používaných programovacích jazyků -- překladače a interprety existují pouze pro některé platformy, rozumně použitelný svobodný pak pokud vím neexistuje žádný, takže například pro svobodný software je míra přenositelnosti nulová.
Mohl byste ten rychlý vývoj upřesnit? Moje zkušenost s programováním v Javě je, že člověk neustále píše, píše a píše (zbytečnosti) a že neustále musí vynalézat kolo.
Takže zbývá jen ta bezpečnost spouštění cizího kódu, což je vlastnost myslím stále ještě unikátní, a považoval bych to za přesně tu specializovanou oblast, kde může být použití Javy na místě.
Pokud vim, tak interpret pro Javu existuje pro Windows/Linux/Solaris od Sunu a Linux/AIX/OS X/OS2 od IBM. Napr. kompilator Jikes je open source (OSI Certified) (i pod FreeBSD a Mac OS), GCC je take open source a jeho GCJ kompiluje do nativniho kodu procesoru (zatim ma problemy se Swing).
Rychlost vyvoje v programovacim jazyku (a cele platforme) zavisi nejen od rychlosti psani kodu (jeho programovych konstrukci), ale take od jeho prehlednosti, moznosti dokumentace, jeho bezpecnosti (hlavne ukazatele), kvalitnim knihovnam. Dobre napsany kod (i kdyz upovidany) usetri mnoho prace a casu pri udrzbe softwaru, hledani chyb a pri praci v tymu. To co investujete na zacatku se vrati pozdeji a vicekrat. Nezamenujme pocet radek kodu od jeho vypovidaci hodnoty a jednoduchosti. Jednu vlastnost miluju: striktni typova kontrola. Tato chyba se napr. v C/C++ velice lehce prehledne (pokud to necte nekdo jiny)
int i = 5, j = 6;
...
if (i = j) { ... } // true vzdy, kdyz j != 0
Java to nedovoli prelozit (zachrani spoustu casu pri krokovani).
Porad se tu omyla Java je pomala. Ale to vam nikdo nebere ze je pomalejsi nez C, ale svymi vlastnosti je primarne urcena pro vyvoj rozsahlych aplikaci, prenositelnych a bezpecnych. Neni urcena na psani driveru, super rychlych vypoctu (i kdyz se objevuji i knihovny pro vedecke vypoctu a rychlost na tom neni zas tak spatne). Programuji take v C/C++ graficke algoritmy, tak vim o cem mluvim.
Porad se tady neco mluvi o vykonu. V dnesnim prostredi ale nejde o to, ze v nejakem jinem jazyku napisu stejnou vec o 20% rychleji, ale o to, ze ji napisu za polovinu casu a penez. Pokud je problem s vykonem, je nekdy lepsi koupit silnejsi server, nez dalsiho pul roku optimalizovat. Nerikam, ze se vykon da vzdy obetovat-zalezi na konkretni situaci a nasazeni. Nicmene v beznych inet projektech (informacni systemy, databaze...) me osobne zajima, za jak dlouho jsme schopni to napsat, jak drahe bude rozsirovani systemu a jeho udrzba a rovnez stabilita celeho reseni. A taky aby programatori byli spokojeni a jazyk jim jejich praci maximalne usnadnil.
Skutecne to muze byt jednoduse tim, ze to blbe napsali :). Jinak co se tyce "pomalosti", mam dalsi typ - IBM Update Connector, ktery aktualizuje sw pro Thinkpad, strasne pomaly program. Na druhou stranu je zase sw, ktery je v pohode - napriklad Netbeans je od verze 3.5 uz docela rychle.