ACMM-033 <valhalla@interia.pl> napisał(a):
To tak się zastanawiam - czemu w ogóle kompilator dopuścił do
skompilowania wadliwego kodu?
A dlaczego nie? Po pierwsze to nie jego rola. On ma kompilować, czyli
tłumaczyć kod z danego języka na maszynowy, a do tego musi sprawdzić
zgodność z zasadami danego języka programowania. A nie czy kod ma sens i
jest odporny na nietypowe dane. Po drugie nie wszystko da się sprawdzić na
etapie kompilacji.
Generalnie błędy o których wspomniałem to błędy polegające na tym, że
zachodzi jakaś sytuacja, której programista nie przewidział. Np. odebranych
zostało więcej danych niż było na nie miejsca. W językach w których jest
automatyczne zarządzanie pamięcią, np. C#, Java, kompilator może wychwycić
problemy związane z zarządzaniem pamięcią. Ale nie będzie myślał za
programistę.
Czy może dlatego, że celem uproszczenia programu nie sprawdzamy danych
wejściowych, co wejdzie to wejdzie, co wykorzystują źli ludzie, czy
choćby z powodu błędu też to nastąpi...? Nie sprawdzamy długości
danych, ich ilości, bufory dla uproszczenia kolejkujemy po sobie, byle
bliżej, a potem ała zły kod się wykonał.
Dokładnie tak. Programista nie dodaje sprawdzenia wszystkich możliwości. Czy
to z braku czasu czy z tego powodu, że dana sytuacja po prostu nie przyjdzie
mu do głowy.
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 51 days, 21 hours, 56 minutes and 55 seconds
|