Jump to content

FlyWithLua Version 2.4 - was ist neu?


X-Friese

Recommended Posts

Mit der Version 2.4 gibt es eine grundlegende Änderung in FlyWithLua. Was ändert sich also für die Erstellung oder das Nutzen von Scripten? Die beruhigende Antwort lautet: nichts!

FlyWithLua hat bis zu den Versionen 2.3.x die Scripte als Ascii Dateien eingelesen, übersetzt und ausgeführt. Dabei werden jedoch auch Anweisungen gespeichert, die mit jedem Frame ausgeführt werden sollen (als Argument der do_every_frame() Anweisung). Diese Anweisungen wurden bisher als C++-String im Speicher abgelegt und bei jeder Ausführung zunächst compiliert und dann als Binärcode ausgeführt.

Seit Version 2.4 speichert FlyWithLua die Anweisungen zwar weiterhin als Strings, jedoch nur noch um sie in der Debug Datei ausgeben zu können. Sie werden jetzt direkt beim Verarbeiten des do_every_frame() in einen Zwischencode, ein sogenanntes Chunk, compiliert, dass dann später schneller ausgeführt werden kann, da die wiederkehrende Compilierung entfällt. Erst wenn sich der String ändert, wird ein neues Chunk erzeugt.

Die anderen Anweisungszeichenketten, wie z. B. durch do_every_draw(), do_often(), do_sometimes(), usw. erzeugt, werden entsprechend behandelt.

Ich erwarte dadurch eine schnellere Ausführung ohne dass Scripte angepasst werden müssen. Dennoch kann nicht vollständig ausgeschlossen werden, dass in der neuen Version ein Fehler steckt. Wer durch ein Update von 2.3.3 auf 2.4.0 plötzlich ein Problem mit einem Script hat, teile es mir bitte mit. Am liebsten durch ein neues Thema hier im Forum, weil dann auch gleich andere gewarnt werden, oder ich nicht das gleiche Problem hundertfach im E-Mail Eingang habe.

Wer sich den Geschwindigkeitsunterschied selbst ansehen möchte, die Version 2.3.3 hat einige Variablen, die FlyWithLua zu Diagnosezwecken anlegt. Diese lassen sich aus der Debug Datei auslesen, hier ein Beispiel:

DO_EVERY_DRAW_TIME_SEC = 0.001
DO_EVERY_FRAME_TIME_SEC = 0
DO_OFTEN_TIME_SEC = 0
DO_SOMETIMES_TIME_SEC = 0

DO_EVERY_DRAW_CHUNK = function: 0x13de30e8
DO_EVERY_FRAME_CHUNK = function: 0x13de23c0
DO_OFTEN_CHUNK = function: 0x13db3d68
DO_ON_KEYSTROKE_CHUNK = function: 0x13db5930
DO_ON_MOUSE_CLICK_CHUNK = function: 0x13de4a18
DO_ON_MOUSE_WHEEL_CHUNK = function: 0x13db4390
DO_ON_NEW_METAR_CHUNK = function: 0x13dab180
DO_SOMETIMES_CHUNK = function: 0x13de6550

Das Beispiel ist aus Version 2.4.0 entnommen. Das Plugin arbeitet so schnell, dass die Zeitdauer für die bei jedem grafischen Anzeigen verarbeiteten Anweisungen mit insgesamt 1ms gerade eben messbar wird.

Den Script Erstellern unter euch lege ich auch die Verwendung des Scripts "memory heartbeat.lua" nahe. Es zeigt den Speicherverbrauch an. Er muss einer Sägezahnkurve gleichen und regelmäßig abfallen. Der Abfall ist die eingebaute Müllabfuhr nicht mehr benötigtem Speichers (garbage collector). Steigt die Speichernutzung hingegen dauerhaft an, so ist ein Fehler in einem Script. X-Plane wird dann früher oder später wegen Speichermangel abstürzen. Mit dem "Speicherverbrauchs-EKG" kann man seine Scripte prüfen, ob sie sorgfältig genug mit dem Speicher umgehen.

 

Vielen Dank für eure Mithilfe und viel Spaß mit dem Plugin

Carsten

PS: Vielen Dank an Bill alias Sparker für die Erstellung der Linux und Mac Version.

Link to comment
Share on other sites

  • 2 weeks later...

Hallo Carsten,

gibt es irgend eine Grenze bezüglich des Speichers welche man nicht überschreiten sollte?

Bei meinen Scripten liege ich momentan bei ca. 147 kb...

 

Viele Grüße,

Sebastian

Link to comment
Share on other sites

Nein, eine Grenze gibt es nicht. Wenn sich X-Plane allerdings mehr Speicher nimmt als dein PC physikalisch hat, dann wird es extrem zäh in der Bedienung. ;)

Ich vermute es gibt eine Grenze für Lua Speicher, FlyWithLua verwendet jedenfalls die Speicheranforderung, wie sie X-Plane vorgibt und managed. Im Zweifel musst du Laminar Research fragen, aber ich selbst nutze Speicher im MB Bereich. 147 kB sind ja fast nichts.

Wichtig ist zu beobachten ob der Speicherverbrauch dauerhaft anwächst, dazu existiert ein Script in der original Distribution von FlyWithLua, mit dem du es testen solltest.

Link to comment
Share on other sites

Ok, gut zu wissen dass da noch viel Spielraum ist :-) Das Script habe ich gestern nach meinem Wechsel auf 2.4 mal ausprobiert und damit den aktuellen Speicherverbrauch ausgewertet. Bin bisher aber noch nicht dazu gekommen es mal länger zu beobachten.

Jedenfalls laufen alle meine Scripts sauber auf der 2.4!

 

Viele Grüße und vielen Dank für die kontinuierliche Weiterentwicklung und Verbesserung von FlyWithLua,

Sebastian 

Link to comment
Share on other sites

Speichern in Real Terra Haze führt auch bei mir zu einer Fehlermeldung.

Auszug aus log.txt:

FlyWithLua Error: Can't execute Lua chunk. The chunk who failed is: DO_ON_MOUSE_CLICK_CHUNK
FlyWithLua Debug Info: The Lua stack contains the following elements:
Resources/plugins/FlyWithLua/Scripts/RTH_Pi.lua:1700: attempt to index global 'file' (a nil value)
FlyWithLua Debug Info: Debug file written to "<<x-plane dir>>/FlyWithLua_Debug.txt".
FlyWithLua Debug Info: Debug file written to "<<x-plane dir>>/FlyWithLua_Debug.txt".

 

Auszug aus FlyWithLua_Debug.txt:

Resources/plugins/FlyWithLua/Scripts/RTH_Pi.lua:1700: attempt to index global 'file' (a nil value)

 

Komplettes Debug-File im Anhang.

 

FlyWithLua_Debug.txt

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. Privacy Policy & Terms of Use