Neciste operace nebudou

  • neciste operace uz nebudou, misto toho je umozneno vytvaret kopie *.kc souboru, kam muzes psat jakekoli modifikce.

Vyznam verzi

  • Pokud vytvaris kopie souboru, meni se jeho souborova verze a ty ziskas prava editovat. Takto muzes zacit modifikovat i uzavrene skripty.
  • Uvnitr souboru v hlavicce je zaznamenana originalni verze, ktera zustava stejna - rozeznas tedy, zda 2 soubory jsou vzajemne modifikace.
  • Od souborove verze se odvozuji KSID jmena. Proteze vznikaji jak jmena uvnitr souboru, tak souborova KSID jmena, muze dochazet ke konfliktum -> Souborova KSID jmena budou vnorena do specialniho namespacu.
  • Uzavirani skriptu: Vzdas se prava editovat, system do hlavicky pripise, ze skript je uzavren (jen pro informaci, aby vsichni vedeli :-))
  • Muzu podporovat rozliseni v nazvu fajlu mezi otevrenym a uzavrenym skriptem (pro prehlednost) *.kc! - otevreny; *.kc - uzavreny
  • Include pouzivaji zaroven souborovou verzi i originalni verzi
    • Presne si reknes, jaky soubor chces, a pokud nekdo v budoucnu vytvori od nej nejakou modifikaci, na tebe to nebude mit vliv.
    • Na druhou stranu jen jedna modifikace muze byt pouzita behem kompilace (ve vcech include vetvenich) Radkem #include pretizis #include ve vnorenych souborech. Vsichni budou pouzivat prave tu modifikaci, kterou jsi urcil ty. V pripade konfliktu modifikaci v sousednich stromech, kompilator vyhodi chybu. Musis ji opravit radkem #include v nekterem souboru, kde uz se stromy spoji.

Prirazovani verzi ke jmenum

  • Abych nemusel porad predelavat automatismy a psat znova preklady pro kazdou modifikaci, budu si pamatovat puvodni verzi existujicich jmen.
  • V hlavicce bude obri tabulka, kam bude kompilator pridavat nova jmena.
    • Novym jmenum priradi aktualni souborovou verzi a prida o tom zaznam do tabulky -> zadny konflikt
    • Pri prekladu prirazuje jmenum takovou verzi, jakou najde v tabulce -> nemusim psad znova A atd
    • pokud jmeno zanikne (smazano, zakomentovano...), v tabulce pripise ke jmenu tag old
    • pokud se jmeno znovu objevi kompilator vygeneruje warning (a jmenu priradi puvodni verzi z tabulky). Uzivatel musi rucne upravit tabulku - odstranit old (-> vyuzije se puvodni verze) nebo smazat zaznam -> pouzije se nova aktualni verze.
    • warning neni generovan, pokud je old verze shodna s verzi jakou by jmeno dostalo, pokud by zaznam v tabulce neexistoval. V tomto pripade kompilator old automaticky odstrani
    • Do tabulky se zaznamenavaji vsechny jmena, ktera jsou v danem souboru pouzita v kodu. I ta, ktera jsou prejata pres include a v tomto souboru pouzita.
    • Zaznam v tabulce resi konflikt verzi. Zaznam je lokalni jen pro dany soubor a rika jaka verze se zde priradi jmenu.
    • Paralelne se jmenem bez verze se mohou v kodu vyskytovat i jmena s verzi (ty neovlivnuji tabulku!)
  • tabulka bude v hlavicce a mela by normalne byt editorem skryta/ zabalena
  • Na stejnem principu se budou chovat i jmena, ktera vznikaji v levlech

Kompilace

  • kompilator generuje *.code soubor pojmenovany stejne jako *kc (pouzije se stejna verze fajlu). Takze kazdy *.kc ma svuj *code, kdyz v levlu pouziju nejaky skript, vim pro jaky *code mam sahnout. V code je prelozeno vsechno, vcetne includu. Je zde uplna informace o objektech, jmenech, metodach... Tela metod jsou prelozena do IS. Mam tedy spravne modifikace.
  • kompilovane skripty jsou slozitejsi. KS obsahuji pouze zkompilovana tela metod. Metoda mohla byt zkompilovana do KS uz v nejake drivejsi verzi. Protoze nevim, ktery kod metody mam pouzit a zda ten kod metody je jeste aktualni, budu spravnou KS metodu vyhledavat podle obsahu. Jak do IS, tak do KS si poznamenam kompletni kod metody (muze to byt treba prelozeny IS mezikod) + spocitam crc. Podle crc a porovnanim kodu pak vyhledam metodu, ktera sedi. Pokud zadna nesedi, pouziju IS. Metoda se vyhledava ve vsech souborech s KS, ktere mas. (KS soubory se nacitaji pri startu Krkala a Krkal si podle nich tvori databazi KS metod.)