Skip to content

Releases: bitdotgames/BHL

v3.0.0-alpha60

27 Jan 16:20

Choose a tag to compare

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

24 Dec 11:21

Choose a tag to compare

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

19 Dec 15:24

Choose a tag to compare

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

17 Dec 05:36

Choose a tag to compare

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

14 Dec 16:06

Choose a tag to compare

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.

image

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

14 Dec 16:14

Choose a tag to compare

Improvements

  • @lenchez-ch Support for multiple AST postprocessors in a resulting dll

v2.0.2

26 Nov 07:45

Choose a tag to compare

Bugfixes

  • Fixing staleness check for Windows in bhl.bat script

v2.0.0

01 Nov 16:17

Choose a tag to compare

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

04 Sep 10:56

Choose a tag to compare

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 foreach block

New Contributors

v2.0.0-beta209

30 Apr 07:43

Choose a tag to compare

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))
      }