k47.cz  — každý den dokud se vám to nezačne líbit
výběr foto Praha povídky kultura
TECH ▞▞ kolo | twitter RSS
komentáře článku

Go třídy ve Scale



Text komentáře


v6ak (2011-06-07 16:18)
Už jsem zkoušel, ale nefungují v tom generické typy. Ale jinak pěkné. Plánoval jsem napsat podrobnější článek (vč. výhod a nevýhod), ale nevím, kdy/zda se do toho pustím.

Navíc to bude mít na JVM určitý overhead, ale nemuselo by to být až tak strašné.

kaja47 (2011-06-08 15:07)
Přes reflexi s polymorfní chachí je volání asi 2x pomalejší, přes ivnokedynamic by se to mohlo téměř obejít bez overheadu.

v6ak (2011-06-08 15:57)
Odhaduju, že vytvoří pro tu metodu rozhraní, které je při volání metody implementováno a do kterého je daný objekt zabalen. Ale je pravda, že by tu pak byl problém s genericitou.

Invokedynamic je taky zajímavý nápad.

Ale je teda pravda, že jsem to zatím nezkoumal, ale dají se na to použít nástroje jako rejava.sourceforge.net, javap a jad.

kaja47 (2011-06-19 06:47)
[910] Ke všem metodám strukturálních typům se (zatím) přistupuje přes reflexi. Rozhraní se nevytváří proto, že aby to fungovalo, musely by se všechny třídy, které jsou v programu použity v pozici strukturálních typů přepsat tak, aby implementovaly to syntetické rozhraní. A není možné to zajistit během kompilace, protože nevím, kde všude můžou být třídy použity a tak dále a tak dále.

TL;DR reflexe + podrobnosti zděs: http://infoscience.epfl.ch/record/138931

---

K dekompilaci: Když jsem dekompiloval jednu třídu se strukturálními typy, "JD":[http://java.decompiler.free.fr/] si s kódem, který vytváří polymorfní cache, nedokázal poradit, vzdal to a vysypal na mě přímo bytekód.

v6ak (2011-06-28 13:42)
Ten problém chápu, ale dá se to obejít vytvářením obálek. Ke (skoro) každému volání udělám implementaci onoho rozhraní. Pokud opravdu používají reflexi, je to zajímavé, protože toto omezení by spíše napovídalo tomu, že nikoli: Zkus si List[String] přiřadit do List[Any{def length:Int}]. U implementace s reflexí by neměl být problém, u implementace s obálkami by se to muselo obcházet leda přes view bounds. Leda mě napadá, že se možná na tuto implementaci chtěli připravit.

Co se týče dekompilace, většinou si toto čtu z mobilu a nemám moc náladu hrát si s javap přes SSH. Ale dobře, budu té reflexi věřit.

Jinak JVM bytecode v čitelné podobě (jak vychází z nástrojů jako javap a rej.sourceforge.net) je až na pár výjimek (vnitřní třídy, try/catch, genericita, ...) vpodstatě Java v reverzní polské notaci.

píše k47 & hosté, ascii@k47.cz