In un 2013 presentation about the future of Standard ML, Bob Harper dice, nella diapositiva 9, che "la condivisione della struttura è interrotta". Qualcuno può dare maggiori dettagli su questo? Non ho abbastanza esperienza con la condivisione per capire cosa volesse dire.Come viene suddivisa la condivisione della struttura in Standard ML?
risposta
È danneggiato perché, come specificato, non può essere applicato a strutture con componenti di tipo trasparente. Ad esempio:
signature S = sig type t; type u = int end
signature T =
sig
structure A : S
structure B : S
sharing A = B
end
sarebbe già illegale, anche se naturalmente ti aspetteresti che questo andasse bene.
La cronologia qui è che la condivisione delle strutture è stata introdotta in SML'90, in cui non esistevano componenti di tipo trasparente. Con SML'97, quelli sono stati aggiunti. A quel punto, l'intera azienda con vincoli di condivisione è diventata un po 'obsoleta perché sono stati (in una certa misura) sostituiti da vincoli "dove tipo". Quindi, la semantica della condivisione fu enormemente semplificata e la condivisione della struttura degradata da uno zucchero primitivo a quello sintattico. Ma questo zucchero è stato definito in modo tale che ha funzionato solo con i programmi SML'90 - il che ha senso se lo si vede solo come un trucco di retrocompatibilità, ma non se si considera la struttura che condivide una caratteristica centrale di SML'97.
Le persone nella comunità SML non sono d'accordo sulla rilevanza dei vincoli di condivisione. Alcuni li considerano obsoleti, altri ancora importanti. Sfortunatamente, SML'97 non è riuscito ad aggiungere un vincolo "where structure", che avrebbe potuto sostituire correttamente il sharing della struttura.
La risposta di Andreas Rossberg ha già chiarito le cose, ma ho scritto al professor Harper prima della risposta di Andreas. Sto postando la sua risposta qui per i curiosi:
È un problema puramente tecnico con la definizione. In SML 90, era una nozione di condivisione delle strutture sopra e oltre la condivisione di tipo costituente. In SML 97 la condivisione della struttura è stata ridefinita per indicare la condivisione dei tipi costitutivi di , ma la formulazione è errata (ci sono diverse sostituzioni candidate, quindi i compilatori differiscono nel loro comportamento) . È comunque un angolo scuro, quindi nello schema delle cose è molto minore, ma l'errore e le incompatibilità associate a lo rendono inutilizzabile.
Grazie, Andreas. Speravo che rispondessi a questa domanda :) Ha senso ora. Ho anche scritto a Bob Harper per chiedere questo, quindi aggiungerò la sua risposta in un'altra risposta. –