Ada nie preferuje podtypów - robią to programiści Ada.
Nowe typy i podtypy (są różne, a obie mają swoje zastosowania) pomagają wykryć tak wiele błędów przy tak niewielkim koszcie lub w czasie, że jest tajemnicą, dlaczego dobre systemy typu spadły tak daleko poza modę.
Na przykład uznać, że wskaźnik dla każdej tablicy należy do podtypu (być anonimowy, ale dostępne jako myArray'range
jak w for i in myArray'range loop ... end loop;
lub subtype myIndextype is myArray'range; theIndex : myIndextype;
i zobaczysz, że każdy Przepełnienie bufora - lub atak - kiedykolwiek napisana była po prostu błąd typu - lub mógł być, w Ada:
Gdy pojawi się błąd za kompilatorem, po raz pierwszy twój plik wykonywalny przewróci się z Exception : Constraint_Error
wskazując strasznie blisko błędu, zaczniesz mieć poczucie wartość typów ograniczonych zakresami:
Aby się nieco rozwinąć, odniosę się do jeszcze kilku Q & As.
Najpierw zauważ, że kompilator, którego prawdopodobnie używasz, Gnat, może nie być ściśle zgodny z Adą, chyba że dodasz kilka opcjonalnych flag w wierszu poleceń (lub pliku projektu), jak opisano w pierwszym przykładzie. Ostatnie wersje domyślnie włączają niektóre z nich.
Oto przykład bloku subtype being declared, used and going out of visible scope, (w bloku declare
, w którym zakres podtypu jest nieznany do czasu wykonania.W przeciwieństwie do wielu języków z dynamicznym typowaniem, jest to zarówno szybkie, jak i bezpieczne, ponieważ odpowiednie miejsce przechowywania jest zwykle na stosie, jeśli jesteś zainteresowany szczegółami implementacji.
a przykładem how not to use a declare block.
Oto skrajnym przykładem not only declaring subtypes but telling the compiler how to pack them in storage.Powszechnie stosowane w programowaniu wbudowanym, zarówno w miejscu, w którym jest mało miejsca (mam pełny cyfrowy zegarek w procesorze z pamięcią 1k!), Jak i w celu uzyskania dostępu do określonych bitów w rejestrach sprzętowych. (Zauważ, że ten przykład będzie czystszy, jeśli zaktualizowany do użycia Ada-2012 .)
A to Q & Krótko obejmuje difference between new types and subtypes, dla kogoś pochodzącego z Jawy. (Jestem trochę rozczarowany, że żaden z ekspertów Javy nie zdołał rozwiązać problemu przed jego zamknięciem, opisując, w jaki sposób poradziliby sobie z tymi samymi problemami).
Co ty opisujesz to specyficzny typ, a nie podtyp. –
Zobacz także [to] (https://stackoverflow.com/questions/23220161/what-is-the-point-of-renaming-types-in-ada) – NWS