Hello everyone.
I am pleased to announce that the sequel to Blitz Virtual Machine, now named "BriskVM", is entering its final beta test phase.
So what is BriskVM 2 ?
It is a powerfull and easy to integrate scripting system. It currently supports BlitzMax as the host language, but support for other languages is planned.
It is available for Windows, Mac and Linux.
Some of its most noticeable features and/or enhancements since version 1 are:
>> Easy integration.
Integrating BriskVM into your application is rather easy. Indeed, BriskVM's approach to integration is very declarative: you list in a file (the "command set" file) everything that is to be shared between the scripts and the host application , being functions, types or global variables. From this file, the necessary glue code is generated for you. Your task when integrating BriskVM is reduced to the very minimum, and you'll get back to code the creative part very fast.
And not only will it generate everything that is needed to let scripts access the host application, but the reverse is true also : special declarations will generate the needed code
to easily let the host application call any script function (as well as manipulating script objects). No more manual push or pop, it's now all transparent.
>> Eased debugging.
BriskVM makes script debugging easier by including a runtime debugger. You'll be able to pop up a debugger window at any time, and step into your script code like you're probably used to for your "normal" code. The source code of the debugger's GUI is freely modifiable, so that you can pretty easily tailor it to your needs, or even adapt it to use your favorite gui library.
From your code, you can also get the current script stack trace at any time for debugging purpose.
Finally, you can in a few lines of code integrate a debugging console that allows to enter instructions interactively (from within the application).
>> Many optional extensions to the core script language.
The core script language of BriskVM is (just like in the previous version) BlitzBasic itself.
On top of this core language, a set of extensions is available. These extensions give your scripts a lot more power, and make some tedious tasks become trivial. You'll find:
* Object Oriented Programming : take advantage of inheritance and polymorphism.
* Serialization : write and read your objects in just one line of code.
* Reflection : lookup at runtime which types are present, which are their fields, access them etc. Among other things, this gives you all you need to write a *generic* in game editor (that lets the user create new objects and edit them). That is, no need to modify your editor every time you write a new class in some script.
* Annotations : attach meta data - in the form of strings - to your classes and fields, and read them at runtime via the reflection API.
* Function pointers
* Scoping : specify access restrictions to your object's members (Public, Friendly, Protected and Private)
* Alternative syntax : use an alternative BlitzMax-like syntax, more natural to most programmers.
* Option Explicit : force explicit variable declaration and let the compiler catch typo errors.
* Garbage collector : objects manipulated by the scripts are tracked by a garbage collector. It means memory managing and object's life time in scripts are gracefully handled for you.
Nonetheless, you can still manage an object's life time manually, if it happens it better fits your need.
These 2 policies nicely live together without interfering, in a straight forward way: types deriving from Collectable (directly or indirectly) are entirely handled by the garbage collector, otherwise their instances have to be explicitely deleted.
* Handy syntactic sugar:
o Type inference on variable declaration:
Simply write "Local myVar? = New MySuperDuperType" instead of the too verbose "Local myVar:MySuperDuperType = New MySuperDuperType"
o Properties: transparently use getters and setters as if you were accessing a true type field.
Never write again
obj.setLocation(obj.getLocation() + obj.getSpeed())
Just write
obj.location = obj.location + obj.speed
You're still using getters and setters, but transparently, without the kludge.
o For EachIn : iterate over any collection without having to bother with loop indexes or iterators. Just do "For myVar = EachIn myList ..."
In accordance with BriskVM's aim of customizability, most of these extensions are optional and can be enabled or disabled depending on your specific needs.
As a side note, you'll also find that arrays handling is a bit more powerful than in the original BlitzBasic language, as you can now have multidimensional arrays in your types.
>> Documentation system.
If you plan to use scripts for a significant part of your application, documenting at least the base types and functions is definitely a plus. Especially if you're going to let the end-user modify and extend them. To ease the writing of this documentation, BVM includes a documentation generator similar to JavaDoc or the C# doc system. The generated document is in XML format, with a provided default style sheet to view it as HTML. Thus the documentation layout is not freezed, and you can entirely customize it.
>> Straight forward script imports
You can now import other compiled scripts in a transparent way, with a simple declaration:
Using "myModule.bbm"
>> Mix different command sets in the same execution context
It is now possible to use different command sets in the same execution context. So by example a script could import another script that uses a totally different command set.
This makes everything more flexible, and in particular allows to easily share compiled scripts with other BriskVM users : even if compiled with another command set, the
imported module can work with your very own command set provided that yours do provide the same needed functionailities.
This is made possible through the use of dynamic linking with the host application.
For more information, please visit http://www.koriolis-fx.com/
----------------------------------------------------------------------------------------------------
This beta test phase is semi public, meaning that only registered BVM 1 users may get their hands on the beta version.
Nonetheless, anyone is free to browse the online documentation, or participate on the forum. If you have suggestions, feel free.
When the beta test is over, BVM 1 registrees will get a free upgrade to BriskVM 2.
Please note that purchasing of BVM 1 is temporarily suspended.
BVM 1 registrees should have received a mail with instructions to get the beta version. For anyone who hasn't, please send me a mail with your registration information here:
koriolis <dot> fx <at> gmail dot com
I am pleased to announce that the sequel to Blitz Virtual Machine, now named "BriskVM", is entering its final beta test phase.
So what is BriskVM 2 ?
It is a powerfull and easy to integrate scripting system. It currently supports BlitzMax as the host language, but support for other languages is planned.
It is available for Windows, Mac and Linux.
Some of its most noticeable features and/or enhancements since version 1 are:
>> Easy integration.
Integrating BriskVM into your application is rather easy. Indeed, BriskVM's approach to integration is very declarative: you list in a file (the "command set" file) everything that is to be shared between the scripts and the host application , being functions, types or global variables. From this file, the necessary glue code is generated for you. Your task when integrating BriskVM is reduced to the very minimum, and you'll get back to code the creative part very fast.
And not only will it generate everything that is needed to let scripts access the host application, but the reverse is true also : special declarations will generate the needed code
to easily let the host application call any script function (as well as manipulating script objects). No more manual push or pop, it's now all transparent.
>> Eased debugging.
BriskVM makes script debugging easier by including a runtime debugger. You'll be able to pop up a debugger window at any time, and step into your script code like you're probably used to for your "normal" code. The source code of the debugger's GUI is freely modifiable, so that you can pretty easily tailor it to your needs, or even adapt it to use your favorite gui library.
From your code, you can also get the current script stack trace at any time for debugging purpose.
Finally, you can in a few lines of code integrate a debugging console that allows to enter instructions interactively (from within the application).
>> Many optional extensions to the core script language.
The core script language of BriskVM is (just like in the previous version) BlitzBasic itself.
On top of this core language, a set of extensions is available. These extensions give your scripts a lot more power, and make some tedious tasks become trivial. You'll find:
* Object Oriented Programming : take advantage of inheritance and polymorphism.
* Serialization : write and read your objects in just one line of code.
* Reflection : lookup at runtime which types are present, which are their fields, access them etc. Among other things, this gives you all you need to write a *generic* in game editor (that lets the user create new objects and edit them). That is, no need to modify your editor every time you write a new class in some script.
* Annotations : attach meta data - in the form of strings - to your classes and fields, and read them at runtime via the reflection API.
* Function pointers
* Scoping : specify access restrictions to your object's members (Public, Friendly, Protected and Private)
* Alternative syntax : use an alternative BlitzMax-like syntax, more natural to most programmers.
* Option Explicit : force explicit variable declaration and let the compiler catch typo errors.
* Garbage collector : objects manipulated by the scripts are tracked by a garbage collector. It means memory managing and object's life time in scripts are gracefully handled for you.
Nonetheless, you can still manage an object's life time manually, if it happens it better fits your need.
These 2 policies nicely live together without interfering, in a straight forward way: types deriving from Collectable (directly or indirectly) are entirely handled by the garbage collector, otherwise their instances have to be explicitely deleted.
* Handy syntactic sugar:
o Type inference on variable declaration:
Simply write "Local myVar? = New MySuperDuperType" instead of the too verbose "Local myVar:MySuperDuperType = New MySuperDuperType"
o Properties: transparently use getters and setters as if you were accessing a true type field.
Never write again
obj.setLocation(obj.getLocation() + obj.getSpeed())
Just write
obj.location = obj.location + obj.speed
You're still using getters and setters, but transparently, without the kludge.
o For EachIn : iterate over any collection without having to bother with loop indexes or iterators. Just do "For myVar = EachIn myList ..."
In accordance with BriskVM's aim of customizability, most of these extensions are optional and can be enabled or disabled depending on your specific needs.
As a side note, you'll also find that arrays handling is a bit more powerful than in the original BlitzBasic language, as you can now have multidimensional arrays in your types.
>> Documentation system.
If you plan to use scripts for a significant part of your application, documenting at least the base types and functions is definitely a plus. Especially if you're going to let the end-user modify and extend them. To ease the writing of this documentation, BVM includes a documentation generator similar to JavaDoc or the C# doc system. The generated document is in XML format, with a provided default style sheet to view it as HTML. Thus the documentation layout is not freezed, and you can entirely customize it.
>> Straight forward script imports
You can now import other compiled scripts in a transparent way, with a simple declaration:
Using "myModule.bbm"
>> Mix different command sets in the same execution context
It is now possible to use different command sets in the same execution context. So by example a script could import another script that uses a totally different command set.
This makes everything more flexible, and in particular allows to easily share compiled scripts with other BriskVM users : even if compiled with another command set, the
imported module can work with your very own command set provided that yours do provide the same needed functionailities.
This is made possible through the use of dynamic linking with the host application.
For more information, please visit http://www.koriolis-fx.com/
----------------------------------------------------------------------------------------------------
This beta test phase is semi public, meaning that only registered BVM 1 users may get their hands on the beta version.
Nonetheless, anyone is free to browse the online documentation, or participate on the forum. If you have suggestions, feel free.
When the beta test is over, BVM 1 registrees will get a free upgrade to BriskVM 2.
Please note that purchasing of BVM 1 is temporarily suspended.
BVM 1 registrees should have received a mail with instructions to get the beta version. For anyone who hasn't, please send me a mail with your registration information here:
koriolis <dot> fx <at> gmail dot com