OpenSpin Compiler überarbeitet
OpenSpin Compiler überarbeitet
Hallo,
ich habe in der vergangenen Zeit mal den OpenSpin Compiler auf moderneres C++ überarbeitet.
Die unnötigen Restriktionen (Begrenzung der If/Case/Loop Blöcke, Ausdrucktiefe) sind jetzt behoben. Außerdem funktioniert die Entfernung unbenutzter Funktionen besser. Vorher gab es eine Restriktionen von 255 Funktionen vor der Optimierung. Diese Restriktion gilt jetzt nur noch nach der Optimierung bedingt durch den Spin Interpreter.
Außerdem gibt es jetzt einen HTML Ausgabemodus, mit dem man sich den Aufbau einer Objekt Binärdatei genau anschauen kann.
Prinzipiell lässt sich jetzt der Binärcode auch leichter optimieren, aber das habe ich noch nicht umgesetzt. Derzeit sollte die Binärausgabe exakt der von OpenSpin entsprechen. Das habe ich mit den OBEX Spin Files getestet.
Wer Interesse hat, kann gerne unter https://github.com/ThiloA/OpenSpin vorbeischauen, dort gibt es auch vorkompilierte Anwendungen.
ich habe in der vergangenen Zeit mal den OpenSpin Compiler auf moderneres C++ überarbeitet.
Die unnötigen Restriktionen (Begrenzung der If/Case/Loop Blöcke, Ausdrucktiefe) sind jetzt behoben. Außerdem funktioniert die Entfernung unbenutzter Funktionen besser. Vorher gab es eine Restriktionen von 255 Funktionen vor der Optimierung. Diese Restriktion gilt jetzt nur noch nach der Optimierung bedingt durch den Spin Interpreter.
Außerdem gibt es jetzt einen HTML Ausgabemodus, mit dem man sich den Aufbau einer Objekt Binärdatei genau anschauen kann.
Prinzipiell lässt sich jetzt der Binärcode auch leichter optimieren, aber das habe ich noch nicht umgesetzt. Derzeit sollte die Binärausgabe exakt der von OpenSpin entsprechen. Das habe ich mit den OBEX Spin Files getestet.
Wer Interesse hat, kann gerne unter https://github.com/ThiloA/OpenSpin vorbeischauen, dort gibt es auch vorkompilierte Anwendungen.
Re: OpenSpin Compiler überarbeitet
Hast Du eine Idee für einen handlichen (File-)Namen für Deinen Compiler?
Die alte und die Deine Variante (zumindestens ab und zu) konfliktfrei nebeneinadder nutzen wollen wird vermutlich keine so selten vorkommende Situation sein.
Zuletzt geändert von yeti am Di 4. Okt 2022, 00:52, insgesamt 1-mal geändert.
𝖂𝖎𝖗 𝖐𝖔̈𝖓𝖓𝖊𝖓 𝖆𝖑𝖑𝖊𝖘 𝖆𝖚𝖘𝖘𝖊𝖗 𝖎𝖓 𝕱𝖗𝖚̈𝖍𝖑𝖎𝖓𝖌, 𝕾𝖔𝖒𝖒𝖊𝖗, 𝕳𝖊𝖗𝖇𝖘𝖙 𝖚𝖓𝖉 𝖂𝖎𝖓𝖙𝖊𝖗! – 𝕯𝖊𝖚𝖙𝖘𝖈𝖍𝖑𝖆𝖓𝖉.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
Re: OpenSpin Compiler überarbeitet
Schau dazu mal in das ByteCode-Backend von Spin2CPP (FlexSpin und Freunde) und/oder ping mal Würfel21 dazu an. Vielleicht ergeben sich Synergien.
𝖂𝖎𝖗 𝖐𝖔̈𝖓𝖓𝖊𝖓 𝖆𝖑𝖑𝖊𝖘 𝖆𝖚𝖘𝖘𝖊𝖗 𝖎𝖓 𝕱𝖗𝖚̈𝖍𝖑𝖎𝖓𝖌, 𝕾𝖔𝖒𝖒𝖊𝖗, 𝕳𝖊𝖗𝖇𝖘𝖙 𝖚𝖓𝖉 𝖂𝖎𝖓𝖙𝖊𝖗! – 𝕯𝖊𝖚𝖙𝖘𝖈𝖍𝖑𝖆𝖓𝖉.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
Re: OpenSpin Compiler überarbeitet
Bisher erzeugen sie ja noch die gleiche Ergebnisse, meine Version nimmt nur mehr Spindateien an . Aber du hast recht, ein separater Name wäre schon gut. War da etwas einfallslos, bin für Vorschläge offen. Hatte es bisher intern manchmal nur OpenSpinFork genannt, aber naja
Ich habe jetzt übrigens mal die TriOS Dateien im Regnatix Ordner (system/regnatix/*.spin) mit bst und meiner openspin Variante übersetzt. Bei bst habe ich die "-O a" (alle Optimierungen) verwendet, bei OpenSpinFork nur -u.
Anbei die Ergebnisse (in Bytes der Binärdatei) welche mich durchaus positiv überrascht haben.
Code: Alles auswählen
Datei BST OpenSpinFork
admtest 8860 7560
beltest 7036 5548
charmap 2896 1220
eram 7612 6532
flash 7796 6136
fm 8608 7716
fterm 3312 1648
ftp 7696 NA
g0test 6576 5480
hplay 4636 3248
ipconfig 5224 3572
irc 14072 12764
keycode 2824 1296
man 3384 1776
m 4080 2700
perplex 7016 NA
ramtest 4896 3420
regime 10104 9584
rom 5008 3100
sfxtool 7296 5648
splay 3704 2236
sysconf 4872 3528
tapecut 4204 2728
time 6460 4780
wplay 3992 2620
yplay 3992 2504
Ich habe mal bei ein paar Dateien in das erzeugte Binary geschaut, und festgestellt, dass BST offenbar einige, aber nicht alle unbenutzten Methoden entfernt. Ist das normal so? Oder gibt es da noch irgendeine geheime Zusatzoption die ich vergessen haben? Das war sowohl bei bstc als auch in der bst IDE so. So ganz verstanden habe ich das noch nicht...
Bei "perplex" und "ftp" gibt es mit OpenSpin Probleme, das muss ich mir nochmal anschauen.
Viele Grüße
Thilo
Re: OpenSpin Compiler überarbeitet
Ich hab das Binärchen bei mir erstmal 𝚘𝚙𝚎𝚗𝚜𝚙𝚒𝚗-𝚝𝚊 getauft. Das war auch nicht grad hyperkreativ. Solange beide Versionen sehr nahe Verwandte sind, würde ich eine Unterscheidung am Ende des Namens bevorzugen. 𝚘𝚙𝚎𝚗𝚜𝚙𝚒𝚗[TAB] würde dann alle nahen Verwandten anbieten, was der Generation [TAB]süchtig sehr entgegenkommen würde.
Ich hab immer nur brav exakt die Optionen benutzt, die in Chefdrohne's Bauskript stehen. BSTC hinterfragen, wo dessen Source nichtmal verfügbar ist, ist vermutlich Lebenszeitverschwendung.thiloa hat geschrieben: ↑Di 4. Okt 2022, 17:53 Ich habe mal bei ein paar Dateien in das erzeugte Binary geschaut, und festgestellt, dass BST offenbar einige, aber nicht alle unbenutzten Methoden entfernt. Ist das normal so? Oder gibt es da noch irgendeine geheime Zusatzoption die ich vergessen haben? Das war sowohl bei bstc als auch in der bst IDE so. So ganz verstanden habe ich das noch nicht...
Ich hab auf die schnelle versucht das Bauen auf 𝚘𝚙𝚎𝚗𝚜𝚙𝚒𝚗-𝚝𝚊 umzustricken, aber meine heutige Aufmerksamkeitsspanne reichte einfach nicht dafür.
𝖂𝖎𝖗 𝖐𝖔̈𝖓𝖓𝖊𝖓 𝖆𝖑𝖑𝖊𝖘 𝖆𝖚𝖘𝖘𝖊𝖗 𝖎𝖓 𝕱𝖗𝖚̈𝖍𝖑𝖎𝖓𝖌, 𝕾𝖔𝖒𝖒𝖊𝖗, 𝕳𝖊𝖗𝖇𝖘𝖙 𝖚𝖓𝖉 𝖂𝖎𝖓𝖙𝖊𝖗! – 𝕯𝖊𝖚𝖙𝖘𝖈𝖍𝖑𝖆𝖓𝖉.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
Re: OpenSpin Compiler überarbeitet
Nun zum Lebenszeit verschwenden sind wir ja hier Habs jetzt herausgefunden. Folgendes Minimalbeispiel
Code: Alles auswählen
PUB F1
PUB F2
F3
PUB F3
Das "perplex.spin" habe ich hinbekommen. Schuld war Zeile 266:
Code: Alles auswählen
PRI plx_game|dev,i
"ftp.spin" scheint komplizierter zu sein
Code: Alles auswählen
i := sendStr(string("CWD ")) || sendStr(@defdir) || sendStr(string(13,10))
Code: Alles auswählen
a := b || c
Code: Alles auswählen
push b
push c
absop
write a
- PIC18F2550
- Beiträge: 2846
- Registriert: Fr 30. Sep 2011, 13:08
Re: OpenSpin Compiler überarbeitet
Ich würde mir ein besseren Assembler für den P1 & P2 wünschen.
Spinn und C sind mir etwas egal.
Spinn und C sind mir etwas egal.
Gruß
PIC18F2550
drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
PIC18F2550
drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Re: OpenSpin Compiler überarbeitet
Dafr lohnt sich vermultich einen eigener Thread.PIC18F2550 hat geschrieben: ↑So 9. Okt 2022, 15:16 Ich würde mir ein besseren Assembler für den P1 & P2 wünschen.
—▷ viewtopic.php?f=12&t=1630
𝖂𝖎𝖗 𝖐𝖔̈𝖓𝖓𝖊𝖓 𝖆𝖑𝖑𝖊𝖘 𝖆𝖚𝖘𝖘𝖊𝖗 𝖎𝖓 𝕱𝖗𝖚̈𝖍𝖑𝖎𝖓𝖌, 𝕾𝖔𝖒𝖒𝖊𝖗, 𝕳𝖊𝖗𝖇𝖘𝖙 𝖚𝖓𝖉 𝖂𝖎𝖓𝖙𝖊𝖗! – 𝕯𝖊𝖚𝖙𝖘𝖈𝖍𝖑𝖆𝖓𝖉.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
"Du willst hier nicht klicken. Dies interessiert Dich nicht." — Yeti.
"DNA is a four letter word!" — Yeti.
- Wuerfel_21
- Beiträge: 57
- Registriert: Di 21. Jan 2020, 19:20
Re: OpenSpin Compiler überarbeitet
Hinsichtilich des BSTC-Vergleichs oben, scho mal mit flexspin's bytecode-modus verglichen? Für den stehe ich mit meinem Namen.
Tests gegen OpenSpin und BSTC von damals(tm): https://forums.parallax.com/discussion/ ... out#latest
tl;dr; flexspin bytecode zerstört BSTC auf allen Ebenen.
(mittlerweile kann man auch "flexspin -1bc" schreiben statt "flexspin --interp=rom"...)
Der echte clou sind natürlich die extra-features. Nicht alles, was mit dem "echten" ASM-kompiler geht, geht auch in bytecode, aber u.a. möglich:
- abstract object / Objektpointer
- bis zu 4 return-Variablen (etwas langsam da workaround) und multi-assign (aka "x,y := 10,20")
- Einige Spin2-features (Ternär-operator, byte-Arrays in lokalen Variablen, @"string", postset (backslash), etc)
- Begrenzter support für die Spin2, C und BASIC frontends
Mehr dazu hier: https://github.com/totalspectrum/spin2c ... oc/spin.md
Wobei die doku um bytecode tatsächlich etwas mangelt.
Tests gegen OpenSpin und BSTC von damals(tm): https://forums.parallax.com/discussion/ ... out#latest
tl;dr; flexspin bytecode zerstört BSTC auf allen Ebenen.
(mittlerweile kann man auch "flexspin -1bc" schreiben statt "flexspin --interp=rom"...)
Der echte clou sind natürlich die extra-features. Nicht alles, was mit dem "echten" ASM-kompiler geht, geht auch in bytecode, aber u.a. möglich:
- abstract object / Objektpointer
- bis zu 4 return-Variablen (etwas langsam da workaround) und multi-assign (aka "x,y := 10,20")
- Einige Spin2-features (Ternär-operator, byte-Arrays in lokalen Variablen, @"string", postset (backslash), etc)
- Begrenzter support für die Spin2, C und BASIC frontends
Mehr dazu hier: https://github.com/totalspectrum/spin2c ... oc/spin.md
Wobei die doku um bytecode tatsächlich etwas mangelt.
Re: OpenSpin Compiler überarbeitet
Hallo,Wuerfel_21 hat geschrieben: ↑Fr 14. Okt 2022, 15:39 Hinsichtilich des BSTC-Vergleichs oben, scho mal mit flexspin's bytecode-modus verglichen? Für den stehe ich mit meinem Namen.
Tests gegen OpenSpin und BSTC von damals(tm): https://forums.parallax.com/discussion/ ... out#latest
nein, das habe ich noch nicht. Genau genommen sollte sich da auch bisher noch nichts zu deinem Test geändert haben, da alle Dateien die vorher schon mit OpenSpin kompilierten, mit meinem Fork byteweise gleiche Ausgabe erzeugen (sollten). Lediglich Dateien, die vorher aufgrund zu vieler unbenutzter Methoden / zu tiefer Verschachtelung von Ifs Case usw. nicht funktioniert haben, sollten jetzt ggf compilieren.
Wenn ich ein paar neue Optimierungen eingebaut habe, werde ich mal einen Vergleich durchführen.