- log69 blogja
- A hozzászóláshoz be kell jelentkezni
- 839 megtekintés
Hozzászólások
Pedig egyszeru: a szimbolumok egy VM-globalis poolbol jovo konstans stringek (nem egeszen, de ez a legkozelebbi definicio, amit egy nem-rubysnak el lehet mondani). Egy adott szimbolum mindig ugyanaz az objektum lesz, ennek ugyanaz az elonye, mint a hatranya: a GC nem ervenyesul rajuk, csak VM shutdownnal. Ezert nem erdemes tul sok szimbolumot hasznalni a futas folyaman. Kicsit tobbek, mint konstansok es kicsit kevesebbek, mint a stringek. Es van rajuk egy csomo megkotes is.
Ha jol tudom, maga a szimbolum pool mersekelten threadsafe az MRI-ben, Rubinius ebben is sokkal jobb. Kicsit ragyurhatnanak az 1.9 es C-API kompatibilitasra, es akkor bekerulhetne a mainstream disztrokba.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Szerintem a megfogalmazásod alapján épphogy nem igazán értené meg egy nem Ruby-s, hogy Ruby-ban ez pont hogy működik és milyen gyakorlati haszna van.
"Ezert nem erdemes tul sok szimbolumot hasznalni a futas folyaman"
Pont az ellenkezőjére bíztatnak a fenti linkeken - a stackoverflow-s hozzászólások között is vannak tömör lényegre törők. Tehát éppen mivel egyetlen integer tárolódik a szimbólumhoz a program futása során és ez megváltoztathatatlan, ezért ahol elég a szimbólum, ott nagy sebesség növekedés érhető el a gyors összehasonlítás és egyéb műveletek miatt (mivel ugye egyetlen integer-t kell hasonlítani - ahogy feljebb is írják). Hash kulcsokhoz is ezért ajánlják. Illetve memória spóroló, mert a string műveletek során többszöröződik a string hossz alapján a memória foglalás, míg szimbólumnál nem.
- A hozzászóláshoz be kell jelentkezni
Nem osszehasonlitas, hanem egyenlosegvizsgalat, nem mindegy.
- A hozzászóláshoz be kell jelentkezni
Valahol melyen az egyenlosegvizsgalat is osszehasonlitassal jar :)
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
Assemblyben is mas opkodja van az egyenlosegvizsgalatnak, meg az osszehasonlitasnak, nem veletlenul. Hint: XOR es CMP. Az egyik egy bitenkénti kizáró vagy utasítás (ami a bitminta tényleges egyezését vizsgálja), a másik meg előjeles kivonás. Az előbbi nem használható másra, csak egyenlőségvizsgálatra, míg az utóbbi összehasonlítás, tudsz vele rendezni.
- A hozzászóláshoz be kell jelentkezni
Jo, ha igy nézzük, valóban.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
A XOR nem egyenlőség vizsgálat, csak arra használják mert gondolom gyors. A CMP feltételes biteket billent be, így az egyenlőség vizsgálat is a CMP lenne melyre a BEQ vagy adott architektúrán használatos elágazó parancs használható.
A XOR nem használható másra? Ilyet inkább ne írj le.
- A hozzászóláshoz be kell jelentkezni
"A XOR nem használható másra? Ilyet inkább ne írj le."
Marmint ebben az esetben: osszehasonlitas vs. egyenlosegvizsgalat. De tudod mit, megfogadom, hogy mindig kiirom, mert sokaknak baja van a szovegertelmezessel, mint ebben az esetben is.
- A hozzászóláshoz be kell jelentkezni
http://www.tricksonrails.com/2010/06/avoid-memory-leaks-in-ruby-rails-c…
A cikk elso fele semmi egyebrol nem szol, mint a szimbolumokrol. Nem veletlenul irtam le, amit leirtam, a szimbolumok orokeletu cuccok, nem jon ertuk a kukasauto, csak amikor a VM leall. Nem szabad nyaklo nelkul alkalmazni oket, nagyon-nagyon at kell gondolni, hogy mikor hasznalod oket. Olvastam valahol egy cikket, sajnos nem tudok mar idezni belole, ezert nem talalom meg a googleval, de egy srac egy rubys appot optimalizalt memoriara, 40-50%-os memoriacsokkenest ert el csak az altal, hogy kigyomlalta azokat a szimbolumatalakitasokat, amikre nem volt mulhatatlanul szukseg.
A hashek kulcsa az pont egy jo pelda a szimbolumokra, de nagyon sok a hibas felhasznalas is, sajnos.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
A fenti hozzászólásoddal nem a tartalma, hanem a célja volt a gond. Megpróbáltad 1-2 mondatban frappánsan összefoglalni, amit nem igazán lehet, nem véletlen írják le sok oldalban összeszedetten és érthetően a linkeken úgy, hogy kezdőknek érthető legyen. Te magas lóról el akarod intézni egy legyintéssel, de nem látom értelemét.
- A hozzászóláshoz be kell jelentkezni
Annak, aki mar latott programozasi nyelvet, meg mondjuk programozott mar, az konnyen megerti, amit irtam. A nagyon kezdok meg ugysem arra kivancsiak, hogy performance szempontbol melyik a jobb, hanem hogy a kapcsos zarojelet hogy kell irni, hogy ne proc legyen belole.
Ossze lehet foglalni par mondatban, csak tudas kell a mondat megertesehez :-)
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
azert a symbolbol sem magatol lesz szam, valahol lookupolni kell
--
NetBSD - Simplicity is prerequisite for reliability
- A hozzászóláshoz be kell jelentkezni
A fenti lényege nem az, hogy "magától lesz szám", még jó hogy megelőlegezel ilyen triviális dolgot másoknak :) Hanem hogy miután már létezik, onnétól fogva többé már csak egy integert kell összehasonlítani (persze egy lookup után), nem pedig karakterenként a string-eket, amelyek memória foglaltsága folyamatosan nő.
- A hozzászóláshoz be kell jelentkezni
Viszont mivel az szamok ertekkeszlete joval kisebb, mint a lehetseges Stringek ertekkeszlete, ezert ez pontos egyenlosegvizsgalatra nem mindig hasznalhato.
Persze baromsag is lenne 4 milliard Stringet lookup tablaba helyezni.
- A hozzászóláshoz be kell jelentkezni
Szimbólumból nyilván kevés van a kód futása során.
- A hozzászóláshoz be kell jelentkezni
Annyira azert nem. Minden definialt metodusnev 1 szimbolumot jelent. Teny, hogy ket 'initialize' csak egyszer szamol, de ettol ez meg okozhat galibat.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Milyen galibát? Kinek? Gyors és memória spóroló. Mi a gondod a Symbol-lal? Az egész topic-ban tüntetsz ellene.
- A hozzászóláshoz be kell jelentkezni
Nem a Symbol ellen tuntetek, en is imadok szimbolumokat hasznalni hash kulcsoknak, ha tehetem, csak azt hasznalom. Csak probalom tudatositani, hogy barmennyire is imadjuk oket, mindig gondoljuk at a hasznukat - mert a konnyu hasznalatert memoriaval kell fizetni. Amiota kiderult, hogy egy egyszeru kis Rails app nem volt kepes felbootolni 600 mega memoria mellett hogy asseteket forditsak rajta, azota rohadt ovatos vagyok a memoriahasznalat teren.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Az a Rails gondja, semmi köze a Ruby-hoz és a Ruby implementációjához. A Rails egy Ruby nyelven írt program, a Ruby meg egy programozási nyelv.
- A hozzászóláshoz be kell jelentkezni
- A hozzászóláshoz be kell jelentkezni
Ahh, szoval ez az angol neve. Na ezt igy nem tudtam. Koszi.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant.
- A hozzászóláshoz be kell jelentkezni