Beta-Programmierung?

Es gibt doch die Schlagworte: Alles wird
immer hektischer, keiner hat mehr Zeit,…

Keine Angst, ich will nicht philosophisch
werden, aber insbesondere bei der Programmierung
gewinnt meistens der Schnellere, auch wenn
die Software dann eher mit Beta-Version richtig
beschrieben wäre.

Da ich selber nun auch immer mehr
zu programmieren habe:

Gibts eine Programmiersprache oder ein
System, das folgende Eigenschaften hat:

-Vollständige Programmiersprache, Funktionsumfang
vergleichbar mit C, bzw. C+±Bibliotheken.
-Programm soll während der Ausführung modifizierbar sein.
-Fernwartbarkeit,
-Das ganze soll auf meinem PC laufen.
-Portabilität wäre schön, ist kein Muss.

Gruss,
Marco

Hi.

-Vollständige Programmiersprache, Funktionsumfang
vergleichbar mit C, bzw. C+±Bibliotheken.
-Programm soll während der Ausführung modifizierbar sein.
-Fernwartbarkeit,
-Das ganze soll auf meinem PC laufen.
-Portabilität wäre schön, ist kein Muss.

Die Frage ist, was du unter „Programm soll während der Ausführung modifizierbar sein“ verstehst. Falls du den Austausch von Code während der Laufzeit (z.B. Debuggen) meinst: Das kannst du auch mit entsprechenden Design-Patterns in C++ lösen.

Wenn sich die Schnittstellendefinition des Programms nicht ändert und das ganze einigermaßen gut designt ist (Gute Klassentrennung), kannst du einzelne Klassen auch während der Laufzeit austauschen.

Bei Portabilität und Umfang fällt mir natürlich gleich Java ein :wink:

Für Fernwartbarkeit (Überprüfung des Zustandes des Programmes während der Laufzeit) gibt es auch einige Möglichkeiten. Java z.B. bietet da eine eigene Technik - Aber mit einigermaßen schlau aufgebauten Logfiles und vorprogrammierten externen Schnittstellen sollte man das auch gut lösen können.

Hast du besondere Anforderungen, oder möchtest du dir nur einen Überblick verschaffen?

mfG,

J.P.Jarolim

Hi.

-Vollständige Programmiersprache, Funktionsumfang
vergleichbar mit C, bzw. C+±Bibliotheken.
-Programm soll während der Ausführung modifizierbar sein.
-Fernwartbarkeit,
-Das ganze soll auf meinem PC laufen.
-Portabilität wäre schön, ist kein Muss.

Die Frage ist, was du unter „Programm soll während der
Ausführung modifizierbar sein“ verstehst. Falls du den
Austausch von Code während der Laufzeit (z.B. Debuggen)
meinst: Das kannst du auch mit entsprechenden Design-Patterns
in C++ lösen.

Konkret habe ich mir das so vorgestellt, dass
im Programm bestimmte Punkte definiert sein
sollen, ab denen dann direkt in die neue Version
gesprungen werden könnte.

Also Hello,World soll normal gestartet werden, und
nachdem z.B. das Komma geschrieben ist, soll, falls
sich das Programm in Moin, Elfriede geändert hat,
Elfriede ausgegeben werden, so dass am Ende
„Hallo, Elfriede“ ausgegeben wird.

Je feiner diese Punkte zusammenliegen desto besser.
Ausserdem darf keine nennenswerte Verzögerung
bei der Umschaltung auftreten.

Das ist aber nur eine primitive Vorstellung,
es *muss* nicht nach diesem Prinzip laufen.

Wenn sich die Schnittstellendefinition des Programms nicht
ändert und das ganze einigermaßen gut designt ist (Gute
Klassentrennung), kannst du einzelne Klassen auch während der
Laufzeit austauschen.

Bei Portabilität und Umfang fällt mir natürlich gleich Java
ein :wink:

UAHHHH!!!
Dann verzichte ich lieber drauf.
Habe ja geschrieben, das wäre was schönes,
muss aber nicht sein.

Für Fernwartbarkeit (Überprüfung des Zustandes des Programmes
während der Laufzeit) gibt es auch einige Möglichkeiten. Java
z.B. bietet da eine eigene Technik - Aber mit einigermaßen
schlau aufgebauten Logfiles und vorprogrammierten externen
Schnittstellen sollte man das auch gut lösen können.

Hast du besondere Anforderungen, oder möchtest du dir nur
einen Überblick verschaffen?

Also besondere Anforderungen sind, dass
es halt auf meinem PC zuhause laufen soll,
und dass sich der Aufwand für das
Lernen einer neuen Programmiersprache
in Grenzen halten sollte.

Sie sollte einfach sein, oder falls
in C++ sowas sogar möglich sein sollte,
wäre mir das am liebsten.

Wie funktioniert das denn mit dem
Austauschen von Klassen während der Laufzeit?
(mir reicht auch ein Link, da zu viele
Details hier sicherlich langweilen)

Gruss, Marco

Hi.

Konkret habe ich mir das so vorgestellt, dass
im Programm bestimmte Punkte definiert sein
sollen, ab denen dann direkt in die neue Version
gesprungen werden könnte.
Also Hello,World soll normal gestartet werden, und
nachdem z.B. das Komma geschrieben ist, soll, falls
sich das Programm in Moin, Elfriede geändert hat,
Elfriede ausgegeben werden, so dass am Ende
„Hallo, Elfriede“ ausgegeben wird.

Ist das jetzt eine Verallgemeinerung oder stellst du dir das genau so vor? Wenn Elfriede als Ergebnis einer eigenständigen Berechnung steht (Die sich dann durch neue Versionen ändern könnte), kannst du diese Berechnung in eine eigene Klasse abkapseln. Du brauchst ja einen Mechanismus, um Codeteile voneinander zu trennen. In Objektorientierten Programmiersprachen sind das nun mal Klassen.

Es kommt dann auf deine Trennung an, wo und wie du Code zur Laufzeit ändern kannst. Du solltest dir aber keine Wunder erwarten. Zumindestens ein Teil läßt sich bestimmt nicht tauschen: Das Hautprogramm (main), welches man bei Programmstart aufruft.

UAHHHH!!!
Dann verzichte ich lieber drauf.
Habe ja geschrieben, das wäre was schönes,
muss aber nicht sein.

Der Umstieg von C- bzw. C++ auf Java (und umgekehrt) ist nicht wirklich schwer. Einmal Objektorientiert, immer Objektorientiert :wink:

Also besondere Anforderungen sind, dass
es halt auf meinem PC zuhause laufen soll,
und dass sich der Aufwand für das
Lernen einer neuen Programmiersprache
in Grenzen halten sollte.

java und c laufen fast überall. Beim Lernaufwand kommt es nur auf dich an.

Wie funktioniert das denn mit dem
Austauschen von Klassen während der Laufzeit?
(mir reicht auch ein Link, da zu viele
Details hier sicherlich langweilen)

Ich muß zugeben, dass ich keine Ahnung habe, ob man in c bzw. c++ zur Laufzeit Klassen tauschen kann. In Java ist jede kompilierte Klasse in einem eigenen File abgelegt. Wenn du ein .exe programmierst, liegt alles in dem .exe (Ausser du lagerst Funktionen in dll’s aus). Die dll’s sollten dann auch zur Laufzeit tauschbar sein (Wenn sie zum dem Zeitpunkt nicht benötigt werden). Es gibt IMHO zwei Vorraussetzungen, um dies machen zu können:

  • Die zu tauschende Klasse(nbibliothek) muß in einem eigenständigen File liegen
  • Während dem Tausch darf das Programm nicht auf das File zugreifen
  • Die getauschte Klasse muß exakt dem erwarteten Interface entsprechen

Das ganze ist schon in der Planung eines Programmes zu berücksichtigen und kann zusätzliche, unbenötigte Komplexität ins Design bringen…

Die Frage ist nun: Welches Programm ist so wichtig, dass man es nur zur Laufzeit ändern darf? Erfüllt das Programm seinen Zweck während dem Tausch? Benötigt der Tausch weniger Zeit als Stop-Update-Start?

mfG,

J.P.Jarolim

Hi.

Ist das jetzt eine Verallgemeinerung oder stellst du dir das
genau so vor? Wenn Elfriede als Ergebnis einer eigenständigen
Berechnung steht (Die sich dann durch neue Versionen ändern
könnte), kannst du diese Berechnung in eine eigene Klasse
abkapseln. Du brauchst ja einen Mechanismus, um Codeteile
voneinander zu trennen. In Objektorientierten
Programmiersprachen sind das nun mal Klassen.

Also es *muss* nicht unbedingt objektorientiert
sein.

Es kommt dann auf deine Trennung an, wo und wie du Code zur
Laufzeit ändern kannst. Du solltest dir aber keine Wunder
erwarten. Zumindestens ein Teil läßt sich bestimmt nicht
tauschen: Das Hautprogramm (main), welches man bei
Programmstart aufruft.

Das bringt mich auf eine Idee:
Ich schreibe einen Kernel, der alles
andere nur interpretiert.
Der Kernel umfasst einen Editor,
mit dem ich alles andere
während der Ausführung ändern kann.

Wie ein großes Basic-Programm.
Es wird erst interessant, was in
einer Zeile steht, sobald der Interpreter
in dieser Zeile arbeitet. So lange er woanders
ist, kann man beliebig editieren.

Wenn man genügend mächtige Prozeduren
zulässt, dann dürfte ein solcher Interpreter
nur unwesentlich langsamer sein, als
ein gleichwertiges compiliertes Programm.

Der Umstieg von C- bzw. C++ auf Java (und umgekehrt) ist nicht
wirklich schwer. Einmal Objektorientiert, immer
Objektorientiert :wink:

Das hoffe ich doch nicht!!!
Wenn man sich die Entwicklungsschritte
von sequenzieller Programmierung über
prozedurale bzw. funktionale Programmierung
zur objektorientierten Programmierung ansieht
(und vielleicht sogar miterlebt hat :smile:
Dann freut man sich schon stark auf die
Ablösung der objektorientierten Sprachen.

Schwache Anzeichen hierfür gibts ja schon.

java und c laufen fast überall. Beim Lernaufwand kommt es nur
auf dich an.

Wegen oben gesagtem (interpreter und so) könnte
Java tatsächlich interessant werden. Allerdings
ist java halt tödlich langsam.

Die Frage ist nun: Welches Programm ist so wichtig, dass man
es nur zur Laufzeit ändern darf?

Eine Roboter- oder Maschinensteuerung.

Erfüllt das Programm seinen

Zweck während dem Tausch?

Es soll ja während der Laufzeit
eine Zeile, ja vielleicht nur eine
Konstante geändert werden um zu sehen,
wie das gesamte Programm reagiert.

Benötigt der Tausch weniger Zeit als

Stop-Update-Start?

… deshalb wäre nicht nur *ein* Stop-Upgrade
-Start notwendig, sondern hunderte.
Das läppert sich.

Gruss,
Marco