Programmcode zur Laufzeit ändern ???

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
mintpc
Beiträge: 124
Registriert: Mo 6. Sep 2010, 18:39
OS, Lazarus, FPC: Win 7 (L 1.6 FPC 3.0.0)
CPU-Target: Win 7
Wohnort: Mailand

Programmcode zur Laufzeit ändern ???

Beitrag von mintpc »

Wahrscheinlich gibt es keine Lösung, trotzdem die Frage:

Gibt es irgendwie eine Möglichkeit, während der Laufzeit eines Programm den auszuführenden Programmcode
zu änderen?

Zum Beispiel, dass ich Programmcode ins Memo-Feld schreibe, der dann irgendwie im laufenden Programm compiliert wird??

hm ... wahrscheinlich nicht ... oder?


--> Bitte keinen Hinweis auf Sinn oder Unsinn der Frage! :wink:

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6770
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Programmcode zur Laufzeit ändern ???

Beitrag von af0815 »

mintpc hat geschrieben: hm ... wahrscheinlich nicht ... oder?
Klares jaein. Es hindert dich keiner im Hintergrund den Code zu kompilieren und nacher her zu starten. Nur im selben Programm nicht.

Es funktioniert dann ähnlich wie Lazarus mit seinem Starterprogramm (Falls das schon mal aufgefallen ist).
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1617
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Programmcode zur Laufzeit ändern ???

Beitrag von corpsman »

Wenn es dir nur darum geht "User eingegebenen" Code aus zu führen, hindert dich auch niemand daran einen eigenen FPC Interpreter in dein Programm ein zu fügen.

Das dies recht einfach geht zeigt mein Qprogrammer Projekt.

Ein Programm das ganze Forms und Source zur Laufzeit aus mehr oder weniger XML Dokumenten ausliest und erstellt hatte ich auch mal angefangen und lief auch nicht schlecht, doch veröffentlicht ist das noch nicht, fällt mir gerade auf ...
--
Just try it

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Programmcode zur Laufzeit ändern ???

Beitrag von theo »

mintpc hat geschrieben: --> Bitte keinen Hinweis auf Sinn oder Unsinn der Frage! :wink:
Sinn und Unsinn der Frage ist eigentlich immer das Wichtigste.
Je nachdem könnte man dir z.B. PascalScript empfehlen. Aber wenn man den Sinn deiner Frage nicht kennt...

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Programmcode zur Laufzeit ändern ???

Beitrag von MAC »

es gibt eigentlich 2 möglichkeiten das auszuführen.
1. Du Interpretierst den Code
2. Du kompilieren den Code

Für das erste gibt es glaub ich einen Jedi_interpreter . Ka. hab ich nicht ausprobiert. (Quelle: http://wiki.delphigl.com/index.php/Tuto ... terProgram" onclick="window.open(this.href);return false;)
Für das zweite gibt es ein sehr Gutes Beispiel. Lazarus , bzw FPC selber. - Wie wo was, ka. aber du kannst dir ja mal im Quelltext anschauen was passiert wenn du auf "komplimieren" klickst...

Code: Alles auswählen

Signatur := nil;

mintpc
Beiträge: 124
Registriert: Mo 6. Sep 2010, 18:39
OS, Lazarus, FPC: Win 7 (L 1.6 FPC 3.0.0)
CPU-Target: Win 7
Wohnort: Mailand

Re: Programmcode zur Laufzeit ändern ???

Beitrag von mintpc »

Hallo Corpsman!

Prinzipiell ist dies genau das, was ich machen will.
Wenn es dir nur darum geht "User eingegebenen" Code aus zu führen, hindert dich auch niemand daran einen eigenen FPC Interpreter in dein Programm ein zu fügen.
Das dies recht einfach geht zeigt mein Qprogrammer Projekt.
Ich wollte nämlich so eine Art "Lernumgebung" für Schüler schreiben.

Würdest du mir den Quelltext zur Verfügung stellen?

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Programmcode zur Laufzeit ändern ???

Beitrag von carli »

Hallo,

Was du wissen willst, gibt es wirklich und nennt sich "JIT" (Just in Time)-Code.

Das Prinzip ist einfach: man kompiliert sich selbst ein bisschen Code in Maschinencode in einen Buffer, setzt ihn auf ausführbar, setzt eine Prozedurvariable auf den Speicher und führt die neue Prozedur aus.

Das ganze ist ein bisschen Frickelig, da man seinen Prozessor genau kennen muss und das ganze nicht gerade Plattformunabhängig ist.

Der sinnvollste Weg, Laufzeitcode auszuführen wäre, wenn du dir eine Scriptsprache einbindest. Damit kann man dann in der Scriptsprache selbst einige Nutzerdefinierte Prozeduren schreiben, die du dann aufrufst. Umständlich wird es dann, wenn du einen gewissen Funktionsumfang liefern musst (z.B. Eine Zeile zu Drucken [writeln]), für das man für jede Funktion dann einen Wrapper schreiben muss.

MmVisual
Beiträge: 1581
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 4 FPC 3.2.2)
CPU-Target: 32/64Bit

Re: Programmcode zur Laufzeit ändern ???

Beitrag von MmVisual »

Du könntest aus dem eingegebenen Code auch eine DLL kompillieren und die dann von deinem Programm anspringen.

Der Vorteil: Dein Programm wird zur Laufzeit nicht geändert und du kannst immer die DLL laden / entladen.
Und es ist egal ob man nun einen FPC oder GCC Compiller verwendet. Den Code, den es für die DLL drum herum braucht kannst du automatisch erzeugen.
Ich finde, das ist eine relativ einfache Methode.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1617
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Programmcode zur Laufzeit ändern ???

Beitrag von corpsman »

@mintpc

Wie du im Support meiner HP nachlesen kannst, gebe ich von Projekten den gesamten Source grundsätzlich nicht heraus. Aber wenn dich funktionalitäten im Einzelnen interessieren, so will ich versuchen dir Speziel dafür abgestimmt Beispiele zu zeigen ( oder aus dem Source heraus zu kopieren ). Wenn du wie du schreibst, genau dass haben willst was Qprogrammer kann, dann nutze doch Qprogrammer ? ( Das Tutorial wird zur Zeit überarbeitet und demnächst auch Aktualisiert ) sollten dir diverse Punkte in QProgrammer fehlen, so wäre das evtl mal ein anlass für mich Qprogrammer zu erweitern ...

Evtl sollten wir die Diskusion auc via PN weiterführen ;).

Gruß
--
Just try it

mintpc
Beiträge: 124
Registriert: Mo 6. Sep 2010, 18:39
OS, Lazarus, FPC: Win 7 (L 1.6 FPC 3.0.0)
CPU-Target: Win 7
Wohnort: Mailand

Re: Programmcode zur Laufzeit ändern ???

Beitrag von mintpc »

gebe ich von Projekten den gesamten Source grundsätzlich nicht heraus
Schade. Hätte mir wahrscheinlich weitergeholfen, aber wenn's geschütztes Gedankengut ist akzeptier ich das.
Für das erste gibt es glaub ich einen Jedi_interpreter
Den Link hab ich mir angesehen, sieht sehr interessant aus. Ist zwar nur für
Delphi, wenn ich recht verstanden habe, probier ich aber mal aus. Danke
für den Hinweis.
Du könntest aus dem eingegebenen Code auch eine DLL kompillieren
Damit hatte ich auch schon geliebäugelt. Wahrscheinlich werde ich auf diese Methode zurückgreifen.

Alles in allem, vielen Dank für die Anregungen aller Beteiligten, eine Lösung habe ich noch nicht,
aber ich bin ein gutes Stück weiter. :idea:

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1617
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Programmcode zur Laufzeit ändern ???

Beitrag von corpsman »

Wie geschrieben, wenn dich spezielle Teile interessieren gerne.

Ich will damit einfach nur verhindern, dass jemand einfach meine Programme neu compiliert und als seine ausgibt.

Zudem ist das Kauderwelsch das ich da so manchmal fabriziere nicht gerade "schön" zu lesen. Eine speziell von dir angeforderte Codestelle kann ich dann vorher noch "pretty printen". Die Klasse die bei mir das FPC Interpretieren macht ist 2000 Zeilen Lang das alles auf einen Schlag "schön" machen wäre mit ohnehin zu viel Arbeit.
--
Just try it

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Programmcode zur Laufzeit ändern ???

Beitrag von carli »

corpsman hat geschrieben:Zudem ist das Kauderwelsch das ich da so manchmal fabriziere nicht gerade "schön" zu lesen.
Das schließt schon mal aus, dass jemand das wirklich klauen will.

mintpc
Beiträge: 124
Registriert: Mo 6. Sep 2010, 18:39
OS, Lazarus, FPC: Win 7 (L 1.6 FPC 3.0.0)
CPU-Target: Win 7
Wohnort: Mailand

Re: Programmcode zur Laufzeit ändern ???

Beitrag von mintpc »

Wie geschrieben, wenn dich spezielle Teile interessieren gerne.
An Corpsman: Ich hab auf deiner Seite gelesen, dass du Lehrer bist.
Ich wollte etwas für den Unterricht schreiben. Eventuell könnten wir ja
zusammen ne kleine Sache entwickeln.

Wenn du Lust und Interesse hast, hier ist meine E-Mail: martinjakobs@web.de

Dann kann ich dir die Sache mal schildern.

Antworten