Domanda

Sto cercando di dimostrare alcune dichiarazioni sull'esecuzione nei programmi Java in alcune forti restrizioni (in sostanza ho una congettura che se due metodi soddisfano un insieme di vincoli per un determinato input, allora sono equivalenti - cioè il valore di ritorno e lo stato dopo L'esecuzione è identica). Per dimostrarlo sto cercando una sorta di formalismo che mi permetta di parlarne.

Ho familiarità con la semantica operativa dei linguaggi funzionali e potrei eventualmente tradurre per loop/mentre i loop in funzioni ricorsive ... preferirei non farlo e sarebbe bello avere dei macchinari in modo da poter rimanere in una terra imperativa .

Più specificamente, voglio ragionare sul stato di un metodo al KIl passaggio dell'esecuzione. Questo include lo stato globale:

  • Chiama come this.field = 2 Aggiorna il nostro stato di classe
  • Chiama i parametri di modifica dello stato di aggiornamento al di fuori del nostro metodo:
    • myParam.setFoo(...)
    • myParam.x = y
  • Chiama i metodi statici
    • Blah.static_side_effects()

Suppongo che tutto questo sia deterministico. Cioè, voglio formalizzare il presupposto che se uno di questi aggiornamenti globali allo stato si verifica in due metodi, sia i cui stati di esecuzione globale e locale sono identici, allora anche il nuovo stato sarà identico - che ogni fase del calcolo è determinata proprio dallo stato globale e locale. Ciò ovviamente preclude RNG e parallelismo (ma potrei affrontarlo in seguito ...).

Qualche idea o fonti su come potrei avvicinarmi a questo? Il mio unico pensiero è trattare i metodi come un elenco di dichiarazioni e cercare di descrivere formalmente una semantica di dichiarazioni.

Se possibile, mi piacerebbe farlo a livello di lingua Java piuttosto che a livello di JVM. Questo potrebbe non essere fattibile, ma il mio obiettivo per ora è quello di fare alcune ipotesi ragionevoli sulla mia semantica operativa e poi prenderlo da lì.

Oh, un'ultima nota: qualsiasi suggerimento su come posso migliorare questa domanda sarebbe molto apprezzato. Sto un po 'agitando cercando di trovare la lingua giusta per porre la domanda e se sto abusando della terminologia (come lo stato di esecuzione locale/globale ...) Mi piacerebbe correggerlo.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top