Ruby jegyzet

Lazy enumerators

Kellett kis idő hogy megértsem, de durva jóság. A lényege az, hogy ha az adatunkon (jelen esetben egy tömb elemein) olyan műveleteket akarunk végre hajtani, ahol a tömbök elemei több számításon és konverzión átesnek, akkor spórolhatnánk időt úgy, hogy csak azokat az elemeket és csak akkor számoljuk ki, amit a tömbre hivatkozás kíván. Főként ha az elejétől a végéig olvasnánk a tömbünk elemeit és olyan az algoritmusunk, hogy nem megjósolható előre, hogy mennyi elemet is kell kiszámítani, akkor már kézenfekvővé tenné az ötletet, hogy a sok adatból csak annyit számoljunk ki, amennyit kell - főleg ha a számolás drága.

Persze ez felveti a kérdést, hogy miért nem úgy írjuk meg már eleve a programunk, hogy ilyen megoldásra ne legyen szükség. Szerintem innét a "lazy" elnevezés.. :)

Ruby benchmark itt (Ruby 1.9 / Ruby 2.0 / Rubinius / JRuby)

Innét.

Szerk. érdekességnek: ma olvastam egy olyat, hogy ha valaki rendes OS által biztosított többszálúsítást akar "Green thread"-ek helyett, akkor a jelenlegi produkcióra kész Ruby implementációk közül JRuby az egyetlen választás.

Habár webes környezetben nem téma a többszálúsítás, mert a bekapcsolódó kliensek miatt ez megtörténik, de mégis több szempontból is vonzó lehet JRuby. Én mindenesetre tesztelni fogom a kódjaimat rajta.

A múltkori sort-by funkcióhoz eszembe jutott egy szerintem mutatós példa; rendezzük a mondat szavait a szavak hosszának sorrendjében:

"ez itt egy pelda mondat akar lenni".split.sort_by(&:size).join(" ")

Nem nagy cucc, de tetszik hogy egy ilyet úgy meg tudok tenni Ruby-ban, hogy szinte alig gondolkodtam a kivitelezésen - annyira természetesen jönnek az egymásba kapcsolódó metódusok.

Hozzászólások

"produkcióra kész Ruby implementációk közül JRuby az egyetlen választás."

A Rubinius most van epp a stabilizalasi idoszakaban, ugyanakkor a git master is meglepoen stabil. Ez annak koszonheto, hogy majdnem minden valtoztatast alaposan kitesztelnek, es sem ok nem csinalnak, sem a kozossegtol nem fogadnak el olyan valtoztatast, ami nincs tesztekkel lefedve (kiveve ha trivialis hibarol van szo, elutes, komment, doksi, ilyenek). Van szerencsem fejleszteshez hasznalni, es eddig meg egyszer sem hanyta ossze magat. Elesben csak azert nem hasznalom, mert menet kozben talaltam meg en is, es meg nincs olyan projektem, aminek az elese alatt ruby-t tudnek cserelni.

Ami nagy josag vele kapcsolatban, hogy teljsen nativ szalazast hasznal, GIL nelkul.
--

Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal