Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: anonym 18. 08. 2018, 16:02:11

Název: Existuje jazyk, ktery...
Přispěvatel: anonym 18. 08. 2018, 16:02:11
mi umozni z:

get("/muj/uri/template/{id}, MojeService::metoda, request, response) ||
post("/muj/uri/template/{id}, MojeService::metoda, request, response);

zobecnic parametry metody request a response do nadrazene funkce takto:

Router.route(request, response)
.get("/muj/uri/template/{id}, MojeService::metoda)
.post("/muj/uri/template/{id}, MojeService::metoda);

A to tak, ze to bude kompletne bez instanciovani novych objektu?

V Jave samozrejme 2. moznost lze udelat snadno, jedna se v podstate o stejny princim jakym funguji streamy, nicmene prinejmensim .route bude instanciovat novy objekt.

Jeste pripominam, pokud to neni uz zrejme, ze nelze priblem vyresit pouzitim stavove tridy, protoze aplikace je vicevlaknova.

***
Duvodem proc nechci vytvaret nove objkety je zbytecne horsi performance.

(PS: Jirsak ne)
Název: Re:Existuje jazyk, ktery...
Přispěvatel: Jirsák 18. 08. 2018, 16:06:08
Jirsáku, nebyBrnol tu podobný dotaz už o techto prazninách?
Název: Re:Existuje jazyk, ktery...
Přispěvatel: Rezervní Polská Kotace 18. 08. 2018, 16:32:45
Duvodem proc nechci vytvaret nove objkety je zbytecne horsi performance.

Kolik těch objektů řádově bude, že si myslíš, že by to mělo negativní vliv na výkon?

Buď jde o trolling ve stadiu pokusu, nebo dalšího lamu, který si myslí, že dělá příští Twitter/Google/eBay a přitom píše milióntý první CMS pro osobní blog nebo e-shop pro prodej pastiček na myši na nějakém maloměstě.

Tohle jde v klidu napsat i v jazycích Ponkrác++ nebo Jirsák EE.
Název: Re:Existuje jazyk, ktery...
Přispěvatel: Ondrej Nemecek 18. 08. 2018, 16:39:45
Výkonu bych se nebál, až budete řešil aplikace, kde by to vadilo, tak se už nebudete muset ptát na rootu  :)

Jinak nepomohl by náhodou pattern matching ála scala (https://docs.scala-lang.org/tour/pattern-matching.html)?
Název: Re:Existuje jazyk, ktery...
Přispěvatel: Zat 18. 08. 2018, 16:43:26
Asi jakýkoliv funkcionální jazyk.
Název: Re:Existuje jazyk, ktery...
Přispěvatel: mmm 18. 08. 2018, 18:16:58
Javascript.
Název: Re:Existuje jazyk, ktery...
Přispěvatel: anonym 18. 08. 2018, 18:38:57
Výkonu bych se nebál, až budete řešil aplikace, kde by to vadilo, tak se už nebudete muset ptát na rootu  :)

Jinak nepomohl by náhodou pattern matching ála scala (https://docs.scala-lang.org/tour/pattern-matching.html)?

ne nepomoh, ja se kurva  neptám na to, jak udělat HTTP router, ptám se, v jakém jazyce se dá provádět taková operace nad funkcema.
Název: Re:Existuje jazyk, ktery...
Přispěvatel: Honza 18. 08. 2018, 19:47:08
ptám se, v jakém jazyce se dá provádět taková operace nad funkcema.
ve kterémkoliv, pomíjím, že ten původní požadavek nedává smysl
Název: Re:Existuje jazyk, ktery...
Přispěvatel: kkt1 18. 08. 2018, 19:54:07
Takze: chces mit silenou performance proto se ptas na rootu.  ::) Podle me resis zbytecne jazyk, pokud chces to nejrychlejsi napis si to v assembleri.
Název: Re:Existuje jazyk, ktery...
Přispěvatel: anonym 18. 08. 2018, 19:59:29
Takze: chces mit silenou performance proto se ptas na rootu.  ::) Podle me resis zbytecne jazyk, pokud chces to nejrychlejsi napis si to v assembleri.

Já se ale na to neptám na rootu proto, aby mi odpovídal Kokot - nebo ty máš ten dojem?
Název: Re:Existuje jazyk, ktery...
Přispěvatel: anonym 18. 08. 2018, 20:04:32
ptám se, v jakém jazyce se dá provádět taková operace nad funkcema.
ve kterémkoliv, pomíjím, že ten původní požadavek nedává smysl

Smysl nedáváš ty už od dob, co jsi se jako nejblbejsi spermie převaloval v tatove ručníků.
Název: Re:Existuje jazyk, ktery...
Přispěvatel: kimec 18. 08. 2018, 21:32:10
mi umozni z:

get("/muj/uri/template/{id}, MojeService::metoda, request, response) ||
post("/muj/uri/template/{id}, MojeService::metoda, request, response);

zobecnic parametry metody request a response do nadrazene funkce takto:

Router.route(request, response)
.get("/muj/uri/template/{id}, MojeService::metoda)
.post("/muj/uri/template/{id}, MojeService::metoda);

A to tak, ze to bude kompletne bez instanciovani novych objektu?

V Jave samozrejme 2. moznost lze udelat snadno, jedna se v podstate o stejny princim jakym funguji streamy, nicmene prinejmensim .route bude instanciovat novy objekt.

Jeste pripominam, pokud to neni uz zrejme, ze nelze priblem vyresit pouzitim stavove tridy, protoze aplikace je vicevlaknova.

***
Duvodem proc nechci vytvaret nove objkety je zbytecne horsi performance.

(PS: Jirsak ne)
Kde presne si myslite, ze vo vasom priklade vznikaju nove objekty?
Method reference sa sprava ako lazy singleton - navyse sa po par prechodoch JITom pravdepodobne k volajucemu nainlinuje telo servisnej metody (pokial je rozumne kratka).
Avsak ak sa chcete vyhnut alokaciam novych objektov na horucej ceste, tak na to sa hodi LMAX Disruptor - nie nejaky "funkcionalny" framework.
Název: Re:Existuje jazyk, ktery...
Přispěvatel: anonym 18. 08. 2018, 22:17:36
mi umozni z:

get("/muj/uri/template/{id}, MojeService::metoda, request, response) ||
post("/muj/uri/template/{id}, MojeService::metoda, request, response);

zobecnic parametry metody request a response do nadrazene funkce takto:

Router.route(request, response)
.get("/muj/uri/template/{id}, MojeService::metoda)
.post("/muj/uri/template/{id}, MojeService::metoda);

A to tak, ze to bude kompletne bez instanciovani novych objektu?

V Jave samozrejme 2. moznost lze udelat snadno, jedna se v podstate o stejny princim jakym funguji streamy, nicmene prinejmensim .route bude instanciovat novy objekt.

Jeste pripominam, pokud to neni uz zrejme, ze nelze priblem vyresit pouzitim stavove tridy, protoze aplikace je vicevlaknova.

***
Duvodem proc nechci vytvaret nove objkety je zbytecne horsi performance.

(PS: Jirsak ne)
Kde presne si myslite, ze vo vasom priklade vznikaju nove objekty?
Method reference sa sprava ako lazy singleton - navyse sa po par prechodoch JITom pravdepodobne k volajucemu nainlinuje telo servisnej metody (pokial je rozumne kratka).
Avsak ak sa chcete vyhnut alokaciam novych objektov na horucej ceste, tak na to sa hodi LMAX Disruptor - nie nejaky "funkcionalny" framework.

Staci se podivat do Javy na Stream API, kazda tečka rovná se vrací se nová instance specifické třídy. Musí to tak bohužel tímto stylem být, to prostě nejde jinak. Přitom se domnívám, že se jedná o cosi, co by šlo jednoduše syntax cukrovat, možností jak by se to dalo udělat je několik.

V Javě to prostě nejde normálně udělat bez oprátoru new. Ještě se dá použít Object pool, ale to je narovnávák na ohýbák.

Vy teda říkáte, že ten JIT dokáže i vyrušít vytváření nových instancí?

***

Jinak tím, že to výkonostně stačí to začíná (plýtvání), a tím že mám dneska prakticky stejně RAMky jako před 15 lety končí. Viz. třeba Slack který vyžere 1GB ram.
Název: Re:Existuje jazyk, ktery...
Přispěvatel: gll 18. 08. 2018, 22:34:38
Musí to tak bohužel tímto stylem být, to prostě nejde jinak.

nemusí. Můžeš pokaždé vracet stejný objekt a jen měnit jeho stav. Většinou se to tak dělá. Říká se tomu builder pattern.

https://jlordiales.me/2012/12/13/the-builder-pattern-in-practice/

můžeš dokonce vracet singleton a přidávat routy do nějaké kolekce v něm.
Název: Re:Existuje jazyk, ktery...
Přispěvatel: kimec 18. 08. 2018, 22:58:57
Staci se podivat do Javy na Stream API, kazda tečka rovná se vrací se nová instance specifické třídy. Musí to tak bohužel tímto stylem být, to prostě nejde jinak. Přitom se domnívám, že se jedná o cosi, co by šlo jednoduše syntax cukrovat, možností jak by se to dalo udělat je několik.

V Javě to prostě nejde normálně udělat bez oprátoru new. Ještě se dá použít Object pool, ale to je narovnávák na ohýbák.

Vy teda říkáte, že ten JIT dokáže i vyrušít vytváření nových instancí?

***

Jinak tím, že to výkonostně stačí to začíná (plýtvání), a tím že mám dneska prakticky stejně RAMky jako před 15 lety končí. Viz. třeba Slack který vyžere 1GB ram.
Ved lambdy a method reference je syntakticky cukor, ktory sa spolieha na invokedynamic...
Hej, JIT kompiler moze optimalizovat kod tak, ze niektore objekty sa alokuju na stacku - vola sa to escape analysis, ale jav je to velmi zriedkavy.
Objekty v object poole sa nevytvaraju cez new?
Co vam presne vadi na new, ze sa alokuje nieco na heap?  Alebo, boze chran, by ste chceli nezdielany heap per CPU core, aby nebolo treba globalny garbage collector ako to ma erlang? Vadi vam garbage collector? Chceli by ste data iba na stacku a vyhnut sa dereferencovaniu instancii na heape? Toto vas trapi?
Název: Re:Existuje jazyk, ktery...
Přispěvatel: Kit 18. 08. 2018, 23:06:24
Co vam presne vadi na new, ze sa alokuje nieco na heap?  Alebo, boze chran, by ste chceli nezdielany heap per CPU core, aby nebolo treba globalny garbage collector ako to ma erlang? Vadi vam garbage collector? Chceli by ste data iba na stacku a vyhnut sa dereferencovaniu instancii na heape? Toto vas trapi?

Pokud by mu vadilo jen alokování objektů na heapu, tak použije Go.
Název: Re:Existuje jazyk, ktery...
Přispěvatel: Bacsa 18. 08. 2018, 23:23:38
Co vam presne vadi na new, ze sa alokuje nieco na heap?  Alebo, boze chran, by ste chceli nezdielany heap per CPU core, aby nebolo treba globalny garbage collector ako to ma erlang? Vadi vam garbage collector? Chceli by ste data iba na stacku a vyhnut sa dereferencovaniu instancii na heape? Toto vas trapi?
Pokud by mu vadilo jen alokování objektů na heapu, tak použije Go.
Tam by to šlo taky na haldu.
Název: Re:Existuje jazyk, ktery...
Přispěvatel: O 19. 08. 2018, 08:43:20
Přepiš to do C a máš jistotu, že se ti tam nikdy žádný objekt instanciovat nebude.
Název: Re:Existuje jazyk, ktery...
Přispěvatel: anonym 19. 08. 2018, 09:36:31
Staci se podivat do Javy na Stream API, kazda tečka rovná se vrací se nová instance specifické třídy. Musí to tak bohužel tímto stylem být, to prostě nejde jinak. Přitom se domnívám, že se jedná o cosi, co by šlo jednoduše syntax cukrovat, možností jak by se to dalo udělat je několik.

V Javě to prostě nejde normálně udělat bez oprátoru new. Ještě se dá použít Object pool, ale to je narovnávák na ohýbák.

Vy teda říkáte, že ten JIT dokáže i vyrušít vytváření nových instancí?

***

Jinak tím, že to výkonostně stačí to začíná (plýtvání), a tím že mám dneska prakticky stejně RAMky jako před 15 lety končí. Viz. třeba Slack který vyžere 1GB ram.
Ved lambdy a method reference je syntakticky cukor, ktory sa spolieha na invokedynamic...


No to se teda nespoleha na dynamicky invoke, s nim to nema nic spolecneho, lambda je cukr pro vytvareni anonymni instance (funkcionalniho) interface, ktery se predava jako parametr. Kompilator predela lambdy do normalniho javovoskeho kodu, zadna reflexe tam neni.
Název: Re:Existuje jazyk, ktery...
Přispěvatel: polobuh 19. 08. 2018, 10:11:19
Hele kluci, vy se vyznate. Existuje jazyk , ktery mi vojede starou? me uz ta jeji smrdi. jo a idealne aby to pritom vykonu vytvarelo ci nejmin objectu na heapu, malloc je pomalej, jo a taky co nejmin na stacku, novej stack frame je tady drahej. jo a samozrejme ci nejmin syscallu,  a co nejmin ramky. Idealne a y se veslo vsechno do cachky abych nemel missy. no a cl nejmin branchingu to taky totiz zere hodne. delam novy glugl a toby mi na tom poci co mam doma bezelo pomalu pro tevh milion lidi ci tam buduou jen tak bez reklamy klikat.

Název: Re:Existuje jazyk, ktery...
Přispěvatel: Filip Jirsák 19. 08. 2018, 10:11:54
No to se teda nespoleha na dynamicky invoke, s nim to nema nic spolecneho, lambda je cukr pro vytvareni anonymni instance (funkcionalniho) interface, ktery se predava jako parametr. Kompilator predela lambdy do normalniho javovoskeho kodu, zadna reflexe tam neni.
invokedynamic není reflexe, je to „nová“ (od Javy 7) instrukce JVM. A pro lambdy se opravdu používá. Viz java.lang.invoke.LambdaMetafactory (https://docs.oracle.com/javase/8/docs/api/java/lang/invoke/LambdaMetafactory.html).
Název: Re:Existuje jazyk, ktery...
Přispěvatel: Ondrej Nemecek 19. 08. 2018, 15:47:42
Musí to tak bohužel tímto stylem být, to prostě nejde jinak.

nemusí. Můžeš pokaždé vracet stejný objekt a jen měnit jeho stav. Většinou se to tak dělá. Říká se tomu builder pattern.

https://jlordiales.me/2012/12/13/the-builder-pattern-in-practice/

můžeš dokonce vracet singleton a přidávat routy do nějaké kolekce v něm.

Dotaz jsem pochopil tak, že tazateli vadí vytváření toho objektu v builder pattern. Což potvrdil. IMHO jen pokus o trolling.
Název: Re:Existuje jazyk, ktery...
Přispěvatel: aaa158 19. 08. 2018, 17:55:34
Premature Optimization Is the Root of All Evil.