Da sich der eine oder andere sicher fragt, warum es in letzter Zeit so sehr stockend voran ging, möchte ich (bevor ich zu den Neuigkeiten komme) kurz erzählen, wie meine letzten Wochen aussahen.
Kurz gesagt: stressig und chaotisch - und zwar im wahrsten Sinne der Wörter.
Der letzte Eintrag ist vom 23.10.2007 - am 26.10.2007 war mein letzter Arbeitstag bei der BWI Systeme (
HERKULES Projekt). Danach hieß es "zurück nach Mannheim" zum studieren - fast jedenfalls.
Vorher waren noch drei Wochen Projektarbeit bei der IBM Deutschland in Mainz angesagt - woran ich gearbeitet habe, kann ich leider nicht sagen (ich sage nur, dass mir der Ausdruck "Highly Confidential" mittlerweile zum Halse heraushängt - vor allem, weil dieser Umstand einem die Arbeit nicht sonderlich erleichtet). Was ich vielleicht erwähnen darf, ist jedenfalls, dass es was mit programmieren zu tun hatte.
Diese drei Wochen Projektarbeit sind nun vorbei. Parallel durfte ich jedoch auch noch einen Fachtext schreiben (insgesamt sind es 37 Seiten zum schönen Thema "Multi-Tiered Application Development in Java" [anhand einer selbst-geschriebenen Middleware-Lösung] geworden). Das Schlimmste war jedoch, den gesamten Papierkram zu erledigen (im speziellen: Unterschriften aus Berlin und Brandenburg zu organisieren, während man selbst in Mainz und Mannheim ist). Als Anhaltspunkt: heute war der letzte Termin, bei dem es noch nicht zu Umständlichkeiten gekommen wäre - gestern Abend trudelten die letzten Unterschriften mit der deutschen Post ein.
Und um zu zeigen, was noch zu tun ist:
- Anfangen, für die Java-Klausur am Montag zu lernen
- zu Montag ein vollständiges Programm für Java entwickeln
- zu Freitag einen Fachtext "analogies of human and computer communication" schreiben
Nebenbei normales Studium und das Projekt für die IBM Mainz.
Das ist der derzeitige Stand, was das zeitliche angeht.
Nun aber zu dem interessanteren Thema: Was ist mit Chest?
Wie man sich vorstellen kann, blieb zuletzt nicht viel Zeit dafür - jedoch waren bereits ein paar Dinge in Aussicht, die nur noch nicht öffentlich gemacht wurden.
Da erkenntlich geworden ist, dass es durchaus umständlich werden würde, bei Methoden jedes mal ein Ergebnis einer Methode über einen Zugriff auf ein Feld des Ergebnisses (das an sich ein Objekt ist) zu erledigen, wurde von mir die Idee eingeführt, dass nicht jede Methode unbedingt eine neue Klasse darstellen muss.
Anstelle also wie hier, für einen einfachen Integer-Rückgabewert eine eigene Klasse zu haben...
Sum get (NumberA as Integer; NumberB as Integer;)
set (Result as Integer;)
begin
Result := NumberA + NumberB;
end;
...sollte es möglich sein, einen bereits bestehenden Typ einfach nur zu benutzen.
Sum get (NumberA as Integer; NumberB as Integer;)
set Integer
begin
This := NumberA + NumberB;
// Ob es nun "This" oder anders heißt,
// ist noch nicht raus
end;
Dieses Vorgehen würde sich nahtlos mit der jetzigen Vorgehenweise (definieren einer neuen Klassenstruktur) vereinigen lassen.
Als zweiter Punkt zu einer (vielleicht) unwichtigeren Sache, die jedoch nicht unerwähnt bleiben sollte - aufgrund dessen, dass bestimmte Operatoren eine Mehrfachdeutung erlaubt hätten, wurde für die Zuweisung der aus Pascal bekannte Operator ":=" eingeführt.
Der genaue Grund ist folgender: (überspringen, falls uninteressant)
Da Chest fast vollständig objektorientiert sein wird, wurde überlegt, wie man die Nutzbarkeit dieses Konzeptes vereinfachen könnte. Das Ergebnis ist, dass Objekte zwar immernoch Objekte sind, jedoch einfacher zu handhaben sein werden (nämlich in etwa wie native Typen). Das bedeutet z.B., dass eine Variablenzuweisung nicht zu einem Kopieren der Referenz führt, sondern zum Duplizieren des entsprechenden Objektes führt. Da das Kopieren von Referenzen jedoch genauso einfach gehen sollte, wurde eine Referenzzuweisung eingeführt ("^=").
Und genau hier liegt das Teilproblem: die Referenzen, die in Chest eine höhere Funktionalität aufweisen, als in Java.
In Chest ist es möglich durch ein
^Bezeichner das entsprechende Objekt zu referenzieren und durch ein
Bezeichner^ wieder zu dereferenzieren.
Angenommen, wir hätten also ein einfaches Ist-Gleich als Zuweisungsoperator, so könnte ein
Bezeichner^=x; nicht eindeutig als Referenzzuweisung (
Bezeichner ^= x; - alternativ auch als
^Bezeichner := ^x; schreibbar) oder als Wertzuweisung an das dereferenzierte Objekt (
Bezeichner^ := x;) identifiert werden. Deshalb dieser Schritt des geänderten Zuweisungsoperators.
Des weiteren wurde beschlossen, einen
constants-Bereich einzuführen. Ob es einen
properties-Bereich mit einer ähnlichen Funktionalität wie den Pascal-Properties geben wird, steht noch nicht fest.
Ein besonderes Feature, das hoffentlich ein wenig Anklang finden wird, ist, dass es möglich sein würden, Klassen bei der Ableitung zu überschreiben. Das bedeutet z.B., dass es möglich sein wird, eine Klasse
String zu definieren, die von der Klasse
String erbt. Bindet man nun die entsprechende Klasse ein, steht die neue Version zur Verfügung, ohne, dass es Quelltextänderungen vorgenommen werden müssen.
Nun zur letzten großen Entscheidung, die bisher jedoch noch nicht vollständig gefällt wurde.
Und zwar kam die Idee auf, anstatt von
begin und
end; zur Markierung von Quelltext-Blöcken lieber kontextbezogene Blöcke zu nutzen.
Ein Beispiel wäre z.b. ein
if (true) do ... endif; bzw. eine Variante, die bisher schon teilweise zum Einsatz kommt:
if (true) do ... if;.
Code-Blöcke würden dann eventuell in einem
code ... code; eingeschlossen werden.
Die Hauptfrage ist, wie man am besten eine einheitliche Syntax hinbekommt, die so wenig Ausnahmen beinhaltet wie möglich - und hier ist die zweit-gezeigte Variante wirklich gut zu gebrauchen, abgesehen davon, dass die Lesbarkeit erhöht wird, da Probleme, wie das Auszählen von
Begins und
Ends, so weit wie möglich entfallen.
Ich denke mal, dass das nun aber wirklich genug Informationen für heute waren.
Bis demnächst...
Wirsing
Labels: Chest, Planung