Come convalidare l'utilizzo dei riferimenti?

0

Uso qui il termine "riferimento" come nel mondo C ++, non come in C # (per esempio). Uso la sintassi non C ++ di proposito - questa è una domanda generale, non riguardo questa particolare implementazione.

Avvio di qualcosa come C ++ di nuovo mi piacerebbe fare regole e convalida per evitare un caso in cui il riferimento sopravvive alla sua origine. Ad esempio questo sembra un utilizzo valido:

def foo(x ref int) ref int
    return x;
end

Ma questo è sbagliato:

def bar() ref int
    x int = 5;
    return x;
end

perché in bar esempio x è messo in pila e quando viene restituito un riferimento ad esso lo stack è già andato.

Finora non ho trovato la descrizione dell'algoritmo di analisi, ecco perché mi sto chiedendo: cosa consentire (ad esempio, definire i parametri come riferimenti) e come controllare quando l'uso viene abusato creando riferimenti ciondolanti?

    
posta greenoldman 09.01.2018 - 18:45
fonte

2 risposte

1

Quello che stai cercando si chiama escape analysis , e come quasi tutte le analisi statiche dei programmi equivalgono a risolvere il problema di interruzione.

Può essere risolto solo in circostanze limitate, in particolare, è molto più facile da risolvere se la lingua è specificamente progettata in modo tale da limitare i tipi di programmi che possono essere scritti in quel sottoinsieme che è suscettibile di analisi di fuga statica.

    
risposta data 10.01.2018 - 11:25
fonte
0

Se stai creando una lingua di basso livello, non c'è nulla che puoi fare per fermare i puntatori penzolanti , puntatori nulli , riferimenti circolari e perdite di memoria . Il meglio che puoi fare è fornire un debugger di memoria per aiutarti a rintracciare i bug.

D'altro canto, se si sta creando un linguaggio di livello superiore, è possibile interrompere tutti questi problemi non consentendo ai programmatori di accedere direttamente ai puntatori. Un esempio di questo è il comando POSIX ln . Un utente non può usarlo per le directory dei collegamenti rigidi; solo l'utente root può. Un utente non può semplicemente risolvere alcun problema con i puntatori.

    
risposta data 10.01.2018 - 14:18
fonte

Leggi altre domande sui tag