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.