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

Neue Antwort erstellen


Übersicht Sonstiges Projekte

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group