www.wikidata.de-de.nina.az
LPC ist eine objektorientierte Programmiersprache in der Syntax ahnlich wie C oder C fur Netzwerk Textabenteuerspiele Multi User Dungeons kurz MUDs LPC ist eine Mischung aus Interpreter und Compilersprache LPC MUDs erlauben in der Regel zur Laufzeit Programme hinzuzufugen zu starten und auch nachtraglich zu andern ohne das ganze Spiel neu zu starten Der LPC Code wird von einem Compiler zuerst in einen Bytecode umgewandelt und danach von einem Interpreter ausgefuhrt Inhaltsverzeichnis 1 Geschichte 2 Merkmale 3 Unterschiede zu anderen C ahnlichen Sprachen 3 1 Die Klassenbibliothek eines MUDs 3 2 Unterschiede bezogen auf die Laufzeitumgebung 3 3 Unterschiede bei der Objektorientierung 3 4 Besondere Konstrukte 3 5 Besondere Datentypen 4 Hallo Welt Programm in LPC 5 Komplexeres Beispielobjekt 6 EinzelnachweiseGeschichte BearbeitenDie Bezeichnung LPC leitet sich vom Erfinder der Sprache Lars Pensjo ab 1 Pensjo entwickelte LPC Anfang der 1990er Jahre und orientierte sich dabei an der Programmiersprache C Von der ahnlichen Syntax abgesehen gibt es jedoch nur wenige Gemeinsamkeiten der beiden Sprachen Bei den ursprunglichen Implementierungen von LPC waren Compiler und Bytecode Interpreter Bestandteile eines einzelnen Programms das grundlegende fur den Betrieb eines Multi User Dungeons notwendige Funktionalitat zur Verfugung stellte den sogenannten Gamedriver oder kurz Driver Auch das MUD Amylaar trug wesentliche Teil zum Treiber bei Dazu gehort vor allem der Betrieb als Server zu dem mit einem Telnet oder einem speziellen MUD Client eine Verbindung hergestellt werden kann Diese Software wurde unter dem Namen LPMud verbreitet eine moderne Weiterentwicklung auf Basis des ursprunglichen LPMud Quellcodes hort auf die Bezeichnung LDMud nach den Initialen des Maintainers Eine weitere Implementierung desselben Konzeptes inklusive der Sprache LPC ist MudOS Aus LPC ging die unabhangige Scriptsprache Pike hervor Diese hat bisher keinen hohen Verbreitungsgrad erreicht Merkmale BearbeitenLPC unterstutzt die folgenden Programmiertechniken Prozedurale Programmierung Modulare Programmierung Strukturierte Programmierung Objektorientierte Programmierung mit Mehrfachvererbung Programmierung mit selbstdefinierten Datentypen abstrakte Datentypen Schwach typisierte VariableUnterschiede zu anderen C ahnlichen Sprachen BearbeitenDie grundlegende Syntax von LPC entspricht der der Sprache C Dazu gehoren die verwendeten Zeichen zur Kennzeichnung von Blocken Funktionen Argumenten und Argumentlisten sowie die Benutzung des Semikolons als Endzeichen eines Statements Im Unterschied zu C kennt LPC keine stark typisierten Variablen Eine Variable kann zwar mit einem vorher bestimmten Typ angelegt werden dann jedoch trotzdem einen Wert eines anderen Typs aufnehmen Zusatzlich existiert der Typ mixed fur untypisierte Variable Das wirkt sich auch auf Ruckgabewerte und Parameter von Funktionen aus im Normalfall mussen in der Funktionssignatur weder die Argumente noch Ruckgabewert mit Typen versehen werden Man kann jedoch durch Angabe von Praprozessor Direktiven eine Uberprufung auf gultige Argumente zum Ubersetzungszeitpunkt erzwingen pragma strong types Typen fur Argumente und Ruckgabewert mussen angegeben werden pragma strict types der Ruckgabewert von an fremden Objekten gerufenen Methoden muss gecastet werdenDie Klassenbibliothek eines MUDs Bearbeiten Die Sprache LPC kennt nur eine geringe Zahl von Standardfunktionen efuns Diese sind im ausfuhrenden Programm gamedriver also beispielsweise LPMud oder LDMud implementiert Zusatzlich hat jedes MUD das mit einer solchen Software betrieben wird eine eigene Klassenbibliothek MUDlib Die MUDlib enthalt Schnittstellen mit denen der gamedriver einen Teil der Verantwortung an sie zuruckgeben kann Dazu gehort unter anderem das Erzeugen eines Spielerobjektes fur einen einloggenden Spieler oder die Fehlerbehandlung Es gibt hierbei keine Standard MUDlib die von allen MUDs genutzt wurde Einige sich im Einsatz befindliche MUDlibs sind jedoch Open Source oder auf andere Weise frei verwendbar Aufbauend auf wenigen frei verfugbaren MUDlibs sind mehrere weit verbreitete MUDlib Zweige entstanden die in vielen MUDs eingesetzt werden Im deutschsprachigen Raum sind beispielsweise Abkommlinge der MUDlibs der MUDs MorgenGrauen einerseits und UNItopia andererseits verbreitet Unterschiede bezogen auf die Laufzeitumgebung Bearbeiten Von der sprachlichen Seite abgesehen unterscheidet sich LPC auch in mehreren Punkten in Bezug auf die Definition der Laufzeitumgebung von anderen Programmiersprachen Durch die ursprungliche Zielsetzung als Sprache eines Online Rollenspiels bei dem mehrere Entwickler mit unterschiedlichen Rechten eigenen Code einbringen konnen enthalt die Laufzeitumgebung beispielsweise sogenannte privilegierte Funktionen die nur nach vorheriger Uberprufung durch ein Master Objekt des MUDs von einem normalen Objekt aufgerufen werden konnen Aktuelle LPC Laufzeitumgebungen unterstutzt keine Threads In einem einzelnen Thread werden nacheinander alle anfallenden Aufgaben erledigt Dadurch ergibt sich notwendigerweise eine Begrenzung der Laufzeit die fur die Behandlung eines zusammenhangenden Ereignisses gesetzt ist In LDMuds kann diese Begrenzung dynamisch fur einzelne Funktionsaufrufe aufgehoben oder gesetzt werden Eine weitere Besonderheit ist die fast vollstandige Gleichwertigkeit der eingebauten Funktionen efuns mit von der Klassenbibliothek eines MUDs MUDlib vorgegebenen simul efuns Auf diese Weise ist es moglich Standardfunktionen zu uberschreiben oder den Zugriff darauf zu verbieten Unterschiede bei der Objektorientierung Bearbeiten LPC kennt im Gegensatz zu vielen objektorientierten Programmiersprachen keine Unterscheidung zwischen Klassen und Objekten Im Normalfall wird aus einer Quelltext Datei ein einzelnes Objekt erzeugt Alle im Speicher befindlichen Objekte konnen jedoch dupliziert geklont cloned werden Der Vorgang des Clonens ist vergleichbar mit dem der Instanziierung bei anderen Programmiersprachen allerdings sind der Klon clone und das Original blueprint gleichberechtigt und konnen beide theoretisch auf die gleiche Weise eingesetzt werden Dabei ist aber zu berucksichtigen dass das Objektuniversum der LPC Welt jedem Objekt ein quasi physisches befindet sich in Attribut zuordnet das Avatar Objekt des Spielers befindet sich in einem Raum die Habseligkeiten des Spielers befinden sich in diesem virtuellen Korper usw und dass ein Blueprint der einmal die Welt betreten hat zwar noch bewegt aber nicht mehr geklont werden kann nur wenn das Blueprint Objekt zerstort und aus dem Quelltext neu erzeugt wird befindet es sich wieder ausserhalb der Welt Das Enthaltensein ist eine elementare Eigenschaft des Gamedrivers nicht der MUDlib Besondere Konstrukte Bearbeiten LPC kennt das Konzept des Shadowing Dabei handelt es sich um eine Moglichkeit alle Zugriffe auf eine Funktion eines Objektes von aussen abzufangen beispielsweise um sie zu filtern oder ganz zu unterbinden ahnlich dem Decorator Muster Das Prinzip wird angewandt indem ein Objekt mit der efun shadow sich als Schatten eines beliebigen anderen Objektes registriert Bei einem Aufruf einer Funktion des Zielobjektes der nicht innerhalb des Zielobjektes direkt geschieht wird dann die gleichnamige Funktion im Schatten Objekt aufgerufen falls dieses Objekt eine solche Funktion enthalt Existiert im Schatten Objekt keine Funktion gleichen Namens wird der Aufruf wie ein normaler Funktionsaufruf in einem Objekt ohne Schatten behandelt Das Schatten Objekt hat ebenfalls die Moglichkeit Funktionen im Zielobjekt das es uberschattet aufzurufen Besondere Datentypen Bearbeiten Funktionen sind in LPC keine First Class Objekte Funktionen erster Ordnung Dennoch kennt die Sprache Funktionsreferenzen Aus der Welt der Funktionalen Programmierung entlehnt ist der Name closure fur diesen Datentyp in Anlehnung an den Begriff Closure Die referenzierte Funktion kann auch mit der Funktion lambda zur Laufzeit dynamisch erzeugt werden Dabei wird aus einem Array von Closures und Symbolen zur Laufzeit eine neue Funktion erzeugt die dann wie jede andere closure als Wert ubergeben oder als Funktion aufgerufen werden kann Die in der LPMud Variante LDMud eingesetzte LPC Fortentwicklung enthalt zusatzlich die Moglichkeit zur Compilezeit Closures auf formlos angegebene Inline Funktionen zu erzeugen Dazu wird die sogenannte Smiley Notation verwandt bei der normaler LPC Code innerhalb von und vom Compiler in eine normale Funktion des Objektes umgesetzt wird und der Ausdruck an der Stelle seines Auftretens durch eine auf diese Funktion verweisende closure ersetzt wird Arrays existieren in LPC und konnen im Code mit den einzelnen Elementen durch Kommata getrennt und von und umschlossen erzeugt werden Der Zugriff auf einzelne Elemente geschieht mit dem Indexoperator vergleichbar zu C Zusatzlich gibt es Standardfunktionen zur Behandlung von Arrays Arrays sind ebenso wie andere Variable auch nicht typisiert Das bedeutet dass die Elemente eines Arrays unterschiedliche Typen haben konnen Weitere Arrays sind ebenfalls als Elemente eines Arrays erlaubt Dadurch ist es in LPC moglich komplexe Strukturen als Arrays aufzubauen Eine Variable die ein Array halten konnen soll wird durch einen dem Elementtyp hintangestellten Asterisk gekennzeichnet Dabei wird jedoch keine Typprufung vorgenommen Variable vom Typ mixed konnen ebenfalls ein Array enthalten LPC kennt zusatzlich ausserdem sogenannte assoziative Arrays vergleichbar mit den Worterbuchern der Sprache Python In LPC wird dafur die Bezeichnung mapping verwandt Diese mappings sind als Hashtabelle implementiert In einem assoziativen Array kann einem Schlusselelement ein Wert zugeordnet werden Eine Besonderheit der assoziativen Arrays in LPC ist die pro mapping variable Anzahl von Werten pro Schlussel So kann ein Mapping beispielsweise zu jedem Schlussel eine beliebige aber innerhalb des mappings gleiche Anzahl von Werten enthalten Um diese Werte anzusprechen kann zusatzlich zum Schlussel bei einer Indizierungsoperation noch ein numerischer Index angegeben werden Hallo Welt Programm in LPC BearbeitenDas folgende Objekt gibt beim ersten Laden den Text Hallo Welt aus da die create Methode ublicherweise beim Laden Clonen von Objekten automatisch aufgerufen wird void create write Hallo Welt Komplexeres Beispielobjekt BearbeitenLPC wird hauptsachlich zur Beschreibung von Objekten in Rollenspielen eingesetzt Solche Objekte sind in vielen Fallen Gegenstande Einwohner oder Raume einer virtuellen Welt Die Klassenbibliothek MUDlib enthalt deshalb typischerweise Objekte die ganz allgemein einen Gegenstand oder eine bestimmte Klasse von Gegenstanden reprasentiert Ahnliches gilt fur Raume Monster und alle anderen Objekte die haufig in verschiedenen Variationen erzeugt werden mussen Das folgende Beispiel bezieht sich auf die Anwendung von LPC zusammen mit einer vorhandenen Klassenbibliothek die nicht zum Lieferumfang von LPMud gehort Es implementiert einen Apfel und erbt von einem Standardobjekt das vom Spieler essbare Nahrung implementiert Dazu gehort unter anderem die zur Implementierung des Ess Vorgangs im Spiel notwendige Logik Im erbenden Objekt mussen so nur noch die Werte von Eigenschaften eingestellt werden die im Rahmen der Moglichkeiten der Basisklasse die Auswirkungen des Verzehrs bestimmten Die in diesem Beispiel referenzierte MUDlib stellt hierzu die Funktion SetProp zur Verfugung Die Namen der Eigenschaften sind dabei Praprozessor Makros Es ist je nach MUD auch ublich auf Eigenschaften uber einzelne Accessor Funktionen zuzugreifen inherit std food include lt properties h gt include lt language h gt include lt food h gt void create if is clone this object return create SetProp P SHORT Ein Apfel SetProp P LONG Dieser Apfel ist schoen prall und rot Er schmeckt sicher vorzueglich AddId apfel n apfel SetProp P NAME Apfel SetProp P GENDER MALE SetProp P VALUE 50 SetProp P WEIGHT 50 SetProp P MATERIAL MAT FRUIT 100 SetProp P FOOD INFO F HEAL 10 10 F SOAK 5 F MSG Du isst den leckeren roten Apfel F MSG ROOM isst einen leckeren roten Apfel Einzelnachweise Bearbeiten Xyllomer de The LPC Reference Manual Abgerufen am 20 April 2016 Abgerufen von https de wikipedia org w index php title LPC Programmiersprache amp oldid 239457238