Login
Newsletter
Werbung

Thema: Programmiersprache V will mit Rust und Go konkurrieren

8 Kommentar(e) || Alle anzeigen ||  RSS
Kommentare von Lesern spiegeln nicht unbedingt die Meinung der Redaktion wider.
0
Von klopskind am Fr, 28. Juni 2019 um 00:40 #

Demnach wäre Dynamic loading mindestens so mächtig wie Code Hot swapping.

Jetzt bin ich aber ernsthaft neugierig:
Wie setzt man mit diesen POSIX-Aufrufen Code Hot swapping praktisch um? Wie tauscht man mit den oben genannten POSIX-Aufrufen beliebigen C-Code eines beliebigen C-Programms zur Laufzeit? Fügen Sie diese Aufrufe zur Laufzeit in das C-Programm ein? Wie? Könnten Sie das bitte anhand eines Minimalbeispiels zeigen? Vielen Dank!

[
| Versenden | Drucken ]
  • 0
    Von who knows am Fr, 28. Juni 2019 um 13:55 #

    Hast Du außer Schlagworten und Suggestivfragen in Kombination mit einem Link zur Wikipedia zu einem Thema, welches weder im Artikel noch im vorhergehenden Beitrag On Topic ist, irgend etwas sinnvolles zur Diskussion beizutragen? Ich fürchte nicht...

    who knows

    [
    | Versenden | Drucken ]
    • 0
      Von klopskind am Fr, 28. Juni 2019 um 15:59 #

      Ruhig Brauner, immer der Reihe nach...

      1. Die Schlagworte standen nicht für sich, sondern in Sätzen. Der Zusammenhang ergibt sich aus den vorangehenden Kommentaren, genauer: kamome umidori stimmte hosis Kritik zu und ergänzte sie um den Punkt, der üblicherweise auch "Code Hot swapping" genannt wird (s.o.: "geänderter Code kann zur Laufzeit neu geladen werden" mit Verweis auf ein Beispiel). Darauf entgegneten Sie, dass C diese Funktion "schon lange" mittels gewisser, POSIX-standardisierter Aufrufe ("dlopen, dlclose, dlsym, dlerror, ...") unterstützen würde. Letztere spezifizieren/implementieren, was man gängigerweise "Dynamic Loading" nennt; ein völlig orthogonale Features.
      So viel zu den "Schlagworten"...

      2. Für meine Aussage "Demnach wäre Dynamic loading mindestens so mächtig wie Code Hot swapping." nahm ich an, Ihr vorangehender Kommentar wäre in diesem Kontext inhaltlich korrekt. Damit und den in dieser Aussagen enthaltenen Verweisen wollte ich Ihnen einen Hinweis darauf geben, dass hier etwas nicht stimmen kann. Haben Sie nicht verstanden, um welches Feature es kamome umidori ging? Oder halten Sie diese beiden Features für gleichwertig?

      Meine Fragen leiten sich aus diesem Verständnis Ihres möglichen Missverständnisses direkt ab. So gesehen, kann man sie auch als Suggestivfragen werten. Sie sind nicht böse gemeint, sondern stellen lediglich eine weitere Möglichkeit dar, einen Hinweis darauf zu geben, dass hier etwas nicht zusammen passt. Vielleicht wären Sie ja selbst darauf gekommen.

      3. In diesem Sinne habe ich bereits etwas sinnvolles zur Diskussion beigetragen, nämlich genau den Hinweis, dass hier etwas nicht ganz koscher ist, d.h. dass es vermutlich ein Missverständnis zwischen kamome umidori und Ihnen, zwischen "Code Hot swapping" und "Dynamic loading" gab.

      4. Mit "Ich fürchte nicht..." machen Sie sich übrigens selbst des Gebrauchs der Suggestivfrage schuldig. Ich fürchte, dass Sie mich bewusst falsch verstehen wollen...

      [
      | Versenden | Drucken ]
      • 0
        Von who knows am Sa, 29. Juni 2019 um 07:35 #

        dlopen, dlclose und die damit zusammenhängenden C-Funktionen leisten genau das geforderte: geänderter Code kann zur Laufzeit neu geladen werden.
        Natürlich funktioniert das nur auf Betriebssystemen. Der OS-Verschnitt aus Redmond hätte das bekannte Problem, dass er nicht mit gelöschten Dateien, die in Verwendung sind, umzugehen versteht. Falls Du darauf hinaus wolltest: Es ist dein ureigenstes Problem, wenn Du POSIX-kompatible Eigenschaften auf einem nicht POSIX-kompatiblen System nutzen möchtest. Ein etwas genauerer Blick in die zugehörige man-Page könnte zu deiner Erleuchtung beitragen...

        who knows

        PS:
        "kamome umidori" scheint ja im Gegernsatz zu dir verstanden zu haben, wie das Ganze funktioniert. Oder aber er nimmt sich einfach die Zeit sich zu informieren und Antwortet nicht einfach mit einem verklausulierten "Ich kann das nicht, also Geht es nicht".
        PPS:
        Es steht dir nicht zu, unaufgefordert im Namen anderer zu schreiben.
        PPPS:
        ldd /usr/lib64/firefox/firefox
        zeigt unter anderem folgende interessante Zeile:
        libdl.so.2 => /lib64/libdl.so.2 ...
        und sonst nicht sehr viel. Denk mal darüber nach...

        [
        | Versenden | Drucken ]
        • 0
          Von klopskind am Sa, 29. Juni 2019 um 14:09 #

          Zunächst: Danke, damit lässt sich wieder sinnvoll diskutieren.

          zu "PPS": Ich wollte mit meinem letzten Kommentar meine Reaktion, die Sie kritisierten, rechtfertigen. Dazu musste ich die bisherige Diskussion in Kürze zusammenfassen und Ihnen meine Auffassung jener darlegen. Dabei habe ich das von kamome umidori erwähnte Feature als "code hot swapping" identifiziert, und das Ihres Einwands als "dynamic loading" ("dlopen", "dlclose").
          Falls ich Beiträge von Dritten irrtümlicherweise fehlinterpretiert haben sollte, bitte ich Sie darum, mich darauf aufmerksam zu machen. Danke!

          dlopen, dlclose und die damit zusammenhängenden C-Funktionen leisten genau das geforderte: geänderter Code kann zur Laufzeit neu geladen werden.
          Und ich bezweifle, dass dieses "dynamic loading" tatsächlich das selbe leistet wie "code hot swapping".

          Wie kann man bspw. mit den erwähnten POSIX-Aufrufen für "dynamic loading" den Ablauf eines beliebigen Programms, z.B. das von Ihnen erwähnte Firefox, nachträglich zur Laufzeit beliebig manipulieren, also bspw. aktualisieren ohne es neustarten zu müssen? Wenn ich es richtig verstehe, müsste ein Programm doch schon vor dessen Übersetzung, d.h. in der Entwicklung, darauf vorbereitet worden sein, dieses Problem mittels dieser POSIX-Aufrufen lösen zu können. Das bedeutet, es müsste die Aktualisierung seiner Bestandteile (z.B. Bibliotheken und sonstigen object code) erkennen, den betreffenden Ablaufszweig pausieren oder abbrechen, den betreffenden Teil des Zustands sichern, den betreffenden Bestandteil entladen und in aktualisierter Version laden, den zwischengesicherten Zustand widerherstellen (die Zustandsintegration benötigt auch die Unterstützung jenes Bestandteils) und den Ablaufszweig resümieren oder neustarten, oder nicht?

          "code hot swapping" könnte das ohne größere Vorbereitungen oder vorbeugende Entwicklungen am Programm.

          Natürlich funktioniert das nur auf Betriebssystemen. Der OS-Verschnitt aus Redmond hätte das bekannte Problem, dass er nicht mit gelöschten Dateien, die in Verwendung sind, umzugehen versteht. Falls Du darauf hinaus wolltest: [...]
          Nein, das wollte ich nicht. Diese Details interessieren mich weniger, aber dafür andere umso mehr.

          Ein etwas genauerer Blick in die zugehörige man-Page könnte zu deiner Erleuchtung beitragen...
          Danke. Meinen Sie dlopen(3)? Die und weitere habe ich bereits gelesen. Von welcher Erleuchtung sprechen Sie?

          zu "PS": Wollen Sie mir unterstellen, ich würde mich nicht informieren? Woran erkennen Sie das?
          Außerdem handelt es sich eher um ein verklausuliertes "Ich könnte das (von Ihnen Behauptete) nicht umsetzen, denn ich habe begründete Zweifel daran, dass es geht. Also zeigen Sie mir in meiner Neugierigkeit bitte, wie es geht, um Ihren Standpunkt zu begründen!". Über einschlägige, hilfreiche Referenzen wäre ich ebenfalls hocherfreut.
          So kann man sich nunmal missverstehen...

          zu "PPPS": Es beweist nicht, dass "dynamic loading" das selbe leistet wie "code hot swapping". Was gibt pldd(1) aus?

          [
          | Versenden | Drucken ]
          • 0
            Von who knows am So, 30. Juni 2019 um 14:32 #

            Es geht nach wie vor nicht um den Vergleich zwischen "dynamic loading" und "code hot swapping", was Du immer wieder in den Thread hineininterpretierst. Ich beziehe mich nach wie vor auf das geänderter Code kann zur Laufzeit neu geladen werden. Code, der gerade aktiv ausgeführt wird, darf natürlich nicht überschrieben werden. Das wäre selbst modifizierender Code, was aufgrund des damit verbundenen Sicherheitsrisikos auf aktuellen Systemen vermieden wird. Unter *DOS war dies durchaus üblich. Aber Code einer Bibliothek, die zum Beispiel gerade in der Entwicklung befindlich ist, kann unter geeigneten Randbedingungen durchaus im laufenden Programm ersetzt werden. Man könnte auf diese Weise dann auch beliebigen Code einfügen, aber das liefe dann wohl eher unter der Rubrik „Schadsoftware“. Allerdings lässt sich eine Funktionalität, wie zum Beispiel aktualisieren ohne es neustarten zu müssen unter geeigneten Randbedingungen, wozu auch die Sicherung der für den Betrieb notwendigen Informationen außerhalb des shared objects gehören, umsetzen.
            Ich wiederhole aber dennoch:
            Du versuchst hartnäckig mir die Behauptung "dynamic loading" sei "mindestens so mächtig, wie code hot swapping" unterzuschieben. Das ist ein für einen Troll typisches verhalten.


            who knows

            [
            | Versenden | Drucken ]
            • 0
              Von klopskind am So, 30. Juni 2019 um 23:05 #

              Es geht nach wie vor nicht um den Vergleich zwischen "dynamic loading" und "code hot swapping", was Du immer wieder in den Thread hineininterpretierst. Ich beziehe mich nach wie vor auf das geänderter Code kann zur Laufzeit neu geladen werden.
              Dann habe ich Sie und kamome umidori missverstanden. Um das aufzuklären: der Link oben enthält Folgendes:
              Hot-reloading is a technique that allows for rapid iteration during the development of an application.

              The core idea is that by encapsulating core logic in dynamic libraries, and then carefully managing application state, we can reload a newly compiled library while the application continues to run and have changes take immediate effect.
              [...]
              In this approach to hot-reloading, libaries must contain no internal state. All state needed by the hot-reloaded libraries is declared outside of the libraries, owned by the application and then passed into each library function call.

              Die Inspiration kam angeblich von hier. Da steht:
              This means that you can simply reload the library while the game is still running, and have your game update live. As a consequence however, you can't have any global state in your library, everything must be owned by the host in order to avoid getting unloaded with the library.
              Diese Form des "hot/live reloading" wäre natürlich mit den POSIX-Aufrufen für "dynamic loading" abgedeckt. Da haben Sie Recht.

              Code, der gerade aktiv ausgeführt wird, darf natürlich nicht überschrieben werden.
              Ja, das ist natürlich eine wichtige Einschränkung, die wir lang und breit diskutierten.

              Das wäre selbst modifizierender Code, was aufgrund des damit verbundenen Sicherheitsrisikos auf aktuellen Systemen vermieden wird.
              Einige JIT-Compiler tun dies bspw., aber es müsste nicht unbedingt selbstmodizierender Code sein, das wäre lediglich ein Spezialfall. Bei "code hot swapping" z.B. modifiziert sich der Code nicht zwingend selbst.

              Aber Code einer Bibliothek, die zum Beispiel gerade in der Entwicklung befindlich ist, kann unter geeigneten Randbedingungen durchaus im laufenden Programm ersetzt werden.
              Ja, richtig: unter geeigneten Randbedingungen, z.B. an den Programmzustand und dessen Verwaltung, wie ich oben bereits andeutete.

              Allerdings lässt sich eine Funktionalität, wie zum Beispiel aktualisieren ohne es neustarten zu müssen unter geeigneten Randbedingungen, wozu auch die Sicherung der für den Betrieb notwendigen Informationen außerhalb des shared objects gehören, umsetzen.
              Genau, aber eben nur, wenn man entsprechende Vorkehrungen trifft, bevor das Programm läuft.

              Du versuchst hartnäckig mir die Behauptung "dynamic loading" sei "mindestens so mächtig, wie code hot swapping" unterzuschieben.
              So hatte ich Ihre Aussagen aber nun einmal verstanden gehabt. Tut mir Leid, aber Missverständnisse geschehen mitunter, auch ganz ohne verwerflich Absichten.
              Schön, dass wir das nun wissen.

              Das ist ein für einen Troll typisches verhalten.
              Naja, ich weiß nicht...


              Machen Sie's gut!

              [
              | Versenden | Drucken ]
              0
              Von Anonymous am Mo, 1. Juli 2019 um 13:05 #

              > Ich wiederhole aber dennoch:
              Du versuchst hartnäckig mir die Behauptung "dynamic loading" sei "mindestens so mächtig, wie code hot swapping" unterzuschieben. Das ist ein für einen Troll typisches verhalten.


              Der Verdacht drängt sich allerdings auf. Ich kann die Absichten zwar noch nicht sicher verorten, tippe aber auf eine politische Motivation. Mit der Zeit wird das sicher deutlicher.

              [
              | Versenden | Drucken ]
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung