In einem 2013 presentation about the future of Standard ML, sagt Bob Harper, auf Folie 9, dass "Struktur teilen ist gebrochen". Kann jemand dazu mehr Details geben? Ich habe nicht genug Erfahrung mit Teilen, um zu verstehen, was er meinte.Wie ist die Strukturteilung in Standard ML gebrochen?
Antwort
Es ist fehlerhaft, da es wie angegeben nicht auf Strukturen mit transparenten Komponenten angewendet werden kann. Zum Beispiel:
signature S = sig type t; type u = int end
signature T =
sig
structure A : S
structure B : S
sharing A = B
end
wäre bereits illegal, obwohl Sie natürlich erwarten, dass dies in Ordnung ist.
Die Geschichte hier ist, dass Struktur-Sharing in SML'90 eingeführt wurde, wo keine transparenten Komponenten vorhanden waren. Mit SML'97 wurden diese hinzugefügt. An diesem Punkt wurde das gesamte Geschäft mit Sharing-Einschränkungen etwas veraltet, weil sie (bis zu einem gewissen Grad) durch "where type" -Einschränkungen abgelöst wurden. So wurde die Semantik des Teilens stark vereinfacht und das Teilen von Strukturen von einem primitiven zu einem syntaktischen Zucker degradiert. Aber dieser Zucker wurde so definiert, dass er nur mit SML'90-Programmen funktioniert - was sinnvoll ist, wenn man ihn nur als Rückwärtskompatibilitäts-Hack betrachtet, aber nicht, wenn man die Struktur als zentrales Merkmal von SML'97 betrachtet.
Die Mitglieder der SML-Community sind sich über die Relevanz der Freigabe von Einschränkungen nicht einig. Manche halten sie für veraltet, andere für immer wichtig. Leider konnte SML'97 keine Einschränkung "where structure" hinzufügen, die das Struktur-Shairing richtig hätte ersetzen können.
Andreas Rossbergs Antwort hat schon geklärt, aber ich habe vor Andreas Antwort Professor Harper geschrieben. Ich poste seine Antwort hier für die Neugierigen:
Es ist ein rein technisches Problem mit der Definition. In SML 90 gab es einen Begriff der Strukturteilung über die konstituierende Typ Sharing hinaus. In SML 97 wurde die Strukturfreigabe so geändert, dass sie sharing der Konstituenten-Typen bedeutet, aber die Formulierung ist falsch (es gibt mehrere Ersatzkandidaten, so unterscheiden sich Compiler in ihr Verhalten). Es ist sowieso eine dunkle Ecke, so in dem Schema von Dinge ist es sehr gering, aber der Fehler und die damit verbundenen Inkompatibilitäten machen es unbrauchbar.
- 1. Standard ml Datentyp Funktion
- 2. Standard ML Rekursive Funktion
- 3. Umkehrfunktion in Mylist Standard ml
- 4. GUI für Standard ML?
- 5. Unterstützt Standard ML Unicode?
- 6. Standard ML Palindrome ohne die Liste umzukehren
- 7. Standard Absicht URI gebrochen?
- 8. Standard ML rekursive Funktion Fehler
- 9. Standard ML Binary Tree Traversal
- 10. max Paare Funktion Standard ml
- 11. Standard-ML: Verwirrung über Referenzzellen
- 12. Running Standard ML unter Windows
- 13. Unterdrücken "val it" Ausgabe in Standard ML
- 14. BigInt für Standard ML/NJ
- 15. Weniger-als-Funktion in Standard ML
- 16. Was bedeutet "??" bedeuten in Standard ML
- 17. Wie schreibe ich BST Suchfunktion in Standard ML?
- 18. überprüfen, ob ein Baum vollständig ist Standard ml
- 19. Standard ml make bst aus einer Liste
- 20. Ist dieses Snippet legaler Standard ML gemäß der Definition?
- 21. Standard-ML-Exportoperator von Struktur als Infix
- 22. GL15 ist in lwjgl gebrochen
- 23. Standard ml hinzufügen, Elemente in einem benutzerdefinierten Datentyp
- 24. Ist selectedOptions gebrochen oder ...?
- 25. reCaptcha Styling ist gebrochen
- 26. Ist J2ME's Integer.parseInt() gebrochen?
- 27. System.IO.Exception: Pipe ist gebrochen
- 28. Ist Windows setsockopt gebrochen?
- 29. HTML-Design ist gebrochen
- 30. Standard ML wiederhole letzten Befehl, Pfeil nach links?
Danke, Andreas. Ich hatte gehofft, du würdest diese Frage beantworten :) Es macht jetzt Sinn. Ich habe auch Bob Harper geschrieben, um danach zu fragen, also füge ich seine Antwort in einer anderen Antwort hinzu. –