V březnu loňského roku přestal být Redis svobodný. Společnost Redis Labs jej přelicencovala z licence BSD na nesvobodné licence Redis Source Available License (RSALv2) a Server Side Public License (SSPLv1). Hned o pár dní později vznikly svobodné forky Redisu s názvy Valkey a Redict. Dnes bylo oznámeno, že Redis je opět svobodný. S nejnovější verzí 8 je k dispozici také pod licencí AGPLv3.
Oficiální ceny Raspberry Pi Compute Modulů 4 klesly o 5 dolarů (4 GB varianty), respektive o 10 dolarů (8 GB varianty).
Byla vydána beta verze openSUSE Leap 16. Ve výchozím nastavení s novým instalátorem Agama.
Devadesátková hra Brány Skeldalu prošla portací a je dostupná na platformě Steam. Vyšel i parádní blog autora o portaci na moderní systémy a platformy včetně Linuxu.
Lidi dělají divné věci. Například spouští Linux v Excelu. Využít je emulátor RISC-V mini-rv32ima sestavený jako knihovna DLL, která je volaná z makra VBA (Visual Basic for Applications).
Revolut nabídne neomezený mobilní tarif za 12,50 eur (312 Kč). Aktuálně startuje ve Velké Británii a Německu.
Společnost Amazon miliardáře Jeffa Bezose vypustila na oběžnou dráhu první várku družic svého projektu Kuiper, který má z vesmíru poskytovat vysokorychlostní internetové připojení po celém světě a snažit se konkurovat nyní dominantnímu Starlinku nejbohatšího muže planety Elona Muska.
Poslední aktualizací začal model GPT-4o uživatelům příliš podlézat. OpenAI jej tak vrátila k předchozí verzi.
Google Chrome 136 byl prohlášen za stabilní. Nejnovější stabilní verze 136.0.7103.59 přináší řadu novinek z hlediska uživatelů i vývojářů. Podrobný přehled v poznámkách k vydání. Opraveno bylo 8 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.
Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Chtěl bych si rozšířit trochu znalosti a naučit se nějaký nový programovací jazyk. Ale jaký zvolit?
V poslední době mám hodně volného času.. Většinu dne jen tak sedím a brouzdám na netu a je úplný hřích nevyužít toho času k vyzkoušení (naučení) nějakého nového programovacího jazyka.
Zrovna když jsem odcházel od jedné firmy nastupovala tam éra .NETu, která se mi tedy tímto vyhla
Na vysoké se do nás pro změnu pokoušeli dostat Javu, která vzhledem k náročnosti na HW nepřipadá pravděpodobně v úvahu.
A zrovna teď jsem narazil na docela zajímavý multiplatformní jazyk "MONO," (otevřený .NET?) ke kterému ale marně hledám nějakou českou dokumentaci..
Zkrátka moje kritéria: Chtěl bych se naučit nějaký jazyk, který by se dal v součané době dobře využít při tvorbě on-line aplikací, stejně jako například pro nějakou desktopovou hříčku. Jinak vlastně nemám páru a do čeho mě navrtáte, to se pokusím nastudovat.
Tiskni
Sdílej:
S ohledem na kontext bych rekl ze myslel opravdu C/C# :)
Doporučoval bych naučit se nějaký, který ještě neznáš :)
Angličtinu ;)
(čekat u relativně nových projektů hned českou dokumentaci...)
+1
Bez znalosti angličtiny to proste nejde
(čekat u relativně nových projektů hned českou dokumentaci...)
Čekat u relativně nových projektů hned dokumentaci...
Nebo ze stejného (funkcionálního) soudku můžes zkusit třeba Erlang. Ten je vhodný zvlášť na síťování (viz Ejabberd, atd)
Případně si vytvořit svůj vlastní programovací jazyk
letrec*
, a bylo to tam zmíněné jen letmo jako nějaké cvičení. A nejsem si jistý, jestli tam jsou třeba makra (možná v páté kapitole, tu jsem ještě nečetl call/cc
... takove goto na steroidech
Tak kdybyste měli tip na učebnici programování, při které jako vedlejší efekti pohádkově zbohatnu, dejte mi, prosím vědět! Finanční odměna pro funkční tip!
A sakra! Proč mi o téhle chybě neřekl nikdo dřív!
uáááááááááááá!
Nebo třeba Haskell. Rozhodně je dobré si funkcionální jazyky aspoň oťukat.
A proč myslíte, že by to nešlo?
Je to nezvyklé, ale i takové aplikace existují. Jsou mimochodem někdy v jednočipových mikroprocesorech, kde je vyžadován nějaký webový výstup. Programování v asm pak umožňuje použít levnějšího švába.
Ale jinak – pokud byste se pohyboval v asm kruzích, zjistil byste co vše se v asm dělá.
A můj osobní názor je, aniž bych Objective C upíral jeho místo na slunci je, že jsem rád, že tento jazyk je v ústraní (pokud je člověk mimo Apple svět). Nemyslím si, že je to taková paráda. A dobré IDE se dá postavit nad jakýmkoli jazykem, to není ani tak věc jazyka samotného.
A mít tak ještě grafický návrhář pro web podobný Interface Builderu.nib2cib: Use Interface Builder to design your Ajax apps
ja spis jiz dlouhou dobu premyslim jake drogy brali ti jenz objective-c navrhli... nejspise budou velmi podobne tem jenz berou lidi jimz se objective-c libi
Proč vy židé vždycky odpovídáte na otázku otázkou?
A proč bychom měli odpovídat jinak?
Python (na desktop s PyGtk).
Ale je jedno, co se naučíš, třeba ten Ocaml (nebo Haskell), hlavně se do něčeho pusť. Python je dobrý v tom, že je hezký, elegantní, prakticky a reálně opravdu použitelný.
Na vysoké se do nás pro změnu pokoušeli dostat Javu, která vzhledem k náročnosti na HW nepřipadá pravděpodobně v úvahu.
Především tisíckrát napiš: "Nebudu šírit bludy o Javě!" a můžeš to rovnou naprogramovat jako cyklus. Třeba právě v té Javě, kterou tímto vřele doporučuji.
No, ono je potřeba tu Javu mít v kontextu...
Když člověk používá nějakou grafickou aplikaci v Javě, tak ta aplikace prostě je (bývá) "pomalejší" (a tím myslím "na první pohled viditelně") než srovnatelná aplikace třeba v C. Týká se to hlavně rychlosti náběhu aplikace a množství potřebné RAM. Na druhou stranu, Java (platforma Java) není jediná "pomalá" technologie -- např. .NET ji v tomto "skvěle" konkuruje. A když půjdeme ještě dále, tak ani technologie typu Python nejsou takovou výhrou...
Druhou věcí je, že někdy výhody platformy Java výrazně převáží nevýhody. To se týká třeba nějakých velmi speciálních grafických aplikací (typicky určených do firemního prostředí), jejichž základním požadavkem je přenositelnost (např. mezi unixovými systémy a Microsoft Windows). Nebo to může být např. nějaká věc z oblasti JEE (avšak pozor, aby výsledný produkt nebyl kanónem na vrabčí mládě, což se v především případě JEE může velmi lehko stát).
Nejsou dobré a špatné technologie, ale jen dobře a špatně použité technologie...
Koneckonců: naučit se Javu znamená co? Naučit se syntaxi, podmínky a cykly? Otázka půl hodiny. Nicméně člověk toho v reálu bude potřebovat "trošku víc". Jen učení se Java API (a hlavně zorientování se v něm) je otázka minimálně týdnů. Např. vývoj nějaké větší webové aplikace v JEE podle mě není téměř nikdy věcí jednoho člověka, zejména kvůli tomu, že každý ovládá něco. Někdo třeba výstupní část, další hlavní logiku aplikace, další se stará o databáze. Nemluvě o analyticích, koordinátorech (v případě většího týmu) a dalších lidech...
A jinak, autor by si měl ujasnit co chce. Ani nevíme, jaké jazyky již ovládá (nebo do jaké míry). Dále, Mono není programovací jazyk. Česká dokumentace u svobodného SW? Haha, buďmě rádi aspoň za tu (velmi často mizernou) anglickou...
Týká se to hlavně rychlosti náběhu aplikace a množství potřebné RAM.
Mno, nedávno jsem se koukl k vůli něčemu na htop
a vidím, že jeden můj prográmek (v javě) má po dvou dnech běhu zabraných 760MB v RAM (resp. to běhové prostředí). Tak jsem se koukl do jconsole
a opravdu, heap byl hodně velký. Popřemýšlel jsem samozřejmně nad leakama apod., to by asi udělal každý. No klepl jsem na Perform GC a heap spadla na 2MB. Za dva dny totiž nedošlo ani k jednomu automatickému GC, prostě to nebylo potřeba (volné paměti bylo ještě 6GB). No takže jsem dal zkusmo max heap na 4MB. Program jede, GC to dělá často, ale žere to málo paměti - teď je otázkou, co je lepší. GC každou minutu, nebo 800MB v RAM, když jí ještě šestinásobně víc zbývá? Takže asi tak.
Bylo to napsáno již mnohokrát, java nežere moc paměti. Ale chová se k ní tak, jako linux k ram. Každému tázajícímu se na otázku proč linux žere 100% RAM odpovídá, že ji používá jako cache. JVM paměť používá pro běh programu. Daleko rychleji (než klasický malloc) pak přidělí pamět pro nové objekty a jejich vytváření je pak rychlé (než by bylo pokud se dělal malloc pro každý nový). Pochopitelně, pokud někdo chce, může si nastavit JVM tak, aby používalo nezbytné minimum paměti.
No to je od nich hezke, ale ja bych moc radsi mel v pameti cache disku nez nejaky bordel od GC ktery uz nikdo nikdy nebude pouzivat.
Ja zadnou kristalovou kouli nepotrebuji kazdy normalni program pouziva prave tolik pameti kolik potrebuje. Pokud ne, je to regulerni chyba software, kterou je potreba opravit.
Oba pripady jsou samozrejme spatne. Tohle je znalost, kterou ma jedine a jedine tvurce programu. Zadny GC tohle nedokaze nijak odhadnout. Proto musi byt program naprogramovan tak aby fungoval rychle a nepotreboval na to 50x vic pameti nez realne vyuzije.
Jak kdy. Ale někdy se sakra vyplatí ten měsíc, a je takových případů více. Pokud odmyslíte desktop (kde je stejně čím dál méně příležitostí vydělat), a přesunete se do spotřební elektroniky, do palubních počítačů, do embedded zařízení, různých krabiček, atd.. – může být optimalizace ve výsledku velmi zisková.
Všechno chce své. Ale nedělejte si iluze, C++ má ještě jednu výhodu – nikdy neuděláte tak spolehlivý program, jako je možné v C++. V C++ se dostanete a korektně ošetříte a dokonce můžete pokračovat bez problémů i tehdy, když dochází paměť. Pro Javu, C#, Python, Ruby, LISP, Scheme, atd.. – je to situace fatální a program se prostě složí, nejde to korektně ošetřit. Totéž je třeba s docházející pamětí na zásobníku. Program v C++ má daleko více věcí pod kontrolou.
Jinak rozdíl ve spotřebě paměti a ve výkonu je v reálně napsaných programech mezi Javou a C/C++ je mnohem větší, než 40% pro pamět a 5% pro rychlost. Tolik bych zase Javě nefandil.
Ale tím nepíšu nic proti Javě – pro řadu případů je to nejlepší volba. Všechno chce své.
Jake optimalizace? Staci nebyt prase a naucit se programovat. A taky si treba ten program pred tim nez ho pustim do sveta alespon jednou spustit a zjistit jestli tech 500MB kterou si veme JVM neni zbytecne moc.
Pokud ovšem dá program možnost to odswapovat. On stačí jediný využitý bajt ve stránce a odswapovat nemožno. A dynamická alokace většinou rozesype data hodně nerovnoměrně, takže zase tak růžové to nebude. Takže se klidně může stát, že programu stačí desetina paměti, než alokuje, ale jako na potvoru zrovna všechny používané pointery míří skoro do všech stránek – takže swapování ničemu moc nepomůže (a není to tak častý případ, proto také dynamická alokace paměti hodně rozhoduje i o efektivitě).
Java se snaží GC nepouštět, a klidně Vám GC nepustí týden.
GC má totiž značné, přímo kruté nevýhody. První věc je, že zastaví celý program – funkčnost GC vyžaduje zastavený program, zastavené všechny thready a ještě všechny thready zaparkované v tzv. bezpečných bodech. Pro programy, které třeba každou setinu sekundy něco sledují a nesmí vypadnout, je puštění GC tragické, proto často GC zakazují úplně.
Druhá věc je, že řada činností GC se děje souběžně s během programu a nějakou aktivitu také vyžaduje, takže de facto snižuje výkon.
V zásadě je to jenom o tom, že každý algoritmus je možné zrychlit za cenu nehorázného plýtvání pamětí – a Java se dala přesně touhle cestou.
funkčnost GC vyžaduje zastavený program,uz jsem vam jednou rikal, ze to staci jenom na mark fazi (ktera navic muze bezet paralelne)
zastavené všechny thready a ještě všechny thready zaparkované v tzv. bezpečných bodech.a to je problem? na soucasnych pocitacich (max. 2-4 jadra) stejne vetsina vlaken spi (protoze nemaji cpu na kterem by bezely) a zastavit je neni zase takovy problem.
Pro programy, které třeba každou setinu sekundy něco sledují a nesmí vypadnout, je puštění GC tragické, proto často GC zakazují úplně.a tento nesmysl jste nasel zase kde? RT aplikace jsou velice specificke... a resi se jinak... muzete mi ukazat, kde se vypina GC, aby se dosahlo RT vlastnosti?!
Druhá věc je, že řada činností GC se děje souběžně s během programu a nějakou aktivitu také vyžaduje, takže de facto snižuje výkon.dival jste se nekdy do vnitrnosti beznych alokatoru? to byste se divil, kolik se provede ,,zbytecneho'' kodu a tak snizuje vykon...
Java se snaží GC nepouštět, a klidně Vám GC nepustí týden.Ano, pokud neběží program, JVM se nesnaží pouštět ani GC
GC má totiž značné, přímo kruté nevýhody. První věc je, že zastaví celý program – funkčnost GC vyžaduje zastavený program, zastavené všechny thready a ještě všechny thready zaparkované v tzv. bezpečných bodech.To jednoduše není pravda. Existuje řada (implementovaných!) algoritmů GC, které jsou schopné běžet současně s programem (a zastavení celého programu vyžadují pouze v přesně definovaných situacích, které zahrnují řádově jednotky procent doby, po kterou GC běží, tedy řádově nejvýš desítky milisekund) a u kterých dokonce lze nastavovat nejvyšší povolenou dobu pauzy, běhu GC a podobně. Pro soft realtime použití docela dobře akceptovatelné.
Pro programy, které třeba každou setinu sekundy něco sledují a nesmí vypadnout, je puštění GC tragické, proto často GC zakazují úplně.Proto také realtime Java disponuje možnostmi ruční správy paměti. Ale víc o tom nevím, nezajímal jsem se o to. Kromě toho existují knihovny navržené právě pro realtime použití (Javolution třeba).
Druhá věc je, že řada činností GC se děje souběžně s během programu a nějakou aktivitu také vyžaduje, takže de facto snižuje výkon.Což je přesně tvrzení, o kterém si myslím, že odporuje větě "zastaví celý program"
V zásadě je to jenom o tom, že každý algoritmus je možné zrychlit za cenu nehorázného plýtvání pamětí – a Java se dala přesně touhle cestou.První věta je samozřejmě pravdivá, ale tou druhou částí si nejsem úplně jistý. Jo, Java má určitě významný overhead pokud jde o paměť, ale jestli je nehorázný? Netroufám si být tak jednoznačný. Java zvětšuje velikost heapu vždycky na dvojnásobek, což si myslím, že u běžných desktopových programů se neprojevuje nijak špatně (defaultní maximální velikost heapu je tuším 64 MB) a pro specializované věci (serverové aplikace) to nevadí. Je zcela zřejmé, že v jazycích nižší úrovně je možné napsat paměťově i časově úspornější software. Ale nepovažuju za správnou argumentaci, že Java je v tomto horší o celé řády, dnešní situace tomu prostě neodpovídá.
To jednoduše není pravda. Existuje řada (implementovaných!) algoritmů GC, které jsou schopné běžet současně s programem (a zastavení celého programu vyžadují pouze v přesně definovaných situacích, které zahrnují řádově jednotky procent doby, po kterou GC běží, tedy řádově nejvýš desítky milisekund) a u kterých dokonce lze nastavovat nejvyšší povolenou dobu pauzy, běhu GC a podobně. Pro soft realtime použití docela dobře akceptovatelné.
Takže vlastně mi dáváte za pravdu, že je potřeba zastavit program. Já přeci nikde nepíšu, že je třeba celý algoritmus GC projet se zastaveným programem, dokonce se o tom i zmiňuji. Chce to pozorného čtenáře.
Což je přesně tvrzení, o kterém si myslím, že odporuje větě "zastaví celý program" Ano, paralelní GC běží v samostatném vlákně, takže teoreticky snižuje výkon tím, že na určitou dobu spustí jedno vlákno navíc. Prakticky bude mít na výkon vyšší vliv ta řada dalších procesů v systému, nemyslíte?
Nemyslím, protože automatické GC vyžaduje v určitých momentech, aby všechny thready kromě GC threadu stály. Tomu se nikdy nevyhnete.
Je zcela zřejmé, že v jazycích nižší úrovně je možné napsat paměťově i časově úspornější software. Ale nepovažuju za správnou argumentaci, že Java je v tomto horší o celé řády, dnešní situace tomu prostě neodpovídá.
Java je významně horší, daleko více, než o pár desítek procent. Znovu dodávám, že v řadě případů to může být nepodstatné, ale ve velké řadě případů to Javu může úplně odstavit.
Nemyslím, protože automatické GC vyžaduje v určitých momentech, aby všechny thready kromě GC threadu stály. Tomu se nikdy nevyhnete.Jednoduchý dotaz do Googlu a vidím, že existuje minimálně jeden algoritmus, kterému stačí postupně zastavovat jednotlivá vlákna a nemusí všechna najednou. Je pravda, že v Javě zatím nic takového není, ale co není, může být. Vliv zastavení programu na jeho výkon bych nepřeceňoval. Ostatně garbage collectory už jsou s námi padesát let a po celou dobu jsou předmětem intenzivního vývoje. Ale nějakou studii na tohle téma bych si přečetl. Můžete něco doporučit?
Obcas bych rad potkal ty, kteri to nedelaji abych jim mohl udelat malou plastickou operaci tvare (moji pesti).
No treba v C++ by se free nemelo volat nikdy. Dokonce i delete a new by se melo pouzivat co nejmene. Stejne tak by se v C++ nemely pouzivat ani pointery. V "modernim" C++, by se mely pouzivat tovarny, automaticke pointery a kontenery(ne pole) - ted jsem to hrozne zjednodusil. Kdyz v C++ nebudete pouzivat pointery, tak vas pragram nebude mit memory leaky a nebude segfaultovat. C++ je neco uplne jineho nez C-cko s tridama.
Tento problem ma pomerne jednoduche, ale zatim neimplementovane reseni. Stacilo by, kdyby operacni system dokazal aplikaci pozadat, aby se zmirnila ve spotrebe pameti (napr. udelala GC), protoze jemu samotnemu dochazi pamet. A aby ta aplikace teto zadosti mohla vyhovet a ponekud zmirnit. Soucasne OS jsou psany za predpokladu, ze aplikace nebudou navzajem spolupracovat co se tyka ziskavani zdroju. Tohle by umoznilo spolupraci a tedy daleko lepsi alokaci zdroju.
Operační systém vychází z předpokladu, že zdroje daleko lépe dokáže použít pro své účely. A obvykle má tento předpoklad pravdu. Ve spolupráci s administrátorem, který některé konstanty nastaví je to téměř dokonalé.
Bohužel śám operační systém řídí zdroje na základě pohledu do křišťálové koule (tedy určitých heuristicky nastavených algoritmů), a není s to přesně říci, jaká bude potřeba paměti příští milisekundu, ani jestli jiná aplikace uvolní 3 GB paměti, nebo naopak bude chtít alokovat.
Každá aplikace má možnost si zjistit, kolik z její části je odswapováno a kolik je ve fyzické paměti, kdyby už chtěla spolupracovat. Takže operační systém tuto informaci dává.
S prvnimi dvema odstavci bych souhlasil.
S tim tretim ne. Operacni system tuto informaci nedava - korektne fungujici aplikace by nemela nejak pokoutne zjistovat, co operacni system dela s pameti, ale melo by na to existovat API, ktere by aplikaci umoznilo spolupracovat a volitelne se chovat slusne. Duvod, proc by to nemela zjistovat aplikace, kolik je na swapu a volne pameti je v tom, ze chovani aplikace by nemelo byt zavisle na tom, jake existuje okolni prostredi, podobne jako by nemelo byt zavisle na tom, kolik ma system CPU, jak ma rychly disk nebo kolik aplikaci prideli CPU. To uz by si pak kazda aplikace mohla implementovat vlastni OS.
Naopak, s tim API by to fungovalo opacne. System naznaci aplikaci, kolik by idealne mela spotrebovavat zdroju, a ta se tomu bud prizpusobi (pobezi pomaleji nebo omezeneji), nebo neprizpusobi, a v takovem pripade OS zasahne tvrdeji a prislusne zdroje ji napriklad neposkytne. Aplikace totiz nemuze vedet, v jakem prostredi bezi, jaka je jeji priorita vzhledem k ostatnim aplikacim, takze nemuze sama od sebe (bez rady od OS) rozhodnout, kolik by mela optimalne spotrebovavat zdroju.
Ale toto je zatim hudba velmi vzdalene budoucnosti, tedy, ze by aplikace byly schopne menit sve algoritmy (v zasade, jak spravne rika Heron, existuje urcita volba mezi rychlosti a spotrebou pameti) a obecnou strategii, jak moc spotrebovavat ten ktery zdroj na zaklade hintu od operacniho systemu. Patrne bude pro takovou technologii treba vyvinout nove programovaci techniky (rozhodne si nemyslim, ze by napr. stacilo to, co umi Java nebo jiny jazyk s GC).
vmware
a vlastně i hodně dalších serverových app. toto dělá. V momentě, kdy je paměti dostatek je to takový nenažraný budulínek a ve chvíli, kdy dochází, tak pamět pro OS uvolní. U JVM je toto dobře pozorovatelné i v jconsole
. I na grafech paměti to je vidět. V noci, když se spustí spousta zálohovacích skriptů jde spotřeba paměti nahoru, ale pak, až to všechno skončí, je volné paměti víc, než před začátkem zálohy. Přitom služby běží stále stejné.
Na druhou stranu mi není úplně jasné, jak bych jako programátor měl ošetřit hlášení od OS, že dochází paměť. Pominu-li, že to za mě řeší jvm, tak fakt nevím. Zahodit cache? No to ale situaci ještě zhorší, protože pak se prudce zvedne zátěž CPU nebo počet dotazu do DB (která si zase řekne o další paměť). Běžně naalokovanou paměť program vrací hned zpět, tady se ušetřit nedá (resp. to si řeší běhové prostředí) a pro datové struktury tu paměť zase potřebuje, zahození keší to ještě zhorší (no jak kdy). Takže toto řešení by bylo vlastně informace pro běhové prostředí (a programy, které si drží naalokovanou paměť pro nějaké budoucí použití), které mají naalokovanou paměť pro případ, že by ji app. někdy potřebovala. Ale v běžném programu se to tak stejně nedělá, takže zpravidla ani není co uvolňovat.
No, ja si uvedomuji, ze popisovane "kooperativni" spravovani zdroju je radove slozitejsi problem, nez nekooperativni, ktere pouzivaji OS dnes.
To, ze se pusti GC, je jedna vec. Co by jinak zchroustlo GC je zcela zjevne nepotrebne. Ale OS by skrze to API mohl vynutit GC cyklus i drive nez uplne dojde pamet, coz by mohlo byt prave z hlediska zatizeni CPU vyhodnejsi (napriklad by v tom momente bylo mozne vytizit CPU vice nez pozdeji, kdy by bezela konkurencni aplikace, ktera by tu pamet zrala).
A navic, jde mi o trochu neco dalsiho, u mnoha datovych struktur to vubec neni cernobile, ze ta pamet je potreba nebo neni. Napr. aplikace by v reakci na tu zadost operacniho systemu mohla upravit svoji cachovaci politiku a zmensit buffery, vyprazdnit ty stare nepotrebne veci treba jen z poloviny. Takze to je na otazku, jak by na to programator mel asi zareagovat. A pak by treba OS zjistil - a sakra, DB ted potrebuje prilis mnoho CPU, a vyslal by pozadavek opacnym smerem - pokud muzete snizit spotrebu CPU na ukor spotreby pameti, udelejte to.
Tohle fungje treba na AIXu. OS posle vsem aplikacim signal SIGDANGER a JVM spusti GC. Na linuxu se o tom uz nekolikrat diskutovalo, ale reseni se nikdo nedobral.
V tom případě se má OS chovat jako každý jiný normální program a neplýtvat pamětí pro diskovou keš, když ji nepotřebuje. Pokud pro vás OS není normální program, pak vězte, že aplikace může kolikrát vědět daleko lépe než OS, jaká data potřebuje mít nakešovaná a která ne
Mam takovy pocit ze absolutne netusite jak funguje strankovani, jinak si nedokazu vysvetlit tenhle blablol.
podle mne je správné, pokud si server drží druhou variantu souboru v paměti, pokud je jí dost volné. Jenže to je podle vás chyba, kterou je třeba opravit.
Ne, pak tu pamet samozrejme potrebuje ke sve cinnosti. Tady se bavime o necem uplne jinem. Bavime se o tom ze program, ktery potrebuje 2MB pameti (stabilne) bude mit po tydnu alokovany 1GB, protoze java proste neuzna za vhodne provest uvolneni pameti. Zcela trivialni memory leaking, ktery se ale maskuje jako GC.
Mam takovy pocit ze absolutne netusite jak funguje strankovani, jinak si nedokazu vysvetlit tenhle blablol.Ne, to vy považujete swap a kešování diskových bloků (kterému ještě chybné říkáte stránkování) za legitimní způsob využití paměti, ale jiné metody práce s pamětí, které mají třeba i stejný výsledek, považujete za jednoznačně chybné. Když už jste zmínil to stránkování – pokud JVM tu nevyužitou paměť nuluje, může na některých platformách teď nebo v budoucnosti celá ta nepotřebná alokovaná paměť představovat jediný ukazatel na začátek „vynulované paměti“. To je opravdu tragické plýtvání prostředky. Jistě, dá se vylepšovat JVM, aby dlouhodobě nepoužívanou paměť vracela, dá se vylepšovat OS, aby si uměl při nedostatku paměti říci programům, aby vrátily, co mohou postrádat. Ale taky každý, kdo provozuje jakoukoli aplikaci, která potřebuje nárazově řádově více paměti než „normálně“, umí nastavit parametry dostupné paměti RAM, swapu a limitů pro aplikaci (pokud to ta aplikace umožňuje, Sunovské JRE to umožňují), aby ta aplikace dobře fungovala. Pokud někdo provozují víc takovýchhle aplikací, jejichž špičky se navzájem nepřekrývají a mohou tak nějakou paměť sdílet, musí holt obětovat pár giga prostoru na disku pro swap. JVM původně nebyla pro takovýto druh provozu navržena, a asi je tak výjimečný, že se nevyplatí kvůli němu dělat nějaké optimalizace.
Ne, pak tu pamet samozrejme potrebuje ke sve cinnosti. Tady se bavime o necem uplne jinem. Bavime se o tom ze program, ktery potrebuje 2MB pameti (stabilne) bude mit po tydnu alokovany 1GB, protoze java proste neuzna za vhodne provest uvolneni pameti. Zcela trivialni memory leaking, ktery se ale maskuje jako GC.Kdo rozhoduje, jakou paměť program potřebuje ke své činnosti? Memory leak znamená neuvolněnou paměť, kterou by programátor chtěl uvolnit, kdyby o ní věděl. JVM tu paměť ale evidentně uvolňovat nechce. Dělení na chce/nechce dává smysl, protože to lze jednoznačně rozhodnout, dělení na potřebuje/nepotřebuje je ošemetné, protože to často rozhodnout nejde (příkladů už tady zaznělo několik).
Ne, to vy považujete swap a kešování diskových bloků (kterému ještě chybné říkáte stránkování) za legitimní způsob využití paměti, ale jiné metody práce s pamětí, které mají třeba i stejný výsledek, považujete za jednoznačně chybné.
Ja jsem rikal ze se v tom vubec nevyznate. Zjistete si co udela Linux kdyz dojde k vypadku stranky a pamet je plna vinou cache disku a co kdyz je plna diky JVM.
Ale taky každý, kdo provozuje jakoukoli aplikaci, která potřebuje nárazově řádově více paměti než „normálně“, umí nastavit parametry dostupné paměti RAM, swapu a limitů pro aplikaci (pokud to ta aplikace umožňuje, Sunovské JRE to umožňují), aby ta aplikace dobře fungovala.
Ja si muzu nastavit tak leda velky h.... Mam aplikaci, ktera si pri startu vyzere 500MB. Zmenit to nejde. Pustim podobnych aplikaci vic a mam po cele ramce a cely pocitac se vlece, protoze se mi vyswapovali dulezite veci na disk.
Kdo rozhoduje, jakou paměť program potřebuje ke své činnosti? Memory leak znamená neuvolněnou paměť, kterou by programátor chtěl uvolnit, kdyby o ní věděl. JVM tu paměť ale evidentně uvolňovat nechce. Dělení na chce/nechce dává smysl, protože to lze jednoznačně rozhodnout, dělení na potřebuje/nepotřebuje je ošemetné, protože to často rozhodnout nejde (příkladů už tady zaznělo několik).
Rozhoduje o tom programator a nemel by prenechavat toto rozhodnuti na GC a to jeste bez jakehokoliv nastaveni. Bohuzel presne takhle se chova bezny Java programator.
Ja jsem rikal ze se v tom vubec nevyznate. Zjistete si co udela Linux kdyz dojde k vypadku stranky a pamet je plna vinou cache disku a co kdyz je plna diky JVM.Když je paměť plná kvůli tomu, že ji má nějaký program alokovanou, zapíše se do swapu, čímž se to převede na předcházející případ (keš disku). Ovšem zapomněl jste napsat, kdy k takovému případu dojde. Jediný postup je následující: spustíte Java aplikaci, která provede nějakou činnost, na kterou je potřeba velké množství paměti (více jak polovinu dostupné RAM), ale aplikace běží dál a paměť již potřebovat nebude (zjistí se pohledem do křišťálové koule). Pak spustíte jinou aplikaci, která také potřebuje hodně paměti (také více jak polovinu dostupné RAM), takže systém musí sahnout do té paměti, kterou si předtím alokovala JVM, a její data jednou odswapovat na disk. Nevím, jak vám, ale mně ta hrozba odswapování nepoužívané paměti připadá jako rozumné riziko, když v drtivé většině případů lze předpokládat, že když aplikace jednou požadovala určité množství paměti, bude ji vyžadovat znova.
Ja si muzu nastavit tak leda velky h.... Mam aplikaci, ktera si pri startu vyzere 500MB. Zmenit to nejde. Pustim podobnych aplikaci vic a mam po cele ramce a cely pocitac se vlece, protoze se mi vyswapovali dulezite veci na disk.V tom případě změňte operační systém za takový, který důležité věci nechává v paměti.
Rozhoduje o tom programator a nemel by prenechavat toto rozhodnuti na GCV Javě o tom rozhoduje programátor -- pokud na nějaký objekt nevede reference, je to známka, že jej nechce používat, a GC tu paměť uvolní. Tolik k pohledu, kdy javovský program je onen "program" a JVM je správce paměti. Pak je zde druhý případ, kdy JVM je "program" a správce paměti je OS -- a v tomto případě programátoři JVM paměť evidentně uvolňovat nechtějí. Mimochodem, jak se chovají jiné virtuální stroje -- třeba VMware nebo VirtualBox? Vracejí hned všechnu paměť, kterou bezprostředně nepotřebuje jimi hostovaný program?
takže systém musí sahnout do té paměti, kterou si předtím alokovala JVM, a její data jednou odswapovat na disk.
Toto v praxi nenastane. JVM (co jsem vypozoroval) hlídá volnou systémovou paměť a pokud se mu zdá (opět křišťálová koule), že dochází, tak zavolá GC (kterému se jinak brání) a paměť uvolní. Takže pokud jsou v systému dva takové programy z tvého příkladu, tak k odswapování zpravidla nedojde, protože JVM paměť vrátí. Každopádně, jak správně píšeš, pokud k odswapování dojde, tak se odswapuje paměť, kterou jvm při nejbližším GC stejně prakticky celou zahodí, takže výkonností dopad tohoto swapu je pro ten program prakticky nulový.
Mimochodem, jak se chovají jiné virtuální stroje -- třeba VMware nebo VirtualBox? Vracejí hned všechnu paměť, kterou bezprostředně nepotřebuje jimi hostovaný program?
Jak který vmware. ESXi to řeší následovně: v běžném provozu přiděluje virtuálce tolik paměti, kolik reálně potřebuje a nic tedy nevrací. V případě, že se paměti nedostává, tak ESX zavolá vmware-tools
ve vybraných virtuálkách (hádáním z karet ), tento
vmware-tools
si vemze tolik paměti, kolik mu OS dá (címž dojde k odswapování ostatních programů v rámci toho virtuálního OS) a ESXi pak tuto paměť použije jinde. Pro ten virtuální OS je to (vmware-tools
) jen obyčejný program, který chce moc paměti, ale ESXi tuto paměť použije pro další virtuální stroje. Dělá to docela šikovně, pokud "nějak" (další křišťál), pozná, že ta odswapovaná virtuálka potřebuje paměť, tak to přes vmware-tools
zase uvolní. vmware (i server) umí sdílet paměť mezi virtuálkama (nějak, to jsem moc nezkoumal), takže zpravidla je spotřeba paměti nižší, než je aritmetický součet paměti přidělené virtuálkám (v praxi tedy o hodně nižší, protože ne všechny stroje potřebují tolik paměti, kolik mají). Toto je velmi rychlé, nepředstavujte si spousty minut čekání na swap a tak podobně, v praxi v momentě, kdy dostanete sms od nagiosu o nedostatku paměti, tak po přihlášení už ji ten stroj má zase zpět. Uživatel, který si prohlíží web z toho stroje toto ani nepozná.
Problém je, že operační systém běží na počítači jeden (virtualitu pomiňme), a proto je v pořádku, když se chová, jako by tam byl jeden.
Zato více programů, které se chovají jako operační systém a zabírají si podle toho paměť je už docela méně příjemné jednání. Mě obvykle na počítači, když pracuje běží několik desítek programů.
Jinak take it easy, neberte to jako útok proti Javě, nic proti ní nemám, ale aplikace v Javě chtějí poněkud lepší hw. Pokud máte nadupané dělo, je to jedno, a ani mě by to žíly netrhalo nicméně Java prostě tuhle větší rozežranost má.
Java není špatný jazyk, má své výhody, které mohou převážit její nevýhody.
Zato více programů, které se chovají jako operační systém a zabírají si podle toho paměť je už docela méně příjemné jednání. Mě obvykle na počítači, když pracuje běží několik desítek programů.
Jasně, tak toto je dáno (původním) určením javy. Na server, pro dlouhodobý provoz. Obvykle na serveru běží jen jedna výkonná aplikace, takže ať si vezme co potřebuje.
Pokud máte nadupané dělo, je to jedno, a ani mě by to žíly netrhalo nicméně Java prostě tuhle větší rozežranost má.
Tak prográmky v javě mi běží i ve virtuálkách s 256MB RAM a omezeným procesorem a na ještě slabších fyzických strojích. Takže s tím nadupaným HW, bych byl opatrnější.
Jasně, tak toto je dáno (původním) určením javy. Na server, pro dlouhodobý provoz.Lidi hrozně rychle zapomínají. Vyhledejte si The Java Language Environment: A White Paper, Sun Microsystems, May 1995, dozvíte se například, že Java is designed to support applications that will be deployed into heterogeneous networked environments. Já osobě ty hádky o Javě nechápu. Java má jediný průšvih: Swing. Vzdor všem optimalizacím (a kdyby někdo řekl, že Swing kreslí GUI řádově stejně rychle jako ostatní toolkity, jsem tomu i ochoten věřit) je uživatelský zážitek s ním přímo otřesný. Vyšší nároky na paměť už snad dneska lze ve většině případů pominout. Nemáte někdo zkušenosti s QtJambi?
760MB cache pro 2MB program?!
neprogramuju, ale tohle mi pripada jako hodne velka drzost ...
htop
to nic neznamená, když se tam paměť bude potřebovat, tak jvm spustí GC. Fakt v tom nevidím problém. Paměť není něco, co má být neustále volné. Paměť je prostě HW, který má být používán software a ne být v PC na okrasu.
Neni problem navrhnout test (typu vyres nejaky problem), ktery v jave vyjde klidne i 1000x hure nez v C, ale opacne se vam to nepodari.
No to není. Ale dokazuje to jedině jen neznalost toho, kdo ten test takto udělá (a toho, kdo mu takový výsledek sežere). Java se nehodí na programy s dobou běhu v desítkách ms, protože než se nastartuje JVM, tak to má nativní program už dávno hotové. Ale při dlouhodobém běhu, kdy JIT má už zoptimalizované všechno co se volá, je ta rychlost zcela srovnatelná.
Bohužel není. Stále se ještě v Javě nic rychlostně kritického nepíše, a to ani když to běží dlouhodobě. A to proto, že rychlostně srovnatelná je tak maximálně v syntetických testech.
Asi jsem se špatně vyjádřil. Ale tou náročností na HW jsem myslel stroj na kterém bych programoval (733 MHz, 386 MB RAM).
Nevychází tolik sw, aby mu to zabíralo tolik času. Zatím stačí úspěšně plnit databáze. Holt lidi málo programujou.
Vzhledem k výsledkům ankety se zdá, že takový projekt není potřeba. Proto aktuálně vložím čas do něčeho jinačího a projekt načasuji na "vhodnější" dobu.
Neni spis lepsi zacit nejaky projekt, vybrat nejvhodnejsi prostredek na takovy projekt a ucit se na nem, nez ucit se jen pro uceni (coz cloveka prestane brzy bavit a hlavne jeste driv zapomene).
Osobně si myslím, že anketa i rozhodování je postaveno špatně.
Co vlastně chceš dokázat? K čemu Ti ten jazyk bude?
Univerzální jazyk neexistuje, jazyk, ve kterém by se dobře a efektivně programovalo vše. Vždy bude v něčem skvělý a v jiném horší, než jiný jazyk.
Když to rozeberu – mono a potažmo tedy C# – manuály hledej u Microsoftí a Windowsí komunity, vychází jich spoustu. Silně doporučuji jako autora Jeffrey Richtera, ten chlap podle mě píše geniální knížky. Ale já osobně bych se tomu vyhnul díky silné vazbě na MS a divokému neřízenému vývoji. A mono je napůl stejně emulátor Windows behaviors.
Python – dobrá volba, ale časté změny syntaxe i rozhraní. Čas od času se připrav na to, že budeš přepisovat, viz poslední verze 3. Pokud máš nadbytek času a hrozí Ti ukousání nudou a chceš řešit tyhle problémy, je Python vynikající volba (stejně tak spolu s MS Office makrováním, které se také intenzívně mění pod rukama).
Ruby – nemám zkušenosti, ale jazyk je bohužel nakažen nenávistí japonského tvůrce k Unicode, a řeší se tam řetězce poněkud divně (jazyk neodstiňuje od bajtové a binární reprezentace řetězce, je povinnost se jí zabývat), dále neumí nativní thready, namísto toho má vlastní, takže výkon threadů ponechám na fantazii. Dále se tam vyskytují nekompatibility a změny v syntaxi jazyka podobně jako viz výše. Na rozdíl od Pythonu, PHP, je v ní minimum použitelných webových frameworků, známější prakticky jen Ruby on Rails.
Java – pro některé lidi je to Bůh a když řeknete cokoli proti Javě, je to horší, než když mu zabijete bratra. Takže informace o Javě jsou dosti tímto prodchnuté, a je třeba zapojit zdravý rozum a některé informace protřídit. Java není špatná, ale troufám si říci, že kromě enterprise záležitostí vždy existuje prostředek, se kterým snáze dosáhnete cíle. Na desktop aplikace určitě najdete technologie, kterým dosáhnete výsledek rychleji a jednodušeji. Na web je Java poněkud megalomanská, automaticky předpokládá, že děláte velký, nebo alespoň středně velký projekt – což pro velký projekt je samozřejmě výhoda. Ale na web to není jinak špatná volba.
Univerzální jazyk neexistuje, jazyk, ve kterém by se dobře a efektivně programovalo vše.
Ale existuje, je to C++. V tom se da delat uplne vsechno. Od embeded pres desktop, skriptovani az po web.
S dobrou knihovnou a po určitých zkušenostech v C++ ano.
Jenže C++ nemá dobrou knihovnu (pro šťouraly – Qt není C++ knihovna (viz moc) a je právně vadná, tedy omezená).
Jednu univerzalni urcite ne. Coz je jenom dobre.
Jenom pro zajimavost, proc ze by Qt nemelo byt C++ knihovnou?
Protože Qt používá speciální preprocessor z důvodů, že autoři se shlédli v Objective C.
Protože Qt nepoužívá téměř nic z C++, využívá max. pár procent možností C++, a to jsem ještě optimista.
Protože kromě využívání tříd a občasného sem tam fičury je to vlastně psané Céčkovým zpsobem a Céčkovými metodami (například vracení chyb návratovou hodnotou), nebo Objective C metodami (moc a jeho překlad některých fičur Qt).
No to je hezke, ale pak neni C++ knihovnou ani Boost. Docela zajimave pak je zamysleni zda je knihovnou pro nejaky jazyk knihovna, ktera je pro tento jazyk vytvorena, nebo zda je to knihovna ktera je v tomto jazyku naprogramovana.
Boost je C++ knihovnou, ale Boost je hlavně laboratoří, kde se zkouší co jde z C++ vymáčknout a co by bylo dobré mít v příštím standardu C++.
Boost je hlavně široce používanou enterprise C++ knihovnou.
Univerzální základní knihovna pro C++ by nebyla špatná. Bohužel standardní knihovna spoustu věcí neřeší, neřeší totiž skoro nic.
Proč by nemohla být ve standardu, nebo v jedné univerzální knihovně věci jako třídy pro datum, čas, thready, práce s velkými čísly, unicode stringem, a dalšími?
Vsechno tohle bude v C++0x a uz ted to je Boostu.
V C++0x nebude nic, co by se dalo nazvat dobrou univerzální knihovnou.
Tak zrovna kocne vyresny problem unicode v C++0x bude. Jen tak mimochodem pomoci locale se da s unicode pracovat relativne rozumne i ted.
To ano, ale to je prave ukol knihovny aby tohle odstranil. Datum a cas je v C++ uz ted pres locale, velmi dobra knihovna je v Boostu, thready jsou v Boostu a budou v C++0x. Velka cisla nevim (zatim jsem nepotreboval).
Protoze Miloslav Ponkrac se rozhodl vydat na krizovou vypravu proti Qt a umyslne uz roky siri lzi (protoze uz byl nekolikrat mnou upozornen na ruzne nespravnosti v tvrzenich o Qt vcetne odkazu na dukazy, tak dalsi opakovani jsou proste umyslne lzi). Qt je C++ knihovnou minimalne tak jako Gtk je C knihovnou a program vyuzivajici Qt jde prelozit jako C++ program bez problemu (plus minus bugy).Jenom pro zajimavost, proc ze by Qt nemelo byt C++ knihovnou?
Nemáte argumenty, tak se snažíte potopit diskutujícího? Jak ubohé.
Je snad lež, že Qt knihovna má právní omezení?
Je snad lež, že Qt není psána v čistém jazyku C++, ale vyžaduje moc preprocessor?
Je snad lež, že Qt vrací chybové kódy a ne výjimky?
Je snad lež, že Qt využívá maximálně pár procent z C++?
Qt bez preprocessoru nemůže být. Ok, v tom případě je i zdroják v Adě programem v C++, protože určitě ho lze přeložit bez problémů jako C++ ´´- stačí k tomu preprocessor, který převede Ada zdroják na C++ zdroják.
Mám. Už jsem to nimi několikrát zkoušel, ale nefungovalo to, protože bez ohledu na ně se to pořád opakuje. Jak ubohé.Nemáte argumenty, tak se snažíte potopit diskutujícího? Jak ubohé.
Ano, je to lež. Už jsem to tu minimálně jednou vysvětloval.Je snad lež, že Qt není psána v čistém jazyku C++, ale vyžaduje moc preprocessor?
Já nechápu, proč některé lidi tak strašně baví se tvářit moudře o něčem, o čem nic pořádně neví. Já s Qt dělám prakticky denně, dělám občas i věci přímo do Qt a dělal jsem i přímo změny pro moc. Vysvětlovat mi dokolečka, jak to funguje, a přitom ani nevědět základní věci, to je prostě drzost a já už na to nehodlám plýtvat časem. Tímto naposledy žádám, abyste přestal šířit svoje pomýlené představy o Qt.Qt bez preprocessoru nemůže být. Ok, v tom případě je i zdroják v Adě programem v C++, protože určitě ho lze přeložit bez problémů jako C++ ´´- stačí k tomu preprocessor, který převede Ada zdroják na C++ zdroják.
je právně vadná, tedy omezenáPěkný flamebait
Qt je licenčně omezená - tedy je právně omezená pro účel, kdy by měla být nazvána univerzální knihovnou.
Qt je pro mnoho projektů právně vadná.
Možná je to slovo vadná termínem vyvolávajícím trochu emoce, ale je to tak.
Knihovnu tak rozsáhlou a kvalitní, jako je Qt, vám nikdo zadarmo (jinak než pod GPL) prostě nedá.Nedá?
Lidé, kteří nechtějí právně závadné a omezené věci používají kvalitní a rozsáhlé knihovny, které jsou free. Například wxWidgets je velice pěkná knihovna.
> časté změny syntaxe i rozhraní
Tohle bude to poslední, co by tazatele trápilo...
> Java – pro některé lidi je to Bůh a když řeknete cokoli proti Javě, je to horší, než když mu zabijete bratra.
Což teprve říct rubistům něco proti Ruby!
Tohle bude to poslední, co by tazatele trápilo...
Zatím …
Což teprve říct rubistům něco proti Ruby!
A sakra, vidím, že jsem o něco přišel. S Rubysty přicházím do styku spíše statistickou chybou, takže jsem neměl čest.
Nekřivdíte tomu Pythonu trochu? Jistě, verze 3.0 je nekompatibilní, neběží v ní v podstatě žádný dvojkový program.
Ale to je první velká nekompatibilita po nějakých patnácti letech, ne? Nezažil jsem přechod z 1.x na 2.x, ale co jsem tak četl, tak tam žádné zezmětřesení nebylo. Takže přeháníte.
Z toho co pises se hodne nabizi nejaky skriptovaci jazyk. Problem je v tom, ze pokud neznas nejaky zakladni jazyk jakym je napriklad Cecko, dokaze studium takoveho dynamickeho jazyka docela trvale poskodit tvoje programatorske schopnosti.
Ze skriptovacich jazyku dnes vede jednoznacne Python (Perl nepocitam, to uz radsi ten brainfuck), nicmene mne osobne prijde hodne neprijmeny na cteni. Ruby na druhou stranu je takove trochu okrajove, ale zase se velmi prijemne cte. V obou muzes jednoduse delat desktopovy i webovy SW.
Hm, podivej se na devexpress.com a pak tu neco vykladej o C++ jako nej. jazyku pro desktop. V .NETu udelam fungujici desktop app (obecne) s minimem chyb 10x rychleji, nez ty v C++
Na vysoké se do nás pro změnu pokoušeli dostat Javu, která vzhledem k náročnosti na HW nepřipadá pravděpodobně v úvahu.1.) Javu jsem poprvé viděl a spouštěl na 486 a byla to verze 1.1. Počítám, že lidi bez tohoto zážitku nevědí, co je to pomalá Java ve skutečnosti je (i když snížit paměť na minimum a vypnout JIT by mohlo tohle taky slušně emulovat). Současná Java je rychlá obstojně, problém jsou zvýšení nároky na IO během nahrávání a paměťové nároky jsou obecně vyšší, než u nativních ekvivalentů. 2.) Pokud se ti nezdá Java, tak proč zkoušet .NET? .NET a Java je plus mínus to samé včetně nároků.
A zrovna teď jsem narazil na docela zajímavý multiplatformní jazyk "MONO," (otevřený .NET?) ke kterému ale marně hledám nějakou českou dokumentaci..
BEGINNING-OF-PROGRAM DEFINE turnright AS BEGIN turnleft turnleft turnleft END BEGINNING-OF-EXECUTION ITERATE 3 TIMES turnright turnoff END-OF-EXECUTION END-OF-PROGRAM
...to se tak někdo má, jezdit si šukat na Slovač za moje prachy...Co to?
Ze seznamu bych doporucil Python. Ja sam ho jiz ovladam a pouzivam.
Pres vanoce jsem se chtel naucit Haskell, ale nelibil se mi. Ale me zklamani netrvalo dlouho - narazil jsem na prednasku/knizku Practical Common Lisp, coz vypada slibneji, tak se ted ucim Common Lisp.
Tak zatím mě nejvíce nadchl ten Python... Vytvořít v něm "Hello World" je prostě úžasné
print "Hello, World!"
Chybí ti tam závorky. Musíš si pomalu zvykat.
No jak se to vezme
podle verze 2.5 je to:
print "Hello world"
Verze 3:
print ("Hello world")
A v najnovšej verzii pythonu to samozrejme nebude fungovať
sakra, neskoro
V nejnovější to bude:
print ["Hello world"]
puts "hello world"
zadny.
Dokud nevite, co chcete presne programovat, tak zadny jazyk. Analyza se da delat delat nastesti bez programovaciho jazyka a svet je usetren mnoha problemum......
Python nemusí být až tak náročnější, ale nemá dobrý interpretr. Teď budu trochu ironický – když autor Pythonu akorát překopává syntaxi, nemá čas udělat pořádný interpretr. Dynamické typování sice Python mírně znevýhodňuje, ale daleko více ho znevýhodňuje současný velmi primitivní interpretr. Nemá nic, než překlad do byte kódu a přímou interpretaci. Přičemž překlad do byte kódu není optimalizovaný, je prostě jen zparsovaný zdroják. Kdyby si někdo dal práci, myslím, že současný Python by šel radikálně zrychlit, ale to mu zase autor Pythonu hází klacky pod nohy jeho rozrýváním v době, kdy měl být Python už aspoň desetiletý stabilizovaný.
Nemyslim si, ze je to nejstastnejsi rada ... pokud programovani nerozumi, rozdily neoceni a spis z toho bude zmateny ...
Zacal bych s nejakym proceduralnim (objektovym) jazykem, ktere jsou na rozdil od tech ostatnich (funkcionalnich, napr.) i dobre pouzitelne pro realne aplikace (no flame please, muj nazor).
Programování bez Fortranu a Cobolu je jako dort bez kečupu a hořčice
Nauč se ActionScript 3, ten má perspektivu :)
Cetl jsi SICP? Proste zkus LISP, Scheme anebo Haskell. Bohuzel pak jiz skoro neni cesty zpet. ;)
kup si olejove barvy a stetce a uc sa radsi malovat