NEWS
javascripte generieren
-
Hallo,
kann ich eigentlich aus einem javascript heraus ein anderes javascript generieren? Was ich bräuche wäre sowas in der Art
- Script A stoppt Script B
- Script A schreibt neuen javascript code in Script B
- Script A startet Script B
Danke
Georg -
@goersch was wäre der Anwendungsfall?
-
@goersch Ich wüsste nicht wie das ginge, aber ich habe auch noch nie einen Fall gesehen, wo man in diesem Fall Code generieren müsste. Ich schliesse mich also @htrecksler an: was willst du machen?!
-
Mittels zB einer csv Tabelle ca. 100 Eingangs- und 50 Ausgangsstates definieren, die aus einem TCPIP Telegramm gelesen und abgelegt werden sollen. Die TCPIP Telegramme können sich ändern. Gleichzeitig Funktionen anlegen, mittels denen man die Werte der States direkt lesen/schreiben kann, ohne dabei mit getState/setState direkt arbeiten zu müssen.
(ganz grob beschrieben, da steckt noch mehr dahinter).
Ich könnte natürlich für einen Teil der benötigten Funktionen auch den Code eines Adapter generieren lassen. Stoppen/Starten der Adapter geht ja aus der javascript Instanz. Dann hab ich aber nicht alles, was ich brauch.
-
@goersch Irgendwie verwirrt mich das... einerseits willst du Code generieren und andererseits willst du aber Funktionen verwenden können, die sich verändern können.
In meinen knapp zwanzig Jahren Software Entwicklung habe ich nur selten einen Fall erlebt, wo wirklich Code generiert werden musste.
Wenn du dein Problem etwas konkreter erklären kannst, kann ich dir sicher eine Lösung aufzeigen.
-
@unclesam
auch nach 20 Jahren kann man noch von jemandem lernen, der seit mehr als 30 Jahren dabei ist. Code zB aus einer Tabelle, etc. zu generieren, ist eigentlich einer der typischen Dinge, auf die ich immer wieder treffe.
Ich habe eine Menge externer E/As (sowohl boolean als auch number), die von einer externen Struktur auf eine interne Struktur gemapped werden müssen. IdR ist sowas einfacher anhand einer config Tabelle (CSV, etc) zu konfigurieren und den notwendigen Code generieren zu lassen, anstatt das x-fach händisch zu programmieren. Zudem sind in der CSV dann auch direkt defaults, units, Beschreibungen, etc enthalten, so dass man alles was man an Code braucht auch generieren lassen kann. So hat man - wenn man es richtig macht - auch direkt Dokumentation ausserhalb des Codes und funktionierenden Code, wenn der Code-Generator einmal funktioniert.
-
Beispiel vergessen
Wo ich hin will: Im Script kein getState('idXYZ').val zu verwenden, sondern in den globals eine Funktion getXYZ(). Wenn der Wert XYZ aber auf Grund einer Änderung der Schnittstelle in idABC liegt, kann ich das in der CSV konfigurieren, der Code generator baut das getXYZ richtig und der restliche Code bekommt gar nicht mit, dass der Wert aus idABC anstatt idXYZ kommt.
Nur eines der Beispiele.
Anderes Beispiel: Einfache select, insert, updates für definierte Tables generieren:
let result = selectSHEET(id);
insertSheet(id,value1,value2);
usw. -
das geht teilweise natürlich auch ohne Code generator - nur ist generierter Code idR deutlich schneller als zB ein
getOwnState('ABC') und getOwnState muss erst mal in einer Liste nachschauen, welcher Wert jetzt gelesen werden muss. -
@goersch In JavaScript kannst du ja auch einfach neue Funktionen erstellen. Ein (blödes) Beispiel:
var funcs = {}; funcs['abc'] = function () {}; // Aufruf funcs.abc();
‘abc'
würde natürlich aus deinem CSV oder so kommen. Damit hast du "dynamische" Methoden Namen.Und: bezüglich Geschwindigkeit würde ich mir bei JavaScript hier keine Gedanken machen, die Engine ist sehr schlau und viele lookups werden optimiert.
-
@UncleSam
... und bezüglich Speicher und Geschwindigkeit brauchen wir uns keine sorgen zu machen ... 12 Monate später: äh, ich brauch da noch mal x Vcores in meiner VM und ein bisschen mehr RAM wäre auch gut ... oh, der Server ist am Limit ... ja, dann muss ich doch mal Anfangen über meine Code nachzudenken ...
Mir ist eine andere Idee gekommen. Ich lass den javascript Code extern generieren und mach dann Copy&Paste. Das sollte erst mal gehen.