Dobrý den,
chtěl bych si napsat operační systém - s dobře čitelným a především bezpečným kódem, abych měl stoprocentní kontrolu nad věcmi, které bude provádět. Dobře čiltelná je pro mě pascalovská syntaxe, jenže jsem nenašel překladač, ve kterém by to šlo napsat... tak jsem si začal psát svůj, ale časem to přestávalo mít s pascalem tolik společného. Například, aby to bylo jednodušší, nezná to standardní typy (dají se snadněji napsat do zdrojovýho kódu, než zahrnout do překladače). Jedinné typy, které nejdou stoprocentně nadeklarovat jsou typy POINTER a STRING. Typ POINTER mi nevadí, že nebude existovat - alespoň to bude bezpečnější. STRING se dá deklarovat s pevně zadanou délkou polem, takže v tom taky nebude hlavní problém... Jenže když nebude existovat STRING nebo CHAR, tak nevím, jak by překladač přiřadil hodnotu řetězce nebo znaku ('něco',#32).
Na druhou stranu, tohle se vyskytuje jen u přiřazení, a přiřazení je možné přetypovat. A tady bych potřeboval poradit... V mnoha jazycích je možné definovat si vlastní typ. Jsou jazyky, ve kterých je možné si definovat i vlastní hodnotu k tomu typu?
Například:
type
Char = 0..255;
operator := (token) hodnota : Char;
begin
if token = '#' {tady by muselo byt cislo toho znaku, protoze retezec to nezna} then
while token in ['0'..'9' {tady take}] do
hodnota := token; {nejaka uprava, pro prevod z desitkove do binarni podoby}
end;
Jelikož přiřazení je konstatní, překladač by ho podle příkazů v "operator :=" zoptimalizoval už při překladu a v přeloženém kódu by nic z toho nebylo...
Dále by to ovšem chtělo posílit typovou kontrolu. Například:
type
Char = 0..255;
Byte = 0..255;
aby Char i Byte byly mezi sebou nekompatibilní.
Nenapadá vás tedy nějaký způsob, jak by bylo možné nadefinovat si formát vlastní hodnoty?
Například #číslo bude Char, číslo.čísloE-číslo bude pro Real, číslo+čísloI bude pro Complex, čísloM bude pro Metr a jiné... :-)