Sto leggendo la proposta del progetto Valhalla per aggiungere tipi di valore a Java . Sta discutendo per tipi di valori espliciti perché il compilatore non può spostare automaticamente le allocazioni dall'heap allo stack molto bene anche se gli oggetti sono immutabili (tutti i campi sono definitivi) perché non può sapere se un codice non verificherà improvvisamente il codice oggetto per l'uguaglianza di riferimento o prova a bloccarlo. L'identità dell'oggetto deve essere preservata e con essa l'allocazione dell'heap, la garbage collection e un carico di overhead per gli oggetti di piccole dimensioni che vengono allocati in cicli stretti.
La mia domanda è: perché l'identità dell'oggetto non può essere preservata nello stack? Voglio dire, rilasciare a ciascun oggetto un ID univoco e usarlo come sua identità invece del suo indirizzo. Gli oggetti immutabili possono quindi essere sempre passati per valore e mai raccolti.
Sembra una soluzione molto più semplice e più gradevole dei tipi di valore, anche se alcuni oggetti crescono di altri 8-12 byte. Ho usato C #, e i tipi di valore espliciti sono un dolore. Aggiungono un sacco di senso concettuale a una lingua.