Perl 6 - the future is here, just unevenly distributed

IRC log for #divine, 2016-07-22

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

All times shown according to UTC.

Time Nick Message
08:33 yaqwsx joined #divine
11:46 zbeasnyy int foo[10] = { [3] = 3, [1] = 1 };
11:46 zbeasnyy (takhle maj tu tabulku zapsanou ve freebsd libc)
11:46 zbeasnyy fakt to funguje :-)
11:47 yaqwsx Jak ten zápis mám chápat?
11:47 zbeasnyy no že do 3. indexu se zapíše 3 a do 1. se zapíše 1
11:47 zbeasnyy stejně jako { .field = x } ale s indexama
11:48 zbeasnyy jestli to je gnu/clang extension to nevim
11:48 yaqwsx Ah, oukej, jsem natvrdlý
12:50 xstill mornfall: to je těžká zrada, že operandPtr().v() můžeš (typově) poslat haldě, ale ve skutečnosti ho musí člověk procpat přes ptr2h
12:52 yaqwsx joined #divine
13:14 yaqwsx joined #divine
13:43 xstill hm, ale ten fault handler takhle těžce nefunguje, protože on zapíše svou návratovou hodnotu do result() toho co je zrovna aktivní instrukce (což je obvzášť problém, pokud žádný result nemá); počítám, že ho chceš zavolat na stacku kde k tomu došlo, pak bych ale viděl jako rozumnější aby byl void a bral ještě _VM_FaultAction *, který intrpreter naalokuje pro něj
14:08 xstill nebo mezi to vrazit nějaký extra rámec
16:12 mornfall no mně se zdálo divný že to funguje :P
16:13 mornfall jsem si nepamatoval že bych to byl dořešil
16:13 yaqwsx joined #divine
16:14 mornfall taky mam skoro dojem že fault action je nakonec zbytečný
16:15 mornfall jo, je
16:16 mornfall to tam vůbec nemá být, ten handler se buď vrátí (s voidem), nebo to zničí třeba syscallem
16:17 mornfall a chyby který se maj protlačit až k uživateli se budou řešit skrz __vm_trace nebo něco takovýho
16:17 mornfall resp. nějakým tím rozhraním co bude společnej pro büchi
16:17 mornfall společný*
17:29 yaqwsx Jak vyřešit různé návratové typy ze syscallů?
17:33 mornfall jo to je dobrá připomínka
17:33 mornfall to jsem si uvědomil ve vlaku a pak hned zapomněl
17:35 yaqwsx Momentálně to řeším tak, že mám místo, kam syscall zapíše svoji návratovou hodnotu a wrapper si ji odtud vyzvedne. Mohlo by to být stejně a __sc_* by měly prototyp void* (int, void*, ...)
17:36 mornfall jo to by asi šlo
17:36 yaqwsx Přičemž druhý argument je ukazatel na místo, kam můžou zapsat návratovou hodnotu.
17:36 mornfall jj
17:36 yaqwsx A teď jsem si uvědomil, že by měly mít návratový typ void, nikoliv void *, jak jsem napsal
17:36 mornfall jo já to tak rovnou i přečet :D
17:37 yaqwsx Jakou zvolit velikost toho místa pro návratovou hodnotu?
17:38 mornfall asi přesně, ne?
17:38 mornfall když to nebude sedět tak to umře
17:38 mornfall (teda počítám že to alokuje wrapper, který ví co vrací)
17:39 mornfall druhá možnost je uint64_t
17:39 mornfall tam by se mělo vejít všechno
17:42 yaqwsx Jo vlastně, to si může bezproblémů udělat wrapper. To mi nedocvaklo.
17:45 mornfall int rv; __dios_syscall( 123, &rv, ... ); return rv;
21:05 yaqwsx Implementuji syscally přes va_list a pozoruji zvláštní chování: http://pastebin.com/Y3HACm1u
21:05 yaqwsx Je možné, že by Divine argumenty o 1 posunul?
21:06 yaqwsx __dios_start_thread je wrapper volaný z uživatelského kódu, __sc_start_thread je vlastní implementace zavolaná v kontextu DiOSu
21:06 mornfall yaqwsx: voláš va_start správně?
21:07 mornfall yaqwsx: kde schováváš kód?
21:08 mornfall pravda divinu by to mohlo být docela jedno
21:10 yaqwsx void __dios_syscall( int syscode, void* ret, ... ), va_list vl; va_start( vl, ret ); To je myslím ok
21:17 yaqwsx Momentálně už nemám nápady, mrknu na to zítra s čerstvou hlavou
21:18 mornfall yaqwsx: ideálně mi dej cestu k repu než lehneš
21:19 mornfall ha už jsem to možná uhod
21:19 yaqwsx Dostaneš se na arke /home/xmrazek7/divine4?
21:19 mornfall jo
21:21 mornfall yaqwsx: řekl bych že chceš ten va_list kopírovat a ne podávat si ukazatel na něj
21:22 yaqwsx Dle standardu je dovoleno předávat si ukazatel
21:23 yaqwsx Jinak ten ukazatel jsem tam přidal až teď jako poslední pokus, mmt, vrátím to zpět (dává to stejné výsledky jak bez něj)
21:24 yaqwsx Už je to v původním stavu
21:25 mornfall na arke ani ne
21:26 yaqwsx Já to mám, nebo nemluvíme o stejném pointeru?
21:26 mornfall Syscall::_args
21:27 yaqwsx Aha, takže nemluvíme - když jsou zkoušel co se děje, tak jsem předával i do funkce pointer - teď jsem to vrátil
21:28 yaqwsx Tam ale přece nemůžu dát copy - dle standardu musí být na kopii zavoláno va_end před tím, než funkce volající va_copy vrátí.
21:29 yaqwsx Beru zpět, můžu. Zkusím
21:29 yaqwsx I s va_copy se to chová stejně.

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