Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Témata - vitamin

Stran: [1]
1
Vývoj / Integrace LLVM do projektu
« kdy: 15. 04. 2014, 08:07:39 »
Dobry den,
Potreboval by som pomoct s tym ako pouzit vo vlastnom programe llvm kninice.
Davnejsie som ho uz pouzival a stacilo si nakopirovat llvm headre do priecinku z mojim kodom, medzi tym som odvedy som ale reinsaloval system a uz si nepametam ako sa pridavali libky kompilatoru.

Pouzivam gcc 4.8, llvm 3.4, ako ide code blocks.

Dakujem

2
Vývoj / Implementace operátoru []
« kdy: 20. 07. 2013, 18:56:33 »
Dobrý deň,
Snažím sa implementovať do môjho OOP jazyka overloading operátora []. Jedna z možností je c++ štýl:
Kód: [Vybrat]
//A)
<type> 'operator' '[' ']' '(' [params]...  ')' [qualifier]
Problém je ten, že môj jazyk má správu pamäte podobnu c#, takže funkcia nemôže večšinou vracať referenciu, takže takýto operator sa dá požiť len ako getter. Syntax môjho jazyka je odvodena od D (konštruktor sa volá this(), property sa riešia tiež ako v D pomocou atributu @property ) takže vytvoriť property this[] ako v C# sa moc nehodí.
Ďalšie riešenie čo ma napadlo je nasledovné:
Kód: [Vybrat]
//B)
<type> 'operator' '[' [params]... ']' '(' ')' [qualifier]      //getter     
<type> 'operator' '[' [params]... ']' '(' <param> ')' [qualifier]      //setter     
//alebo s '=':
<type> 'operator' '[' [params]... ']' '=' '(' <param> ')' [qualifier]      //setter

//priklad:
class C{
    int[] x;
    int operator [ size_t index ] () {return x[index];}
    void operator [ size_t index ]( int value) {x[index] = value;}    // '=' by tam v podstate ani nemuselo byť
    //alebo s '=':
    void operator [ size_t index ] = ( int value) {x[index] = value;}    // '=' by tam v podstate ani nemuselo byť
}
Toto riešenie sa my zatial najviac pozdava. (je to v podstate C# property this[] s inou syntaxou)

Ďalej ma napadol taký mix C++ a D:
Kód: [Vybrat]
//C)
<type> 'operator' '[' [params]... ']' '(' ')' [qualifier]      //getter     
<type> 'operator' '[' [params]... ']' <unar_op> '('  ')' [qualifier]      //setter, napr   obj[index]++,
<type> 'operator' '[' [params]... ']' <bin_op> '(' <param> ')' [qualifier]      //setter, napr obj[index]+= tmp; obj[index]= tmp;

//priklad:
class C{
    int[] x;
    int operator [ size_t index ] () {return x[index];}
    void operator [ size_t index ]=( int value) {x[index] = value;}
    void operator [ size_t index ]+=( int value) {x[index] += value;}
    void operator [ size_t index ]++() {x[index]++;}     //toto sa my zda už prehnané

    //sem by sa potom hodil daky generator (určituú formu compile time templatov ako v D čo je ďalšia práca navyše lebo planujem mať zaťial len templaty ako v C#, čiže priamo v bytecode)

}
Toto riešenie rozširuje možnosť B) a spája aj iné operátory ako '=' s indexovacím  '[]'. Tu mám na vás jednu otázku. Požívate často nasledovný kód:
Kód: [Vybrat]
  obj[index] += expr;
  obj[index] -= expr;
  obj[index] op= expr;    //op je iny operator ktory sa da spája s '='.
Či sa vobec oplati zaoberať takymto až "extrémnym" overloadingom.
Prípadne stretli ste sa s inou syntaxou overloadingu operatorov ktorá by sa viac hodila?

3
Vývoj / Implementace garbage collectoru
« kdy: 15. 03. 2013, 19:55:20 »
Dobry den,
Potreboval by som pomoct s implementaciou garbage colektoru.
Moj jazyk je podobny s C# (triedy su referencne typy odvodene od bazovej triedy 'object' a su alkovne na heape).
Frontend mam naprogramovany v c++ a ako backend pouzivam llvm 3.1, program spustam cez JIT (lli).
GC by mal byt inkrementalny, nemusi byt thread safe.
Postupujem podla tohto: http://llvm.org/docs/GarbageCollection.html#getting-started

Citace
Write a runtime library or find an existing one which implements a GC heap:

1. Implement a memory allocator.
2. Design a binary interface for the stack map, used to identify references within a stack frame on the machine stack.*
3. Implement a stack crawler to discover functions on the call stack.*
4. Implement a registry for global roots.
5. Design a binary interface for type maps, used to identify references within heap objects.
6. Implement a collection routine bringing together all of the above.

bod 1: pouzivam malloc a zatial funguje ok.

Dalej nechampem ak implementovat stack map a co to vlastne je?

Stran: [1]