diky za clanek. Chtel bych se zeptat jak je kodovan for.
Evidentne potrebuje znat 4 udaje. Slot pocitadla, slot ve ktere je ulozen konec, slot
ve kterem je krok a adresu kam ma skocit. Kdyz index slotu zabere 8 bitu tak je to trochu moc na 32 bitovou instrukci. Takze to vypada a vypis assembleru tu hypotezu podporuje, ze se udava jen slot pocitadla a 2 sloty za nim jsou vyhrazene pro krok a konec pricemz adresa skoku je 16bitova (je relativni nebo absolutni? (v kteremzto pripade by byl hard limit na pouzitelnou delku funkce 64K instrukci)).
Je to nejak tak?
Přesně tak, je to podobné například instrukci CALL - udává se jen slot X s prvním vyžadovaným parametrem + další parametry v případě FORI-FORL jsou ve slotu X+1, X+2...
Konkrétně:
/* Stack slots used by FORI/FORL, relative to operand A. */ enum { FORL_IDX, FORL_STOP, FORL_STEP, FORL_EXT };
D potom obsahuje index instrukce za tělem smyčky přesně s tím omezením, o kterém píšeš :/
Pekny serial, diky za nej.
Ted jeden trochu asi off-topic dotaz. Lua je bezva a delali jsme v ni celkem rozsahly reseni logiky pro jednu komercni aplikaci. Narazili jsme ale na limity pri parallelnim zpracovani fronty uloh, protoze Lua standardne nabizi jen 'zelene' thready a pro multiprocessing oficialne nepodporuje. Kooperativni multitasking neni vyhovujici a externi knihovna LuaLanes mela mizernou podporu mimo WindowsNT. Zkouseli jsme i pres ZMQ ale i to bylo pomale.
Jaky je soucasny stav Lua vs paralellni beh ?
Zdravim,
no ciste nahodou presne tento problem taky budeme resit a pravdepodobne reseni bude multiprocessing pres luaposix (+LuaJIT, ne klasicky interpret). Taky se da vyzkouset z hlavni binarky vytvorit vlakna s jednotlivymi instancemi Lua interpretru, ale bude pravdepodobne problem uridit synchronizaci (nevim do jake miry potrebujete, aby mezi sebou vlakna komunikovala). Takze odpoved je - no jde to, ale velka podpora primo v Lua neexistuje.