Moduły i pliki
Moduły podsystemu OUX to zbiór plików w podkatalogu katalogu module, np. base.
Pliki te mają nazwy zawartego w nich realizatora (sterownika lub menedżera obiektów), np. flow-drv.cx, mem-blk.cx, text.cx.
Pierwsza część nazwy określa moduł języka C+, który jest czymś mniejszym od modułu podsystemu OUX, a druga część nazwy – przeważnie obiekt tego modułu. W powyższych przykładach: moduły flow, mem i text oraz oznaczenie sterownika drv i obiektu blk. Na końcu jest rozszerzenie nazwy .cx oznaczające plik w języku C+.
Nazwy definicji języka C+
Został wymyślony ogólny format nazywania definicji języka C+, np. obiektów, zmiennych, procedur. Ma on następującą formę:
wielka litera reprezentująca typ następującej nazwy
znak podkreślenia
nazwa definicji małymi literami
Na przykład:
E_mem
Takie formy są ze sobą sklejane kolejno rozdzielone znakiem podkreślenia, tworząc pełną nazwę w obiektowości ogólnej języka C+.
E_mem_Q_blk
Ponadto można też na końcu umieścić wielką literę reprezentującą typ bez nazwy, na przykład:
E_mem_Q_blk_M
Powyższy zapis oznacza moduł (E) mem, obiekt (Q) blk, utworzenie (M), więc procedura tak nazwana jest tzw. z innych języków programowania kreatorem obiektu blk (block) przynależnego do modułu mem (memory), czyli jest alokatorem pamięci.
Takie tworzenie nazw definicji nie ogranicza języka żadną wbudowaną hierarchią obiektów, a zawiera w sobie szybki do zrozumienia opis przeznaczenia.
Stąd wszystkie tak nazwane obiekty są definiowane w przestrzeni globalnej, natomiast wewnątrz procedury do definiowania zmiennych wystarczy używać samych nazw definicji.
Podstawowe definicje obiektów
Obiekty (oznaczone literą Q) mogą mieć procedurę tworzenia oznaczoną literą M, procedurę wyrzucenia – literą W, odczyt właściwości – literą R, zapis właściwości – literą P, definicję zmiennej – literą S, definicję typu zmiennej – literą Z, procedurę wytworzenia formy czegoś stratnie względem obiektu – literą N, procedurę innej funkcji – literą I. Na przykład:
Pc
E_mem_Q_blk_M( N l
){ //Procedura utworzenia bloku pamięci.
}
P
E_mem_Q_blk_M_tab(
N u
, N n
){ //Procedura utworzenia tablicy bloków pamięci.
}
void
E_mem_Q_blk_W( Pc p
){ //Procedura wyrzucenia bloku pamięci.
}
I
E_mem_Q_tab_R_n( struct E_mem_Q_tab_Z *tab
){ //Procedura odczytania liczby elementów tablicy.
}
P
E_mem_Q_tab_R( struct E_mem_Q_tab_Z *tab
, I id
){ //Procedura odczytania wskaźnika do elementu tablicy.
}
B
E_io_Q_stream_out_P( I id
, Pc s
, N l
){ //Procedura wypisania tekstu do strumienia wyjścia.
}
B
E_io_Q_stream_out_P_c( I id
, C c
){ //Procedura wypisania wartości C do strumienia wyjścia.
}
struct E_base_Z
{
} *E_base_S;
struct E_mem_Z_range
{
};
struct E_mem_Q_tab_Z
{
};
Pc
E_text_Z_n_N_s( Pc s_end
, N n
, N l
, N base
){ //Procedura przekształcenia wartości N na tekst.
}
P
E_mem_Q_blk_I_add( P p
, N n
, N *n_prepended
, N *n_appended
){ //Procedura powiększenia rozmiaru już przydzielonego bloku pamięci.
}
Jest również litera G do oznaczenia procedury wstępnego przepływu wykonania, na przykład do sprawdzenia, ile bajtów będzie potrzebne do wypisania liczby jako tekst:
N
E_text_Z_n_N_s_G( N n
, N l
, N base
){
}
Pc
E_text_Z_n_N_s( Pc s_end
, N n
, N l
, N base
){
}
Bardziej szczegółowy opis znajduje się na stronie Wiki projektu.