Tipi personalizzati vs Condizioni ed eccezioni per il controllo dei parametri in Ada

3

La domanda: è considerata una pratica migliore l'utilizzo di tipi / sottotipi derivati o l'utilizzo di condizioni e gestione delle eccezioni per limitare gli input accettabili per un sottoprogramma in Ada? Capisco che in Ada2012 puoi utilizzare i contratti, ma che dire delle versioni precedenti come Ada95?

Il contesto: Voglio creare una serie di procedure che possono leggere / scrivere campi specifici in un pacchetto (rappresentato da un array di byte senza segno privato) per essere trasmessi da un dispositivo incorporato a un ASIC . Molti campi hanno dimensioni diverse e non si allineano con i limiti dei byte, quindi l'utilizzo di tipi standard consentirebbe a un programma che utilizza queste procedure di immettere valori illegali se deselezionato.

Note extra: Al di fuori della manipolazione del contenuto del pacchetto tramite questi sottoprogrammi, questi tipi non verrebbero utilizzati altrove. Inoltre, se fa la differenza, questo codice verrebbe utilizzato in un sistema critico per la sicurezza.

    
posta silentTee 27.11.2018 - 04:21
fonte

2 risposte

2

Devi assolutamente scegliere i sottotipi per specificare quali sottoinsiemi di un tipo sono validi per le singole operazioni che manipolano un tipo.

Puoi farlo anche usando i tipi derivati. Questo ha senso, se tu (per esempio) hai un numero finito di sottoinsiemi e la maggior parte delle tue manipolazioni non cambia quale sottoinsieme del tipo, a cui appartiene un'entità specifica.

In genere è possibile scrivere contratti sottotipo abbastanza buoni anche nell'Ada 95. Ada 2012 ha aggiunto ancora più dettagli a grana fine al formalismo del contratto.

Mi dispiace che la mia risposta sia un po 'astratta, ma spero che ti aiuti a iniziare.

    
risposta data 28.11.2018 - 17:13
fonte
3

La lingua di Ada ha storicamente un strong focus sul sistema dei tipi, con verifiche sia in fase di compilazione che in fase di esecuzione che le assegnazioni hanno senso e che le variabili contengono valori che rientrano nel loro intervallo valido.
Questa storia mi fa credere - non posso dirlo con certezza, dato che non sono un programmatore Ada - che un approccio derivato / sottotipo con i controlli generati dal compilatore sarà ampiamente preferito rispetto ai controlli manuali che il valore è compreso nell'intervallo previsto .

Oltre alle considerazioni specifiche sull'Ada, in genere è meglio trovare i problemi prima o poi. Se il tuo compilatore (o altri strumenti di costruzione) possono mostrarti che stai scrivendo valori illegali, allora è preferibile trovarlo in un test in fase di esecuzione. Prima ti viene notificato il problema, prima puoi correggerlo e meno sforzo ci vuole per vedere cosa deve essere corretto.

    
risposta data 27.11.2018 - 08:49
fonte

Leggi altre domande sui tag