ISO Prolog Kern

Jan Burse, erstellt 13. Okt 2010 Einen Prolog Interpreter gemäss dem ISO Kernstandard zu implementieren war eine Erfahrung die wir nicht missen möchten. Wir hatten schon einige Prolog Interpreter zu Forschungszwecken implementiert aber noch nie einen Abgleich mit dem ISO Kernstandard versucht. Da der ISO Kernstandard in den letzten Jahren zunehmende Anerkennung erfahren hat sahen wir es als nutzbringend an, einen unserer Prolog Interpreter dem Standard anzupassen. Wir haben noch nicht volle Kompatibilität erreicht, möchten aber unsere Erfahrungen teilen. Der ISO Kernstandard hatte einen erzieherischen Effekt auf unsere Entwicklung. Wir starteten damit die Ausnahmebehandlung und die zahlreichen Ausnahmen, die im Standard definiert sind, zu übernehmen. Wir fanden besonderen gefallen an den Ausnahmengrundklassen, die es uns erlaubten das Konzept auch für Prädikate anzuwenden, die nicht im ISO Kernstandard definiert sind. Uns gelang auch die Prologausnahmen auf die Ausnahmen in unserer Implementierungssprache Java abzubilden. Die Ausnahmen sparen uns einen Rückgabeparameter für Fehlercodes und die Java Wirtssprache liefert dafür eine effiziente Unterstützung. Wir konnten auch die Behandlung der Syntax verbessern indem wir dem ISO Kernstandard genauer gefolgt sind. Der Standard ist sehr modern in dem er Zechenbasiert ist und nicht Bytebasiert. Ein Problem mit der Zweideutigkeit von Operatoren hatten wir in einer vorhergehenden Realisierung über einen eigenen Datentyp für Zeichenketten umgangen. Wir folgen nun streng dem Ansatz dass Atome auch für Zeichenketten verwendet werden können und haben den separaten Datentyp fallen gelassen. Weiter ist unsere Syntax nun auch fähig die Funktorenlesart von Operatoren auszuschalten wie es im Standard definiert ist. Leider lässt der Standard einige Teile von Prologsystemen zum Konsultieren von Prologtexten und einige Teile zur interaktiven Hauptschleife offen. Ebenso ist die Fehlersuche in Prologcode nicht spezifiziert und wir finden keine Informationen wie mit kompilierten und nicht kompilierten Prädikaten umgegangen wird. Um eine gewisse Akzeptanz zu erreichen mussten wir uns nach einer anderen Quelle umschauen. Wir haben Information zum Konsultieren, zur Hauptschleife und zur Fehlersuche im DEC-10 Handbuch gefunden, der ehemalige Industriestandard zu Prolog und der Vorläufer des ISO Kernstandards. Der ISO Kernstandard liefert kein Rezept für eine effiziente Realisierung einer Prologmaschine. Die logischen Operatoren und die Behandlung der Datenbank sind erstaunlich genau beschrieben. Die vorliegenden Beispiele können zur Überprüfung einer Realisierung herangezogen werden. Aber der Schwerpunkt liegt nicht auf nicht-funktionalen Anforderungen. So finden wir z.B. eine Definition des cut die darauf basiert dass die Entscheidungspunkte nur während der Zurückverfolgung entfernt werden. Moderne Prologmaschinen können bezeichnenderweise Entscheidungspunkte von Platzhalterbindungen trennen um die frühzeitige Entfernung von Entscheidungspunkten zu erlauben. Obwohl der ISO Kernstandard sehr gut dem Zweck einer Funktionalenspezifikation erfüllt, haben wir ein eigenartiges Gefühl. So ist z.B. der halb-formale Anhang sehr langatmig, liefert aber nicht wirklich einen Mehrwert. Ausserdem wäre es vielleicht ratsam gewesen Module schon in den Kern aufzunehmen. Um dann die eingebauten Prädikate zu Datenströmen und Arithmetik wegzulassen. Dies würde den Kern verkleinern und man könnte die Wiederholung von Spezifikationen sparen, die anderswo schon zu finden sind. Über das Modulkonzept könnten die Datenströme und die Arithmetik separat dazu kommen. Etwas stärker empfinden wir die fehlende Programmschnittstellen-Orientierung des ISO Kernstandards als Nachteil. Eine Programmschnittstellen-Orientierung würde eine Verschiebung des Blickwinkels bedeuten. Der ISO Kernstandard würde nicht mehr von einem Prologsystem handeln, sondern von einer Prologkomponente die neben anderen Komponenten bestehen muss. Die Programmierschnittstelle würde die nötigen Call-in and Call-out Schnittstellen der Prologmaschine definieren. Dies würde eine breitere Anwendbarkeit von Prolog in der Industrie erlauben. Prologmaschinen könnten mit Anwendungen in einer Plug&Play Weise interagieren. Dies würde die Konkurrenz befruchten und Investitionen in Prologanwendungen sichern.

Kommentare