Aufgabe des Dateiformats ist es, nicht-rekursive Datenfelder in Form einer sequentiellen Datei zu repräsentieren. Diese Datenfelder können entweder numerisch oder assoziativ sein und beliebige skalare Werte, oder wiederum andere Datenfelder enthalten, welchen den gleichen Anforderungen genügen müssen. Referenzen sind nicht zugelassen. Objekte werden analog zu JSON dargestellt, indem ihre öffentlichen Objektvariablen in Form eines assoziativen Datenfeldes gespeichert werden. Enthaltene nicht skalare Werte werden rekursiv behandelt.
Zweck dieses Dateiformats ist es, Parameter zu speichern, um Komponenten des Frameworks zu initialisieren. Zweck ist es nicht, größere Datenmengen in diesem Format zu speichern. Insbesondere ist das SML-Format nicht konzipiert als Ersatz für XML.
Unendliche Rekursionen werden nicht erkannt.
Zur Begründung ist Folgendes zu sagen: Der Test, ob eine beliebige Struktur unendliche Rekursionen aufweist ist nicht trivial. Der übliche Ansatz ist eine Pfadprüfung. Dabei fällt jedoch jeweils ein Overhead von T = O(n) Schritten an, wobei n der Länge des Pfades entspricht. Der Beweis dieser unteren Schranke für die Laufzeit ist trivial. Um Overhead zu vermeiden könnte in Betracht gezogen werden, diese Prüfung nur alle x Verarbeitungsschritte durchzuführen, wobei für die positive, ganze Zahl x mit x > 1 ein geeigneter Wert gewählt werden sollte. Trotz dieser potentiellen Optimierung ist damit zu rechnen, dass sich für das gesamte Programm inklusive Pfadprüfung eine quadratische Laufzeit ergibt. Dies ist in für viele Anwendungen jedoch nicht akzeptabel. Aus Gründen der Performance wurde daher absichtlich darauf verzichtet.
An dieser Stelle möchte ich anmerken, dass der naive Ansatz, die Zahl der Elemente zu bestimmen und zu prüfen, ob die Zahl der Iterationen die Zahl der Elemente übersteigt, selbstverständlich nicht praktikabel ist. Um alle Elemente zu "zählen", müsste eine vollständige Traversion durchgeführt werden. Falls diese jedoch einen unendlich rekursiven Pfad enthalten sollte, so würde das Programm niemals terminieren und das Ergebnis wäre somit undefiniert.
Thomas Meyer, www.yanaframework.net