DE69303013T2 - Anwendung einer sprache mit einer aehnlichen darstellung fuer programme und daten in der verteilten datenverarbeitung - Google Patents

Anwendung einer sprache mit einer aehnlichen darstellung fuer programme und daten in der verteilten datenverarbeitung

Info

Publication number
DE69303013T2
DE69303013T2 DE69303013T DE69303013T DE69303013T2 DE 69303013 T2 DE69303013 T2 DE 69303013T2 DE 69303013 T DE69303013 T DE 69303013T DE 69303013 T DE69303013 T DE 69303013T DE 69303013 T2 DE69303013 T2 DE 69303013T2
Authority
DE
Germany
Prior art keywords
language
function
functions
list
sml
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
DE69303013T
Other languages
English (en)
Other versions
DE69303013D1 (de
Inventor
Denis Attal
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Bull SAS
Original Assignee
Bull SAS
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Bull SAS filed Critical Bull SAS
Publication of DE69303013D1 publication Critical patent/DE69303013D1/de
Application granted granted Critical
Publication of DE69303013T2 publication Critical patent/DE69303013T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/312List processing, e.g. LISP programming language
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Multi Processors (AREA)

Description

  • Die vorliegende Erfindung betrifft die Verwendung einer eine für die Programme und die Daten gleichartige Darstellung besitzenden Sprache.
  • Herkömmlicherweise wird dieser Sprachtyp im wesentlichen im Gebiet der künstlichen Intelligenz verwendet. Verglichen mit herkömmlichen Sprachen führt dieser Sprachtyp zu einem ohne Beschränkung manipulierbaren funktionalen Gegenstand, zu einer wirksamen rekursiven Programmierung sowie zu einer automatischen Verwaltung des Programm- und Datenspeichers. Außerdem kann ein Programm kraft der gleichartigen Darstellung der Programme und der Daten sich selbst modifizieren, um neue Ereignisse zu berücksichtigen. Indessen wird seine Verwendung außerhalb seiner Anwendung im Gebiet der künstlichen Intelligenz nicht geschätzt, vor allem ist eine Vielzahl von Vorurteilen vorhanden, was seine Handhabung in anderen Gebieten und insbesondere in dem neuen Gebiet der verteilten Datenverarbeitungssysteme betrifft.
  • Um in diesem letzteren Gebiet auf diese Besorgnis zu antworten, sind besondere Mechanismen, sogenannte "RPC" (Remote Procedure Call), entwickelt worden, um den lokal ausgeführten Programmen zu ermöglichen, in entfernten Systemen installierte Prozeduren aufzurufen. Diese Mechanismen lassen die Verteilung des Zugriffs auf Anwendungsprogrammdienste zu. Dieser RPC- Mechanismus ermöglicht, ausgehend von einer herkömmlichen Sprache wie etwa der Sprache C einen Aufruf einer Prozedur auszuführen, der auf einer entfernten Maschine ausgeführt wird, wobei ein von dieser Maschine verschiedener adressierbarer Raum verwendet wird. Die RPC-Aufrufe ermöglichen die Verteilung des Zugriffs auf Anwendungsprogrammdienste und bieten den Programmierern Werkzeuge für die vereinfachte Konstruktion von Server-Client-Anwendungen. Indessen besitzt dieser Typ von RPC-Mechanismen seine Grenzen und weist sogar ernsthafte Nachteile auf. So definieren bei einem RPC-Aufruf in einer Server-Chent-Anwendung die Server- Programme Funktionen, die zusammen mit einer Liste oder mit einer Beschreibung der Parameter aufgerufen werden können, wobei diese Parameter vom dient zum Server über eine Entfernung gesendet werden, was äußerst statisch ist, wenig Flexibilität bietet und beispielsweise nicht ermöglicht, eine ausführbare Struktur wie etwa ein Codefragment zu senden. Somit ist es nicht möglich, den Inhalt einer Transaktion vollständig an einen Transaktions-Server zu senden und daraus die Ergebnisse zurückzugewinnen. Außerdem ist die Kommunikation zwischen Anwendungen, die auf verschiedenen Maschinen ablaufen, synchron, was Probleme der Blockierung bis zur Rückkehr der Antworten stellt. Der RPC-Mechanismus schlägt nämlich zur Vereinheitlichung des lokalen Datenverarbeitungssystems und des verteilten Datenverarbeitungssystems vor, den Begriff des Funktionsaufrufs auf das Netz zu verallgemeinern, d. h., daß die Parameter der aufgerufenen Funktion gesendet werden, woraus sich, da dieser Mechanismus auf synchrone Weise arbeitet, eine Blockierung ergibt, bis die Funktion einen Wert zurückliefert, wobei erst anschließend die Ausführung folgt. Außerdem werden Probleme der Kohärenz mit anderen Protokollen angetroffen, insbesondere mit X/WINDOWS (eingetragenes Warenzeichen von MIT). Wenn z. B. der jeweilige Datenaustausch mit den Terminals auf Protokollen mit Nachrichten, d. h. des asynchronen Typs, basiert, kann die Vereinheitlichung mit den Mechanismen des RPC-Typs, die Funktionsaufrufe ausführen, die ihrerseits nach Definition synchron sind, schwerlich erhalten werden. Allgemein ist die Wahl von Mechanismen des synchronen Typs für die Anwendungen im Gebiet der Telekommunikation ein Widerspruch mit bestimmten Konzepten der Asynchronizität, von Nachrichten, von Typen von Protokollen mit Bestätigungs- und Antizipations-Begriff sowie mit Erfassungskonzepten, die zur Kultur des Gebiets der Telekommunikation gehören.
  • Die vorliegende Erfindung hat zum Ziel, diese verschiedenen Nachteile zu beseitigen, und schlägt die Verwendung einer Sprache mit einer gleichartigen Darstellung für die Programme und die Daten vor, die einfach ist und die Anwendungen auf das verteilte Datenverarbeitungssystem erleichtert.
  • Hierzu wird die Sprache des obengenannten Typs verwendet für die Verteilung von Informationen und Verarbeitungen in einem Netzverwaltungssystem entsprechend ausführbaren Nachrichten, die einen auszuführenden Code transportieren, d. h. gleichzeitig die anzuwendenden Funktionen und die Daten, auf die die Funktionen angewendet werden sollen, wobei es sich um asynchrone Nachrichten handelt, die über das Netz in einem freien Format eines Interpretierers der Sprache einer Maschine zu einem weiteren Interpretierer der Sprache einer anderen Maschine geschickt werden, was außerdem eine dynamische Modifikation des Codes in Abhängigkeit von den während der Ausführung manipulierten Daten sowie eine dynamische Wanderung verschiedener Codefragmente in die verschiedenen Maschinen des Verwaltungs systems zuläßt.
  • Somit besteht die Idee der Erfindung darin, im Gebiet des verteilten Datenverarbeitungssystems eine symbolische Programmiersprache zu verwenden, die für die Anwendung im wesentlichen im Gebiet der künstlichen Intelligenz entwickelt worden ist, was im Gegensatz zu jeder Erwartung steht. Eine Nachricht wird in der symbolischen Sprache eines Interpretierers, der in einer Maschine läuft, an einen anderen Interpretierer einer anderen Maschine geschickt, diese Nachricht ist jedoch eine ausführbare Einheit oder ein Fragment einer ausführbaren Einheit, sie enthält nicht nur Daten, sondern außerdem die auf diese Daten anzuwendende(n) Funktionen(en), was einen Unterschied zum RPC-Mechanismus darstellt, in dem die Funktion lokal auf dem Server vorhanden ist und nur die Daten im Rahmen eines zwischen dem Client und dem Server definierten Protokolls über eine Entfernung geschickt werden. Die Funktion und die Daten bilden dann eine ausführbare Nachricht, die über das Netz geschickt wird, was zu einer großen Flexibilität beiträgt, die im Gebiet der Verteilung insofern vollkommen ungewöhnlich ist, als eine Anforderung ein freies Format besitzt, d. h. nicht durch ein Protokoll oder durch von seiten des Servers fixierte Funktionen definiert ist. Auf diese Weise kann eine lokale Maschine, die ein Programm enthält, Programmfragmente schicken, damit sie in den verschiedenen Maschinen ausgeführt werden.
  • Ein weiterer Vorteil ergibt sich aus der Wahl einer Sprache, die eine gleichartige Darstellung für die Programme und für die Daten hat und die sich nach Definition selbst modifizieren kann, um neue Tatsachen zu berücksichtigen, was daher das Lernen erleichtert und ein intelligentes System liefert, das den Code während der Ausführung dynamisch modifizieren kann. Gemäß der vorliegenden Erfindung kann das Schicken einer ausführbaren Nachricht, die ein Codefragment sein kann, das durch sich selbst verständlich ist, einem einfachen Funktionsaufruf oder statt dessen auf komplexe Weise einer Programmodifikation entsprechen, was die Flexibilität in einer Anwendung eines verteilten Datenverarbeitungssystems weiter verbessert. Somit wird das Senden des Inhalts einer Transaktion an einen Transaktions-Server und die Rückgewinnung der Ergebnisse erleichtert.
  • Außerdem beseitigt der Austausch von Nachrichten des asynchronen Typs jede Gefahr der Blockierung einer Anwendung des Systems, die auf verschiedenen Maschinen läuft. Wenn z. B. eine Anfrage oder eine Antwort auf eine Anfrage erwartet wird, wird die Arbeit der Anwendung fortgesetzt und sobald die Anfrage oder die Antwort auf eine Anfrage ankommt, wird eine Aktion ausgelöst. Ebenso ermöglicht die Asynchronizität des Austausches außerdem, jedes Kohärenzproblem mit anderen Protokollen zu beseitigen.
  • Schließlich ermöglicht die vorliegende Erfindung, eine ebenfalls sehr vorteilhafte Eigenschaft zu nutzen, die darin besteht, ein dynamisches Belastungsgleichgewicht zwischen den verschiedenen Prozessoren oder Maschinen (Maschinen im Netz, Multiprozessoren mit oder ohne gemeinsam genutzten Speicher, Stationsgruppen, ...), die jeweils einen Interpretierer der Sprache gemäß der Erfindung besitzen, zu erleichtern. Ein Codefragment, das aus einer Gruppe von komplexen Operationen besteht, kann dynamisch in irgendeine der Maschinen des Systems wandern, während ein anderes Codefragment in eine zweite Maschine wandern kann usw., wobei die Gesamtheit in der Weise verwaltet wird, daß die Belastung verteilt ist, d. h., daß die Codefragmente sich in der Weise aufrufen können, daß der Bedarf an der Zentraleinheit (CPU) auf die verschiedenen Maschinen aufgeteilt ist. Diese letztere Eigenschaft hat außerdem die vorteilhafte Wirkung, eine hohe Verfügbarkeit des Systems zuzulassen, das eine Verteilung oder eine andere Gruppierung der Maschinen in dem Fall ermöglicht, in dem eine von ihnen ausfällt. Eine solche Eigenschaft, die auf einfache Weise durch den Formalismus der gemäß der Erfindung verwendeten Sprache erhalten wird, würde mit einer herkömmlichen Sprache, beispielsweise des Typs C, eine hohe Komplexität erfordern, wobei jede Maschine des Systems den gesamten Code besitzen müßte, um sämtliche auszuführenden Tasks wirklich auszuführen.
  • Gemäß einer bevorzugten Anwendung der vorliegenden Erfindung ist die verwendete Sprache eine Sprache des Typs LISP.
  • Es ist bemerkenswert, daß der Interpretierer der Sprache jeder Maschine hauptsächlich aus einem Kern aufgebaut ist, um das auszuführende Programm zu verarbeiten, indem er sich sowohl auf interne Dienste: Auswertemittel, Speicherverwaltung, als auch auf den die primitiven Funktionen der Sprache ausführenden Code einer programmartigen Schnittstelle stützt, die zwischen dem Kern und dem die primitiven Funktionen ausführenden Code dokumentiert ist, um den Zugriff auf mehrere Dienste zuzulassen und die Erweiterung der Sprache und des Interpretierers auf neue primitive Funktionen zu erleichtern.
  • Dieser Interpretierer ermöglicht, auf vereinfachte, schnelle und wirksame Weise eine gewünschte Anwendung zu entwickeln. Kraft der verwendeten Sprache können die verschiedenen Funktionen codiert (in einer Umgebung, die durch den Interpretierer und verschiedene Bibliotheken gebildet ist, auf die der Interpretierer Zugriff hat) und schnell getestet werden, ohne die herkömmlichen Phasen der Kompilierung-Verbindung-Ausführung zu durchlaufen, die für die anderen Programmiersprachen notwendig sind. Somit wird der Code niemals kompiliert, wobei jeder vorhandene Code dann, wenn der Interpretierer aufgerufen wird, geladen und sofort interpretiert wird. Die programmartige Schnittstelle bietet den Zugriff auf mehrere Dienste, wobei sie klar und dokumentiert sein muß, um die Erweiterung der Sprache und des Interpretierers selbst auf neue primitive Funktionen, die z. B. den Zugriff auf neue Dienste bieten, vorteilhaft zu erleichtern.
  • Die folgende Beschreibung mit Bezug auf die beigefügte Zeichnung, die insgesamt anhand eines nicht beschränkenden Beispiels gegeben wird, macht gut verständlich, wie die Erfindung verwirklicht werden kann.
  • Die einzige Figur gibt ein Beispiel der Struktur an, die einen Interpretierer und eine Gruppe von Bibliotheken repräsentiert, auf die er Zugriff hat.
  • In der einzigen Figur ist der Interpretierer mit INT bezeichnet, während die Gesamtheit der Bibliotheken mit LIB bezeichnet ist. Der Sprachinterpretierer INT ist hauptsächlich aus einem Kern K, einer programmartigen Schnittstelle API und einem Satz von Funktionen SOF aufgebaut, die die primitiven Funktionen des Interpretierers INT ausführen. In diesem Satz von Funktionen können grob zwei Kategorien unterschieden werden. Eine erste, in der die Grundfunktionen BF angeordnet sind, d. h. die eigentlichen Funktionen der Sprache, die eine gleichartige Darstellung für die Programme und für die Daten besitzen, z. B. und auf vorteilhafte Weise die Grundfunktionen von LISP. Eine zweite, zu der die erweiterten Funktionen gehören, die die Schnittstelle mit den verschiedenen Diensten gewährleisten, die unter der Bezeichnung LIB repräsentiert sind. Somit ermöglicht in dem in der einzigen Figur gezeigten Beispiel ein Satz von Funktionen SAF den Zugriff auf eine Bibliothek, die zu einer strukturierten Sprache SLL gehört, die ihrerseits als Schnittstelle mit den (nicht gezeigten) relationen Datenbanken dient. Ein weiterer Satz von Funktionen XAF ermöglicht den Zugriff auf eine Bibliothek XML, deren Aufgabe darin besteht, die Komponenten zu liefern, um graphische Anwenderschnittstellen zu entwickeln und zu verwalten. Ein dritter Satz von Funktionen GAF ermöglicht den Zugriff auf eine Bibliothek GOL, die die Anwendungen zuläßt, die die bearbeiteten graphischen Objekte verwenden. Ein vierter Satz von Funktionen MIF ermöglicht den Zugriff auf eine Bibliothek MTL, die ihrerseits als Schnittstelle mit den Verwaltungsdiensten für das Netz und für Informationssysteme dient.
  • Für die erste oder für die zweite Kategorie von Funktionssätzen führt die Verwendung einer primitiven Funktion der gemäß der Erfindung verwendeten Sprache (die im folgenden mit dem Ziel der Vereinfachung SML-Sprache genannt wird) zur Ausführung einer Prozedur, die unter dem Namen Grundelement-Codierungsfunktion bekannt ist.
  • Eine Grundelement-Codierungsfunktion wird ihrerseits kompiliert, da der restliche Interpretierer ursprünglich z. B. in der Sprache C geschrieben ist. Die Eingangsargumente werden in der SML-Sprache empfangen, weil sie von einer Aufrufvorrichtung stammen, die in der SML-Sprache arbeitet. Ebenso ist der zur Aufrufvorrichtung zurückgesendete Wert stets in der SML- Sprache vorhanden.
  • Da es sich um Grundfunktionen BF (in der SML-Sprache) handelt, findet eine Rücksendung zur Aufrufvorrichtung statt, sobald die Grundelement-Codierungsfunktion ihre Task erfüllt hat. In dem Fall, in dem ein Aufruf der SML-Funktion eine Zugriffsanforderung auf einen der von der Gesamtheit LIB angebotenen Dienste repräsentiert, muß jedoch die Grundelement-Codierungsfunktion eine zusätzliche Arbeit ausführen, die im allgemeinen zur Ausführung der folgenden Tasks führt:
  • - Validierung der Eingangsargumente (in der SML-Sprache),
  • - falls kein Fehler vorhanden ist, Umsetzung der Argumente in der SML-Sprache in Argumente in der Sprache des Typs C,
  • - Aufruf einer Prozedur in einer der externen Bibliotheken der Gesamtheit LIB, die Eingangsargurnente in der Sprache des Typs C liefert,
  • - nach der Rückkehr der externen Prozedur Rückkehr zur Aufrufvorrichtung, die einen Rückkehrwert der SML-Sprache liefert.
  • Es ist bemerkenswert, daß die SML-Sprache die Ausführung einer sehr großen Anzahl von Anwendungen im Gebiet der verteilten Datenverarbeitungssysteme, die auch kooperative Datenverarbeitungssysteme genannt werden, ermöglicht. Diese Sprache weist die Merkmale der Sprache des Typs LISP auf und bietet sich an, um wirksame und kohärente Mittel für den Zugriff, die Manipulation und die Darstellung von Verwaltungsinformationen für Netze und Informationssysteme zu liefern. Hierzu muß sie die folgenden Hauptregeln berücksichtigen:
  • - Die verwalteten Gegenstände sind gemäß den Regeln der ISO- Norm definiert;
  • - die Operationen an den verwalteten Objekten sind kohärent und stimmen mit jenen überein, die in der ISO-Norm für die Verwendung von Verwaltungsdiensten für Netze und Informationssysteme beschrieben sind (siehe ISO CMIS);
  • - der Zugriff auf Datenbanken ist über eine strukturierte Sprache wie etwa SQL möglich;
  • - die Anwenderschnittstelle, beispielsweise für den Dialog oder die Anzeige von Informationen, wird über Funktionen verwaltet, die den Zugriff einerseits auf Komponenten für die Entwicklung und die Verwaltung von graphischen Anwenderschnittstellen wie z. B. X/MOTIF und andererseits auf Anwendungen ermöglichen, die die bearbeiteten graphischen Objekte verwenden, etwa das System Go (Graphic Objects).
  • Die gemäß der Erfindung verwendete SML-Sprache ist durch die Sprache "Common LISP" beeinflußt, sie versucht jedoch nicht notwendigerweise, mit dieser vollständig kompatibel zu sein, weil die SML-Sprache versucht, Ziele zu erreichen, die von jenen von "Common LISP" oder von jedem anderen LISP-Dialekt grundsätzlich verschieden sind. Die Gesamtheit der LISP-Dialekte wird nämlich vorwiegend in dem Gebiet der künstlichen Intelligenz verwendet, während die SML-Sprache an Anwendungen in verteilten Datenverarbeitungssystemen und an die Integration von Verwaltungsdiensten angepaßt ist. Aus diesem Grund sind in der SML-Sprache wesentlich weniger Grundfunktionen notwendig als beispielsweise in "Common Lisp" vorgeschlagen werden.
  • Es sind weitere Unterschiede zwischen der SML-Sprache und "Common LISP" vorhanden. So kann in der SML-Sprache ein Atom einen einzigen Wert besitzen, während die herkömmlichen LISP- Dialekte beispielsweise ermöglichen, daß einem Namen eine Variable und eine Funktion zugeordnet sind, ohne daß die Gefahr eines Konflikts bestünde. Ebenso werden in der SML- Sprache die Listen intern als Tabellen manipuliert, um die Abtastoperationen für die Analyse und die Untersuchung der Informationen zu beschleunigen.
  • Es ist ebenfalls wichtig anzumerken, daß die verwalteten Objekte einer Verwaltungsinformationsbank (Bank, die sämtliche Informationen enthält, die für eine gegebene Anwendung nützlich sind), die eine Baumstruktur besitzen, einfach in Form von Listen dargestellt werden, wobei diese Darstellung auf eine für die SML-Sprache vollkommen natürliche Weise erhalten wird.
  • Die externen Bibliotheken der Gesamtheit LIB sind aus kompilierten Prozeduren gebildet, die ursprünglich in der Sprache des Typs C geschrieben sind, im Unterschied zu den Grundelement-Codierungsfunktionen ignorieren sie jedoch die Argumente oder Objekte des Typs SML. Diese letzteren führen eine Umsetzung der Argumente des Typs SML in die Sprache des Typs C oder die umgekehrte Umsetzung aus und können somit als Prozeduren betrachtet werden, die die externen Bibliotheken der Gesamtheit LIB und die SML-Funktionen miteinander verbinden.
  • Die Verwendung von Funktionen wie etwa XAF oder MIF ist obligatorisch, um einerseits einem Anwender zu ermöglichen, daß er auf jede Anwendung Zugriff hat, und um andererseits zu ermöglichen, eine in einem Verwaltungsdienst für Netze und Informationssysteme (z. B. Datenbank) enthaltene Information wiederzufinden. Die Verwendung der Funktionen GOF sind, obwohl nützlich, nicht obligatorisch, während die Funktionen SAF für eine Anwendung niemals obligatorisch sind. Tatsächlich werden die Funktionen SAF nur dazu verwendet, die Erzeugung und/oder den Zugriff auf relationale Datenbanken zu ermöglichen. Die Beziehung zu einer solchen Datenbank kann für eine spezifische Verwendung einer Anwendung hergestellt werden; ebenso kann die Datenbank von mehreren Anwendungen genutzt werden.
  • Die Schnittstelle API läßt die Anwendung jeder Funktion SAF, XAF, GAF und MIF über eine Funktion BF in der SML-Sprache zu, die die Ausführung einer SML-Grundelement-Codierungsfunktion zur Folge hat. Nach einigen grundlegenden Verifikations- und Formatierungsoperationen ruft die SML-Grundelement-Codierungsfunktion die adäquate Funktion auf, die den Zugriff auf eine der externen Bibliotheken der Gesamtheit LIB ermöglicht.
  • Außerdem besteht die Rolle des Kerns K darin, das Verbindungsglied zwischen einem Aufruf einer SML-Funktion und einer ein Grundelement codierenden SML-Funktion zu erzeugen. Die SML- Grundelement-Codierungsfunktionen sowie die Funktionen SAF, XAF, GAF und MIF sind Prozeduren in der Sprache des Typs C mit Code-Kompilierer. Der Aufruf der ursprünglichen SML-Funktion wird seinerseits interpretiert. Im allgemeinen entspricht die Interpretationsphase wenigstens einem Prozent der Ausführungsdauer, wobei der größte Teil der Verarbeitungsdauer bei der Ausführung der kompilierten Codes verstreicht.
  • Ein wichtiges und vorteilhaftes Merkmal der SML-Umgebung beruht auf ihrem Reaktionsvermögen auf äußere Ereignisse. So kann eine SML-Anwendung mittels der Schnittstelle auf verschiedene Dienste zugreifen und fordern, daß ihr jedes Ereignis, das auftritt, gemeldet wird. Zum Beispiel kann die Aktion eines Benutzers (auf einer Tastatur, einem Bildschirm, einer Maus, ...) als spezifisches Ereignis angesehen werden, das eine SML-Anwendung "aufweckt", die den Beginn eines Dialogs mit dem Benutzer ermöglicht. Diese "Aufweck"-Operation impliziert die Ausführung von spezifischen SML-Prozeduren im Hinblick auf die Verarbeitung des Ereignisses. Derartige Prozeduren, die Rückruf- oder "call back"-Prozeduren genannt werden, sind für die Entwicklung jeder SML-Anwendung von höchster Wichtigkeit.
  • Eine SML-Anwendung wird für die Bearbeitung von Ereignissen nach der Erzeugung von Aufrufen an die geeignete Quelle von Ereignissen und nach der Lieferung des Namens der Rückrufprozedur, die ausgelöst werden muß, wenn ein Ereignis auftritt, begonnen.
  • Eine SML-Anwendung kann tatsächlich als Sammlung von Rückrufprozeduren betrachtet werden. Bei Beginn der Anwendung und nach der Initialisierung meldet diese den Ereignisquellen ihre Forderungen, indem sie die Namen der geeigneten Rückrufprozeduren liefert. Anschließend erwartet die Anwendung das Auftreten der Ereignisse.
  • Die Ereignisse, die auftreten, werden vom Kern K des SML- Interpretierers verwaltet. Somit ist der Kern nicht nur für die Beziehungen zwischen den SML-Aufrufen und- den die Grundelemente codierenden SML-Funktionen, sondern gleichermaßen für die Verarbeitung der Ereignisse verantwortlich. Wenn ein Ereignis, das von einer gegebenen Quelle kommt, auftritt, erwartet der Kern gegebenenfalls die Inaktivität der Anwendung und aktiviert anschließend die geeignete Rückkehrprozedur.
  • Falls eine Anwendung gerade ein Ereignis verarbeitet und wenn ein weiteres Ereignis auftritt, erwartet der Kern die Beendigung der momentanen Task, bevor er die dem neuen Ereignis entsprechende Rückkehrprozedur aktiviert. Somit können die Ereignisse für eine gegebene Anwendung die Verarbeitung abwarten, wobei die erste in der Warteschlange die nächste ist, die zu verarbeiten ist. Für die Verarbeitung der Ereignisse gibt es keinen Prioritätsbegriff.
  • Gemäß den auf die vorliegende Erfindung bezogenen Programmierungskonzepten muß eine beliebige SML-Anwendung, die entwikkelt werden soll, hauptsächlich die zwei folgenden wesentlichen Tasks ausführen:
  • - Erzeugen einer Schnittstelle mit dem Benutzer, was die Darstellung von Objekten auf dem Bildschirm (Fenster, Dialogfelder, Tasten, ...) erfordert, welche für die Steuerung des Dialogs zwischen dem Benutzer und der Anwendung verwendet werden,
  • - Wiedergewinnen, Manipulieren und Darstellen der vom Benutzer geforderten Information.
  • Die SML-Sprache liefert die Schnittstelle mit den verschiedenen Funktionen, die die Ausführung dieser zwei wesentlichen Tasks zulassen.
  • Die Benutzerschnittstelle ist gewöhnlich codiert, um Systeme für die Entwicklung und die Verwaltung von graphischen Benutzerschnittstellen wie z. B. das bekannte System OSF/Motif- X/Windows (eingetragene Warenzeichen der Open Software Foundation bzw. von MIT) zu verwenden. Die SML-Sprache liefert die Schnittstelle für die kompilierten XAF- Funktionen, die auf die externe Bibliothek XML, z. B. X/MOTIF, zugreifen.
  • Sobald die Anwendung die Information bestimmt hat, die vom Benutzer gefordert wird, muß sie in der folgenden Stufe diese Information wiedergewinnen.
  • Die Gesamtheit der Informationen, die für die verschiedenen Anwendungen verfügbar gemacht werden müssen, wird verwaltete Informationsbank MIB genannt. Diese Bank besteht nicht aus einem einfachen Verzeichnis von Daten, wie dies für eine zentralisierte Datenbank der Fall ist, sondern ist von konzeptueller Art, weil sie die Informationen repräsentiert, die geliefert werden müssen, wenn sie notwendig sind.
  • Die Wiedergewinnung einer Information in der Bank MIB hat dann keine Zugriffsanforderung auf eine Datenbank zur Folge. Dies hat die Anforderung einer Information von einer Komponente zur Folge, die die geforderte Information liefern kann. Jede ihrer Komponenten verwaltet einen Teil der Bank MIB.
  • Die Wechselwirkung zwischen einer Anwendung (anfordernde Komponente) und einem Informationsverwalter (Informationen liefernde Komponente) wird mittels Nachrichten erhalten, die zwischen den zwei Komponenten geschickt werden. Ein Verwalter antwortet auf Informationsanforderungen, indem er die Anwendung mit Teilen von ihm bekannten Objekten versorgt, wobei der Verwalter dieser Objekte im folgenden Objektverwalter genannt wird.
  • Die Umgebung, in der die Erfindung Anwendung findet, benutzt vom semantischen Gesichtspunkt aus ein "objektorientiertes" Paradigma, was bedeutet, daß ein Programmierer keinen "prozedurorientierten" Weg beschreitet. Ein Objekt unterscheidet sich von einer Prozedur dadurch, daß es eine Gesamtheit ist, von der eine bestimmte Anzahl von Aktionen angefordert werden kann. Die zu einem Objekt gehörenden Daten werden niemals durch anderes als durch das Objekt selbst direkt manipuliert, außerdem gibt es kein Konzept globaler Daten, wie dies im allgemeinen für das "prozedurorientierte" Modell der Fall ist.
  • Um unter Verwendung eines "objektorientierten" Modells eine Anwendung im vorliegenden Kontext zu entwickeln, muß im Speicher gespeichert sein, daß eine Gesamtheit, die an ein Objekt eine Nachricht schickt, nicht das Ende der Verarbeitung der Nachricht durch das Objekt abwarten muß, sondern wegen der asynchronen Funktionsweise andere Nachrichten an andere Objekte schicken kann, wobei stets die Antwort erwartet wird, die auf die zum ersten Objekt geschickte Nachricht gegeben wird. Wenn dagegen eine Prozedur aufgerufen wird, sperrt der Aufrufcode jeden anderen Aufruf, solange die Prozedur nicht bestätigt ist, wobei die Funktion synchron ist.
  • Bei der Ausführung dieser verschiedenen Anwendungen können die Nachrichten ein Objekt bezeichnen und direkt auf dieses angewendet werden, weil dieses letztere nicht selbst die von einer Anwendung geschickten Nachrichten verarbeitet, da der Objektverwalter diese Verarbeitung vornimmt.
  • Es ist möglich, eine Entsprechung zwischen diesem Anwendungs- und Objektverwalter-Modell und dem Client-Server-Modell herzustellen, in welchem die Anwendungen die Clients und die Objektverwalter die Server sind. Dies erfordert nur, daß die Anwendungen die Objektverwalter-Dienste anfordern. Wenn ein Objektverwalter eine von einer Anwendung gesendete Nachricht empfängt, interpretiert und verarbeitet er die Nachricht.
  • Wenn davon ausgegangen wird, daß ein Integrationsmittel ein Objektverwalter ist, der die Informationen an eine Anwendung liefert, die eine Anforderung gesendet hat, muß dieses Integrationsmittel für die Lieferung der Informationen über eine Schnittstelle mit einem Mittel (im allgemeinen eine Komponente eines anderen Systems) kommunizieren, das die Attributwerte eines Objekts verwaltet, das von einer Verwaltungs-Informationsbank verwaltet wird.
  • Ein wichtiges Merkmal einer Anwendung ist, daß sie direkt mit dem Benutzer in Wechselwirkung tritt, was ein Objektverwalter nicht tut. Eine Anwendung empfängt über die Benutzerschnittstelle Anforderungen und schickt die Informationen zum Benutzer zurück, hingegen verwaltet eine Anwendung nicht die Objekte, außerdem wirkt sie nicht mit anderen Anwendungen oder anderen Objektverwaltern zusammen.
  • Wie oben bereits gesehen, reagiert eine Anwendung auf Ereignisse, was bedeutet, daß sie tatsächlich darauf wartet, daß ein Ereignis ankommt, beispielsweise die Wechselwirkung mit einem Benutzer. Die Anwendung erzeugt indessen nicht selbst Ereignisse, wobei diese letzteren einzig von den Objektverwaltern erzeugt werden.
  • Wenn in einer SML-Umgebung eine Anwendung verwendet wird, muß sie bereit sein, auf Eingriffe eines Benutzers zu antworten. Die Informationsanforderungen eines Benutzers rufen Wechselwirkungen zwischen der Anwendung und einem oder mehreren Objektverwaltern hervor. Dies hat dann zur Folge, daß einerseits der oder die Objektverwalter aktiv vorhanden sind, und daß andererseits dieser oder diese letzteren bereit sind, die von den Anwendungen gesendeten Nachrichten zu empfangen.
  • Hierzu sind die Verwalter stets bereit zu arbeiten und müssen aktiv bleiben, solange die Anwendungen aktiv sind.
  • In diesem Zusammenhang kommunizieren sämtliche Anwendungen sowie die Objektverwalter miteinander über Kommunikationsinfrastrukturen, die genormte Protokolle und Dienste verwenden.
  • Diese Infrastruktur umfaßt die Kommunikations-Verwaltungsdienste, die ihrerseits Verwaltungsdienste für Netze und Informationsdienste enthalten.
  • Die Anwendungen wie auch die Objektverwalter haben auf die Verwaltungsdienste für Netze und Informationssysteme (die auf der OSI CMIS-Norm basieren) Zugriff. Eine Anwendung hat auf diese Dienste (z. B. CMIS) über die API-Schnittstelle mittels der Funktionen BF und MIF und dann über die externe Bibliothek MIL Zugriff, die ihrerseits als Schnittstelle mit den Diensten wie etwa CMIS dient.
  • Zwei wichtige Dienste können von den Verwaltungsdiensten für Netze und Informationssysteme wie etwa CMIS für die betreffenden Anwendungen zur Verfügung gestellt werden:
  • - Liefern eines Vermittlungs- oder Leitungsdienstes zwischen den Anwendungen und den Objektverwaltern, indem bestimmt wird, welcher Verwalter eine Nachricht empfangen soll, die von einer Anwendung in Abhängigkeit vom Typ des Objekts, das die Anwendung spezifiziert, gesendet wird (diese letztere weiß nicht, ob der Objektverwalter sich im selben System oder in einem anderen System befindet).
  • - Bereitstellen von Funktionen für die Anwendungen, welche die Ausführung von Operationen an den Objekten zulassen, die von einer Bank von verwalteten Objekten verwaltet werden, wobei die interessantesten Operationen die folgenden sind:
  • . GET: Wiedergewinnen von Informationen eines Objekts (der Werte dieser Attribute), was die am häufigsten verwendete Operation ist;
  • . CANCEL GET: einer Anwendung erlauben, an die Verwaltungsdienste für Netze und Informationssysteme zu melden, daß die Anzahl von nach einer GET-Operation bereits empfangenen Antworten ausreicht und folglich jede andere Antwort eines Objektverwalters zurückgewiesen werden muß.
  • . SET: den Attributen der Objekte die spezifischen Werte verleihen.
  • . CREATE: Erzeugen einer Objektinstanz.
  • . DELETE: Beseitigen einer Objektinstanz.
  • Eine Anwendung kann nur dann die Attributwerte fixieren, wenn die Definition des Objekts diese Operation zuläßt. Dies trifft auch für die Operationen CREATE und DELETE zu.
  • Im folgenden wird ein (nicht beschränkendes) Beispiel eines Satzes von Funktionen BF in der SML-Sprache bezüglich bestimmter Konventionen einerseits und seiner syntaktischen Beschreibung andererseits beschrieben.
  • Nach Konvention:
  • Ein Literalsymbol bedeutet, daß es selbst eher ein Datum als eine Referenz ist.
  • Ein Sternchen * bedeutet, daß das ihm vorangehende Symbol optional ist, das so oft wie gewünscht wiederholt werden kann.
  • Ein Zeichnen + bedeutet, daß das ihm vorangehende Symbol so oft wie gewünscht wiederholt werden kann, daß es jedoch wenigstens einmal vorhanden sein muß.
  • Die geschweiften Klammern {} bedeuten, daß die Gruppe der Symbole zwischen den Klammern als ein einziger Ausdruck betrachtet wird.
  • Die eckigen Klammern [] bedeuten, daß die Gruppe von Symbolen zwischen den Klammern optional ist.
  • Ein Trennstrich bedeutet, daß mehrere Alternativen vorhanden sind.
  • Jeder Kommentar beginnt durch ein Semikolon und endet am Ende der Zeile.
  • Die Zahlen sind durch 32 Bits mit Vorzeichen repräsentiert und können in Dezimalform (Standardeinstellung) in Hexadezimalform (#x oder 0x) oder in ihrem ASCII-Code (#/J) geschrieben sein.
  • Die Symbole sind Identifizierer, die die Benennung der Funktionen oder der Variablen ermöglichen.
  • Ein Symbol, das mit Doppelpunkt (:) beginnt, ist ein Schlüsselwort. Die Schlüsselwörter werden in der Definition der Funktionen verwendet.
  • Die Symbole in der SML-Sprache sind einwertig, weshalb sich ein Symbol auf eine Funktion oder auf eine Variable, jedoch nicht auf beide beziehen kann.
  • Wie in jedem Lisp-Dialekt ist eine Liste zugleich eine Datenstruktur und eine Programmstruktur. Standardmäßig wird eine Liste bewertet, wobei das erste Element eine Funktion sein muß. Eine Bewertung kann dennoch vermieden werden, indem die Funktion (') verwendet wird.
  • Die Listen sind erweiterbare Gruppen von aufeinanderfolgenden Elementen, die in einem Speicher gespeichert sind, weshalb sie keine herkömmliche LISP-Struktur von verknüpften Zellen besitzen. Die Listen oder die Listenverknüpfungen (Gruppen von Listen) werden indessen wie Folgen von Common LISP verarbeitet.
  • Eine "Eigenschafts"-Liste ist eine spezielle Liste, die aus Paaren aufgebaut ist, wobei jedes Paar ein Attribut und dessen zugehörigen Wert enthält, wobei das Attribut ein Symbol sein muß.
  • Die Verknüpfungen von Listen sind in Anführungszeichen gefaßt.
  • Es folgt die Aufzählung der Hauptsteuerfunktionen.
  • - "Catch" und " throw": diese Funktionen, die verhältnismäßig außergewöhnlich manipuliert werden, weisen einen leistungsstarken Mechanismus auf, um eine komplexe Verarbeitung zu verlassen. Die Funktion "catch" bewertet eine Form, wenn jedoch ein "throw" mit demselben Etikett während der Bewertung der "Form" auftritt, wird die Bewertung nicht zu Ende geführt, wobei "catch" zur Bewertung des "Ergebnisses" zurückkehrt.
  • Das Etikett muß für die Steuerübertragung als Ziel definiert sein. "Catch" und "throw" treten paarweise auf. Mehrere Kombinationen von "catch" und "throw" können mit verschiedenen Etiketten verwendet werden+ Einem "throw" entspricht obligatorisch ein "catch", falls ein "throw" mit einem unbekannten Etikett angetroffen wird, wird ein Fehler gemeldet.
  • - "Cond": dies ist ein konditionaler Test. Diese Funktion bewertet die "Form", die dem ersten Test zugeordnet ist, der eine verifizierte Bedingung zurücksendet. Die Funktion sendet die Bewertung der letzten ihrer Formen zurück. Falls keine Form vorhanden ist, wird ein einfacher Testwert zurückgesendet. Wenn jeder Test ein "falsch" erzeugt, (es ist nichts gefunden worden), sendet die Funktion "cond" ein "falsch" zurück.
  • - "do": diese Funktion führt eine allgemeine Iteration aus und liefert einen verallgemeinerten Iterationsmechanismus mit einem beliebigen digitalen Index. Zu Beginn sind die Variablen mit ihrem Anfangswert verbunden, anschließend führt die Funktion eine Schleife aus, die folgendermaßen funktioniert:
  • . Bewerten des Endtests. Falls dieses Attribut verifiziert wird und "Ergebnisse" spezifiziert sind, findet eine Bewertung der "Ergebnisse" und eine Rückkehr von der letzten Bewertung statt. Falls "Ergebnisse" nicht spezifiziert sind, wird "falsch" zurückgesendet.
  • . - Bewertung jeder "Form".
  • . - Bewertung der Ausdrücke "pro Stufe" von links nach rechts, wobei jedes Ergebnis mit dem entsprechenden variablen Index verbunden ist. Falls "Stufe" weggelassen wird, bleibt die Variable unverändert.
  • - "dolist": diese Funktion führt eine Iteration in den Elementen einer Liste aus, weist nacheinander jedem Element der Liste eine "Variable" zu und bewertet jede "Form". Falls "Ergebnis" fehlt, wird "falsch" zurückgesendet.
  • - "dotimes": diese Funktion ermöglicht die Erzeugung einer Schleife von Null bis (n - 1), indem auf die folgende Weise vorgegangen wird. Zunächst bewertet sie die Anzahl der aufzuführenden Durchläufe, wobei die Anzahl ganzzahlig sein muß. Anschließend weist sie nacheinander die ganzen Zahlen von Null bis (bewertete Zahl - 1) zu. Für jede Iteration werden die Befehle jeder Form ausgeführt. Falls die bewertete Zahl gleich 0 oder ein negativer Wert ist, werden die Befehle nicht ausgeführt. Das Ergebnis dieser Funktion ist die Bewertung des "Ergebnisses", falls dieses letztere fehlt, ist das Ergebnis "falsch".
  • - "eval": diese Funktionen bewertet einen SML-Ausdruck in der momentanen Umgebung. Es ist eine doppelte Bewertung gegeben, weil das Argument durch SML bewertet wird, bevor es durch diese Funktion bewertet wird.
  • - "exit": diese Funktion schließt die SML-Umgebung, indem sie die Ausführung beendet.
  • - "for" und "mapfor": diese Funktionen nehmen eine Iteration in einer Liste von Werten vor. Sie weisen jedem der Elemente der Liste von bewerteten Werten nacheinander eine (nicht bewertete) "Variable" zu und führen die Befehle aus. "for" sendet den Wert der Bewertung des letzten Befehls der letzten Iteration zurück, während "mapfor" eine Liste konstruiert, die aus aufeinanderfolgenden Werten von "Befehlen" für die Iterationen aufgebaut ist.
  • - "if": konditionaler Test, dessen Funktion ähnlich derjenigen von "cond" ist, jedoch mit einem weggelassenen Klammerniveau. Es führt den Teil "then" der ersten verifizierten Bedingung oder den Teil "else" (falls vorhanden) aus, falls keine vorhergehende Bedingung verifiziert worden ist.
  • - "let": diese Funktion kündigt eine lokal operierende Variable wie folgt an:
  • . Auswertung sämtlicher Anf angswerte und Verbinden dieser Werte mit den entsprechenden Variablen.
  • . Sequentielle Auswertung jeder "Form".
  • Falls kein Anfangswert einer Variablen zugeordnet wird, wird "falsch" initialisiert. Der Rückkehrwert der Funktion ist derjenige, der von der letzten "Form" zurückgesendet wird.
  • - "progn": diese Funktion führt nacheinander Befehle aus, wertet jede "Form" aus und leitet das Ergebnis der letzten Auswertung zurück. Sie ist nützlich, wenn mehr als ein Befehl erwartet wird, beispielsweise in den Teilen "then" eines Befehls "if".
  • - "quote" oder "/": diese Funktionen hat zum Ziel, eine Auswertung zu vermeiden. Sie leitet das Objekt ohne Auswertung zurück.
  • - "set" oder "setq": diese Funktion wird verwendet, um einer Variablen einen Wert zuzuweisen. Dies ist äquivalent zur Funktionszuweisung der Listen-Dialekte. In ihrer Form "setq" wird das erste Argument nicht ausgewertet, während es in ihrer Form "set" ausgewertet wird. Diese zwei Funktionen werten das zweite Argument aus und fixieren den Wert des ersten Arguments auf den Ergebniswert. Die Fixierung der aktiven Werte modifiziert ihren Wert nicht, sondern ruft für den Wert eine vordef inierte Funktion auf.
  • - "some" und "every": diese zwei Funktionen rufen eine Iteration für die Suche eines Attributs in der Liste hervor. Hierzu wenden sie eine Attributfunktion auf jedes Element einer Liste an. "sorne" wendet die Funktion an, bis ein von "falsch" verschiedener Wert zurückgesendet wird, und leitet dann diesen Wert zurück, andernfalls leitet sie am Ende "falsch" zurück. "every" wendet die Funktion an, bis ein Wert "falsch" zurückgesendet wird, und leitet "falsch" zurück, andernfalls leitet sie am Ende das zuletzt erhaltene Ergebnis zurück. Die Anzahl der gegebenen Listen wird gleich der Anzahl der Argumente der angewendeten Funktion. Somit wird die Funktion n-mal angewendet, wenn n die L;nge der ersten gegebenen Liste ist.
  • Falls eine der anderen Listen eine Größe besitzt, die geringer als diejenige der ersten ist, wird sie als eine Liste mit der gleichen Größe wie diejenige der ersten erhaltenen Liste betrachtet, indem ihr letztes Element am Ende so oft wie notwendig angefügt wird. Falls die erste Liste eine Größe besitzt, die kleiner als eine andere Liste ist, werden nur die ersten n Elemente der anderen Listen bezeichnet.
  • - "unless": diese Funktion, die ein negativer konditionaler Test ist, führt jeden Befehl aus und leitet den Wert des letzteren zurück, falls die Bedingung mit dem Wert "falsch" bewertet wird, andernfalls wird "falsch" zurückgesendet. Dies ist die Umkehrung der weiter oben beschriebenen Funktion "when".
  • - "unwind protect": diese Funktion sendet die Auswertung der "geschützten Form" zurück, sie stellt jedoch einen Austrittsversuch durch einen internen "throw" sicher, wobei jede "Form" nacheinander bewertet wird, bevor ein "throw" angesprungen wird.
  • - "when": diese Funktion, die ein positiver konditionaler Test ist, führt jeden Befehl aus und sendet den Wert des letzteren zurück, falls die bewertete Bedingung verifiziert wird, andernfalls wird "falsch" zurückgesendet.
  • - "while": diese Funktion führt jeden Befehl nacheinander aus, bis eine Bedingung "falsch" auftritt. Die Funktion sendet stets "falsch" zurück.
  • - "with" oder "with-eval": diese Funktionen kündigen eine lokale Variable an. Es handelt sich um Konstruktionen, die für die Ankündigung und für die Initialisierung von Variablen verwendet werden, die zu einer Gruppe von Befehlen gehören. Die aktiven Werte und die Funktion werden wie gewünscht manipuliert, wobei ihr Anfangswert nach der Ausführung von "with" auf Null zurückgesetzt wird. Die Werte werden sequentiell ausgewertet. Das Argument "Kontext" ist eine Liste von Variablen und von zugehörigen Werten (Eigenschaftsliste), die in mehreren Funktionen "with" erneut verwendet werden kann. Die Funktion "with-eval" bewertet den Ausdruck und verwendet ihn anschließend als Kontext. Wegen der Struktur des SML-Interpretierers arbeitet "with" auch mit aktiven Werten und mit Funktionen. Es folgt die Auflistung der Haupt-Eingabe/Ausgabe- Funktionen.
  • - "close": ermöglicht die Beendigung der Verarbeitung eines Objekts in einem Fluß. Es handelt sich um den inversen Befehl des Befehls "open", der weiter unten beschrieben wird.
  • - "load": diese Funktion ermöglicht das Laden und das Ausführen einer durch "filename" spezifizierten SML-Datei, indem ein durch eine Variable spezifizierter Suchpfad verwendet wird. Ein erster Versuch erfolgt, um eine mit "filename sml" bezeichnete Datei in jedem Verzeichnis des spezifizierten Pfades zu finden. Falls die Datei nicht gefunden wird, erfolgt anschließend eine Suche nach einer mit "filename" bezeichneten Datei. Falls der Dateiname ein Zeichen "/" enthält, wird dieser Name als absoluter Pfadname betrachtet, wobei der Suchpfad nicht verwendet wird. Falls im Zeitpunkt des Lesens der Datei irgendein Fehler auftritt, wird eine Fehlernachricht gesendet, außerdem wird der nachfolgende Lesevorgang der Datei beendet. Falls die Datei gefunden wird, sendet die Funktion den Dateinamen als Zeichenfolge zurück. Falls die Datei nicht gefunden wird und das Schlüsselwort "if-does-not-exist" spezifiziert ist, wird entweder ein Fehler gemeldet oder die Funktion "falsch" zurückgesendet. Falls die Datei nicht gefunden wird und das Schlüsselwort "if-does-not-exist" nicht spezifiziert ist, wird ein Fehler gemeldet.
  • - "open": Ermöglicht den Beginn der Verarbeitung eines Objekts in einem Fluß. Diese Funktion erzeugt einen Fluß von Objekten, indem es die Datei "filename" öffnet und ein Objekt des Typs "flux" zurücksendet. Die Schlüsselwörter und deren entsprechende Werte bestimmen den zu erzeugenden Flußtyp, wobei die Wahl zwischen Eingabe, Ausgang oder beiden durch das Schlüsselwort ":direction" spezifiziert ist und die Richtung eine der folgenden ist:
  • :Eingabe: Eingabefluß (Standardeinstellung)
  • :Ausgabe: Ausgabefluß
  • :io: bidirektionaler Fluß
  • Das Schlüsselwort: "if-exists" spezifiziert die vorzunehmende Aktion, falls die Datei vorhanden ist und in ":output" oder ":io" geöffnet wird, wobei der Schlüsselwert einer der folgenden ist:
  • :append: Die Ausgangsposition ist das Ende der Datei (Standardeinstellung) .
  • :overwrite: Die Ausgangsposition ist der Beginn der Datei, die Inhalte der momentanen Datei werden, falls vorhanden, nicht gelöscht.
  • :supersede: Die Ausgangsposition ist der Beginn der Datei, die Inhalte der momentanen Datei werden, falls vorhanden, ersetzt.
  • Das Schlüsselwort ":type" spezifiziert den Dateityp, wobei der Schlüsselwert einer der folgenden ist:
  • :file: der erzeugte Fluß ist eine UNIX-Datei, (Standardeinstellung)
  • :string: der erzeugte Fluß ist eine interne Zeichenfolge. Die Eingabe/Ausgabe-Funktionen wie etwa :read" oder "print" (weiter unten beschrieben) können ebenso wie Befehle zur Manipulation der Zeichenfolge eingegeben werden.
  • Das Schlüsselwort ":buffered" spezifiziert, ob das Pufferregister bei jeder Ausgabeoperation geleert oder nicht geleert werden muß, wobei der Schlüsselwert einer der folgenden ist:
  • falsch: muß nicht geleert werden,
  • t: muß geleert werden (Standardeinstellung),
  • - "prin1": diese Funktion druckt die SML-Objekte, wobei jedes Objekt in seiner natürlichen Form spezifiziert ist, d. h. ohne Zwischenraum und ohne Unterteilung zwischen den Zeilen. Die Funktion sendet das letzte bewertete Objekt zurück. Der Ausgang wird am Ende des Aufrufs je nach Wert des Schlüsselworts ":buffered" in der Funktion "open" "geleert".
  • - "print": diese Funktion ermöglicht das Drucken einer neuen Zeile und anschließend jedes SML-Objekts, wobei jedes Objekt ohne Zwischenraum und ohne Unterteilung zwischen Zeilen gedruckt wird. Die Funktion sendet das letzte ausgewertete Objekt zurück. Der Ausgang wird am Ende des Aufrufs je nach Wert des Schlüsselworts ":buffered" in der Funktion "open" ebenfalls "geleert".
  • - "*print-readably*" ermöglicht die Steuerung der Druckdarstellung. Die Funktion *print-readably" ist eine Variable. Falls der Wert "falsch" ist (Standardeinstellung), wird jede Ausgabe gelesen, d. h., daß die speziellen Zeichen interpretiert werden, um die Lesbarkeit zu verbessern. Falls der Wert "wahr" ist, wird jede Ausgabe so gedruckt, als ob sie spezielle Zeichen enthielte, mit Ausnahme der Escape-Folgen, die stets und ohne Berücksichtigung des Wertes von *print- readably" interpretiert werden.
  • - "*print-level*": Ermöglicht die Steuerung des Drucks der Tiefe der Listen. Diese Funktion ist eine Variable, die die maximale Tiefe der zu druckenden Listen steuert.
  • - "provide" und "require": diese Funktionen verwalten das Laden einer Datei. Sie helfen bei der Bestimmung, ob eine SML- Datei geladen worden ist, um so-zu vermeiden, daß sie ein zweites Mal geladen wird. Das gemeinsame Argument "file" muß ein Symbol sein, das die Datei unter Verwendung ihres Drucknamens definiert. Das Symbol "file" wird anschließend durch die eine oder die andere Funktion auf den Wert "falsch" fixiert. Die Funktion "require" stellt fest, ob die Datei vorhanden ist und daher in SML geladen ist. Falls die Datei nicht vorhanden ist, wird sie entweder geladen oder es geschieht nichts. Die Bestätigung, daß eine Datei bereits geladen ist, erfolgt durch die Funktion "provide". Die Funktion "provide" bestätigt, daß die Datei geladen worden ist. Diese Funktion wird im allgemeinen in der geladenen Datei aufgerufen.
  • - "read": Ermöglicht das Lesen und die Interpretation einer Zeichenfolge. Diese Funktion liest den nächsten Ausdruck im Eingabefluß, falls dieser spezifiziert ist, oder andernfalls in der "Standard-Eingabe", analysiert ihn und sendet ihn zurück. Am Ende der Datei führt die Funktion einen "throw" zum Etikett "Dateiende" aus.
  • - "read-char": diese Funktion liest ein Zeichen im Eingabefluß, falls es spezifiziert ist, oder in der "Standard-Eingabe" und sendet es zurück. Diese Funktion ist nützlich für die binären Dateien, in denen die Bytes in dieser Weise gelesen werden können.
  • - "read-line": diese Funktion liest eine Folge von Zeichen im Eingabefluß, falls dieser spezifiziert ist, oder andernfalls in der "Standard-Eingabe" und sendet sie ohne Berücksichtigung der neuen Zeile am Ende zurück. Am Ende der Datei führt sie einen "throw" zum Etikett "Dateiende" aus.
  • - "*standard-error* oder *standard-input* oder *standard- output*": Funktionen, die für die Standard-Flüsse verwendet werden. Sie entsprechen globalen Variablen und sind andernfalls durch Voreinstellung auf zugeordnete Werte fixiert. Falls eine Variable auf den Wert "falsch" fixiert ist, wird sie durch Standardeinstellung auf ihren Wert zurückgesetzt.
  • - "write-char": diese Funktion schreibt ein Zeichen in den Ausgabefluß, falls dieser spezifiziert ist, oder andernfalls in die "Standard-Ausgabe" und sendet dies zurück. Diese Funktion ist nützlich für die Erzeugung von binären Dateien, in denen die Bytes in dieser Weise geschrieben werden können.
  • - "write-line": diese Funktion schreibt eine Folge von Zeichen in den Ausgabefluß, falls dieser spezifiziert ist, oder andernfalls in die "Standard-Ausgabe" und sendet sie zurück.
  • Es folgen die Definitionen der Hauptsymbole.
  • - "defconstant": diese Funktion kündigt eine Variable an und fixiert sie auf einen gegebenen Wert, der in einer Funktion "setq" oder "let" nicht bezeichnet werden kann.
  • - "defvar": diese Funktion kündigt an, daß die spezifizierte Variable eine globale Variable ist. Die globalen Variablen können dynamisch durch die Konstruktionen "let" gelesen werden.
  • - "documentation": fixiert eine Dokumentation und fragt sie ab. Falls "string" nicht spezifiziert ist, fragt diese Funktion die Dokumentation für das spezifizierte Symbol ab. Falls die Dokumentation nicht vorhanden ist, wird der Wert "falsch" zurückgesendet. Falls "string" spezifiziert ist, wird ihm "Symbol" zugeordnet, wobei ein Fehler auftritt, falls das Symbol nicht definiert ist. Die "documentation" kann durch die Funktionen "defvar", "defconstant", "defun" und "defmacro" definiert werden.
  • - "gensym": diese Funktion erzeugt ein neues Symbol und sendet es zurück. Sein Name ist aus den Buchstaben G, gefolgt von einer Zahl, die bei jedem Funktionsaufruf inkrementiert wird, aufgebaut.
  • - "intern": diese Funktion erzeugt ein Symbol (einer Zeichenfolge), dessen Name "string" ist, und sendet es zurück.
  • Falls ein Symbol mit demselben Namen gefunden wird, wird es zurückgesendet. Diese Funktion ist nützlich, um "Atome" mit speziellen enthaltenen Zeichen wie etwa " ' " oder Blanks (Leerschritten) zu erzeugen.
  • - "makunbound": diese Funktion macht ein Symbol in der Weise undefiniert, daß dann, wenn auf es die Funktion "boundp" (weiter unten beschrieben) angewendet wird, der Wert "falsch" zurückgesendet wird.
  • Es folgen die Definitionen der Hauptattribute:
  • - "/=": dies ist der Ungleichheitstest der Objekte, der den Wert "wahr" zurücksendet, falls ein Objekt 1 von einem Objekt 2 verschieden ist, und andernfalls den Wert "falsch" zurücksendet.
  • - "< ": dies ist der Streng-Kleiner-Test, der zwei Zahlen oder zwei Zeichenfolgen vergleicht und den Wert "t" zurücksendet, falls das erste Argument kleiner oder gleich einem zweiten ist, andernfalls wird der Wert "falsch" zurückgesendet. Die Zeichenfolgen werden alphabetisch verglichen.
  • - "< =": Kleiner-Test, der zwei Zahlen oder zwei Zeichenfolgen vergleicht und den Wert "t" zurücksendet, falls das erste Argument kleiner oder gleich ist, andernfalls wird der Wert "falsch" zurückgesendet. Die Zeichenfolgen werden ebenfalls alphabetisch verglichen.
  • - "> ": Streng-Größer-Test, der zwei Zahlen oder zwei Zeichenfolgen vergleicht und den Wert "t" zurücksendet, falls das erste Argument größer und nicht gleich dem zweiten ist, andernfalls wird der Wert "falsch" zurückgesendet, wobei die Zeichenfolgen alphabetisch verglichen werden.
  • - "> =": Größer-Test, der zwei Zahlen oder zwei Zeichenfolgen vergleicht und den Wert "t" zurücksendet, falls das erste Argument größer oder gleich dem zweiten ist, andernfalls wird der Wert "falsch" zurückgesendet, wobei die Zeichenfolgen alphabetisch verglichen werden.
  • - "and": dies ist eine "Und-Logik" zwischen Ausdrücken, die jede "Form" von links nach rechts bewertet. Falls eine Form mit dem Wert "falsch" bewertet wird, sendet die Funktion diesen Wert "falsch" zurück, andernfalls wird der Wert "t" zurückgesendet. Falls kein Argument spezifiziert ist, sendet die Funktion den Wert "t" zurück.
  • - "boundp": diese Funktion prüft, ob ein Atom bereits definiert ist. Sie sendet das bewertete Symbol zurück, falls es definiert worden ist, andernfalls wird der Wert "falsch" zurückgesendet. Diese Funktion wird verifiziert, falls die aufgerufene Variable "Symbol" einen Wert besitzt.
  • - "compare": diese Funktion erfordert den Vergleich zwischen zwei Zahlen oder zwei Zeichenfolgen und sendet einen der folgenden Werte zurück:
  • . eine streng positive Zahl, falls das erste Argument größer als das zweite ist.
  • . Null, falls das erste und das zweite Argument gleich sind.
  • . eine streng negative Zahl, falls das erste Argument kleiner als das zweite ist.
  • - "eq": Streng-Gleich-Test zwischen zwei Objekten, der nur dann bestätigt wird, falls die zwei Objekte sich am selben Platz im Speicher befinden.
  • - "equal" oder "=": Gleichheits-Test zwischen zwei Objekten, der den Wert des Objekts 1 zurücksendet, falls es dasselbe wie das Objekt 2 ist, andernfalls wird der Wert "falsch" zurückgesendet. Die Gleichheit von Listen wird dadurch verifiziert, daß die Gleichheit jedes ihrer Elemente getestet wird.
  • - "()" oder "falsch": dies ist der Wert "falsch", der herkömmlichen Sprache Lisp, in der ein Objekt "wahr" ist, fälls er nicht "falsch" ist.
  • - "not": dies ist ein "logisches Nicht", wobei der Wert "t" zurückgesendet wird, wenn das Objekt den Wert "falsch" besitzt, andernfalls wird der Wert "falsch" zurückgesendet.
  • - "or": dies ist ein "logisches Oder" zwischen Ausdrücken. Es bewertet jede Form von links nach rechts. Falls eine Form mit einem Wert "nicht falsch" bewertet wird, wird diese Bewertung zuruckgesendet. Wenn sämtliche Formen mit dem Wert "falsch" bewertet werden, wird die letzte Bewertung zurückgesendet.
  • - "t": dies ist der wahre logische Wert.
  • - "typep": dies ist das Attribut "Datentyp". Diese Funktion sendet "type" zurück, falls das Objekt von diesem Typ ist, andernfalls wird der Wert "falsch" zurückgesendet.
  • Es folgen die Definitionen der Listen-Funktionen:
  • - "append": diese Funktion ermöglicht die Konstruktion und das Rücksenden einer neuen Liste oder einer neuen Zeichenfolge durch Verknüpfung von Argumenten.
  • - "copy": diese Funktion kopiert ein SML-Objekt und sendet eine Kopie des Objekts zurück, das eine Liste sein muß.
  • - "length": diese Funktion sendet die Anzahl der Elemente einer Liste oder die Anzahl von Zeichen einer Zeichenfolge zurück.
  • - "list": diese Funktion konstruiert eine Liste von bewerteten Argumenten und sendet sie zurück.
  • - "list-get" oder "list-put" oder "list-put!": diese Funktionen ermöglichen, einen Wert in einer Liste zu erhalten oder zu fixieren. "list-get" sendet einen Wert in einer Liste zurück. "list-put!" ändert die Liste und sendet sie dann zurück, während "list-put" eine aktualisierte neue Liste zurücksendet. Der Wert kann durch eine Zahl (Position) oder ein Attribut (Symbol) spezifiziert sein. Falls ein Attribut verwendet wird, wird die Liste als Eigenschaftsliste betrachtet, wobei das bezeichnete Element der Liste dasjenige ist, das sich direkt nach dem Symbol in der Liste befindet. Wenn die Position verwendet wird, bezieht sie sich auf die Position des Elements der Liste ausgehend von Null. Falls die "Position" höher als jene des letzten Elements der Liste ist:
  • . sendet "list-get" den Standardeinstellungswert zurück, falls er spezifiziert ist, andernfalls den Wert "falsch".
  • . fügen "list-put" und "list-put!" das neue Element der Liste an der korrekten Position ein, indem sie die nicht spezifizierten Positionen mit den Werten "falsch" füllen, falls dies notwendig ist. Falls ein "Attribut" keinem vorhanden Attribut entspricht, sendet "list-get" den Wert durch Standardeinstellung zurück, falls er spezifiziert ist, andernfalls den Wert "falsch".
  • - "list-remove" oder "list-remove!": diese Funktionen ermöglichen das Ziehen eines oder mehrerer Elemente einer Liste. "list-remove!" ändert die Liste und sendet sie zurück, während "list-remove" eine aktualisierte neue Liste zurücksendet. Wenn ein "Attribut" verwendet wird, wird die Liste als Eigenschaftsliste betrachtet. In diesem Fall werden das Attributelement sowie dasjenige, das ihm in der Liste folgt, gezogen. Falls die "Position" verwendet wird, bezieht sie sich auf die Position des Elements der Liste ausgehend von Null. Falls "das Attribut" nicht zu einem vorhandenen Attribut paßt oder falls die "Position" größer als diejenige des letzten Elements der Liste ist, wird die Liste nicht verändert.
  • - "make-list": diese Funktion konstruiert eine Liste, die die Größe der Elemente enthält und in der jedes Element durch "Form", falls dieses Attribut vorhanden ist, andernfalls durch "falsch" initialisiert wird, und sendet sie zurück.
  • - "map": diese Funktion wendet eine Funktion auf die Elemente der spezifizierten Liste(n) an, sendet eine Liste oder eine Zeichenfolge je nach Wert des "Resultattyps" zurück, der dasjenige, was konstruiert wird, bestimmt. Die angewendete Funktion muß so viele Argumente annehmen, wie die Anzahl von N Listenargumenten angibt. Die N Listen müssen dieselbe Länge L besitzen. Die Funktion "map" sendet eine Liste oder eine Zeichenfolge der Länge L zurück, die als Elemente das Ergebnis des Aufrufs der Funktion mit den L Elementen der Liste besitzt, falls eine Liste spezifiziert ist, oder falls für mehrere Listen die ersten Elemente jeder Liste spezifiziert sind, woraufhin die zweiten Elemente jeder Liste zurückgesendet werden usw. bis zu L Elementen.
  • - "maphash": diese Funktion wendet eine "Funktion" mit zwei Argumenten auf jeden Schlüssel und den entsprechenden Wert in der Eigenschaftsliste an. Sie sendet stets den Wert "falsch" zurück. Sie kann ebenfalls mit einer Tabelle verwendet werden.
  • - "nconc": diese Funktion führt die Verknüpfung einer Liste 1 mit jeder Liste aus. Sie modifiziert physikalisch eine Folge aus einer Liste oder aus einer Zeichenfolge und sendet die Liste 1 zurück.
  • - "position": In der ersten Form wird die Liste mit dem Attribut "equal" analysiert. Falls ein Element "item" vorhanden ist, sendet die Funktion dessen Index in der Liste ausgehend von Null zurück, andernfalls sendet sie den Wert "falsch" zurück. In der zweiten Form wird das Auftreten eines Elements "Unterzeichenfolge" in der Zeichenfolge gesucht. Falls dieses Element vorhanden ist, sendet die Funktion die Position des Zeichens, bei der sie beginnt, zurück, andernfalls wird der Wert "falsch" zurückgesendet.
  • - "reverse": diese Funktion sendet eine neue Liste mit denselben Elementen, jedoch in umgekehrter Reihenfolge, zurück.
  • - "sort": diese Funktion sortiert die Liste in ansteigender Reihenfolge mit Hilfe der Funktion "comparison".
  • Die mit "comparison" bezeichnete Funktion wird mit zwei zu vergleichenden Elementen aufgerufen und muß eine ganze Zahl zurücksenden. Der Wert ist negativ, Null oder positiv, je nachdem, ob das erste Argument kleiner, gleich oder größer als das zweite ist.
  • - "subseq": diese Funktion sendet ausgehend vom Element an der Ausgangsposition ("start") bis zum Element an der Endposition ("end") eine Unterliste zurück. "start" und "end" sind Zahlen, die bei Null beginnen. Falls die Anzahl von indexierten Elementen größer als die Tabelle der Liste ist, wird die zurückgesendete Unterliste auf den Wert "falsch" fixiert. Diese Funktion kann auch mit einer Zeichenfolge verwendet werden.
  • Es folgen die Definitionen der Funktionen von Zeichenfolgen und von Tabellen:
  • Da eine Zeichenfolge wie eine Liste von Zeichen verarbeitet wird, können Listenfunktionen auch fur Zeichenfolgen verwendet werden, etwa: "append", "length", "map", "max", "nconc", "position", "subseq".
  • - "match": diese Funktion ermöglicht, Unterzeichenfolgen ausgehend von einer SML-Zeichenfolge zu paaren und zu entnehmen.
  • - "string-downcase" oder "string-upcase": diese Funktionen leiten eine Kopie einer Zeichenfolge nach einer Umsetzung zurück.
  • Ebenso kann eine bestimmte Anzahl von Listenfunktionen verwendet werden, um die Tabellen wie etwa: "list-get", "list-put", "list-put!", "list-remove!", "maphash" zu verarbeiten. Ein Objekt einer Tabelle wird dadurch erzeugt, daß die Funktion "coerce" verwendet wird, die auf eine Eigenschaftsliste angewendet wird.
  • Es folgen die Definitionen von Makro-Definitionen:
  • - "backquote" oder " ' ": diese Funktion erzeugt eine Kopie einer spezifizierten Liste unter Verwendung dieser letzteren als Schablone für die Erzeugung der Kopie.
  • - "defun": ermöglicht die Definition einer SML-Funktion. Dies ist die übliche Weise der Erzeugung einer neuen Funktion, die den Namen der Funktion definiert, unter Verwendung der Parameter, die in der Liste "lambda" und in der "Form" angegeben sind.
  • - "defmacro": diese Funktion definiert einen SML-Makro. Dies ist die normale Verwendung, um einen neuen Makro zu definieren, der den Namen des Makros unter Verwendung der in der Liste "lambda" und in der "Form" angegebenen Parameter definiert.
  • - "lambda": diese Funktion definiert einen Ausdruck "lambda", der die Grundform ist, um eine namenlose Funktion unter Verwendung von Ausdrücken "lambda" zu definieren. Ein Ausdruck "lambda" ist aus einem lambda-Symbol, einer lambda- Liste und aus dem Körper des lambda-Ausdrucks gebildet. Eine lambda-Liste spezifiziert die Parameter. Wenn eine Funktion aufgerufen wird, werden ihre Argumente mit den Parametern der entsprechenden lambda-Liste gepaart. Falls die geforderten Parameter spezifiziert sind, müssen die entsprechenden Argumente vorhanden sein, wenn der lambda-Ausdruck angewendet wird. Eine "lambda"-Liste kann Schlüsselwörter verwenden, die mit dem Symbol & beginnen und wie folgt definiert sind:
  • & optional: optionale Parameter; falls diese Argumente nicht verwendet werden, werden sie mit dem Anfangswert verbunden, falls er vorhanden ist, andernfalls mit dem Wert "falsch".
  • & rest: Ruhe-Parameter, wenn alle geforderten und optionalen Parameter verbunden sind, wird jedes folgende Argument in einer Liste erzeugt und mit den Ruhe-Parametern verbunden.
  • & key: Schlüsselwort-Parameter; dies sind die Argumente, die aus Paaren gebildet sind, die das aufgerufene Schlüsselwort und dessen Wert enthalten.
  • & aux: dies sind die lokalen Variablen, die nicht wirkliche Parameter sind; dies ist das Äquivalent zur Funktion "let".
  • - "lambdamacro": diese Funktion definiert einen lambda- Makroausdruck, der die Grundform für die Definition eines namenlosen Makros ist. Falls die geforderten Parameter spezifiziert sind, müssen die entsprechenden Argumente vorliegen, wenn der lambda-Ausdruck angewendet wird. Eine Liste "lambdamacro" kann die Schlüsselwörter beginnend beim Symbol & verwenden, die in der Weise definiert sind, die mit jener der Liste "lambda" äquivalent ist: & optional , & rest, & key und & aux.
  • Es folgt die Definition einiger Rechenoperatoren und anderer Operatoren:
  • - "+": Operator für Zahlenaddition, er kann ebenfalls als Verknüpfungsoperator für Listen oder Zeichenfolgen verwendet werden. Der Typ des Ergebnisses wird ausgehend vom Typ des ersten Arguments bestimmt: () für eine Liste, " " für eine Zeichenfolge und 0 für eine Zahl.
  • - "*" und "/": Arithmetische Operatoren, die den Modulo, das Produkt und den Quotienten von Argumenten zurücksenden.
  • - "-": Operator der arithmetischen Differenz.
  • - "logand", "logor", "lognot", "logxor": Operatoren, die den Operationen "logisches Und", "logisches Oder", "logisches Nicht" und "logisches Exklusiv-Oder" entsprechen.
  • - "max" und "min": Operatoren, die den Maximalwert oder den Minimalwert einer Liste von Zahlen oder von Zeichenfolgen zurücksenden.
  • - "random": Operator, der eine Zufallszahl erzeugt.
  • - "coerce": hat die Spezifikation eines Typs sowie die Umsetzung des Typs eines Objekts in den spezifizierten Typ durch den "Ergebnistyp" zur Aufgabe.
  • - "type-of": hat die Rücksendung des internen SML-Typs des Objekts zur Aufgabe.
  • - "!" oder "!!": führen einen Interpretierer-Befehl aus, wobei "!" den gegebenen Befehl wie eine Zeichenfolge mit gegebenen Argumenten ausführt und das Ende der Operation nicht abwartet, während "!!" einen Eingabe/Ausgabe-Fluß mit Bezug auf die Eingabe- und Ausgabe-Befehle zurücksendet, wobei dieser Befehl beseitigt wird, wenn der Fluß unterbrochen wird.
  • - "*application-class*": dies ist eine Zeichenfolgen-Konstante, die die Klasse der momentanen Anwendung angibt, wobei für eine SML-Anwendung der Wert durch "SML" gegeben ist.
  • - "*application-name*": dies ist eine Zeichenfolgen-Konstante, die den Namen der momentanen Anwendung angibt.
  • - "command-line-args": diese Funktion sendet eine Liste von Zeichenfolgen zurück, die die Argumente repräsentiert, die beim Start vom Interpretierer an SML gesendet werden.
  • - "get-internal-run-time": diese Funktion ermöglicht das Zurücksenden des Wertes der Ausführungsdauer in Millisekunden, wobei der zurückgesendete Wert dann, wenn kein Argument geliefert wird, der verstrichenen Zeit entspricht, andernfalls hängt der Wert von einem der Schlüsselwörter ab:
  • :real: die verstrichene Zeit seit dem Start der SML-Anwendung (nach Standardeinstellung),
  • :user: die CPU-Zeit, die während der Ausführung von SML-Befehlen gebraucht wird,
  • :system" die CPU-Zeit, die vom System für die SML-Rechnung verwendet wird.
  • - "getenv": falls der Variablenname der Zeichenfolge der Name- einer Ausgangsvariable des Interpretierers ist, sendet diese Funktion diesen Wert als Zeichenfolge zurück, andernfalls sendet die Funktion den Wert "falsch" zurück.
  • - "setenv": diese Funktion fixiert den Namen einer Variablen des Interpretierers auf einen Wert, wobei diese zwei Argumente Zeichenfolgen sein müssen. Außerdem ist es mit SML möglich, die Bewertung der Ausdrücke zu unterscheiden. Die Bewertung erfolgt dann, wenn eine spezifizierte Dauer verstrichen ist und wenn jede Anfrage ihre Antwort erhalten hat. Die interne Darstellung der Zeit für die SML-Funktionen ist die Millisekunde.
  • - "eval-after": die Bewertung der Ausdrücke erfolgt nach einer bestimmten Zeitdauer, wobei diese Funktion in zwei Phasen arbeitet:
  • . Wenn "eval-after" angewendet wird, wird jede zu bewertende Form im folgenden mit ihrem Kontext gesichert.
  • . Ab nach der spezifizierten Zeitdauer wird der Kontext mit jeder bewerteten Form verbunden.
  • Diese Funktion sendet ein Objekt des Typs "timer" zurück, das durch die weiter unten beschriebene Funktion "remove-timer" auf Null zurückgesetzt wird.
  • - "eval-every": diese Funktion ist der vorangehenden ähnlich, sie führt jedoch wiederholte Bewertungen aus und kann selbstverständlich ebenfalls durch die Funktion "remove-timer" auf Null zurückgesetzt werden.
  • - "remove-timer": diese Funktion beseitigt ein Objekt des Typs "timer", das von einer der Funktionen "eval-after" oder "eval-every" konstruiert wird.
  • SML verwendet außerdem Werkzeuge für den Entwurf insbesondere der folgenden Funktionen:
  • - "hashinfo": diese Funktion liefert Statistiken bezüglich der Speicherung von Atomen. Die zurückgesendeten Informationen sind die Anzahl der Symbole, die Anzahl der Einschübe in die Tabelle und die Anzahl von Kollisionen.
  • - "meminfo": diese Funktion liefert und druckt den Zustand des von SML verwendeten Speicherplatz-Zuweisers.
  • - "oblist": diese Funktion sendet die Namen der bereits definierten SML-Atome zurück und druckt sie. Falls das Symbol "string" nicht spezifiziert ist, werden sämtliche definierten Namen zurückgesendet, andernfalls werden nur diejenigen Namen zurückgesendet, die das Symbol "string" enthalten.
  • - "stack-print-level": diese Funktion liefert die Anzahl der Strukturen eines Stapels, die fehlerhaft gedruckt werden.
  • - "trace-untrace": die Funktion "trace" sendet die Liste der Funktionen zurück, die bis zu ihrer Anfrage ausgeführt worden sind. Die Funktion "untrace" sendet die Liste der Funktionen, die bis zu der Anfrage noch nicht ausgeführt worden sind, sofern vorhanden, zurück, andernfalls wird ein Wert "falsch" zurückgesendet.
  • Wie oben bezüglich des Satzes der MIF-Funktionen bereits gesagt worden ist, ermöglicht dieser den Zugriff auf die externe Bibliothek MIL, die ihrerseits als Schnittstelle mit den Verwaltungsdiensten für Netze und Informationssysteme im Rahmen des Informationsaustauschs zwischen einer Anwendung und einem Objektverwalter dient. Wegen der Programmierungskonzepte bezüglich der Verwaltungsdienste für Netze und Informationssysteme, beispielsweise CMIS, muß eine SML-Anwendung die folgenden Operationen verwirklichen:
  • 1. Initialisieren der Dienste,
  • 2. Erwarten einer Aktion eines Anwenders,
  • 3. Aussenden einer Anforderung für die Verwaltungsdienste für Netze und Informationsysteme,
  • 4. Erzeugen einer Rückrufprozedur für diese Anforderung,
  • 5. Ausführen der Rückrufprozedur, wenn die Antwort auf die Anforderung ankommt,
  • 6. Wiederholen ab der Stufe 2 bis zur letzten Anforderung vom Anwender,
  • 7. Ende der Anwendung.
  • Der Satz von Funktionen XAF ermöglicht seinerseits den Zugriff auf die Bibliothek XML, die Komponenten für die Entwicklung und Verwaltung von graphischen Anwenderschnittstellen, z. B. X/Motif speichert.
  • Die Architektur eines Systems des Typs X Window basiert auf dem Chent-Server-Modell.
  • Der Server verwaltet sämtliche Eingabe- und Ausgabevorrichtungen (z. B. die Maus), er erzeugt und manipuliert die Fenster auf dem Bildschirm, erzeugt Texte und Graphiken. Die Anwendung, die die vom Server angebotenen Betriebsmittel benutzt, wird Client genannt. Der Client kommuniziert mit dem Server nach der Verbindung mit dem Netz mittels besonderer Protokolle. Der Server kommuniziert mit den Clients dadurch, daß er "Ereignisse" an die Client- Anwendungen schickt, z. B. auf triviale Weise dann, wenn der Server ein Ereignis als Antwort auf eine Aktion eines Benutzers mit der Maus erzeugt. Im vorliegenden Kontext bedeutet dies, daß dieser Ereignistyp in den SML-Interpretierer geladen wird und daß eine Rückruffunktion, die für ihn spezifisch ist, ausgeführt wird.
  • Eine SML-Anwendung, die die Verwaltungsdienste für Netze und Informationssysteme, etwa CMIS, gleichzeitig mit externen Bibliotheken, die die Entwicklung und die Verwaltung von graphischen Anwenderschnittstellen wie etwa X/Motif verwendet, muß die folgenden Operationen verwirklichen:
  • 1. Initialisieren von zwei Typen von Diensten,
  • 2. Erzeugen und Darstellen von Anwenderschnittstellen-Kornponenten, die "widgets" genannt werden,
  • 3. Erzeugen von Rückrufprozeduren für die Anwender-Interaktionen,
  • 4. Erwarten einer Aktion eines Anwenders,
  • 5. Aussenden einer Anforderung mittels einer Rückrufprozedur für die Verwaltungsdienste für Netze und Informationssysteme,
  • 6. Erzeugen einer Rückrufprozedur für die Anforderung,
  • 7. Ausführen der Rückrufprozedur, wenn die Antwort auf die Anforderung ankommt,
  • 8. Wiederholen ab der Stufe 4 bis zur letzten Anforderung des Anwenders,
  • 9. Ende der Anwendung.
  • Der Satz von Funktionen GAF ermöglicht seinerseits den Zugriff auf die Bibliothek GOL, die die Anwendungen zuläßt, die graphische Objekte verwenden. Derartige Anwendungen ermöglichen die Darstellung und die Veränderung zweidimensionaler graphischer Objekte ausgehend von graphischen Bibliotheken, die in die vorhandenen Anwenderschnittstellen wie etwa X/Motif, MS- Windows, Postscript, usw. integriert sein können.
  • Die Rolle der Funktionen SAF besteht darin, den Zugriff auf eine spezifische Bibliothek SLL einer strukturierten Sprache wie z. B. SQL zuzulassen, welche ihrerseits als Schnittstelle mit relationalen Datenbanken wie z. B. INGRES (eingetragenes Warenzeichen von Ingres Co.), ORACLE (eingetragenes Warenzeichen der ORACLE Corporation) usw. dient.
  • Die Funktionen SAF bieten zwei Funktionalitätsniveaus. Das erste ermöglicht die Konstruktion von Standard-Anforderungen in der strukturierten Sprache in der SML-Umgebung, wobei die auf diesem Niveau verwendeten Funktionen nicht mit dem Server der Datenbank in Wechselwirkung sind. Auf dem zweiten Niveau sind die verwendeten Funktionen mit dem Server der Datenbank in Wechselwirkung, um u. a. die Verbindung oder die Unterbrechung der Verbindung mit dem Server sowie die Aktualisierung, wenn Änderungen gewünscht sind, zuzulassen.
  • Im allgemeinen besitzen die Typen von Daten in der strukturierten Sprache ihre Äquivalente in der SML-Sprache, so daß eine Entsprechung zwischen diesen zwei Sprachen vorhanden ist. Ebenso werden die Namen der Tabellen und der Attribute in der strukturierten Sprache durch Atome in der SML-Sprache dargestellt (siehe z. B. die Sprache Lisp), wobei die Werte selbstverständlich ihre Entsprechung in diesen zwei Sprachen haben.
  • Es ist außerdem möglich, Erweiterungen von SML zu schreiben. Hierzu müssen die neuen Funktionen in der Sprache des Typs C geschrieben werden, anschließend werden sie kompiliert und in die Bibliotheken von SML eingereiht.
  • Es wird dann ein neuer, erweiterter SML-Interpretierer erhalten. Im allgemeinen hat die Entwicklung einer SML-Erweiterung die folgenden Stufen zur Folge:
  • - Entwicklung eines Codes in der Sprache des Typs C für das Grundelement, das jedesmal aufgerufen werden muß, wenn auf einen neuen SML-Namen Bezug genommen wird.
  • - Ausführen der Zuordnung zwischen dem Namen der neuen SML- Funktion und dem Namen des Grundelements in der kompilierten externen Bibliothek.
  • - Konstruktion des neuen SML-Interpretierers, in dem sämtliche erforderlichen Bibliotheken verbunden werden.
  • Zusammenfassend wird die Verwendung einer Sprache wie SML, die eine gleichartige Darstellung für die Programme und die Daten besitzt, besonders vereinfacht und ist vorteilhaft. Eine solche Sprache bietet nämlich eine große Vielseitigkeit bei der Verwendung, eine extreme Flexibilität und eine erhebliche Leistung, die das Schicken eines für sich sinnvollen Codefragments, beispielsweise einer Transaktion, ermöglicht, wobei ein Gleichgewicht der Belastung zwischen den dynamisch regulierten Prozessoren geschaffen wird und eine dynamische Modifikation des Codes während der Ausführung zugelassen wird. Bei dieser Verwendung wird der Code hier mit einer Einfachheit und einer Vielseitigkeit übertragen, die mit einer einfachen Datenübertragung übereinstimmt. Eine solche Programmiersprache ermöglicht eine deutliche Reduzierung der Entwicklungszeit einer Anwendung.
  • Außerdem ermöglicht die Sprache, die gemäß der Erfindung verwendet wird und in der sich die Typisierung eher auf den Inhalt der Variablen als auf die Variablen selbst stützt, die Verwirklichung von Zugriffsschnittstellen mit Servern, die sehr erheblich vereinfacht sind und die Gattungsprogrammierung erleichtern, wobei die Struktur der Daten direkt und ohne Bedingung manipuliert wird. Die SML-Variablen besitzen nämlich keinen Typ, weil von ihnen allen angenommen wird, daß sie in einem unbestimmten Zustand (Wert "falsch") sind, wobei gleichzeitig mit einer Zuweisung der Typ fixiert wird, wodurch eine Gattungsprogrammierung zugelassen wird. Dies ist ein vorteilhaftes Leistungsmerkmal gegenüber den Sprachen des Typs C, für die die Typen kompiliert werden, was deren Kenntnis vor einer Programmierung erfordert.
  • Ein weiterer wichtiger Vorteil ergibt sich daraus, daß der ausführbare Code einfach und auf natürliche Weise durch sich selbst modifiziert werden kann, um an andere Typen empfangener Daten angepaßt zu werden. Somit kann eine Anwendung eine Anforderung zum Netz schicken, um den Wert eines Verwaltungsobjekts anzufordern, ohne daß dessen Struktur bekannt ist, um dann dynamisch die Anzeigefunktionen und die Aktualisierung zu konstruieren, die an die Struktur des empfangenen Objekts angepaßt sind&sub0; Wie weiter oben bereits gesehen worden ist, hat nämlich die Tatsache, daß zwischen dem Programm und den Daten kein Unterschied besteht, zur Folge, daß das Programm sich selbst modifizieren kann und ermöglicht, daß sich eine Anwendung in Abhängigkeit von den Daten, die es manipuliert, dynamisch modifiziert.
  • Schließlich weist eine solche Sprache, die einen ganzheitlichen Charakter besitzt und die Schnittstellenerzeugung mit verschiedenen Informations-Servern erleichtert, einen großen Vorteil auf, indem sie als sehr hoch entwickelte Sprache für Verwaltunganwendungen verwendet werden kann. Somit ermöglicht sie z. B. den Zugriff auf eine Bibliothek, die zu einer strukturierten Sprache wie etwa SQL gehört, indem der ganzheitliche Charakter dieser Sprache berücksichtigt wird.
  • Außerdem ermöglicht sie die Erzeugung von Schnittstellen unter Berücksichtigung des Baumstruktur-Charakters mehrerer Server wie z. B. der Netz-Verwaltungplattformen.

Claims (6)

1. Verwendung einer eine für die Programme und die Daten gleichartige Darstellung besitzenden Sprache für die Verteilung von Informationen und Verarbeitungen in einem Netzverwaltungssystem, dadurch gekennzeichnet, daß eine direkte, symmetrische Kommunikation entsprechend ausführbaren Nachrichten erzeugt wird, die auszuführenden Code transportieren, d. h. gleichzeitig die anzuwendenden Funktionen und die Daten, auf die die Funktionen angewendet werden sollen, wobei es sich um asynchrone Nachrichten handelt, die über das Netz in einem freien Format eines Interpretierers der Sprache einer Maschine zu einem weiteren Interpretierer der Sprache einer anderen Maschine geschickt werden, was außerdem eine dynamische Modifikation des Codes in Abhängigkeit von den während der Ausführung manipulierten Daten sowie eine dynamische Wanderung verschiedener Codefragmente in die verschiedenen Maschinen des Verwaltungssystems zuläßt, wobei in dieser Sprache geschriebene Programme, die auf unterschiedliche Weisen in einer oder in mehreren Maschinen ausgeführt werden, Kommunikationsverbindungen herstellen, dann Daten, Programme oder Programmfragmente austauschen und somit ein symmetrisches, kooperatives Netz von Interpretierern erzeugen, in dem die Belastung der verschiedenen Maschinen in einem dynamischen Gleichgewicht gehalten wird.
2. Verwendung von Lisp als Sprache nach Anspruch 1.
3. Interpretierer (INT) einer Maschine, der die Sprache nach Anspruch 1 oder Anspruch 2 verwendet, dadurch gekennzeichnet, daß er hauptsächlich aus einem Kern (K) für die Verarbeitung des auszuführenden Programms, wofür er sich sowohl auf interne Dienste: Auswertemittel, Speicherverwaltung, als auch auf den die primitiven Funktionen (SOF) der Sprache ausführenden Code stützt, sowie aus einer programmartigen Schnittstelle (API) aufgebaut ist, die zwischen dem Kern und dem die primitiven Funktionen ausführenden Code dokumentiert ist, um den Zugriff auf mehrere Dienste zuzulassen und die Erweiterung der Sprache und des Interpretierers auf neue primitive Funktionen zu erleichtern.
4. Interpretierer nach Anspruch 3, dadurch gekennzeichnet, daß er einen Satz von Funktionen für die Ausführung der primitiven Funktionen enthält, der einerseits aus Funktionen, die zu der Sprache gehören, die für die Programme und für die Daten eine gleichartige Darstellung besitzt, und andererseits aus erweiterten Funktionen gebildet ist, die den Zugriff auf die mehreren Dienste ermöglichen.
5. Interpretierer nach Anspruch 4, dadurch gekennzeichnet, daß bei einer Anwendung, die den Zugriff auf Verwaltungsdienste für Netze und Informationssysteme erfordert, die folgenden Operationen ausgeführt werden:
-1. Initialisieren der Dienste,
-2. Erwarten einer Aktion eines Anwenders,
-3. Aussenden einer Anforderung für die Verwaltungsdienste für Netze und Informationssysteme,
-4. Erzeugen einer Rückrufprozedur für diese Anforderung,
-5. Ausführen der Rückrufprozedur, wenn die Antwort auf die Anforderung ankommt,
-6. Wiederholen ab der Stufe 2 bis zur letzten Anforderung vom Anwender,
-7. Ende der Anwendung.
6. Interpretierer nach Anspruch 4, dadurch gekennzeichnet, daß bei einer Anwendung, die den Zugriff einerseits auf Verwaltungsdienste für Netze und Informationssysteme und andererseits auf Bibliotheken, welche Komponenten für die Entwicklung und die Verwaltung von graphischen Anwenderschnittstellen liefern, erfordert, die folgenden Operationen ausgeführt werden:
-1. Initialisieren der zwei Typen von Diensten,
-2. Erzeugen und Darstellen von Anwenderschnittstellen- Komponenten, die "widgets" genannt werden,
-3. Erzeugen von Rückrufprozeduren für die Anwender- Interaktionen,
-4. Erwarten einer Aktion eines Anwenders,
-5. Aussenden einer Anforderung mittels einer Rückrufprozedur für die Verwaltungsdienste für Netze und Informationssysteme,
-6. Erzeugen einer Rückrufprozedur für die Anforderung,
-7. Ausführen der Rückrufprozedur, wenn die Antwort auf die Anforderung ankommt,
-8. Wiederholen ab der Stufe 4 bis zur letzten Anforderung des Anwenders,
-9. Ende der Anwendung.
DE69303013T 1992-03-12 1993-03-12 Anwendung einer sprache mit einer aehnlichen darstellung fuer programme und daten in der verteilten datenverarbeitung Expired - Fee Related DE69303013T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
FR9202977A FR2688608B1 (fr) 1992-03-12 1992-03-12 Utilisation d'un langage ayant une representation similaire pour les programmes et les donnees en informatique distribuee.
PCT/FR1993/000251 WO1993018453A1 (fr) 1992-03-12 1993-03-12 Utilisation d'un langage ayant une representation similaire pour les programmes et les donnees en informatique distribuee

Publications (2)

Publication Number Publication Date
DE69303013D1 DE69303013D1 (de) 1996-07-11
DE69303013T2 true DE69303013T2 (de) 1996-11-14

Family

ID=9427622

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69303013T Expired - Fee Related DE69303013T2 (de) 1992-03-12 1993-03-12 Anwendung einer sprache mit einer aehnlichen darstellung fuer programme und daten in der verteilten datenverarbeitung

Country Status (7)

Country Link
EP (1) EP0631675B1 (de)
JP (1) JPH07500688A (de)
CA (1) CA2131632C (de)
DE (1) DE69303013T2 (de)
ES (1) ES2094561T3 (de)
FR (1) FR2688608B1 (de)
WO (1) WO1993018453A1 (de)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102014016968A1 (de) 2014-11-18 2015-01-22 Boris Kaplan Ein Computersystem von einer Künstlichen Intelligenz von einem Cyborg oder einem Android, wobei eine aufgenommene Signal-Reaktion des Computersystems von der Künstlichen Intelligenz von dem Cyborg oder dem Android, eine entsprechende Assoziation des Computersystems von der Künstlichen Intelligenz von dem Cyborg oder dem Android, und ein entsprechender Gedanke des Computersystems von der Künstlichen Intelligenz von dem Cyborg oder dem Android in dem Computersystem physisch gebaut werden, und ein Arbeitsverfahren von dem Computersystem von der Künstlichen Intelligenz von dem Cyborg oder dem Android
DE102023000489A1 (de) 2023-02-14 2023-04-13 Boris Kaplan Ein Computersystem von einer Künstlichen Intelligenz von einem Cyborg oder einem Android, wobei eine aufgenommene Signal-Reaktion des Computersystems von der Künstlichen Intelligenz von dem Cyborg oder dem Android, eine entsprechende Assoziation des Computersystems von der Künstlichen Intelligenz von dem Cyborg oder dem Android, und ein entsprechender Gedanke des Computersystems von der Künstlichen Intelligenz von dem Cyborg oder dem Android in dem Computersystem physisch gebaut werden, und ein Arbeitsverfahren von dem Computersystem von der Künstlichen Intelligenz von dem Cyborg oder dem Android.
DE102021005701A1 (de) 2021-11-17 2023-05-17 Boris Kaplan Ein Computersystem von einer Künstlichen Intelligenz von einem Cyborg oder einem Android, wobei eine aufgenommene Signal-Reaktion des Computersystems von der Künstlichen Intelligenz von dem Cyborg oder dem Android, eine entsprechende Assoziation des Computersystems von der Künstlichen Intelligenz von dem Cyborg oder dem Android, und ein entsprechender Gedanke des Computersystems von der Künstlichen Intelligenz von dem Cyborg oder dem Android in dem Computersystem physisch gebaut werden, und ein Arbeitsverfahren von dem Computersystem von der Künstlichen Intelligenz von dem Cyborg oder dem Android

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102007055117A1 (de) 2007-03-26 2008-10-02 Boris Kaplan Ein System von Künstlicher Intelligenz von einem Cyborg oder einem Android für das zeigerorientierte Objekterfassungsverfahren von Informationen basierend auf einer natürlichen Sprache und das Arbeitsverfahren von dem System

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2043141A1 (en) * 1990-07-18 1992-01-19 Richard F. Bournique Hypermedia arrangement using a window system and layered intrinsics

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102014016968A1 (de) 2014-11-18 2015-01-22 Boris Kaplan Ein Computersystem von einer Künstlichen Intelligenz von einem Cyborg oder einem Android, wobei eine aufgenommene Signal-Reaktion des Computersystems von der Künstlichen Intelligenz von dem Cyborg oder dem Android, eine entsprechende Assoziation des Computersystems von der Künstlichen Intelligenz von dem Cyborg oder dem Android, und ein entsprechender Gedanke des Computersystems von der Künstlichen Intelligenz von dem Cyborg oder dem Android in dem Computersystem physisch gebaut werden, und ein Arbeitsverfahren von dem Computersystem von der Künstlichen Intelligenz von dem Cyborg oder dem Android
DE102021005701A1 (de) 2021-11-17 2023-05-17 Boris Kaplan Ein Computersystem von einer Künstlichen Intelligenz von einem Cyborg oder einem Android, wobei eine aufgenommene Signal-Reaktion des Computersystems von der Künstlichen Intelligenz von dem Cyborg oder dem Android, eine entsprechende Assoziation des Computersystems von der Künstlichen Intelligenz von dem Cyborg oder dem Android, und ein entsprechender Gedanke des Computersystems von der Künstlichen Intelligenz von dem Cyborg oder dem Android in dem Computersystem physisch gebaut werden, und ein Arbeitsverfahren von dem Computersystem von der Künstlichen Intelligenz von dem Cyborg oder dem Android
DE102023000489A1 (de) 2023-02-14 2023-04-13 Boris Kaplan Ein Computersystem von einer Künstlichen Intelligenz von einem Cyborg oder einem Android, wobei eine aufgenommene Signal-Reaktion des Computersystems von der Künstlichen Intelligenz von dem Cyborg oder dem Android, eine entsprechende Assoziation des Computersystems von der Künstlichen Intelligenz von dem Cyborg oder dem Android, und ein entsprechender Gedanke des Computersystems von der Künstlichen Intelligenz von dem Cyborg oder dem Android in dem Computersystem physisch gebaut werden, und ein Arbeitsverfahren von dem Computersystem von der Künstlichen Intelligenz von dem Cyborg oder dem Android.
DE102023000489A9 (de) 2023-02-14 2023-06-15 Boris Kaplan Ein Computersystem von einer Künstlichen Intelligenz von einem Cyborg oder einem Android, wobei eine aufgenommene Signal-Reaktion des Computersystems von der Künstlichen Intelligenz von dem Cyborg oder dem Android, eine entsprechende Assoziation des Computersystems von der Künstlichen Intelligenz von dem Cyborg oder dem Android, und ein entsprechender Gedanke des Computersystems von der Künstlichen Intelligenz von dem Cyborg oder dem Android in dem Computersystem physisch gebaut werden, und ein Arbeitsverfahren von dem Computersystem von der Künstlichen Intelligenz von dem Cyborg oder dem Android.

Also Published As

Publication number Publication date
EP0631675B1 (de) 1996-06-05
JPH07500688A (ja) 1995-01-19
DE69303013D1 (de) 1996-07-11
WO1993018453A1 (fr) 1993-09-16
CA2131632C (fr) 2000-02-22
FR2688608A1 (fr) 1993-09-17
EP0631675A1 (de) 1995-01-04
FR2688608B1 (fr) 1997-01-17
ES2094561T3 (es) 1997-01-16

Similar Documents

Publication Publication Date Title
DE60126016T2 (de) Serverseitige Kontrollobjekte zur Verarbeitung von kundenseitigen Benutzerschnittstellenelementen
US5734907A (en) Method of programming an information processing device for network management applications using generic programming
DE60011479T2 (de) Xml-roboter
DE69733739T2 (de) Rechnersystem und Verfahren zum Testen eines Netzwerkmanagement-Agenten (TMN-Agenten)
DE69727381T2 (de) Verfahren zum transportieren von in einer schnittstellendefinitionssprache definierten datenstrukturen zwischen heterogenen systemen
US5860010A (en) Use of language with similar representation for programs and data in distributed data processing
DE69832354T2 (de) Netzwerkverwaltungsrahmenwerk
DE69637436T2 (de) Objektorientiertes Kommunikationssystem mit Unterstützung für mehrere entfernte Maschinentypen
DE3852324T2 (de) Verfahren und System zur Netzwerkverwaltung.
DE68926726T2 (de) Zur Aufgabenautomatisierung und Kommandoerzeugung passendes Rechnersystem und -methode
DE69032191T2 (de) Anordnung und Verfahren zur Realisierung von Hochleistungskommunikation zwischen Softwareprozessen
DE69820566T2 (de) Verfahren, Vorrichtung, und Programmprodukt zum Zugriff auf einen Server-basierten Verwaltungsinformationsdienst
DE68928433T2 (de) Verwaltungssystem für verbundene einheiten in einem verteilten rechnersystem
DE69924857T2 (de) Programm-kode-umwandlung
DE69727933T2 (de) Verfahren und gerät zum beschreiben einer definierten schnittstelle, einer operation und eines datentyps in einer schnittstellendefinitionssprache
DE69731614T2 (de) Netzübergreifende einrichtung und verfahren zur herstellung einer solchen einrichtung
DE69029441T2 (de) System für den Aufruf von Prozeduren von einem Fernnetzwerkknotenpunkt
DE69030815T2 (de) Apparat und verfahren zur erzeugung von dokumenten
DE19705955A1 (de) Verfahren zum Generieren einer Implementierung eines Workflow-Prozessmodells in einer Objektumgebung
DE69909614T2 (de) Sich selbst manipulierende bäume verwendende rechenarchitektur
DE10128883A1 (de) Verfahren und System für die Verteilung von Anwendungsdaten auf verteilte Datenbanken mit verschiedenen Formaten
EP0825527A1 (de) Verfahren zur Unterstützung der Adress-Interaktion zwischen einer ersten und einer zweiten Einheit
DE112011103406T5 (de) Verwaltung von nicht geänderten Objekten
DE68926835T2 (de) Modularer Compiler für ein Rechnersystem
DE69907714T2 (de) Komponentbasiertes quellcodegeneratorverfahren

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee