BlitzBasicScript
Übersicht

![]() |
Spark FountainBetreff: BlitzBasicScript |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() ![]() ![]() ![]() ![]() ![]() 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() 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. ![]() |
||
Gewinner der MiniBCC's #11, #13 und #28 |
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 FountainBetreff: Alpha-Website released |
![]() Antworten mit Zitat ![]() |
---|---|---|
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/
![]() 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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, es gibt noch Leser ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() 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. |
feiderehemals "Decelion" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Yee, gib Bbescheid, sobald das ein bisschen läuft. Ich hätte Lust, da Kram auszuprobieren ![]() BB im Browser ist so absolut absurd, das muss gut sein. |
||
bonajkukoj |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
||
![]() |
Spark FountainBetreff: Website im neuen Gewand |
![]() Antworten mit Zitat ![]() |
---|---|---|
https://blitzbasicscript.com
EDIT: Momentan wird die Seite auf einen neuen Server umgezogen, darum werden die Inhalte eventuell nicht korrekt dargestellt. Nach intensiven Arbeiten in den letzten Wochen ist nun die BlitzBasicScript-Website in neuem Gewand online. Als Theme benutze ich nun Bulma Superhero, da es zu kompliziert wurde, alle Designs selbst zu definieren. Momentan ist der Inhalt recht überschaubar, weil alle unfertigen Features vorerst deaktiviert sind (Login, Tutorials, Dokumentation usw.). Die Online-IDE zum Code schreiben ist noch in der Entwicklung, darum kann man noch nicht aktiv eigenen Code eingeben. Es gibt aber schon einige Codebeispiele, die in den nächsten Tagen und Wochen erweitert werden und zeigen, was BBScript mittlerweile so alles kann: Arrow 2D-Grafiken und Zeichenbefehle ausführen Arrow 3D-Objekte erstellen und positionieren Arrow Sounds abspielen Arrow Mathematische Funktionen und Stringbefehle Viel Spaß beim Herumstöbern und Ausprobieren! |
||
Gewinner der MiniBCC's #11, #13 und #28 |
![]() |
Spark FountainBetreff: Interaktive Demo online |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kurz vor Jahresende ist es mir gelungen, eine rudimentäre Demoversion von BlitzBasicScript online zu bringen.
https://work-in-progress.blitzbasicscript.com Dort müsst ihr auf "Coden" klicken (direkt auf den Menüpunkt, nicht in eines der Untermenüs) und bekommt einen Text-Editor. Den geschriebenen Code könnt ihr ausführen per Klick auf das Play-Symbol in der oberen Leiste. Ihr könnt bereits erste Befehle ausprobieren, zum Beispiel Rect, Oval oder Line. Einzelne Variablen lassen sich auch mit Global setzen und abrufen. Momentan werden aber noch keine komplexen Ausdrücke verarbeitet, sondern nur einzelne Parameter (Zahlen oder Strings). Trotzdem lassen sich schon ein paar hübsche Sachen ausprobieren. Zum Beispiel könnt ihr den folgenden Code als Grundlage nehmen, ins Editor-Textfeld kopieren und auf den Play-Knopf drücken: BlitzBasic: [AUSKLAPPEN] Graphics 800, 600 Den aktuellen Projektfortschritt findet ihr übrigens in meinem Worklog: https://www.blitzforum.de/worklogs/565/ Habt einen schönen Jahresausklang und einen guten Rutsch ins neue Jahr! |
||
Gewinner der MiniBCC's #11, #13 und #28 |
![]() |
Thunder |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich kann leider kein leeres Projekt anlegen...
|
||
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit |
![]() |
Spark Fountain |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Thunder: Frohes Neues! Das stimmt, aktuell klappen die meisten Seiten noch nicht so, wie sie später mal gedacht sind. Du kannst direkt auf den "Coden"-Button klicken, der oben im Menü zu sehen ist. Dann öffnet sich der Coding-Editor. | ||
Gewinner der MiniBCC's #11, #13 und #28 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group