Perl 6 - the future is here, just unevenly distributed

IRC log for #divine, 2016-07-12

| Channels | #divine index | Today | | Search | Google Search | Plain-Text | summary

All times shown according to UTC.

Time Nick Message
11:18 xstill mornfall: ad výjimky, kromě __vm_query_frame bude potřeba ještě něco jako __vm_unwind( _VM_Frame *stackTop, _VM_Frame *unwDesc ) na zahození rámců (myslím, že nestačí ty rámce dealokovat a udělat __vm_jump, minimálně proto, že by to vyleakovalo všechny alloca, navíc by to stejně asi musel udělat DiOS, protože jinak bych si dealokoval svůj vlastní rámec) a { void *, int }
11:18 xstill __vm_query_register( uintptr_t pc ) (vracel ...
11:18 xstill ... by ukazatel a délku místa v rámci kde je ten registr asi), s tím by se pak měl dát celkem v klidu implementovat _Unwind_* interface libunwindu, ta zajímavější část je, že libc++abi čte informace o landingpadech z DWARFu, na druhou stranu ta tabulka není až tak složitá… (nicméně by bylo asi jednoduší ji sestavit "ručně" než to dolovat z codegenu), ta tabulka by se pak spolu s
11:19 xstill personality dala přidat do ...
11:19 xstill ... metadat. Výhoda toho je, že z hlediska libc++ to bude úplně stejné jako nativně (takže budou fungovat třeba i throw(…) deklarace) a potenciálně pro nové jazyky by bylo jen potřeba vyřešit zase jen ty tabulky
11:20 mornfall to query_register nemusí být ve __vm_* (měla by to být spíš součást statickýho __md_*)
11:21 mornfall zejména pokud chceme mít data o rozložení rámce v llvm metadatech
11:21 xstill to by musela metadata napočítat rozložení registru a loader je jen přečíst, což asi jde no (s úpravou loaderu)
11:22 mornfall nepočítá ty metadata teď loader?
11:22 xstill takže pak by metadata napočítala v podstatě celé rozložení rámce?
11:22 xstill z části, z částli LART
11:22 mornfall (počítá, functionmeta se volá z BitCode::init)
11:23 xstill loader počítá jen velikost rámce
11:23 mornfall nejde o to jestli to je v lart/ nebo v divine/ ale kdy se to spouští
11:23 mornfall tzn. loader nebo compile
11:24 xstill jo tak, loader
11:24 xstill spouští ten kus lartu
11:24 xstill a ten napočítá všechno až na velikost rámce, ten dopočítá loader sám
11:24 xstill *tu
11:25 mornfall jo to už je detail
11:25 mornfall problém s dwarfem je trochu v tom, že to je arch-specific, ne?
11:26 mornfall tzn. další kus kódu kterej v divinu předpokládá x86-64
11:26 xstill no, podle toho co je v cxa_personality.cpp to vypadá, že ani ne
11:28 xstill ta tabulka má v sobě zakódované i jak jsou kódované její části (indexy a tak)
11:29 xstill (ten variadic nakonec snad taky funguje univerzálně, i když jsem to teda nezkoušel)
11:31 xstill jako alternativa je vymyslet si vlastní implementaci metadat a implementovat navíc ještě vyhledávání správnýho landingpadu, to mi taky nepříjde jako výhra
11:40 xstill navíc teda tohle bude líp fungovat s kompilovanými protipříklady
11:41 xstill (s protipříklady je asi největší problém ve chvíli kdy tam bude monitor který se bude dotazovat na hodnoty proměnných (teda obecně introspekce rámců), to zatím nevím jak udělat, ale zatím na to ani nemáme API)
12:16 mornfall no to by mělo fungovat úplně stejně podle rámcových metadat
12:22 xstill to nebude, protože ty proměnný nebudou uložený v rámci (_VM_Frame) když to poběží nativně
12:24 xstill jako asi by to šlo nějak vymlátit z debug info
12:48 xstill mornfall: ten porovnánávací a castovací operátor v Program::Slot je předpokládám blbě, že? (má tam být uint64_t v obojím)
12:49 mornfall jo, to asi má (ještě lepší by asi bylo opravit to na normální lex srovnání)
12:59 xstill nebo ho smazat protože ho nikdo nevolá
14:19 mornfall ještě lépe

| Channels | #divine index | Today | | Search | Google Search | Plain-Text | summary