Dobre, ale stejne - kazda API funkce je zase jen funkci, ktera ma omezenou mnozinu vstupnich a vystupnich hodnot (konkretni akci s periferii lze povazovat za vystupni hodnotu). Vzdyt co je to dokumentace - vlastne jen popis, co ta funkce dokaze schroustat a co pak ze sebe vyhodi, obcas i s popisem (vice ci mene vystiznym), co dela. Osobne mam pocit, ze pokud by cely kod - vcetne operacniho systemu a jeho knihoven - byl napsan objektove a kvalitne zapouzdren + precizni dokumentace (tj. ne pomoci vagnich popisu - zaplat panbuh za typovane promenne = aspon neco, ale pomoci precizni matematiky), pak by odpadlo spoustu chyb a rozcilovani programatora nad kodem.
Nakousl jsi tema platnosti ukazatele, ale neni to vlastne jen zpusobeno spatnou/nepresnou komunikaci mezi OS a programem? Vzdyt OS tu pamet alokoval a pri te alokaci zjistil, ze treba uz nema misto - ale aby to nejakym zpusobem sdelil tomu programu, to ne - potouchle mu vrati 'jen' ukazatel a s usmevem ceka, az si program vylame zuby. Koneckoncu, vzdyt i dnes uz existuji chytrejsi ukazatele jako objekty, ktere si sebou nesou informace navic. Fakt mi prijde, misto aby OS s programem tahli za jeden provaz, tak se misto toho perou.
V pripade ukazatele, jehoz pamet nekdo jiny uvolni - neni to zase jen chyba OS resp. toho, ze pamet neni jako objekt a neni poradne zapouzdrena? Ano, pokud OS ti da pamet a ty si udelas na ni ukazatel, a OS to pak uvolni - tvoje smula. Ale nemel by ten ukazatel byt vlastne majetkem toho OS? Pokud dojde k uvolneni - tak pak OS muze zmenit priznak u toho ukazatele a zneplatnit ho.
Co se tyce tech vyjimek a toho padu programu pri spatnych parametrech, zminenych v tech odkazech - s tim vsim souhlasim. Premyslel jsem nad tim celkem dlouho a je pravdou, ze me nic lepsiho nenapadlo - ono totiz unvitr programu by k te chybe vubec dojit nemelo (prosim, na vstupu, pri kontrole vstupnich parametru - to je misto, kde si uzivateli postezovat, ale ne uvnitr). Bud at uzivatel zada jine vstupni parametry - pokud ten pad byl zpusoben daty - anebo at programator opravi chybu. V ten okamzik je lepsi padnout hned.
Jinak ja se snazil ve svych programech neustale kontrolovat data, jestli jsou ve spravnym rozsahu apod, ale vysledkem bylo pouze
1. moje zahlceni - misto vypoctu jsem delal jen tupou byrokracii
2. spomaleni pocitace.
Proto mi prave prijde, ze kontrolu vsutpnich dat udelat jen jednou a pote uvnitr programu (ale pro vicero oddelenych objektu) uz uvazovat, ze vsechna data jsou OK. Pak staci precizne implementovat me funkce, aby na sebe navazovaly (tj. aby jedna nepredala tu -5 a navazujici nebrecela, ze tu zpracovat neumi - pro to hodlam vyjadrit kazdou fci matematikou: definicni obor, obor hodnot a samotnou fci jako matematicke zobrazeni) a hotovo = nikdy mi uvnitr programu nenastane 'nepovoleny' stav.
Asi je hodne zoufale se ptat, jestli existuje nejaka verze linuxoveho jadra napsana objektove? Aby si pointer (v majetku OS, ale pouzivan mym programem) sebou zaroven nesl info o sve platnosti?