Oggetti uguali con identità diversa?
-
21-12-2019 - |
Domanda
È possibile in Rascal creare cloni di un oggetto con un'identità diversa in modo che siano uguali ma non identici?
Soluzione
No, Rascal ha semantica di valore.
data X = x();
bool alwaysTrue = x() == x();
.
Anche l'utilizzo di chiusure, funzioni come dati, non è possibile costruire due istanze distinguibili a
e b
che restituiranno ancora true su a == b
.La ragione è che le chiusure non sono mai considerate uguali a meno che tu non abbia un alias che punta alla stessa istanza.
Non c'è anche alcuna operazione clonativa o qualcosa del genere.Ci sono solo espressioni e il loro risultato è isomorfo all'albero di espressione che li ha creati.
Semanticamente Rascal non garantisce che tutti i valori sullo heap siano effettivamente condivisi o che siano semplicemente indistinguibili, quindi la prospettiva di ottimizzazione della memoria viene lasciata interamente all'implementazione di runtime.