BlitzBasicScript

Übersicht Sonstiges Projekte

Neue Antwort erstellen

Spark Fountain

Betreff: BlitzBasicScript

BeitragDi, Jan 08, 2019 8:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Liebe Community,

seit ungefähr zehn Monaten arbeite ich an einer Neuimplementierung von B3D / B+, welche auf den Namen BlitzBasicScript (kurz BBScript) hört und im Web Browser läuft (bzw. laufen sollen, wenn es mal fertig ist). In diesem Worklog könnt ihr euch über den Projektfortschritt informieren und hier findet ihr das GitHub-Repository, in welchem der Code liegt (natürlich alles Open Source).

Nachdem eine erste JavaScript-Implementierung sich als zu vertrackt herausgestellt hatte, habe ich ein Angular 7 Projekt aufgesetzt und den eigentlichen Core von BBScript als Angular Library konzipiert. Der Technologie-Stack sieht in etwa so aus:

- Grundlegendes Framework: Angular 7 (programmiert wird in TypeScript)
- 3D Library: BabylonJS
- 2D Unterstützung: HTML5 Canvas
- GUI-Unterstützung: Natives HTML

Ferner habe ich mir die Domain www.blitzbasicscript.com reserviert und will dort demnächst einen Webauftritt hochladen, der gleich einen Einstiegspunkt in BBScript darstellen soll. Hier gibt es schon mal ein paar Konzept-Scribbles für verschiedene Unterseiten: https://www.blitzforum.de/upload/file.php?id=13377

Da ich bisher alles allein programmiert habe und weiß, wie viel Aufwand das in der Summe macht, um alle B3D / B+ Befehle zu "portieren", möchte ich gerne um etwas Unterstützung werben Smile. Dabei kann ich mir mehrere Rollen vorstellen, in denen ihr mich unterstützen könntet:

Arrow Programmierer mit Angular (2+) Erfahrung
Arrow Alphatester, die kontinuierlich Implementierungen anhand von simplen Codeschnipseln verifizieren
Arrow BB-Kenner, die bei noch offenen konzeptuellen Fragen praktische Tipps geben
Arrow Worklog-"Follower", die regelmäßig den Projektfortschritt begleiten und kommentieren (gern auch kritisieren) Wink

Konkret habe ich folgende Fragen, auf die ich noch keine überzeugende Antwort weiß:

1) Wie funktionieren Speicherbänke intern? Wenn man eine erstellt, ohne eine Größe anzugeben, dann hat die angeblich eine Größe von 0, aber es lassen sich trotzdem Werte an beliebigen Positionen rein schreiben.

BlitzBasic: [AUSKLAPPEN]
Global bank = CreateBank()
PokeInt(bank, 5, 42) ; schreibt an Position 5 den Wert 42
Print BankSize(bank) ; 0
Print PeekInt(bank, 5) ; 5


2) Wie bekomme ich mit dieser JavaScript-Matrix-Funktion eine Drehung um einen spezifischen Drehpunkt hin? Wenn ich den Kontext so drehe und dann ein Bild einzeichne, wird es immer oben links eingezeichnet, obwohl der Bildmittelpunkt genutzt werden sollte.

Code: [AUSKLAPPEN]
let origin = this.getOrigin();

      let rotationRadians = image.rotation / (180 / Math.PI);
      let handleVector = {
        length: Math.sqrt(Math.pow(image.handle.x, 2) + Math.pow(image.handle.y, 2)),
        dx: 0,
        dy: 0
      };
      handleVector.dx = -Math.sin(handleVector.length);
      handleVector.dy = Math.cos(handleVector.length);

      let scaleX = image.width / image.element.width;
      let scaleY = image.height / image.element.height;
      let toX = -image.handle.x;
      let toY = -image.handle.y;
      let sin = Math.sin(rotationRadians);
      let cos = Math.cos(rotationRadians);

this._context2d.setTransform(
        cos * scaleX,
        sin * scaleX,
        -sin * scaleY,
        cos * scaleY,
        x + toX + origin.x,
        y + toY + origin.y
      );
      this._context2d.drawImage(image.element, 0, 0);



3) Mit welchen Webtechnologien kann man effizient TCP-Verbindungen zwischen Front- und Backend aufbauen, um die Netzwerkbefehle von BB nachzubauen? Bringt PHP irgendwelche Funktionen mit, bei denen man keine spezifischen php.ini-Parameter einstellen können muss? Mein Provider Alfahosting erlaubt mir in meinem gebuchten Paket nämlich keinen Root-Zugriff.

Vielen Dank schon einmal im Voraus für jegliche Kommentare, Belobigungen und Kritiken sowie Hilfsangebote!

Ein abschließender Satz: Meine Hoffnung ist es, dass BBScript nicht, wie so viele ähnliche Projekte, vorzeitig scheitert und ich denke, dass mit eurer Unterstützung mittel- bis langfristig eine würdige "Neuauflage" von BB entstehen kann. Cool
Gewinner der MiniBCC's #11, #13 und #28

Thunder

BeitragMi, Jan 09, 2019 1:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, habe deinen Worklog zum Teil mitverfolgt - es geht momentan etwas zu schnell voran für mich ^^

Meine drei allgemeinen Kritikpunkte:
1.) BB: ist schon sehr veraltet und wirklich nichts für halbwegs erfahrene Anwender, gleichzeitig ist es auch
nicht die beste Anfängersprache, weil manche Sachen doch etwas chaotisch sind. Mit plain
Javascript kannst du genauso einfach viel mehr ausdrücken.
2.) Javascript: nicht an sich die Sprache, sondern wie du selbst sagst, musst du viele Workarounds
anwenden, um den sync-Code in async-Javascript zu verwandeln, wo es nur async geht.
3.) Angular: auch wenn ich zum Teil in Angular entwickle, ich mag "moderne Webentwicklung" nicht (nodejs etc).

Du scheinst da aber schon sehr viel Energie und Zeit reingesteckt haben und wirst dich davon nicht entmutigen
lassen, also viel Spaß dabei. Werde natürlich den Worklog lesen.

Jetzt meine Meinung zu deinen Fragen:
1.) ich würde den Fall ignorieren. Zugriffe in einer Bank müssen nur innerhalb des intervalls [0:BankSize[ funktionieren. BB-Code, der das falsch handelt, kann man schnell fixen.

2.) sorry, damit kann ich nicht helfen.

3.) Da wirst du dir vermutlich ein Gateway bauen müssen, wenn du willst, dass TCP/UDP allgemein funktionieren. Client-seitig wirst du einen Websocket brauchen, damit du nicht ständig pollen musst, ob neue Netzwerkpakete eingegangen sind. Serverseitig wäre das wahrscheinlich gut in Go zu implementieren. Du müsstest aber ein Protokoll designen, dass es dem Client erlaubt, dem Server zu sagen, er soll in seinem Namen Connections erstellen, Pakete schicken und empfangen. Den eigentlichen Netzwerk-Traffic müsstest du dann über dieses Protokoll "tunneln". Eventuell gibt es so ein passendes Protokoll auch schon.

Das große Problem an dem ganzen ist Missbrauch: wenn jemand irgendeinen Blödsinn in BB-Script anstellt und du stellst einen offenen Server für die Netzwerkverbindungen bereit, dann wird dieser Blödsinn zu dir zurückverfolgt werden.

Edit: die Websiten-Skizzen sehen nice aus!
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

DAK

BeitragMo, Jan 14, 2019 17:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich finde das Projekt sehr interessant und auch ziemlich cool. Finde es auch gut, wie weit du schon damit gekommen bist.

Es hat aber ein paar Konzeptprobleme, die es eventuell kompliziert machen wird.

JS und BB sind sehr unterschiedliche Sprachen mit sehr unterschiedlichem Einsatzzweck. Wie schon im Worklog beschrieben funktioniert z.B. das Hauptschleifenkonzept, Filezugriff oder Netzwerk aus BB nicht so in JS. Das sorgt dafür, dass BBScript auf jeden Fall nicht komplett kompatibel zu BB sein wird. Das heißt, BB-Programme werden nicht direct auf BBScript laufen können und BB-Programmierer werden auf jeden Fall umlernen müssen, wenn sie BBScript verwenden, weil es eine andere Sprache sein wird (ähnlich aber doch anders). Dazu kommt, dass die Anzahl an aktiven BB-Programmierern jetzt schon sehr gering ist.
Als echtes (eventuell kommerzielles) Projekt wird es also wahrscheinlich nicht viel Anwendung finden.

Das war auch einer der Faktoren, warum ich meinen BB zu Java Crosscompiler aufgegeben habe.

Aus Hobbyprojekt ist es allerdings irrsinnig cool und definitiv auch eine mögliche Referenz für den Lebenslauf.

Zu deinen Fragen:
Ich kann dir eigentlich nur Frage 1 beantworten: BB checkt beim Zugriff (im Release Mode) einfach nicht ob die Adresse sich innerhalb der Bank befindet. Es schreibt also blind den Wert einfach an die Stelle im Speicher. Intern funktioniert das so, dass CreateBank zwei Dinge tut: es reserviert einen Speicherblock in der gewünschten Größe und liefert einen Pointer (gewrappt in ein bbBank-Objekt) auf die Adresse des 0. Wertes zurück.

PokeByte(bank, offset, value) schreibt den gegebenen Wert value an das Byte an der Stelle bank.address + offset. Wenn offset größer ist als die Länge der Bank, dann schreibt er einfach in den Speicher danach hin. Im Debug Mode checkt er das übrigens und wirft eine Fehlermeldung.

Dieses Verhalten würde ich in BBScript auf keinen Fall übernehmen, da es undefiniert ist, was dabei passiert. Bei so einem Buffer Overflow kann entweder gar nichts passieren (wenn der Speicherplatz nach der Bank nicht verwendet wird) oder random irgendwas, wenn der Speicherplatz doch verwendet wird. Befinden sich an der Stelle Daten, dann werden die die verändert (z.B. könnten andere Variablen dort abgelegt sein, die dann auf einmal andere Werten haben, weil sie überschrieben wurden). Aber dort könnte auch Code sein, und das bringt dann wirklich unvorhersehbare Ergebnisse, weil die Maschine auf einmal die eingegebenen Werte als Code interpretiert und dann irgendwas macht. Am wahrscheinlichsten ist abstürzen, aber es kann auch einfach irgendwas anderes passieren.

Das wirst du in JS gar nicht nachbilden können (geschweige denn davon dass man es nicht sollte), da JS seinen Speicher halbwegs sauber verwaltet und sowas dort gar nicht passieren kann.
Gewinner der 6. und der 68. BlitzCodeCompo

Spark Fountain

Betreff: Alpha-Website released

BeitragDo, Jan 30, 2020 12:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Nach langer Zeit Funkstille habe ich das Projekt BlitzBasicScript wiederbelebt und nun auch eine Alpha-Website veröffentlicht, auf der man die ersten Infos sowie einen Lexer und eine (noch unvollständige) Befehlsreferenz findet: https://blitzbasicscript.com/

user posted image

Wer sich über den weiteren Projektfortschritt informieren möchte, kann gerne den entsprechenden Worklog mitverfolgen (und bei Interesse einen kurzen Kommentar hinterlassen, damit ich sehe ob es überhaupt noch Leute gibt, die das lesen Smile).

Mein Ziel ist es weiterhin, Ende 2020 einen Stand zu erreichen, dass man kleine Programme und Spiele online im Browser ausführen kann. Sicherlich werden (noch) nicht alle 700 Befehle bis dahin implementiert sein, aber zumindest die wichtigsten Dinge in 2D und 3D sollten laufen.
Gewinner der MiniBCC's #11, #13 und #28

Eingeproggt

BeitragDo, Jan 30, 2020 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, es gibt noch Leser Smile
Bin zwar gedanklich recht weit weg von BlitzBasic, aber diese Community ist noch immer Bestandteil meiner "Online Lektüre".
Um etwas Feedback zu geben:
Mein erster Gedanke heute war, dass eine Website zur Präsentation des Projekts wohl nicht besonders hohe Priorität hat. Vor allem, wenn man andere "offene Baustellen" bedenkt, die du im Worklog erwähnt hast.

Aber ich verstehe auch, dass man mal Abstand braucht, und was anderes machen will zwischendurch.
Und ich bin sehr froh, dass Content geboten wird, dass du noch immer dran bist. Noch immer Zeit für das findest, was du gerne tust. Respekt dafür!
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

TimBo

BeitragDi, März 03, 2020 12:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Cooles Projekt!

Mir persönlich erschließt sich noch nicht direkt der Nutzen von Angular beim Programmieren einer Engine wie dieser.
Asynchronität kann man ja mit RxJS ohne Angular gut nutzen.

Hast du in Erwägung gezogen, einen Parsergenerator wie Antlr zu nutzen, anstatt es selbst zu bauen?

Habe früher mal überlegt mittels LLVM nach WASM (s. Emscripten) einen B3D Compiler zu bauen aber irgendwie habe ich nach dem ersten Dreieck aufgehört. Aktuell fände ich es spannend Blazor dafür zu verwenden. Laughing

Schöne Grüße
Tim
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31
hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht.

feider

ehemals "Decelion"

BeitragFr, Apr 10, 2020 17:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Yee, gib Bbescheid, sobald das ein bisschen läuft. Ich hätte Lust, da Kram auszuprobieren Very Happy

BB im Browser ist so absolut absurd, das muss gut sein.
Fortuna favet fortibus
Website und Blog!
 

bonajkukoj

BeitragMi, Mai 20, 2020 21:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, ich finde deine Idee großartig und bewundere deine Langzeit-Motivation, weiter so!

Ich bin zwar bei weitem kein erfahrener Coder aber ich bin gerne beim Testen/Ausprobieren dabei.

Viel Erfolg weiterhin

Neue Antwort erstellen


Übersicht Sonstiges Projekte

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group