konto usunięte
Temat: Generowanie kodu przez ILGenerator i Br
Problem w sumie bardziej akademicki, ale właśnie budując kod IL przez ILGenerator napotkałem problem, w jaki sposób generując skoki - Branch'e - z góry przewidzieć, czy mogę użyć wersji skróconej OpCodes.Br_S, OpCodes.Brtrue_S itd. Sam sobie odpowiem, że chyba to nie możliwe bo to w tym momencie ja a nie kompilator produkuję kod i sam powinienem wiedzieć, ile go naprodukuję.A problem jest taki, że piszę funkcję która mnoży (skalarnie) dwa wektory, z czego jeden wektor jest ustalony, więc generuję dynamiczną funkcję, w której zakodowuję na sztywno współczynniki jednego wektora (aby było szybciej). Trudno mi oszacować długość kodu, ponieważ:
- jeżeli współczynnik wynosi 0 to w ogóle pomijam wyraz (bo nic nie wniesie do końcowej sumy)
- jeżeli współczynnik wynosi 1 to pomijam mnożenie, sumowanie zostawiam
Wymyśliłem bardzo brzydkie rozwiązanie: użyć Br_S i jak się nie skompiluje to przejść na Br.
Wiem, że zagadnienie mało praktyczne, ale w Święta nie zajmowałem się pracą tylko hobby:)