Gibts eine Sprache deren Programme man "zur Laufzeit" ändern kann?



  • pumuckl schrieb:

    Ich habe von einer Sprache die sowas kann und der entsprechenden Laufzeitumgebung auf dem Server bisher noch nicht gehört.

    Theoretisch geht das sogar auch unter C# und Co (Habe ein kurzes Beispiel auch schon in einen Buch gesehen, bei Interesse kann ich das auch heraussuchen, würde mir aber frühestens ab den 18.7 möglich sein).

    Auf Anhieb bin ich aber über folgende Links gestolpert:
    MSDN Visual C# General How to create a DLL at runtime?
    Create your own new Type and use it on run-time (C#)

    cu André



  • Erlang 😋



  • asc schrieb:

    Theoretisch geht das sogar auch unter C# und Co (Habe ein kurzes Beispiel auch schon in einen Buch gesehen, bei Interesse kann ich das auch heraussuchen, würde mir aber frühestens ab den 18.7 möglich sein).

    Die Links die du da gepostet hast zeigen soweit ich das erkennen kann nur, dass man solch eine Serverumgebung in C# implementieren kann - dass die Implementierung von sowas möglich sein sollte bin ich überzeugt, die Frage war halt ob es solch eine Implementierung schon gibt, möglichst mit den entsprechenden Überprüfungen die ich weiter oben angesprochen habe. Soweit ich das bisher gesehen habe leistet Smalltalk das leider nicht (ist nichtmal typsicher).



  • Hast du dir mal Gedanken über die Entwicklung mit solch einem System gemacht?

    Wie willst du sowas sinnvoll debuggen? Wer soll da nachher noch durchblicken?

    Ich sehe das Projekt jetzt schon auf www.thedailywtf.com



  • Schau dir doch auchmal pion net an da geht das mit modulen (.dlls, .so)



  • pumuckl schrieb:

    Die Links die du da gepostet hast zeigen soweit ich das erkennen kann nur, dass man solch eine Serverumgebung in C# implementieren kann - dass die Implementierung von sowas möglich sein sollte bin ich überzeugt, die Frage war halt ob es solch eine Implementierung schon gibt, möglichst mit den entsprechenden Überprüfungen die ich weiter oben angesprochen habe. Soweit ich das bisher gesehen habe leistet Smalltalk das leider nicht (ist nichtmal typsicher).

    Weitgehend lässt sich das von dir genannte doch auch mit einer statischen Lösung realisieren (Pluginsystem das dynamisch nachläd), und zumindestens mit C# 3 kann man Klassen doch auch um Funktionalitäten ergänzen (Wobei ich glaube das dies auf Methoden beschränkt ist, und nicht Attribute ermöglicht - ich meine nicht partitielle Klassen, komme aber grade nicht auf den Begriff).

    Ich weiß das damit nicht alles von dir gewünschte möglich wäre, aber eben so würde ich das umsetzen (und das Plugin konfigurierbar machen, so das man im laufenden Betrieb z.B. entscheiden kann das ab dem nächsten Aufruf nicht mehr die Methode xyz vom Plugin abc sondern die Methode xyz vom Plugin bcd aufgerufen werden soll).

    cu André



  • Nur eine schnelle Idee, aber evtl lässt sich das mit eingebettetem Python gut realisieren? Also einfach das Python-Zeugs mit Boost::Python laden, beim "Submit" von neuen Funktionen/veränderten Typen im Hintergrund das neue Python-Zeug laden (während mit dem alten noch gearbeitet wird), warten bis die aktuellen Sachen bearbeitet sind oder ggf. abbrechen während die neuen blockiert werden und dann mit dem neuen Py-Krams arbeiten.
    Für Fehler-Koordination, wenn sonst keine Py-Exceptions fliegen, könnte man auch eine Art "Test"-Zustand einführen; wenn in den ersten X Minuten nach dem "Submit" vom neuen Code eine Py-Exception geworfen wird, die Funktion mit dem alten Py-Code (der erst nach den X Minuten entladen wird) ausführen und den Fehler loggen. Oder irgendwie so.

    Kann aber auch sein, dass mein obiges Gedankengut irrer Schrott ist, mein Kopf ist im Moment ziemlich Grippe-vernebelt (Sonnenbrand + Grippe, bescheuerte Kombi..).



  • asc schrieb:

    (Wobei ich glaube das dies auf Methoden beschränkt ist, und nicht Attribute ermöglicht - ich meine nicht partitielle Klassen, komme aber grade nicht auf den Begriff).

    Extension Methods?



  • Es ist zwar schon "fast alle Skriptsprachen" gesagt worden. Aber weil es so schön ist und sich für's Web anbietet: Perl natürlich auch 🙂



  • Aber Erlang ist wohl die einzige Sprache, in der sowas vorgesehen ist 😉
    http://en.wikipedia.org/wiki/Erlang_(programming_language)#Hot_code_loading_and_modules



  • Hm, auf der anderen Seite ist Erlang leider nicht objektorientiert und auch nicht typsicher. Soweit ich das bisher überblicken konnte sind auch die Konsistenzchecks für neuen Code nicht enthalten (vermutlich weil sie nicht nötig sind).
    Vielleicht lässt sich ein System wie ichs mir vorstelle mit Erlang als Backend realisieren, mal schauen.

    Debugging wird natürlich ein schwieriges Thema, allerdings sollten viele Fehlerquellen durch die Konsistenzchecks ausgeschlossen werden - wobei die auch nicht gerade einfach umzusetzen sein werden.



  • sothis_ schrieb:

    mit assembler, interpretersprachen und auch einigen compilersprachen ist selbstmodifizierender code grundsätzlich auf jeder von-neumann-architektur möglich. die größte einschränkung haben natürlich compilersprachen. wobei es kein problem darstellt, einen embedded compiler im programm zu integrieren, der so zur laufzeit neuen code erstellt 🙂

    Das ist doch mit jeder Sprache moeglich, man braucht nur einen Interpreter/On-Demand-Compiler* zu finden, bzw. zu schreiben.

    On-Demand-Compiler waehre das man den Compiler jedesmal den Code neu uebersetzen laesst, wenn er sich geaendert hat.



  • .filmor schrieb:

    Aber Erlang ist wohl die einzige Sprache, in der sowas vorgesehen ist 😉

    Common Lisp hatte ich schon erwähnt ...

    Wenn ich manche Ansätze hier lese wird mir schlecht. Greenspun's 10th rule of programming lässt grüßen.



  • Java bietet mehrere Möglichkeiten, sowas zu realisieren, z.B. mit Hilfe von Eclipse Equinox (OSGi) oder indem man die Funktionen mit einer Scriptsprache bereit stellt (z.B. Ruby) und dieses dynamisch einbettet.



  • Bashar schrieb:

    Wenn ich manche Ansätze hier lese wird mir schlecht. Greenspun's 10th rule of programming lässt grüßen.

    Ist doch toll - gute Dinge weiß man oft erst zu würdigen, wenn man die schlechten Alternativen sieht. Abgesehen davon weißt du genauso gut wie jeder andere, dass es nicht die Lösung gibt und die Auswahl der Sprache und Technik von dutzenden Faktoren abhängen kann, die wir nicht kennen. Von daher besser zuviele und z.T. evtl. auch unsinnige Vorschläge als zu wenige.



  • kleine Historie zu dem Ganzen:
    vor Jahren bin ich mal ein wenig in die Browsergame-Szene eingetaucht und vom User über den Supporter und Forenadmin zum Mitentwickler avanciert. Am Ende stand mit einer Handvoll Freunde die Idee im Raum, ein eigenes BG aufzubauen. Zu der Zeit bestand ein typisches Amateur-BG aus einer mySQL-Datenbank und einer Handvoll PhP-Scripte. Der typische Entwicklungslauf bestand aus PhP-Gefrickel, offline-nehmen des laufenden Systems, händischem Ändern der Datenbanken und einspielen der neuen Scripte und anschließendem onlinestellen des geänderten Systems, häufig ohne ausgiebige Tests (in der Anfangsphase bestand die Community aus einer Handvoll Leute die gleichzeitig Testteam waren und jede Neuerung so schnell wie möglich sehen wollten und entsprechend tolerant gegen Bugs waren).
    Gerade die teils recht langen offline-Zeiten waren uns ein Dorn im Auge und wir haben an ein System für automatische Änderungen der Datenbanken etc. gedacht um das Ganze eben nicht so amateurhaft umzusetzen. Die Idee hat sich nach und nach verselbstständigt und wird seitdem immer ein wenig fortgesponnen, während das eigentliche Browsergame-Projekt aus Zeit- und anderen Gründen längst vom Tisch ist.

    Ein Browsergame (dafür wars ja vorgesehen) würde daher etwa wie folgt aufgebaut werden: eine PhP-GUI, dahinter (z.B. auf einem anderen Rechner) ein Server, der die Spielelogik in der gesuchten Sprache implementiert (und dadurch möglichst ohne Offlinezeiten zu ändern ist), und wiederum dahinter die Datenbank, die aber von dem Server automatisch verwaltet wird.
    Da das ganze für Amateure schnell handhabbar sein soll haben wir an eine Sprache mit Java/C++-ähnlicher Syntax gedacht (irgendeine Programmiererfahrung muss man ja voraussetzen und Java/C++ sind ja doch recht weit verbreitet)
    Zur Zeit bin ich allerdings der Einzige der sich noch ab und an mit dem Thema beschäftigt, was einen gewissen Ideen-Wildwuchs impliziert den ich in nächster Zeit Stück für Stück zu Papier bringen will um evtl. irgendwann erste kleine Tests in der Richtung zu starten.



  • Bashar schrieb:

    .filmor schrieb:

    Aber Erlang ist wohl die einzige Sprache, in der sowas vorgesehen ist 😉

    Common Lisp hatte ich schon erwähnt ...

    Joah, Lisp steht aber eh über allem (und ist trotzdem vermutlich weniger für Server geeignet als Erlang, denn dafür ist diese gemacht).

    pumuckl schrieb:

    Hm, auf der anderen Seite ist Erlang leider nicht objektorientiert und auch nicht typsicher.

    Wie meinen? Objektorientiert wird überbewertet, typsicher ist die Sprache meines Wissens schon (es gibt ja auch nicht so wahnsinnig viele Typen ;)).

    pumuckl schrieb:

    Vielleicht lässt sich ein System wie ichs mir vorstelle mit Erlang als Backend realisieren, mal schauen.

    pumuckl schrieb:

    Debugging wird natürlich ein schwieriges Thema, allerdings sollten viele Fehlerquellen durch die Konsistenzchecks ausgeschlossen werden - wobei die auch nicht gerade einfach umzusetzen sein werden.

    Auch das ist in Erlang vorgesehen.

    Eine mögliche Alternative wäre in der Tat Python, bei Servern würde ich mir da an deiner Stelle Stackless ansehen. Das programmiert sich ganz ähnlich wie Erlang (und ist auch objektorientiert, wenn das denn sein muss).

    Wieso ist der Server nicht auch direkt für die GUI da? PHP würde ich meiden 😉



  • Die GUI sollte vorerst von der restlichen Logik getrennt sein, denke ich. Evtl kann man dann bei der Installation je nach wunsch gucken, ob man eine GUI in PhP, Java, Flash oder was sonst so geht anbaut.



  • pumuckl schrieb:

    Hm, auf der anderen Seite ist Erlang leider nicht objektorientiert und auch nicht typsicher.

    Nicht dass ich persönlich Erlang für allzu objektorientiert halte, aber das kann durchaus Ansichtssache sein, ganz abgesehen davon dass objektorientiertheit nicht unbedingt dass Nonplusultra sein muss. Und Typsicherheit--insbesondere wenn C++ und Java deine Weltanschauung begründen, dann ist Typsicherheit durchaus overrated.



  • .filmor schrieb:

    Joah, Lisp steht aber eh über allem (und ist trotzdem vermutlich weniger für Server geeignet als Erlang, denn dafür ist diese gemacht).

    Habe jahrelang immer wieder von furchtbar vielen Leuten gehört, dass Lisp zwar ganz ganz toll, jedoch für echte Anwendungen nicht zu gebrauchen und auf Servern ohnehin pfui sei. Nur Gründe konnte mir irgendwie nie jemand nennen.

    Habe darum jetzt seit etwa einem Jahr hier auf zwei Servern SBCL installiert und ein paar Lisp-Anwendungen laufen um herauszufinden, was dagegen spricht. Habe die Hoffnung zwar noch nicht aufgegeben, irgendwas zu finden, bis jetzt bin ich aber äußerst zufrieden.


Anmelden zum Antworten