Liebe Gemeinde,
wir wissen ja alle, dass Roland offenbar XProfan nicht mehr weiterentwickeln möchte oder kann. Solange die PC-Welt so ist, wie sie ist, kann ich damit leben, denn alles läuft ja problemlos mit der aktuellen Version.
Ich habe aber nun gelesen, dass die großen Chiphersteller planen, den 32bit-Assembler-Befehlssatz in der Zukunft aus ihren CPUs zu streichen. Verständlich, aber damit ist XProfan in seiner jetzigen Form endgültig ein Kadaver. Neue Programme mit anderen Sprachen zu schreiben ist eine Sache, aber alte Programme, die in XProfan geschrieben sind, einfach aufzugeben (oder, Gott bewahre, neu zu entwickeln), eine ganz andere. Ich habe neben dutzenden kleineren Dingen ein Grafikanzeigeprogramm à la IrfanView und, viel wichtiger für mich, ein Tresorprogramm zur absolut sicheren Speicherung von persönlichen Daten (Passwörter und noch viel mehr, mein ganzes Leben im Prinzip) mit XProfan geschrieben. Das sind jeweils mehr als 20.000 Zeilen hochspzezialisierten Codes, den ich kaum einfach mal so eben in eine neue Sprache rüberbekomme. Mal ganz abgesehen davon, dass ich auch gerne neue Programme damit schreibe, weil es eben XProfan ist.
Mir ist also das Fortbestehen von XProfan ein absolutes Herzensanliegen.
Es ist nach den Eingangsworten nun unumgänglich, dass XProfan 64bit-fähig wird, wenn es irgendwie weiterleben soll. Dazu könnten wir versuchen, das Geld zusammenzubekommen, um Roland eine Embarcadero-Lizenz für 64bit-Delphi zu schenken, ohne zu wissen, ob er damit in seiner heutigen Situation etwas anfangen könnte/wollte/würde, oder man kann über einen anderen, extrem radikalen Schritt nachdenken:
Was wäre, wenn wir Roland in einer kleinen, geschlossenen Entwicklergemeinde um den Quelltext bitten, das ganze nach PureBasic portieren und ihm dabei sämtliche Rechte erhalten würden? Das wäre natürlich ein absolut selbstloses Projekt, bei dem alle Vorteile bei dem blieben, der es verdient hat: Roland.
Vorteile:
Wenn man zumindest erstmal das Runtime-Modul nach PureBasic portiert hätte, könnten damit alle bestehenden Quellcodes sowohl in 32bit als auch in 64bit als EXE-Datei produziert werden. Die einzige Anpassung, die in XProfan-Quelltexten nötig wäre, wäre die sicherzustellen, dass alle Pointer als solche definiert sind, und nicht hart als 32bit-Integervariablen. Pointer hätten in der 32bit-Runtime 4 Bytes Breite und in der 64bit-Runtime 8 Bytes. Fertig.
PureBasic kostet einmalig EUR 79,-- für 32 und 64 Bit inklusive aller zukünftigen Updates. Nicht mehrere tausend Euro wie bei Embarcadero für Delphi.
PureBasic erzeugt mutmaßlich schnelleren und kleineren Code als Delphi. XProfan würde also aus sich heraus schneller laufen als jetzt.
Nachteile:
Die Portierung wäre ein Mammutprojekt. Wir wissen nicht, wie viele Zeilen Quelltext zu konvertieren wären (100.000?). Es ist unklar, ob alles handgeschrieben ist, was verhältnismäßig leicht zu übersetzen wäre. Wenn aber obskure Delphi-Bibliotheken genutzt werden, deren Quelltext nicht offenliegt, oder gar Drittanbietermodule, für die es ggf. keine 64bit-Versionen gibt, wird es wirklich haarig.
Und die Portierung handgeschriebenen Codes ist auch schon ganz schön aufwenig. Dies sei an folgendem Beispiel verdeutlicht:
Delphi:
Procedure quadrGl(a,b,c:real;var Anz:integer;var x1,x2:real);
var d,q:real;
begin
d:=b*b-4*a*c;
if d<0 then Anz:=0 else
if d=0 then begin
Anz:=1;
x1:=-b/2/a;
end else begin
Anz:=2;
q:=sqrt(d);
x1:=(-b+q)/2/a;
x2:=(-b-q)/2/a;
end;
end;
PureBasic:
Procedure quadrGl(a.f,b.f,c.f,*pAnz,*px1,*px2)
protected d.f,q.f,Anz.i,x1.f,x2.f
Anz=PeekI(*pAnz)
x1=PeekF(*px1)
x2=PeekF(*px2)
d=b*b-4*a*c
if d<0
Anz=0
else
if d=0
Anz=1
x1=-b/2/a
else
Anz=2
q=sqr(d)
x1=(-b+q)/2/a
x2=(-b-q)/2/a
endif
endif
PokeI(*pAnz,Anz)
PokeF(*px1,x1)
PokeF(*px2,x2)
EndProcedure
Das Hauptproblem ist, wie man sieht, dass PureBasic keine ByRef-Deklarationen kennt. Im tatsächlich konvertierten Text würde man an allen Stellen Peek & Poke verwenden, hier habe ich es zur Vereinfachung und besseren Lesbarkeit aber an den Anfang und ans Ende geschrieben.
Ich bin aber der Meinung, dass man das meiste davon automatisieren könnte. Semikola am Zeilenende weg, := in = verwandeln usw. usf. Auch die Variablendeklarationen würde man mit deutlichem Aufwand automatisch umwandeln können. Die seltsame if-Logik wäre schon eine größere Herausforderung, aber wohl auch machbar.
Die große Frage ist nun: Es gibt ja unter Euch einige, die PureBasic können. Könntet Ihr Euch vorstellen, an einem derartigen Projekt mitzuwirken? Sollten wir Roland einmal fragen, ob das für ihn in Frage käme? Der Nutzen wäre kolossal. XProfan könnte sogar wieder für Neueinsteiger interessant werden. Der Aufwand allerdings auch. Das kann man nicht allein stemmen. Roland nicht, ich nicht, und auch sonst niemand. Und es hängt natürlich davon ab, ob Roland überhaupt bereit wäre, sowas mitzumachen.
Noch ein Schlusswort: Für mich kommt für so etwas aus tausend Gründen wirklich nur PureBasic in Frage (JRPC3 ist z.B. damit geschrieben. Wenn man das zukünftig mit XProfan zusammen ausliefert, kann jeder nach Belieben schnelle FreeBasic- oder PureBasic-Module direkt im Code schreiben und so XProfan noch deutlich aufwerten - extrem schnelle Procs, Multithreading, ...). Wenn also die zu erwartende Diskussion aufkommt, ob man dafür nicht besser Sprache XY nimmt, dann bin ich raus. Was natürlich nicht heißen muss, dass es dann nicht andere geben könnte, die das trotzdem in Angriff nehmen.
Beste Grüße, Jens-Arne