Pyroclast 1.1 (objektorientierter PureBasic Precompiler)

Anwendungen, Tools, Userlibs und anderes nützliches.
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Pyroclast 1.1 (objektorientierter PureBasic Precompiler)

Beitrag von Lambda »

Ein modularer und hybrider Precompiler der PureBasic als eine objektorientierte Sprache erweitert. Auch weitere Sprachen/Zielplatformen durch Module möglich. Es ist Teil eines größeren Frameworks, welches eine Skript-Komponente namens Sapphire enthält. Die Sprache (Bytecode-Interpreter) ist stark an dem C#/Java Standard orientiert, weshalb es sich bei der Sprache um eine hybride Erweiterung von Sapphire mit Basic handelt.
  • Bessere Wiederverwendbarkeit von Code
    Verbesserte Codeverwaltung bei größeren Projekten
    Neutraler Quellcode, welcher zusätzlich unabhängig von Änderungen im nativen Code ist
    Cache Management für schnelle Verarbeitung


Sprachfeatures
  • Native Features der Zielsprache
    Encapsulation
    Polymorphism
    Dynamische Objekte
    Vererbung
    Anonyme Objekte (z.b Lambda Funktionen)
    Attribute
    Module wie Funktionen, Strukturen, Klassen, Namensräume
    Prototypen um "im Kontext von" zu agieren
    Vereinheitlichte Deklarationen (z.B immer "map" anstatt "Map" und "NewMap")
    Management für Abhängigkeiten


Beispielcode

Code: Alles auswählen

include "libraries/math.spp";
use "libraries/ogre.spp";


/*
   Ogre
   
   Simple example using Ogre with classes
*/

InitEngine3D();
InitSprite();

InitKeyboard();

OpenWindow(0, 0, 0, 800, 400, "Ogre", PB_Window_SystemMenu);
OpenWindowedScreen(WindowID(0), 0, 0, 800, 400);



ogre\asset map resource;

resource["cube"].id = CreateCube(-1, 40);



class actor : ogre\model {
   
   abstract void function control() {}
}

class player : actor {

   public override void function control() {
      if (KeyboardPushed(PB_Key_Left)) {
         this.translate(1, 0, 0);
      }
      
      if (KeyboardPushed(PB_Key_Right)) {
         this.translate(-1, 0, 0);
      }
      
      if (KeyboardPushed(PB_Key_Up)) {
         this.translate(0, 0, 1);
      }
      
      if (KeyboardPushed(PB_Key_Down)) {
         this.translate(0, 0, -1);
      }
   }
}


/* Test scene */

camera = new ogre\camera(100, 100, 100);
camera.translate(100, 100, 100);
camera.lookAt(0, 0, 0);


light = new ogre\light(0, 100, 0, rgb(255, 255, 255));


test = new player(resource["cube"]);


forever {
   
   if (ExamineKeyboard()) {
      test.control();
      
      camera.lookTo(test);
   }
   
   
   FlipBuffers();
   RenderWorld();
   
   Delay(10);
   
   switch WindowEvent() {
      case PB_Event_CloseWindow:
      
      End;
   }
}


Kompilieren

Es gibt bereits eine frühe Alpha, allerdings sind hier einige Features noch nicht implementiert, bzw. können Fehler auch zum Absturz führen, da das Feedback System erst noch etwas ausgebaut wird. Aktuell entsteht auch eine kleine IDE auf Basis von node-webkit, daher können momentan erzeugte Projekte nur manuell weiter kompiliert werden. Derzeit empfehle ich Notepad++ und gewählter Sprache C#.

Zuerst in "package.json" die Pfade jeweils zur PureBasic Installation anpassen. Ein Sapphire Skript (*.spp) auf "pyroclast.exe" droppen, wenn es fehlerfrei kompiliert werden konnte wurde das Projekt unter "build" angelegt. Die darin liegende "index.pb" kann in der PureBasic IDE dann weiter kompiliert werden.