YEngine/de

From OpenSimulator

Revision as of 12:50, 21 August 2022 by Manni (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search


Contents

Zusammenfassung

Dies ist eine voll funktionsfähige Alternative zu XEngine für LSL/OSSL-Skripte mit

  • Präventives Multitasking
  • Verbesserte Skriptsyntax
  • Die Auswertungsreihenfolge der Ausdrücke nähert sich der ursprünglichen LSL-Spezifikation
  • Steuerung der Speicher-Heap- und Stack-Nutzung per Skript
  • Optionale neue Spracherweiterungen

YEngine übersetzt direkt von der Skriptsprache in den .net-IL-Code, wodurch es schneller kompiliert wird als XEngine. XEngine übersetzt die Skriptsprache in C# und verwendet dann den .net-Compiler, um IL zu generieren, was natürlich langsamer ist. Während XEngine Skripte in anderen Sprachen wie C# kompilieren könnte, unterstützt YEngine nur LSL. Aus Sicherheitsgründen konnten diese anderen Sprachen nicht tatsächlich verwendet werden, außer in sehr speziellen und eingeschränkten Fällen.

Sobald ein Skriptcode auf XEngine geladen wird, kann der von ihm verwendete Speicher nicht wiederhergestellt werden, wenn das Skript gelöscht wird, es sei denn, es wird eine .net-Funktion namens AppDomains verwendet negative Auswirkung auf die Skriptleistung Bei Aufrufen, die Domänen (dh das Skript und das Hauptframework) überqueren, werden alle Parameter und Rückgabewerte von Sender- und Empfängerdomänen serialisiert und deserialisiert.

Yengine lädt Skriptcode auf andere Weise, der größte Teil ihres Speichers wird beim Löschen wiederhergestellt, ohne dass diese AppDomains benötigt werden.

Präventives Multitasking

YEngine führt Skriptereignisse mit präemptivem Multitasking aus. Dies bedeutet, dass ein Skript an bestimmten Kontrollpunkten oder auf Anweisung hin die Ausführung freigeben kann, indem es in eine Warteschlange gestellt wird und darauf wartet, dass es wieder an der Reihe ist. Der freigegebene Ausführungsthread fährt mit der Verarbeitung anderer Skripte fort.

Wenn ein neues Ereignis mit der Ausführung begonnen hat, kann es etwa 60 ms lang ausgeführt werden (Änderungen vorbehalten), bis die Ausführung freigegeben wird. Wenn es an der Reihe ist, es erneut auszuführen, kann es weitere 30 ms laufen (Änderungen vorbehalten). Dies wird wiederholt, bis der gesamte Ereigniscode ausgeführt ist . Die Engine gibt kurzen schnellen Ereignissen mehr Priorität.

Das Skript kann auch in einen Ruhezustand versetzt werden, bis eine Ruhezeit verstreicht. Dies löst zum Beispiel eines der schlimmsten Probleme der XEngine: llSleep() und andere interne Skript-Ruhezustände. Auf YEngine gibt dies einfach die Ausführung frei und wartet in einer Warteschlange, bis die Ruhezeit abgelaufen ist. Auf XEngine wurde ein "teurer" Ausführungs-Thread in den Schlafmodus versetzt, sodass er nicht verfügbar war, um irgendetwas zu tun.

Verbesserte Skriptsyntax

YEngine folgt genauer der LSL-Skriptsyntax und Ausführungsreihenfolge. Aussagen wie

   if(oneKey)
   ...

sollte jetzt funktionieren.

   llSomething; // missing()
   break; // but see new extensions

sind jetzt Fehler

Auswertungsreihenfolge der Ausdrücke

Die Ausführungsreihenfolge komplexer Anweisungen entspricht näher der LSL-Spezifikation als die Ausführungsreihenfolge der XEngine.

zum Beispiel mit i = 1;

((i == 2) && (i++ == 1))

wird gemäß der LSL-Spezifikation als wahr ausgewertet, während es auf XEngine als falsch ausgewertet wird, da es zuerst (i == 2) ausführt

Auch wenn es in diesem Fall nicht sinnvoll ist, verwenden Sie immer Klammern (...), um die benötigte Reihenfolge durchzusetzen (und tun Sie dies in jeder Sprache)!

Neue Spracherweiterungen

Diese Informationen beziehen sich auf die Version Yeti 0.9.2.0 Dev, bei älteren Versionen verwenden Sie einfach nur normales LSL/OSSL


Skripte, die diese Funktionen verwenden, funktionieren nur auf einer kompatiblen YEngine-Version. Sie werden nicht auf XEngine oder älteren Versionen von YEngine kompiliert oder ausgeführt.


Wenn die zweite Zeile eines Skripts (derzeit muss die erste Zeile vorhanden sein, leer oder mit Skript-Engine-Auswahl)

Optionen;

Die folgenden Yengine-spezifischen Spracherweiterungen sind aktiviert

Skripte, die diese Funktionen verwenden, werden auf XEngine nicht kompiliert oder ausgeführt.

Steuerung der Speicherheap- und Stack-Nutzung

YEngine behält die Kontrolle über den Speicher, den ein Skript verwendet. Es gibt zwei Arten von Gedächtnis:

   Stack enthält Funktionsargumente und einfache lokale Variablen.
   Heap enthält globale Variablen und komplexe Variablen wie Listen oder Zeichenfolgen, auch wenn sie lokal für eine Methode/ein Ereignis sind.

Der maximale Speicher, den ein Skript verwenden kann, kann im OpenSim.ini-Abschnitt [YEngine] konfiguriert werden.

; maximaler Stack, den ein Skript in KB verwenden kann
;ScriptStackSize = 2048
   
; maximaler Heap-Speicher, den ein Skript in KB verwenden kann
;ScriptHeapSize = 1024

Möglicherweise müssen Sie diese Werte erhöhen.

Aktivierung

Die Standardkonfiguration von OpenSimulator wählt XEngine aus. Um zu YEngine zu wechseln, müssen Sie den Abschnitt OpenSim.ini: [Startup] ändern:

[Startup] section:

   DefaultScriptEngine= "YEngine"

[YEngine] section:

   Enable = true

[XEngine] section:

   Enable = false


Hinweis: Theoretisch könnte OpenSimulator mehrere Engines gleichzeitig ausführen, aber wir sollten das nicht mit X- und Y-Engines tun.

Configuration

Einzelheiten finden Sie in der Datei OpenSimDefaults.ini, Abschnitt [YEngine]. Wie in jedem Fall, wenn Sie etwas ändern müssen, kopieren Sie die entsprechenden Zeilen an einen ähnlichen Ort in der Datei OpenSim.ini und ändern Sie dort

Origins

YEngine ist ein modifiziertes Derivat von XMREngine.

XMREngine wurde von Teams von DreamNation- und Avination-Grids entwickelt, basierend auf frühen Arbeiten von Meta7.

Es wird immer noch von DreamNation verwendet.

http://wiki.dreamnation.net/index.php/XMREngine_Script_Engine

Viele Informationen über XMREngine gelten nicht mehr für YEngine. Einige Funktionen funktionieren möglicherweise noch, können jedoch entfernt oder geändert werden.

Personal tools
General
About This Wiki