Vlákno názorů k článku Proč se má vyplatit vývoj pro Linux? od peter - Na zaklade vlastnych skusenosti s vyvojom desktopovych aplikacii...

  • Článek je starý, nové názory již nelze přidávat.
  • 26. 6. 2008 0:46

    peter (neregistrovaný)
    Na zaklade vlastnych skusenosti s vyvojom desktopovych aplikacii v QT a GTK si myslim, ze najviac vyvojarom chyba kompletny framework pre vyvoj aplikacii. Celkom sa mi pacili QT, ale skor by som dal prednost niecomu cistejsiemu z hladiska jazyka. Asi najviac by ma potesilo, keby Gnome a XFCE zjednotili Xfce Foundation Classes pre vyvoj desktopovych aplikacii. Vyvyjat desktopove plikacie v C je dost zdlhave.
  • 26. 6. 2008 8:33

    Petr (neregistrovaný)
    Na programování desktopových i serverových aplikací je třeba mít dneska co nejúčinnější nástroje a frameworky. Životní cyklus aplikací je stále kratší a psát něco v C se už nevyplatí (až na některé výjimky).
    Taková efektivita jako s .NET 3.5 není na linuxu zatím k dispozici.
    Není tedy divu, že se vyplatí tam vyvinout spíš serverové věci napsané v C a optimalizované na výkon, kde není tak silná vazba na API konkrétního OS.
    Linux je ale ideální právě na specializované hw jako třeba mobilní zařízení nebo superpočítače a gridy.
    Navíc koncept sdílených knihoven už je taky přežitý - dneska už nemusíme na disku šetřit místo v řádech megabajtů - je lepší se vyhnout nekompatibilitě a knihovny prostě nakopírovat přímo s aplikací, byť redundantně.
  • 26. 6. 2008 8:42

    Rejpal (neregistrovaný)
    "Taková efektivita jako s .NET 3.5 není na linuxu zatím k dispozici"

    Není? Qt 4.x nestačí? To je velice vymakaná věc na desktopové aplikace. Java také ne? Jinak bych si proti ".NET x.y" klidně troufnul na jakékoli platformě (včetně Windows) postavit Franz Allegro. (Až na tu cenu ovšem, nicméně to, že si ji můžou dovolit, něco naznačuje...) Možnost přes víkend si napsat vlastní LINQ nebo cokoli podobného, to je efektivita. :-) Člověk nemusí čekat, až mu to napíše Microsoft v další verzi za dva roky. Jedna švýcarská banka přechází z C++ na Haskell. Když je ".NET 3.5" tak efektivní, proč nepřešli na něj? Chtělo by to sundat brýle pro tunelové vidění... :-)

    "Navíc koncept sdílených knihoven už je taky přežitý - dneska už nemusíme na disku šetřit místo v řádech megabajtů - je lepší se vyhnout nekompatibilitě a knihovny prostě nakopírovat přímo s aplikací, byť redundantně."

    Zařídí-li dodavatel aplikace včasné updaty, proč ne. To už je jeho věc. Ale objem updatů pak nechci vidět. :-)
  • 26. 6. 2008 12:41

    Stanislav Brabec
    "Navíc koncept sdílených knihoven už je taky přežitý - dneska už nemusíme na disku šetřit místo v řádech megabajtů - je lepší se vyhnout nekompatibilitě a knihovny prostě nakopírovat přímo s aplikací, byť redundantně." Jde i o šetření místa v paměti v řádu stovek megabajtů, nebo i gigabajtů. Podívejte se do výpisu paměti, a počet aplikací používající danou knihovnu vynásobte velikostí té knihovny a všech jejích závislostí. Schválně jsem si spočítal, kolik paměti by potřeboval můj desktop po opuštění „přežitého konceptu“ sdílených knihoven. Z 1GB jsem se dostal na 6GB.
  • 26. 6. 2008 13:11

    Rejpal (neregistrovaný)
    To je jasné. Ale u několika aplikací by to ještě překousnout šlo, hovoříme-li o takových věcech, jako je třeba Maple, Mathematica, střihový SW a podobně. Tam se dá čekat, že člověk s nějakými konkrétními nároky může počítat. Pod tvrzení, že by sdílené knihovny byly přežitek, se samozřejmě podepisovat nebudu. :-) U celého desktopu by po bylo asi peklo.

    Mimochodem, čím to zjišťuješ? Pmapem? :-)
  • 26. 6. 2008 13:39

    Stanislav Brabec
    Sečetl jsem položky virtuální paměti pro všechny procesy. Možná jsem trochu přestřelil, protože do této hodnoty je zahrnutá i naalokovaná, ale nenamapovaná paměť. Nicméně 115× naalokovaná glibc, 60× nalinkované X a libgnome, to už něco zabere.
  • 26. 6. 2008 15:28

    orphe (neregistrovaný)
    Myslím že jste se trochu spletli. I když aplikace používají sdílené knihovny stejně si každá alokuje paměť na dané vytvářené objekty znovu. V .NET jde spíše o strukturu dědění tříd která umožňuje programátorovi používat už předvytvořené třídy ve svém programu. Je škoda že takovéto promáklé množství tříd na Linuxu není. Tedy nevím o tom.
  • 27. 6. 2008 18:20

    bez přezdívky
    Interpretovanym GUI?:-) Java uz delsi dobu obsahuje GUI akcelerovane pres DX a OpenGL :-) Jenom to neni zapnute standardne na vsech konfiguracich (-Dsun.java2d.d3d=true pro Win na starsich JVM nez sun 6)
  • 26. 6. 2008 17:51

    Stanislav Brabec
    Nejde o objekty. Jde o vlastní kód sdílených knihoven, který stačí do paměti natáhnout jen jednou.

    ---

    A to jsem ještě zapomněl poznamenat, že použitím statických systémových knihoven si ten, kdo to dělá, říká o velký průšvih. Nikdo mu nezaručí, že knihovna ve verzi, kterou přilinkuje do aplikace, bude za pár let rozumět konfiguraci systému.

    Dostane se do ještě větších obtíží než těch, co tím chtěl vyřešit.

    Příklady:

    - staticky přilinkovaná verze fontconfig nerozumí formátu cache

    - staticky přilinkovaná gtk+ neobsahuje funkce folané v systémovém tématu

    - staticky přilinkovaná X knihovna nerozumí moderní mapě klávesnice

    - staticky přilinkovaná glibc nerozumí formátu locale
  • 27. 6. 2008 14:56

    Dan (neregistrovaný)
    Jaká banka přechází z C++ na Haskell? Proč? Kde lze najít podrobnosti?

    Banky nepoužívají C++ kvůli efektivitě programování (ta je mizerná :-), ale kvůli rychlosti. Nemluvím samozřejmě pouze o desktopu, ale především o serverových systémech.
  • 28. 6. 2008 4:32

    Rejpal (neregistrovaný)
    Hmm, možná jsem to formuloval špatně - věc se má tak, že původně měli VBA + C++ a teď přecházejí na Haskell a C++. Protože Haskell je (aspoň skrzevá GHC) pravděpodobně mnohem výkonnější než VBA, asi se dá čekat, že kódu v C++ nemusejí mít tolik (ostatně i podle Language Shootoutu na tom Haskell není až tak špatně ;-)). Myslím, že jsem našel k tomuhle našel vyjádření ještě někde, ale teď ho nemůžu najit. ;/ Kouknu po tom ještě.
  • 26. 6. 2008 10:20

    marfi (neregistrovaný)
    "Taková efektivita jako s .NET 3.5 není na linuxu zatím k dispozici."

    S tímto dost silným (a ve vašem příspěvku ničím nepodloženým) argumentem bych si dovolil nesouhlasit. Co Java? Je potřeba si uvědomit, že .NET je "alternativou" k Javě, a ne naopak. Také co se týká přenositelnosti (a o té tento článek také je), má Java velmi kvalitní a výkonné běhové prostředí pro široké spektrum platforem, což se u .NET říct nedá. Ano, je zde Mono a podobné portace, ale s běhovým prostředím Javy se to nedá srovnávat.

    "Není tedy divu, že se vyplatí tam vyvinout spíš serverové věci napsané v C a optimalizované na výkon, kde není tak silná vazba na API konkrétního OS."

    Především, chtělo by rozlišovat mezi C a C++. Je jasné, že vývoj v C/C++ je pomalejší než pomocí Javy nebo .NET (s využitím pro ně určených RAD IDE), ale malinko se zapomíná na existenci multiplatformních knihoven zapouzdřujících kompletní funkcionalitu OS napsaných v C++, které do značné míry vývoj zjednodušují. Navíc takto vytvořené aplikace mohou být optimalizovány na efektivní využití paměťi, či na rychlost. V některých případech (např. u wxWidgets) takto vytvořené aplikace používají nativní API hostujících OS, takže jsou na dané platformně k nerozeznání od aplikací, vytvořených přímo daný OS (na Win se využívá Win32API, na Linuxu GTK, apod...).

    Je pravda, že současná doba přeje více "lepičům" programového kódu než programátorům, ale to je holt dáno tím, že se tlačí na co nejkratší dobu vývoje a ne na kvalitu vytvářené aplikace. Píšete, že díky tomu, že máme k dispozici kvanta operační paměti není třeba dbát na to, aby se aplikace chovaly hospodárdě. Ano, pokud budete mít takové aplikace v systému 2 - 3, možná si toho ani nevšimnete. Pokud ale bude takovým balastem zaneřáděný celý systém, bude to velký problém. Budiž nám výstrahou to, jak vypadá a jak se chová "nový", tvrdě protlačovaný OS jedné nejmenované SW společnosti z Redmondu. A navíc i tam už pochopili, že postavit vše na .NET by byla cesta do pekel a vrátili se k podpoře MFC a jazyka C++ (nehledě na to, že některé věci jinak než pomocí C/C++ prostě nenapíšete - např. programový kód spolupracující s HW).
  • 26. 6. 2008 12:03

    J (neregistrovaný)
    jj na .NET je sice pekne, ze se v tom da slepit "fungujici" vec za par minut, ale ty naroky jsou casto takove, ze neexistuje HW, ktery by to utahl.

    Pro porovnani, mam tu aplikaci lepenou v NET, ktera nedela nic jineho nez ze vezme XML data a vlozi je do SQL databaze nebo naopak. Kdyz zrovna nic nedela, tak si schroupne cca 250MB v RAM. Kdyz neco dela, tak klidne 10x vic a jeste pri tom zatizi na 80+% 3GHz CPU.

    Pokud se totez napipse v C/C++ tak to v pameti nezabira temer nic (kolem 5M + do 50M pri praci) a CPU ani nezaregistruje ze neco bezi.

    Alternativne, mame tu IS jehoz nova verze je v .NET. Jen rolovani seznamem dokladu v klidu zatizi na 100% libovolne CPU na kterem jsem to testoval. Uzasna vec, jiste to slepili rychle, ale pouzivat se to neda.
  • 26. 6. 2008 12:12

    Ludwo (neregistrovaný)
    "Pro porovnani, mam tu aplikaci lepenou v NET, ktera nedela nic jineho nez ze vezme XML data a vlozi je do SQL databaze nebo naopak. Kdyz zrovna nic nedela, tak si schroupne cca 250MB v RAM. Kdyz neco dela, tak klidne 10x vic a jeste pri tom zatizi na 80+% 3GHz CPU."

    Tak ta aplikacia je proste zle napisana. Osobne mi nerobi problem aplikacia, ktora zerie 100MB, ak ma na to dovod a ak mam 2GB ram...
  • 26. 6. 2008 12:40

    Rejpal (neregistrovaný)
    Jenže problém je, že k programování v .NETu se dneska dostanou lidi, co jsou schopný zplodit takovýhle věci. ;/ Kamarád se mi svěřil před pár dny s téměř totožným problémem. Některé zdánlivě "velké profi firmy" by radši svoje interní aplikace měly před světem tajit, aby si neutržily ostudu... ;/
  • 26. 6. 2008 12:16

    Zdeněk
    jo, ale kdyz clovek neco pise v C/C++ a nema hotove ani ň, nemuze pouzit vecicky, ktere sou pod GNU GPL, musi si to cele napsat znova - a to uz je pak rozdil jestli napsat program za den nebo za mesic...

    s HW naroky - myslim, ze Java je na tom podstatne hure. o tom co pisete sem v .NETu nikdy nenarazil (naroky na pamet a CPU)... jinak samozrejme optimalni pro vykon je C/C++ ale - viz prvni odstavec...
  • 26. 6. 2008 12:42

    erg (neregistrovaný)
    U Javy to nejaky ten patek taky neplati, zvlast v novejsich verzich, ktere standardne zapinaji platformni 2D akcelerace (byly tam i drive, ale z obavy z kompatibility byly vypnute).


    Jinak samozrejme ta nepouzitelnost .NETu ci Javy je naprosty nesmysl, kdyby to bylo skutecne tak, tak jaktoze je v techto jazycich napsano tolik pouzivanych programu :-) A jestli dana aplikace je o par procent pomalejsi, bere o par MB vic v pameti, to uz dneska opravdu vetsinu vyvojaru trapit nemusi (neco jineho je samozrejme vyvoj embedded zarizeni atd., bavim se zde o klasickych desktopovych/serverovych aplikaci) :-)

    Ale samozrejme, spatna aplikace se da slepit v .NET stejne dobre jako v C/C++.. Holt je treba si uvedomit, ze efektivita a rychlost aplikace v tkvi primarne v algoritmech, ne v tom, jestli se patlate s kodem v C nebo Jave :-)
  • 26. 6. 2008 13:10

    Zdeněk
    :) uznavam, ze to hodnoceni javy sem trosku prehnal - je to samozrejme lepsi ;) ale stale kdyz porovnam .NETi aplikaci s Javi, tak vidim rozdil.

    navic sem toho nazoru, je .NET ma proti Jave velkou vyhodu - MS uz mel pred sebou neco, co proslo nejakym vyvojem, mohl to postavit tak, aby se vyvaroval "chyb". v Jave je nyni spousta deprecated balastu, spoustu veci se resi zbytecne slozite a podobne...

    8) ale jinak souhlasim se vsim...
  • 26. 6. 2008 16:22

    Petr (neregistrovaný)
    Vidím, že o .NETu a zvlášť o verzi 3.5 toho předřečníci moc neví.
    Hibernate a podobné ORM nástroje jsou sice fajn, ale LINQ je integrovaný na úrovni jazyka.
    Tlusté UI v Javě - hrůza, měl jsem tu čest a to bylo naposled.
    U webu je to sice lepší, ale ne o moc. Motání zdrojových kódů do xml markupu, to je zvěrstvo, které ztěžuje ladění a testování.

    QT je asi o něco lepší než MFC, ale opět WCF je už daleko jinde.
  • 26. 6. 2008 16:40

    Saboter (neregistrovaný)
    A tady někdo asi moc neví o Javě.
    Předně nevím, co je podle vás tlusté UI. Jestli myslíte tlustého klienta... pak by mě zajímalo v čem máte problém.

    Hibernate tu byl o pár let dříve než nějaký LINQ, takže se jeho funkce daly používat již v době, kdy se o něčem takovém .NETU nejspíš ani nesnilo. To že není uvnitř jazyka považuji skoro za výhodu. Už vidím ty prasečárny kde se míchá práce s DB a business logika. Nějaké dělení aplikace na vrstvy to ale .NET programátor asi řešit nebude :) (ale ne, všichni nejsou takový, já vím). Ale když jste tak chytrý, vyzdvihněte mi konkrétně 5 výhod LINQ proti Hibernate. Mě bohatě stačí integrace Hibernate pluginem do vývojového prostředí, kterou si zkontroluji dotazy a mapování na DB.

    No a to poslední o webu a míchání zdrojáků do xml? Co jste to proboha viděl? Asi jste v nějaké jiné dimenzi než já.

    Vono od MS je všechno dál než cokoliv ostatní, viďte. Ono i to Visual Studio předběhlo celou konkurenci, že? Někdy se u komentářu opravdu bavím. Tohle je ten případ.
  • 26. 6. 2008 17:23

    Rejpal (neregistrovaný)
    A business logika nepracuje s databází? ;-) No LINQ se hlavně moc nesnaží si hrát na ORM vrstvu. Já osobně tyhle objektizační pokusy moc nechápu, buď používám relační algebru, nebo graf z objektů, ale smíchat to dohromady znamená v podstatě uříznout dobré vlastnosti obojího. Další dort pejska a kočičky... To už třeba ten LINQ, HaskellDB nebo CL-SQL/LOOP syntaxe, než si hrát na něco, co neexistuje. Nebo použít pořádnou objektovou databázi, jako AllegroCache.
  • 26. 6. 2008 23:01

    Saboter (neregistrovaný)
    S databází pracuje ve třívrstvém modelu datová vrstva (řekněme DAO). Takže v podstatě mohu říct: ne business logika nepracuje s databází. Pracuje s datovou vrstvou (která vůbec nemusí mířit jen do databáze). Proč zvolit třívrstvý model si najděte už sám.

    Ani se pak nedivím, že nechápete důvody pro vznik ORM.
    Při zběžném pohledu na AllegroCache - kdopak s tím asi bude umět pracovat? Kolik vývojářů a správců databáze. Navíc je to úplně zadarmo, že :)

    Ono totiž když mě naštve jeden databázový server, mohu s Hibernate snadno přejít na jiný. Nabídnout zákazníkům verzi na komerční databázi nebo nějaké otevřené variantě. Nikdo mi taky nebrání použít stále SQL a využít tak plně relační databázi. V čem podle vás spočívá to uříznutí dobrých vlastností obojího?

    LINQ v .NET není pejsek a kočička?
  • 26. 6. 2008 19:34

    Miloslav Ponkrác
    LINQ a Hibernate je obrovský rozdíl. Jsou to zcela jiné koncepty. LINQ není ORM. Navíc LINQ umí pracovat nejenom s SQL, ale také s XML, a řadou jiných zdrojů.

    Jinak ale souhlasím s tím, že nemíchání db vrstev do syntaxe jazyka je lepší. Mě osobně se zahušťování syntaxe jazyka způsobem ála C# nelíbí. Na druhé straně strohost Javy, která v syntaxi nemá skoro nic je druhý extrém, který se mi líbí ještě méně.
  • 26. 6. 2008 22:40

    Saboter (neregistrovaný)
    Uvidíme co přinese z hlediska syntase Java do budoucna. Já bych naopak nerad, aby toho přinesla tolik co .NET (například closures). Generiky by chtěly asi ještě dokopat.

    LINQ pro mě (ještě jsem ho moc nestudoval) toho moc nepřináší. Jak znám MS dobroty, tak to bude vhodné pro téměř školní příklady a na reálném projektu se to ukáže jako betonová zeď.
  • 26. 6. 2008 17:10

    Rejpal (neregistrovaný)
    "Hibernate a podobné ORM nástroje jsou sice fajn, ale LINQ je integrovaný na úrovni jazyka."

    A Common Lisp umožňuje napsat si LINQ za víkend, ostatně právě proto některé lispové knihovny pro přístup k databázím měly něco podobného už před lety. A co má být?
  • 27. 6. 2008 11:11

    anonymní
    K tomu motání zdrojových kódu do xml:
    V Jave jsou webové frameworky založené na MVC např. JSF.
    Ano v JSP lze motat kód a html dohromady, přesto se výslovně
    doporučuje využívat beany a jsp expression language.
  • 26. 6. 2008 16:24

    Saboter (neregistrovaný)
    A moc to MS nezvládl. Místo toho, aby věci co jsou dobré a zažité převzal (třeba slovo deprecated když už jste ho použil, vymyslí si vždy něco "zajímavého" vlastního - slovo obsolete). Balíky navržené v Javě mi vyhovují. Namespaces v .NET jsou běs. Partial class, metody označené jako virtual a override, neexistující povinnost odchycení výjimky a řada dalších problémů s data bindingem na které denně narážím mi jen cuchají nervy. O Visual Studiu 2008 a Team Foundation Server ani nemluvím. Je to zralé na kompletní přepis. Java má své problémy a opravdu některá api jsou zastaralá, ale celkově je pro mě použitelnější.

    Javě mohu navíc přičíst obrovské množství otevřených knihoven a velikost celé komunity. Ono si stačí porovnat výsledky hledání v googlu při řešení konkrétního problému. U .NETu často najdu MSDN, které je mnohdy opravdu nepoužitelné a pak pár žbleptů.
  • 26. 6. 2008 17:14

    Rejpal (neregistrovaný)
    Kdyby byl MS chytřejší, tak se poučí spíš ze Smalltalku než z Javy a pak nemusí řešit věci typu "exntension methods", což mi přijde jako šílený hack. Nakonec je z pěkného a čistého jazyka dort pejska a kočičky. ;/ Ale javoidní jazyky se líp prodávají managorům, to je ten problém. ;/
  • 26. 6. 2008 19:43

    Miloslav Ponkrác
    Jasně cítím u Vás tendenci "pojavovat" celý svět. Nezlobte se, ale on svět mimo Javy je trochu jiný.

    Slovo obsolete jsem dávno četl ve výpisech kompilátorů ještě před Microsoftem dvacet let nazpátek. Asi nejvíc to používaly staré kompilátory firmy Borland, ale slyšel jsem to daleko dříve. Slovo deprecated se objevilo o mnoho let později.

    V Javě neexsitují pravé namespaces, je tam tak silná vazba mezi class a namespaces, že Javista ani přirozený namespace v jazycích nikterak nesvázaný s třídami neocení a dostane panický strach z volnosti.

    Neexistující povinnost odchycení výjimky je v pořádku - je to tak správné a je to tak ve všech jazycích co znám, ovšem s výjimkou Javy. Tam mě to značně omezuje.

    Jinak z Vašeho příspěvku je cítit značná subjektivita. Jinak MSDN vůbec není špatné, a až něco podobného bude v Linuxu, bude hodně fajn a bude to pádný důvod firem zvětšit podporu Linuxu.
  • 26. 6. 2008 23:21

    Saboter (neregistrovaný)
    Javu mám opravdu rád. Tak ať je to klidně cítit. Svět mimo javy ale stále vnímám. Myslíte, že jsem přišel k programování až s Javou?

    Slovo obsolete bych klidně přežil, kdyby mi okamžite VS nenabídlo jako nápovědu k takové metodě, že je deprecated :). To slovo jsem použil jen jako příklad něčeho, co si mohl .NET z Javy vesele ponechat.

    V Javě neexistují pravé namespaces? Třída že je silně svázána s namespace? To příliš nechápu. Obdobou namespaces jsou v javě packages. Vazba třídy a namespace a třídy a package mi přijde naprosto identická. Pouze Java měla ten rozumný nápad, že balíku bude odpovídat adresář a třídě soubor a já jsem za to rád. Co je podle vás "pravý" namespace?

    Panický strach z volnosti jsem získal na projektech, kde pracuje více než 20 lidí, kteří dostali onu volnost.

    Neexistující povinnost výjimky bych tak snadno neoznačil jako za správnou vlastnost. Lidi jsou prostě líní výjímky odchytávat a něco s nimi dělat, že? Pokud vás to omezuje, používejte RuntimeException a nevykládejte pohádky o omezování. Jste asi prostě lajdák, kterého nebaví přemýšlet co s nastalou výjímkou. Pak prostě výjímky zrušte úplně a máte klid. Ale když to tak snadno smetete ze stolu, jak asi podle vás zjistíte v nějaké chabě dokumentované knihovně v .NETu jáká výjímka může z volání jedné metody na vás vyskočit? Mám celou knihovnu dekompilovat a lovit?

    MSDN má dobrou vlastnost - vše na jednom místě a pohromadě. Kvalita informací však někdy kulhá a struktura dokumentů by si zasloužila překopat.
  • 26. 6. 2008 23:42

    Miloslav Ponkrác
    Je v pořádku mít něco rád, ale pokud to vede k nesnášenlivosti k čemukoli jinému, asi to není správné.

    Se slovem obsoleted a deprecated v podstatě už nevíte, co byste za mouchy našel.

    Já za nápad svázat namespace s adresářem a třídu se souborem opravdu za dobrý nepovažuji, nelíbí se mi, a jsem rád, že Java v tomto zůstalo osamocena. Asi není náhoda, že toto nepřevzal žádný jiný programovací jazyk - a i to o něčem svědčí - co si o tom myslí "nejavovský svět".

    Panický strach z volnosti jste získal na projektu 20 lidí - jenže projekt 20 lidí musí mít pravidla, zatímco projekt jednoho dvou lidí zase může být volnější. Nepřipadá mi správné začít projekt 20 lidí nadměrnou volností bez pravidel, a zase není správné projekt jednoho člověka začít nadměrnou sešněrovaností. Pokud jste to takto dělal, pak Váš strach chápu.

    Ohledně chytání výjimek - to mě na Javě strašně štvalo. Ano, přesně k tomu jsem došel, vše jsem odvozoval od RuntimeException, a jenom proto, abych obešel byrokracii Javy - tudíž jsem se dostal do stavu, kdy vlastně nebylo potřeba nic. Vlk se nažral, ale pravidlo Javy bylo obejiti = závěr: je úplně zbytečné a k ničemu kromě otravování v Javě neslouží.

    Výjimky se ignorovat nedají, když jí neošetříte, probublá a ukončí program. To udělají i ty RuntimeException výjimky v Javě. A nevylovíte ze zdrojáku nic stejně jako v tom .NETu. Takže tak moc 100%ní to není, tak přestaňte spílat do lajdáků. Já jsem jenom praktický člověk a mám rád funkční věci, ne zbytečnou byrokracii, která je na pendrek.

    Od toho jak funguje metoda je DOKUMENTACE. Znovu pro Vás opakuji pro Vás neznámé slovo: DOKUMENTACE. Bez dokumentace se nedozvíte řadu jiných pro Vás podstattných věcí, třeba co ta metoda dělá, a co zaručuje, že bude dělat v budoucnu, jaké vstupní parametry jsou přípustné, za jakých podmínek metoda funguje (například je thread safe, jak moc rychlá je, atd. atd.). Takže Vaše dojemná snaha vše vyčíst z prototypu metoda je sice hezká, ale neskončí úspěchem. Znovu připomínám to tajemné slovo, které byste měl brát na zřetel: DOKUMENTACE.
  • 27. 6. 2008 2:26

    Sten (neregistrovaný)
    Já za nápad svázat namespace s adresářem a třídu se souborem opravdu za dobrý nepovažuji, nelíbí se mi, a jsem rád, že Java v tomto zůstalo osamocena. Asi není náhoda, že toto nepřevzal žádný jiný programovací jazyk - a i to o něčem svědčí - co si o tom myslí "nejavovský svět".

    Velmi podobné principy (i když trochu volnější) má i např. Python a spousta programátorů je dodržuje i pokud to není nucené jazykem (např. Qt a na něm postavené KDE, Gtk+ a GNOME a tak dále a tak dále). Java v tomhle rozhodně není sama, i když je trochu extrémní. Navíc takové řešení velmi usnadňuje hledání problému: pokud potřebujete najít definici nějaké třídy, ať už kvůli dokumentaci (slušný programátor napíše u definice Doxygen nebo podobnou dokumentaci) nebo importu (includování), víte přesně, kde se nachází a nemusíte mít kvůli tomu spuštěné žádné IDE nebo spouštět hledání.

  • 27. 6. 2008 2:39

    anonymní
    "Velmi podobné principy (i když trochu volnější) má i např. Python"

    Ano, asi tak 30x svobodnější oproti Javě. Tak svázané a osekané možnosti při namespace prostě jako v Javě nenajdete. Nikdo, naprosto žádný tvůrce jakéhokoli jazyka, ani komunita kolem nich uchopení namespace ve stylu Javě neshledalo k ničemu užitečným.

    Vše ostatní co píšete je jenom z nouze ctnost - obhajoba něčeho, co jinde nikdy neobstálo. Java je v tomto rozhodně totálně sama. Naprosto.
  • 27. 6. 2008 4:00

    Abraxis (neregistrovaný)
    A co ti na tom proboha vadi? Vzdyt je to naprosto postacujici "vyjadrovani schopnost" - typicky mas namespace typu treba "com.firma.projekt.major-verze.trida", coz staci pro 99.9% vsech projektu ;-)
  • 27. 6. 2008 4:40

    Sten (neregistrovaný)
    Vše ostatní co píšete je jenom z nouze ctnost - obhajoba něčeho, co jinde nikdy neobstálo.

    Netvrdil bych o systému, který ač není vyžadován jazykem, se přesto běžně používá, že neobstál.

  • 27. 6. 2008 7:51

    Saboter (neregistrovaný)
    Píšete osekané možnosti. Jaké jsou tedy možnosti Pythonu při práci s namespaces a jaké je praktické využití? Zatím to vídím tak, že Java má pravidla, která mi neubírají možnosti. Jestli vidím v Javě v něčem problém, tak je to hierarchie (nebo spíš neexistence hierarchie) v balících. Ale to není o svázání balíku s adresářem.
  • 27. 6. 2008 7:41

    Saboter (neregistrovaný)
    Nesnášenlivost? Tu máte asi vy proti Javě. Jediné po čem tu já střílím je .NET (resp. C#) což je něco velmi podobného Javě, jen z mého pohledu nepovedené (na to, že to vznikalo se zkušenostmi s fungováním Javy). Neříkám že nepoužitelné, ale s tím co jsem napsal v závorce je to nepovedené.

    Uznávám, že slovo obsolete jsem skutečně moc netrefil. ale za zbytkem si docela stojím.

    I to Visual Studio vám vloží třídu do namespace podle adresáře. To že potom při refactoringu, kdy se třída přesune mezi adresáři nezmění namespace já považuji za nehorázné a nekonzistentní. Ať tedy žádný namespace při vytváření třídy nedává vůbec.

    Sám si odporujete - volnost a pravidla. Tvůrci Javy pochopili, že je potřeba stanovit pravidla tak, aby už samotný jazyk pomáhal udržovat pořádek v projektu. Nechápu co vám může vadit na svázání package a adresáře. Když mi někdo řekne, že je to v balíku org.hlupák.trouba tak okamžitě vím, kam mám jít a kde třída bude. Nechápu v čem to někoho omezuje. Také jste napadal, že Java nemá pravé namespaces. A já stále čekám v čem to tedy spočívá. Oproti tomu, když v ostatních jazycích může třída ležet kde chce a mnohdy (.NET je opět černou ovcí) i ve více souborech (návrat k C++ ? ) tak opravdu děkuji, ale nechci. Nejdřív vám vadí pravidlo Javy, ale pak říkáte, že na projektu s 20 lidmi je potřeba stanovit pravidla. Java v některých směrech myslela na vývoj velkých projektů, ale podle vás je to špatně.

    Totéž platí o výjímkách. Sám říkáte, že je zpracování výjimek důležité. Java se k tomu postavila čelem a proto nutí člověka nad výjimkou přemýšlet. A protože existují výjimky, na které nelze vhodným způsobem reagovat, zavedla RuntimeException. Tím způsobem si můžete při tvorbě vlastní knihovny vybrat, jestli se budete chovat jako ostatní jazyky a nebudete vyžadovat odchycení výjimky nebo budete kapku přemýšlet a budete vyhazovat na vhodných místech výjimky, na které je potřeba reagovat.

    Asi se však zbytečně námáhám, protože vskutku budete lenoch. Java API na většině míst nevyhazuje RuntimeException (Tu jsem doporučil pouze vám jako lenochovi, který nehodlá k výjimkám přistupovat zodpovědně. Sám bych jí ve své knihovně používal pouze na místech k tomu určených) a proto se mi totéž co v .NETu nestane.

    Já slovo dokumentace znám, ale vy asi nežijete v reálném světě. Ony všechny knihovny mají ty dokumentace ve skvělém stavu. Java byla navrhována jako bezpečný jazyk (nesoudím na kolik se to povedlo), tak to prosím zkuste pochopit. Zpracování výjimky není pouze o dokumentaci. Já si to mohu v ní přečíst, ale to mě vůbec nenutí na ni reagovat. Java udělala krok dál, výjimku považuje za tak důležitou situaci v programu (což považují i ostatní jazyky, které výjimky mají - proto je zpracovávají jiným způsobem než běh celého programu), že nenechá programátora spoléhat na nějakou DOKUMENTACI DOKUMENTACI DOKUMENTACI.
  • 26. 6. 2008 12:55

    sgaba
    Navíc koncept sdílených knihoven už je taky přežitý - dneska už nemusíme na disku šetřit místo v řádech megabajtů - je lepší se vyhnout nekompatibilitě a knihovny prostě nakopírovat přímo s aplikací, byť redundantně.
    Vtip?
    Co zapomínáte že tak knihovna se načítá také do paměti a kuli tomu DLL vlastně vznikly. Ona se totiš zdílená knihovna načítá do paměti jen jednou a muže jí vižívat více aplikací...
  • 26. 6. 2008 16:07

    Petr (neregistrovaný)
    Co platí pro disk, platí i pro paměť. Navíc se sdílené knihovny a linky na ně uvádí jako bezpečnostní riziko.
  • 27. 6. 2008 3:48

    Sten (neregistrovaný)
    Navíc se sdílené knihovny a linky na ně uvádí jako bezpečnostní riziko.

    Fakt? Kde?

    Pokud máte na mysli, že chyba v jedné sdílené knihovně ohrozí všechny aplikace, tak naopak statická knihovna sice ohrožuje jen tu aplikaci, která ji používá, ale na druhou stranu má mnohem menší šanci, že bude opravena. A v reálném světě se už mnohokrát prokázalo, že první riziko je daleko nižší než riziko druhé; ve světě OSS je to dokonce několikanásobně více, než u Windows.

    Pokud máte na mysli, že sdílené knihovny poskytují bezpečnostní problémy kvůli preloudu a podobným vymoženostem, tak to je falešné riziko. Žádná taková díra nelze použít, pokud se nepoužila jiná díra, která ale musí být tak velká, že je už potom zbytečné takhle obcházet nějaké knihovny.

  • 27. 6. 2008 10:33

    sgaba
    Co platí pro disk, platí i pro paměť.

    To si už asi fakt děláte černej humor.
    A nebo že by začínalo pomalu šplouchat na maják. Co?