Sembra esserci una tendenza verso oggetti immutabili e pura programmazione funzionale. Mentre riconosco i vantaggi, trovo difficile applicare questi principi alla programmazione della GUI, ad esempio. Ma trovo anche linguaggi imperativi classici con oggetti mutabili carenti. Mi stavo chiedendo se esiste un linguaggio o un sistema che abbraccia lo stato mutabile e lo rende particolarmente facile da usare.
Di seguito sono riportate alcune funzionalità che considero "progettate attorno alla mutabilità":
-
La possibilità di collegare eventi e ricevere una notifica di modifica per qualsiasi variabile. Sarebbe molto facile scrivere GUI e applicazioni MVC. E potresti semplicemente creare una
List<MyObject>
e inserirla in un widget di lista, e con un po 'di configurazione gestirà la tua lista per te, senza listview.insert (), ecc. Manuale -
Un sistema di tipi che considera lo stato. Ad esempio, se passo un
Car
in una funzione che richiede un working, il compilatore dovrebbe provare a dimostrare checar.broken == False
. Se non riesce a provarlo, non verrà compilato e devo assicurarlo (inserendo il codice in un bloccoif
o impostandolo manualmente su False). -
Una presa di concorrenza che ha senso per oggetti mutabili. Ad esempio, un'istruzione
atomic
, che garantisce che determinate istruzioni vengano eseguite insieme, utilizzando transazioni o blocchi. L'obiettivo non sono le prestazioni, ma la facilità d'uso e la reattività della GUI. Dovrei essere in grado di manipolare i dati e la GUI da qualsiasi thread, usandoatomic {step1; step2}
per garantire invarianti.
Non sto cercando un sistema con queste funzioni esatte , ma una scritta con lo stesso spirito. Il più vicino che ho visto è C # /. NET con le sue funzionalità di associazione dei dati.
Gtk + ha ListModels personalizzati che mantengono un GtkTreeView simile ai tuoi dati senza inserimenti / aggiornamenti manuali. Android ha ListAdapters simili. Non ho trovato una GUI thread-safe, ma puoi avvicinarti con un uso liberale di Invoke()
in C # / WinForms o gobject_idle_add
in Gtk +. Ci sono dei sistemi come quello che descrivo? O materiale di ricerca, riferimenti, ecc.?