Devel.cz Lupa Měšec Podnikatel Root Zdroják.cz DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Názory k článku
SquirrelFish: reprezentace hodnot JavaScriptu a virtuální stroj

Jirka
Jirka (neregistrovaný) ---.eurotel.cz
4. 12. 2008 9:36 Nový

pochvala a dotaz na reprezentaci hodnot

celé vlákno
Pochvala: paradni serial, vazne
Dotaz: nevite nekdo, jak reprezenruje hodnoty V8? Koukal jsem do zdrojaku, ale vycist se mi to nepodarilo
uživatel si přál zůstat v anonymitě ---.karneval.cz
4. 12. 2008 11:13 Nový

Re: pochvala a dotaz na reprezentaci hodnot

celé vlákno
pochvala +1
uživatel si přál zůstat v anonymitě ---.net.upc.cz
4. 12. 2008 11:58 Nový

Re: pochvala a dotaz na reprezentaci hodnot

celé vlákno
Děkuji za pochvalu.

K reprezentace hodnot ve V8 se dostaneme při popisu tohoto interpretu, na který dojde prevděpodobně někdy v lednu.
eee
eee (neregistrovaný) ---.static.adsl.vol.cz
4. 12. 2008 9:51 Nový

RE: SquirrelFish: reprezentace hodnot JavaScriptu a virtuální stroj

celé vlákno
Dekuji za hezky clanek. Uvital bych, kdybyste napsal clanek, v kterem byste vysvetlil, jak funguje uvnit interpret pythonu, dekuji.
Martin Hassman aura:85
4. 12. 2008 9:56 Nový

RE: SquirrelFish: reprezentace hodnot JavaScriptu a virtuální stroj

celé vlákno
S autorem seriálu jsme dohodnuti pouze na interpretech JavaScriptu. Čímž nevylučuji, že bychom někdy v budoucnu na Zdrojáku nemohli něco podobného napsat i o Pythonu.
David Majda aura:98
4. 12. 2008 12:01 Nový

RE: SquirrelFish: reprezentace hodnot JavaScriptu a virtuální stroj

celé vlákno
Pythonu bohužel nerozumím do takové hloubky, abych si o něm troufnul cokoliv psát, natož pak popisovat jeho interpret.
Mazarik
Mazarik (neregistrovaný) ---.ais-servis.cz
4. 12. 2008 12:36 Nový

rozdiel

celé vlákno
Mna by zaujimal rozdiel v praci s tymito premennymi: var str1 = new String("smt1"); var str2 = "smt2";
David Majda aura:98
11. 12. 2008 13:40 Nový

Re: rozdiel

celé vlákno

Opdovídám trochu pozdě, ale přece...

var str1 = new String("smt1");

Tato konstrukce vytvoří objekt (hodnotu typu Object), jehož prototyp bude roven String.prototype. Tento objekt je zapouzdřením řetězce do objektu, samotnou hodnotu řetězce bude mít uložen ve svém interním atributu. Interně bude tento objekt reprezentován odkazem na instanci třídy StringObject, v jejímž atributu m_internalValue bude odkaz na instanci třídy JSString reprezentující hodnotu řetězce. Při následném přiřazení se odkaz na StringObject umístí do tabulky lokálních proměnných na místo indexované str1.

var str2 = "smt2";

Tato konstrukce vytvoří hodnotu (nikoliv objekt!) typu String, jejíž obsahem bude "smt2". Interně bude tato hodnota reprezentována odkazem na instanci třídy JSString, v jejímž atributu m_value bude uložen samotný řetězec. Při následném přiřazení se odkaz na JSString umístí do tabulky lokálních proměnných na místo indexované str2.

Pokud bych to měl celé shrnout: Ve druhém případě vytváříme (v javovské terminologii) primitivní hodnotu, zatímco v prvním případě wrapper okolo ní. Interně to zanemná přidání jedné úrovně tříd a ukazatelů navíc.

m.
m. (neregistrovaný) ---.ais-servis.cz
18. 12. 2008 12:35 Nový

Re: rozdiel

celé vlákno
Takze som dobre pochopil, ze druhy sposob je rychlejsi. Potom vsak nevidim dovod pouzivat prvy sposob okrem pripadov, kedy je potrebne predefinovat/pridat nejake metody na triede String.
David Majda aura:98
18. 12. 2008 14:47 Nový

Re: rozdiel

celé vlákno

Ono to není potřeba používat v podstatě nikdy, protože v situaci, kdy se s řetězcovou hodnotou zachází jako s objektem, dojde k automatické konverzi této hodnoty na objekt (jakoby se obalí voláním new String(...)).

m.
m. (neregistrovaný) ---.ais-servis.cz
19. 12. 2008 8:20 Nový

Re: rozdiel

celé vlákno
S tym uplne nemozem suhlasit napr. "test".prototype.alert=alert alebo ako ste to inak mysleli?
David Majda aura:98
19. 12. 2008 8:46 Nový

Re: rozdiel

celé vlákno

Volat prototype přímo na hodnotě řetězce nemá smysl, protože výsledek bude undefined (vlastnost prototype mají definovanou pouze funkce).

Myslel jsem to takto:

alert("abcd".toUpperCase() == new String("abcd").toUpperCase()); // vypíše "true"
Pavel Tišnovský
Pavel Tišnovský (neregistrovaný) ---.jizmorava.adsl-llu.static.bluetone.cz
4. 12. 2008 21:44 Nový

zásobník vs. registry

celé vlákno
Pěkný článek, gratuluji!

Ten pomalý a stále více znatelný příklon spíše k registrovým VM (začalo to Parrotem, později Lua atd.) je také způsobený tím, že prakticky všechny moderní procesorové platformy jsou založené na registrech, takže se hoodně investovalo do kvalitních překladačů pro registrové mikroprocesory (a mnoho věcí z překladačů se dá použít při JIT kompilaci). Posun v oblasti zásobníkových strojů je poměrně malý, sice pár odborných článků na toto téma vyšlo (EuroForth apod.), ale oproti mainstreamu to je slabší, což je IMHO škoda.

Mimochodem, například Javovský VM (JVM) se sice tváří, že je zásobníkový, ale jen pro vyhodnocování výrazů. Předávání parametrů je přes standardní rámce, což je odklon od klasického "dvouzásobníkového" VM, který například používá Forth.
Jakub Vrána aura:44
23. 12. 2008 15:51 Nový

Datové typy

celé vlákno
Pokud vím, tak null není základní datový typ a je reprezentován objektem. Ve výčtu naopak chybí datový typ function. Možná to má SquirrelFish jinak, ale v článku je to napsáno jako kdyby to platilo pro celý JavaScript.
David Majda aura:98
23. 12. 2008 16:30 Nový

Re: Datové typy

celé vlákno

Podle specifikace ECMA-262 (konkrétně podle úvodu kapitoly 8) je to skutečně tak, jak píšu:

A value is an entity that takes on one of nine types. There are nine types (Undefined, Null, Boolean, String, Number, Object, Reference, List, and Completion). Values of type Reference, List, and Completion are used only as intermediate results of expression evaluation and cannot be stored as properties of objects.

Jiná věc je, co vrací operátor typeof. A zde je pravda, že pro typ Null vrací "object" a pro funkce vrací "function", byť jsou to formálně hodnoty typu Object. Toto chování je specifikováno v ECMA-262 v odstavci 11.4.3.

Při popisu jazyka obecně vycházím ze specifikace ECMAScriptu, ne z konkrétních implementací a jejich reprezentací. Ve chvíli, kdy v sérii článků píšu o více implementacích, není myslím jiný přístup schůdný.

Zasílat nově přidané příspěvky e-mailem