2015-03-06 5 views

risposta

6

È 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.

+0

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. –

2

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.