Releases: bitdotgames/BHL
v3.0.0-alpha60
Bugfixes
- Fixing bug related to handling of captured lambda variables
Improvements
- Cleaning up duplication in .csproj files.
- Moving common build settings to the root Directory.Build.props file
v3.0.0-alpha54
New features
- Adding USE_OPCODE_SWITCH compile time constant which allows to use switch/case instead of opcode handlers
Improvements
- Decreasing initial memory usage for global variables
- Const is now a struct for better locality
Bugfixes
- Fixing default args possible out of bounds error for the last argument
- Better cleanup when unloading modules
v3.0.0-alpha48
Improvements
- Faster bits counting for default arguments
- Decreasing default memory consumption settings for ExecState
- Removing misleading FuncArgsInfo.CountRequiredArgs() method. Adding FuncArgsInfo.CountTotalArgs() which takes into account explicitly passed arguments and all enabled default arguments
- Adding ITask.Release() method and calling it once the task is removed from the task manager. It allows to release allocated task resources properly.
- Using simpler stack implementation for pools
- Making stats inspection easier for ExecStates
Bugfixes
- Fixing a bug related to an edge case when we need to shift function stack arguments for an enabled default argument
- Fixing a bug where upvalues would not be declared as refs when it's required (since they are not declared as variables explicitly)
v3.0.0-alpha36
New features
- Adding another convenience VM.Start(..) method for Fiber spawning using function pointers
Bugfixes
- Fixing a potential bug related to nested lambdas code generation
v3.0.0-alpha35
First alpha release of the 3.0 version
This is almost a complete rewrite of the 2.0 version runtime featuring massive performance improvements up to 3x times over the previous implementation. Primarily it has become possible due to more efficient memory layout of a stack and variables.
Variables are now value types allocated as raw arrays. The execution state memory now is a continuous space which also serves as a stack. There were also added some highly specialised opcodes for efficient operations with scalar values resulting in major performance gains.
In Fibonacci benchmarks BHL3 is also 3x times faster than MoonSharp Lua and it comes quite close to NLua. Considering the fact NLua calls native Lua bindings this result looks quite promising.
Since internals changed so radically bindings for 2.x are not supported and must be rewritten. On the bright side new bindings are more consistent and simpler. Compare new bindings:
var fn = new FuncSymbolNative(new Origin(), "Trace", Types.Void,
delegate(VM.ExecState exec, FuncArgsInfo args_info)
{
With the previous version:
var fn = new FuncSymbolNative(new Origin(), "Trace", Types.Void,
delegate(VM.Frame frm, ValStack stack, FuncArgsInfo args_info, ref BHS status)
{
At the same time previous userland BHL code is almost 100% compatible except for a couple of cases:
- ref is now supported only for simple variables. Passing object attribute or array member by ref is no longer supported. The following is not a valid code:
foo(ref obj.bar),foo(ref arr[0]) - It's not possible to define a default value for ref argument. This is unsupported:
func foo(ref int bar = 10) { .. }
v2.0.3
Improvements
- @lenchez-ch Support for multiple AST postprocessors in a resulting dll
v2.0.2
v2.0.0
Official stable release 2.0
After this release the main effort will be focused on the 3.x branch involving a complete rewrite of low level internals without breaking language backwards compatibility. This rewrite targets significant performance improvements (up to 3x).
An LSP implementation is also one of the top goals for the 3.0 version.
Performance improvements
- 15% performance boost by proper usage of opcode handlers and unsafe decoding of bytecode
Bugfixes
- Fixed edge case of parsing of empty arrays and array at compile time
v2.0.0-beta214
New features
- Adding support for bit shift operators, e.g:
2 >> 1,1 << 2
Improvements
- Bandaid fix for stray fibers created by init fuction by @wrenge in #32
- Avoid excessive allocs in func signature construction by @lenchez-ch in #33
- Loader less alloc by @lenchez-ch in #34
- ValMap enumerator now implements IEnumerator interface
- Improving build process: when building libraries forcing their file modification time
Bugfixes
- Adding proper missing return value check for
foreachblock
New Contributors
- @lenchez-ch made their first contribution in #33
v2.0.0-beta209
New features
- Adding support for bitwise negation operator:
~0 == -1 - Adding
std.Is(any, Type)support:
import "std"
class Foo {
}
func bool test()
{
Foo foo = {}
return std.Is(foo, typeof(Foo))
}