Co zpomaluje Javu? A co překlad do nativního kódu?

gll

Re:Co zpomaluje Javu? A co preklad do nativniho kodu?
« Odpověď #15 kdy: 12. 11. 2016, 12:56:42 »
Ano, to je v mnoha případech pravda, zejména u microbenchmarků (a ve značné části reálných případů to pravda není, zejména pokud už ten jazyk a nástroje nutné pro běh vytvořil někdo před vámi – jak ukazuje obliba mnohých jazyků jako Java, Python, JavaScript, PHP a mnohé další). Jenže o efektivitě vy jste nic nepsal. (A také by záleželo na tom, která efektivita vás zajímá – paměťová při běhu programu, doba běhu programu, celková náročnost na zdroje, efektivita vývoje…) Vy byste prostě z množiny všech možných hloupých i dobrých řešení náhodně vybral jedno pro každý implementační jazyk, a ta byste porovnal. Výsledek by ovšem byl zcela náhodný a nevypovídá vůbec o ničem. Nanejvýš ho nějaký mysteriózní tazatel použije ve svém dotazu, když se mu nebude chtít generovat náhodné číslo – kolikrát je něco rychlejší nebo pomalejší – jiným způsobem.

Vyber si libovolnou "reálnou" úlohu a pošli sem své řešení v Javě. Ostatní diskutující se pokusí napsat rychlejší řešení v jiném jazyku.


sss

Re:Co zpomaluje Javu? A co preklad do nativniho kodu?
« Odpověď #16 kdy: 12. 11. 2016, 13:23:45 »
což Java neumožňuje, pročež je řádově pomalejší. Už se to tu řešilo několikrát, kdysi dávno i s kódem, kterýžto byl důkazem, a naposledy tu jeden z mála inteligentních účastníků tohoto fóra s nekonečnou trpělivostí vysvětloval těm méně chápavým, proč tomu tak je (už nevím, jestli M.Prýmek nebo O.S.Nekola, ale to je fuk).
Nevyhrala to nahodou Java, lebo niekto v C++ zvolil horsi grafovy algoritmus?
Vyhrava lepsi algoritmus. A vo tom to je.

javaman ((

Re:Co zpomaluje Javu? A co preklad do nativniho kodu?
« Odpověď #17 kdy: 12. 11. 2016, 13:27:14 »
Jenže to nebyla dost inteligentní odpověď, tak se nepočítá ;D

zboj

  • *****
  • 1 507
    • Zobrazit profil
    • E-mail
Re:Co zpomaluje Javu? A co preklad do nativniho kodu?
« Odpověď #18 kdy: 12. 11. 2016, 13:39:14 »
což Java neumožňuje, pročež je řádově pomalejší. Už se to tu řešilo několikrát, kdysi dávno i s kódem, kterýžto byl důkazem, a naposledy tu jeden z mála inteligentních účastníků tohoto fóra s nekonečnou trpělivostí vysvětloval těm méně chápavým, proč tomu tak je (už nevím, jestli M.Prýmek nebo O.S.Nekola, ale to je fuk).
Nevyhrala to nahodou Java, lebo niekto v C++ zvolil horsi grafovy algoritmus?
Vyhrava lepsi algoritmus. A vo tom to je.
Ne, byl to stejný algoritmus (logicky), nějaký matematický výpočet nad vektory, nepamatuju si přesně detaily, ale ten kód někde mám, pamatuju si, že jsem to přepisovat ještě do Go a Swiftu. Java bumboys reagovali tím, že to není fér, protože Java neumí alokovat na zásobníku, což ovšem byla celá pointa zmiňovaná od začátku, takže vlastními slovy potvrdili, co ostatní říkali. Celé to má ještě více aspektů, jako běh při akutním nedostatku paměti nebo na ARM, ale i na amd64 s 64GB RAM to Java prostě nedá kvůli JVM.

Re:Co zpomaluje Javu? A co preklad do nativniho kodu?
« Odpověď #19 kdy: 12. 11. 2016, 13:40:25 »
Vyber si libovolnou "reálnou" úlohu a pošli sem své řešení v Javě. Ostatní diskutující se pokusí napsat rychlejší řešení v jiném jazyku.
To je dost hloupé zadání, nemyslíte? Je program, který denně používají tisíce lidí, dostatečně reálná úloha? Já bych řekl, že ano. Takže takové „řešení v Javě“ může být například běhové prostředí pro Groovy, Scalu, nebo Kotlin. Tato běhová prostředí shodou okolností zahrnují JVM. Bylo by fajn, kdyby někdo jen tak na základě komentáře na Rootu napsal rychlejší JVM, ale já považuji za velmi nepravděpodobné, že by se do toho někdo pustil.

Možná jste nemyslel jakoukoli úlohu, ale něco jednoduchého, implementaci nějakého algoritmu apod. Jenže tím už dost omezujete zadání a hlavně se vzdalujete reálnému světu, protože v něm se v drtivé většině nepoužívají jednoduché programy řešící jedinou úlohu, právě naopak, používají se komplexní programy.

Navíc jste zadání omezil jen na rychlost běhu programu, což je jen jedno možné kritérium, a také se moc nepotkává s reálným světem. Jindy může být důležitá paměťová náročnost, rychlost vývoje, možnost dalšího rozvoje programu, škálovatelnost. A obvykle to bude nějaká kombinace těchto požadavků.

Prostě je nesmyslné obecně srovnávat programovací jazyky nebo platformy. Navíc v reálném světě je to přesně opačně, nehledám, co bych naprogramoval v nějakém jazyce, ale mám nějaké zadání, a k němu hledám vhodný jazyk. Pokud mám nějakou úlohu, při které potřebuju vyždímat maximum z CPU, asi sáhnu po C nebo C++, pokud mne bude zajímat bezpečnost kódu, budu se zajímat o Go, Rust nebo Erlang, pokud budu psát webovou aplikaci běžící v prohlížeči, podívám se po JavaScriptu a jazycích, které se do něj kompilují nebo transpilují, pokud budu chtít integrovat spoustu různých komponent a služeb do nějaké komplexní aplikace, zvolím Javu nebo C#.


Re:Co zpomaluje Javu? A co preklad do nativniho kodu?
« Odpověď #20 kdy: 12. 11. 2016, 13:47:52 »
Ne, byl to stejný algoritmus (logicky), nějaký matematický výpočet nad vektory, nepamatuju si přesně detaily, ale ten kód někde mám, pamatuju si, že jsem to přepisovat ještě do Go a Swiftu. Java bumboys reagovali tím, že to není fér, protože Java neumí alokovat na zásobníku, což ovšem byla celá pointa zmiňovaná od začátku, takže vlastními slovy potvrdili, co ostatní říkali. Celé to má ještě více aspektů, jako běh při akutním nedostatku paměti nebo na ARM, ale i na amd64 s 64GB RAM to Java prostě nedá kvůli JVM.
Takže závěr byl, že na úlohy, pro které není Java vhodná, je nevhodné používat Javu. Což věděli všichni od začátku, jenom někdo (nevím, zda přímo Zboj) měl potřebu dokazovat to – složitě a iterováním přes několik neefektivních implementací v C.

gll

Re:Co zpomaluje Javu? A co preklad do nativniho kodu?
« Odpověď #21 kdy: 12. 11. 2016, 13:49:13 »
Vyber si libovolnou "reálnou" úlohu a pošli sem své řešení v Javě. Ostatní diskutující se pokusí napsat rychlejší řešení v jiném jazyku.
To je dost hloupé zadání, nemyslíte? Je program, který denně používají tisíce lidí, dostatečně reálná úloha? Já bych řekl, že ano. Takže takové „řešení v Javě“ může být například běhové prostředí pro Groovy, Scalu, nebo Kotlin. Tato běhová prostředí shodou okolností zahrnují JVM. Bylo by fajn, kdyby někdo jen tak na základě komentáře na Rootu napsal rychlejší JVM, ale já považuji za velmi nepravděpodobné, že by se do toho někdo pustil.

Možná jste nemyslel jakoukoli úlohu, ale něco jednoduchého, implementaci nějakého algoritmu apod. Jenže tím už dost omezujete zadání a hlavně se vzdalujete reálnému světu, protože v něm se v drtivé většině nepoužívají jednoduché programy řešící jedinou úlohu, právě naopak, používají se komplexní programy.

Navíc jste zadání omezil jen na rychlost běhu programu, což je jen jedno možné kritérium, a také se moc nepotkává s reálným světem. Jindy může být důležitá paměťová náročnost, rychlost vývoje, možnost dalšího rozvoje programu, škálovatelnost. A obvykle to bude nějaká kombinace těchto požadavků.

Prostě je nesmyslné obecně srovnávat programovací jazyky nebo platformy. Navíc v reálném světě je to přesně opačně, nehledám, co bych naprogramoval v nějakém jazyce, ale mám nějaké zadání, a k němu hledám vhodný jazyk. Pokud mám nějakou úlohu, při které potřebuju vyždímat maximum z CPU, asi sáhnu po C nebo C++, pokud mne bude zajímat bezpečnost kódu, budu se zajímat o Go, Rust nebo Erlang, pokud budu psát webovou aplikaci běžící v prohlížeči, podívám se po JavaScriptu a jazycích, které se do něj kompilují nebo transpilují, pokud budu chtít integrovat spoustu různých komponent a služeb do nějaké komplexní aplikace, zvolím Javu nebo C#.

Jediné možné objektivní srovnání je porovnání implementací stejné úlohy v různých jazycích. Vy zde stále uvádíte příklady softwaru napsaného v Javě, ke kterému neexistuje alternativní implementace. Jediná existující implementace bude logicky nejlepší.

javaman ((

Re:Co zpomaluje Javu? A co preklad do nativniho kodu?
« Odpověď #22 kdy: 12. 11. 2016, 13:51:55 »
Ne, byl to stejný algoritmus (logicky), nějaký matematický výpočet nad vektory, nepamatuju si přesně detaily, ale ten kód někde mám, pamatuju si, že jsem to přepisovat ještě do Go a Swiftu. Java bumboys reagovali tím, že to není fér, protože Java neumí alokovat na zásobníku, což ovšem byla celá pointa zmiňovaná od začátku, takže vlastními slovy potvrdili, co ostatní říkali. Celé to má ještě více aspektů, jako běh při akutním nedostatku paměti nebo na ARM, ale i na amd64 s 64GB RAM to Java prostě nedá kvůli JVM.
Takže závěr byl, že na úlohy, pro které není Java vhodná, je nevhodné používat Javu. Což věděli všichni od začátku, jenom někdo (nevím, zda přímo Zboj) měl potřebu dokazovat to – složitě a iterováním přes několik neefektivních implementací v C.

Kdo jiný. Vždy přijde s nějakou hovadinou a bez jakýchkoli důkazů to začne obhajovat. Pokud použiju špatný přístup, tak není moc s podivem, že to nefunguje. Čistě logicky, pokud je Java jen o kousek pomalejší než C/C++, tak tam žádný problém s výkonem nebude. Můžu zvolit přístup, kdy chci ukládat na zásobník a ještě pořád dělat GC, abych jako ukázal "reálný" svět, ale nikdo tomu asi moc neuvěří.

A jak se tu psalo. Asi těžko budu prodávat quicksort v krabici jako produkt.

Re:Co zpomaluje Javu? A co preklad do nativniho kodu?
« Odpověď #23 kdy: 12. 11. 2016, 14:01:31 »
Jediné možné objektivní srovnání je porovnání implementací stejné úlohy v různých jazycích.
To by platilo jenom tehdy, pokud by všechny porovnávané jazyky měly být pro nějakou úlohu stejně vhodné. Zrovna pro C a Javu takových úloh asi moc nebude, v případe C++ a Javy by nějaký průnik mohl existovat – ale zase to budou komplexní úlohy, které budete velmi těžko nějak porovnávat (rychlost běhu programu to nebude ani náhodou).

Vy zde stále uvádíte příklady softwaru napsaného v Javě, ke kterému neexistuje alternativní implementace. Jediná existující implementace bude logicky nejlepší.
Neexistuje k tomu alternativní implementace, protože každému soudnému člověku je jasné, že nedává smysl psát alternativní implementaci s pomocí nástroje, který je pro danou věc méně vhodný než současné řešení. Prostě jsou různé jazyky a platformy vhodné na různé věci. A když se to někde překrývá, je potřeba porovnávat to podle kritérií, která jsou důležitá pro tu danou úlohu.

dustin

Re:Co zpomaluje Javu? A co preklad do nativniho kodu?
« Odpověď #24 kdy: 12. 11. 2016, 14:03:34 »
V reálném světě je většinou součástí zadání běžnému programátorovi i jazyk. Pelmel všech možných jazyků v jednom větším projektu se dost špatně udržuje.

IMO není ve většině projektů, na kterých dělají čeští vývojáři, rychlost javy až tak podstatná. Daleko podstatnější bývá čistota kódu, udržovatelnost, rozšiřitelnost, rychlost uchopení projektu dalšími/novými lidmi. Mluvím o běžných byznys aplikacích, kterých si troufnu tvrdit je daleko nejvíce, takřka každá větší firma (a každá internetová) takové projekty má, obvykle interní pro své potřeby.

Kit

Re:Co zpomaluje Javu? A co preklad do nativniho kodu?
« Odpověď #25 kdy: 12. 11. 2016, 14:05:38 »
Jediné možné objektivní srovnání je porovnání implementací stejné úlohy v různých jazycích.
To by platilo jenom tehdy, pokud by všechny porovnávané jazyky měly být pro nějakou úlohu stejně vhodné. Zrovna pro C a Javu takových úloh asi moc nebude, v případe C++ a Javy by nějaký průnik mohl existovat – ale zase to budou komplexní úlohy, které budete velmi těžko nějak porovnávat (rychlost běhu programu to nebude ani náhodou).

Co třeba rychlost vývoje takového programu?

javaman ((

Re:Co zpomaluje Javu? A co preklad do nativniho kodu?
« Odpověď #26 kdy: 12. 11. 2016, 14:09:36 »
Koho zajímá rychlost vývoje? Přece neprodáváš prototypy.

Kit

Re:Co zpomaluje Javu? A co preklad do nativniho kodu?
« Odpověď #27 kdy: 12. 11. 2016, 14:15:33 »
Koho zajímá rychlost vývoje? Přece neprodáváš prototypy.

Zajímá to hlavně investora.

javaman ((

Re:Co zpomaluje Javu? A co preklad do nativniho kodu?
« Odpověď #28 kdy: 12. 11. 2016, 14:17:35 »
Jen toho hloupého. Vývoj je totiž to nejlevnější. Pokud chce nějaký shit rychle dostat na trh a pak je mu to jedno, tak v pohodě. Ale to nebude běžný přístup.

dustin

Re:Co zpomaluje Javu? A co preklad do nativniho kodu?
« Odpověď #29 kdy: 12. 11. 2016, 14:22:58 »
Jen toho hloupého.

Jistě, protože takový by ti nebyl ochoten platit stovky tisíc za kecy.

Rychlost vývoje je v dnešní době klíčová. Zadání se neustále mění a je potřeba na ně pružně reagovat. Divím se, že ty to ze své nelopatovské pozice nevidíš. Nebo že by nebyla až tak vysoká, jak se prsíš?