Skip to content

Releases: dibyendumajumdar/ravi

Ravi (a Lua 5.3 dialect) Alpha Release 0.16 with LLVM and libgccjit JIT compilation support

17 Jul 12:03
Compare
Choose a tag to compare

The principal changes in this release are:

  • Lua 5.3.3 changes have been merged.
  • An initial version of a Visual Studio Code debugger extension was created. The extension is available in the Visual Studio Code extension marketplace. You can debug standalone Ravi/Lua 5.3 scripts using this extension. This is still work in progress but the basics are working.
  • Ravi has been tested against LLVM 3.8 and 3.7. LLVM versions 3.6 and 3.5 should still work but has not been tested.

Build Info

  • On Windows this release was tested against LLVM 3.8.1 in 32-bit mode. The Windows 64-bit builds have known issues as stated below.
  • On Linux the build was tested against LLVM 3.7.0 and libgccjit 5.2.
  • On Mac OSX the build was tested against LLVM 3.8.0.

Known Issues

Please refer to the logged issues for known problems. In particular on Windows platforms the 64-bit JIT code does not handle longjmp/setjmp reliably due to limitations in LLVM 64-bit code generation on Windows. For details please refer to issue #30. As a workaround I am supplying 32-bit binaries for the Windows platform until the issue is resolved.

The 32-bit build on Windows fails to correctly perform bitwise operations when statically typed local variables are used (issue #74).

Please also refer to the Ravi documentation for a list of known differences between JIT mode and interpreted mode, and compatibility with Lua 5.3.

Ravi (a Lua 5.3 dialect) Alpha Release 0.15 with LLVM and libgccjit JIT compilation support

20 Mar 22:53
Compare
Choose a tag to compare

The principal changes in this release are:

  • The changes in 0.14 to allow all Lua functions in a table to be added to a single LLVM module had introduced a bug - the LLVM module was not being destroyed in some cases leading to leaked memory. Thanks to ASAN this was caught while testing.
  • Recently found Lua 5.3.2 bug fixes (as discussed on Lua mailing list) have been applied.
  • Ravi has been updated to work with LLVM 3.8. In this release LLVM 3.7 and 3.8 were tested; 3.6 and 3.5 should still work but has not been tested.

Build Info

  • On Windows this release was tested against LLVM 3.7.1, and LLVM 3.8 in 64-bit and 32-bit mode. The Windows builds have known issues as stated below.
  • On Linux the build was tested against LLVM 3.7.0 and libgccjit 5.2.
  • On Mac OSX the build was tested against LLVM 3.8.0.

Known Issues

Please refer to the logged issues for known problems. In particular on Windows platforms the 64-bit JIT code does not handle longjmp/setjmp reliably due to limitations in LLVM 64-bit code generation on Windows. For details please refer to issue #30. As a workaround I am supplying 32-bit binaries for the Windows platform until the issue is resolved.

The 32-bit build on Windows fails to correctly perform bitwise operations when statically typed local variables are used (issue #74).

Please also refer to the Ravi documentation for a list of known differences between JIT mode and interpreted mode, and compatibility with Lua 5.3.

Ravi (a Lua 5.3 dialect) Alpha Release 0.14 with LLVM and libgccjit JIT compilation support

16 Feb 23:17
Compare
Choose a tag to compare

The principal changes in this release are:

  • The on request JIT compilation has been enhanced to accept a table; when a table of Lua functions is supplied, the generated code is put into the same LLVM Module (translation unit) rather than separate modules for each function. Each function maintains a reference to the LLVM module via a reference counted pointer - so when the last function is garbage collected the module will be released. This approach should result in less memory usage and also opens the door for other optimizations within the module.
  • The Lua 5.3.2 bug fixes have been applied.

Build Info

  • On Windows this release was tested against LLVM 3.7.1, in 64-bit and 32-bit mode. The Windows builds have known issues as stated below.
  • On Linux the build was tested against LLVM 3.7.0 and libgccjit 5.2.
  • On Mac OSX the build was tested against LLVM 3.7.0.

Known Issues

Please refer to the logged issues for known problems. In particular on Windows platforms the 64-bit JIT code does not handle longjmp/setjmp reliably due to limitations in LLVM 64-bit code generation on Windows. For details please refer to issue #30. As a workaround I am supplying 32-bit binaries for the Windows platform until the issue is resolved.

The 32-bit build on Windows fails to correctly perform bitwise operations when statically typed local variables are used (issue #74).

Please also refer to the Ravi documentation for a list of known differences between JIT mode and interpreted mode, and compatibility with Lua 5.3.

Ravi (a Lua 5.3 dialect) Alpha Release 0.13 with LLVM and libgccjit JIT compilation support

01 Jan 02:44
Compare
Choose a tag to compare

The principal change in this release is the addition of type assertion operators to the language. A type assertion operator behaves like a unary operator. It is introduced by the '@' symbol, after which a supported type must be given followed by the expression whose type is being asserted. The result of the expression then becomes of the asserted type. Example:

  local t = { 1,2,3 }
  local i: integer = @integer( t[1] )

Without the type assertion operator @integer above the compiler would not allow the assignment of t[1] to the variable i.

The type assertion operators do nothing if an expression is already known to be of the required type. If the variable is not known to be of the required type then special bytecodes are generated that perform run-time checks on the expression's type; an error is thrown if the type check fails.

Build Info

  • On Windows this release was tested against LLVM 3.7.1, in 64-bit and 32-bit mode. The Windows builds have known issues as stated below.
  • On Linux the build was tested against LLVM 3.7.0 and libgccjit 5.2.
  • On Mac OSX the build was tested against LLVM 3.7.0.

Known Issues

Please refer to the logged issues for known problems. In particular on Windows platforms the 64-bit JIT code does not handle longjmp/setjmp reliably due to limitations in LLVM 64-bit code generation on Windows. For details please refer to issue #30. As a workaround I am supplying 32-bit binaries for the Windows platform until the issue is resolved.

The 32-bit build on Windows fails to correctly perform bitwise operations when statically typed local variables are used (issue #74).

Please also refer to the Ravi documentation for a list of known differences between JIT mode and interpreted mode, and compatibility with Lua 5.3.

Ravi (a Lua 5.3 dialect) Alpha Release 0.12 with LLVM and libgccjit JIT compilation support

04 Dec 23:06
Compare
Choose a tag to compare

In this release there are following changes:

  • Lua 5.3.2 updates have been merged

  • It is now possible to annotate local variables and function parameters as 'table' type. This helps the compiler generate specialized bytecodes when the key is known to be an integer or a string literal. As a result the JIT code generator is able to generate more efficient code. There are no benchmarks as yet to assess the performance improvements.

    A bug related to metamethods (issue #73) was fixed in this release

  • A bug in api for creating slices was fixed (issue #75).

  • The name of the executable was changed to 'ravi' (issue #69).

  • The libraries are now installed in 'lib' folder (issue #68).

  • The headers are now installed in 'include/ravi' folder to avoid conflicts with Lua headers (issue #66)

Build Info

  • On Windows this release was tested against LLVM 3.7.0, in 64-bit and 32-bit mode. The Windows builds have known issues as stated below.
  • On Linux the build was tested against LLVM 3.7.0 and libgccjit 5.2.
  • On Mac OSX the build was tested against LLVM 3.7.0.

Known Issues

Please refer to the logged issues for known problems. In particular on Windows platforms the 64-bit JIT code does not handle longjmp/setjmp reliably due to limitations in LLVM 64-bit code generation on Windows. For details please refer to issue #30. As a workaround I am supplying 32-bit binaries for the Windows platform until the issue is resolved.

The 32-bit build on Windows fails to correctly perform bitwise operations when statically typed local variables are used (issue #74).

Please also refer to the Ravi documentation for a list of known differences between JIT mode and interpreted mode, and compatibility with Lua 5.3.

Ravi (a Lua 5.3 dialect) Alpha Release 0.11 with LLVM and libgccjit JIT compilation support

15 Nov 00:57
Compare
Choose a tag to compare

In this release there are following changes:

  • It is now possible to annotate local variables and function parameters as 'table' type. This helps the compiler generate specialized bytecodes when the key is known to be an integer or a string literal. As a result the JIT code generator is able to generate more efficient code. There are no benchmarks as yet to assess the performance improvements.

    NOTE: A bug has been found in the implementation - metamethods will not be invoked (issue #73)

  • Locals that are declared as 'table', 'integer[]' or 'number[]' must now be initialized; uninitialized locals were causing segmentation faults in the JITed code as the JIT compiler does not generate null checks.

  • A bug related to type checking of assignments was fixed.

  • A null JIT implementation was added - this is now the default build option. That is, by default the JIT compiler is not built; to enable the JIT compiler you have to explicitly supply -DLLVM_JIT=ON or -DGCC_JIT=ON options to cmake.

  • As LLVM generated code in 64-bit Windows still cannot handle longjmps properly, fixes were implemented to allow generation of 32-bit binaries; performance of the 32-binary is degraded compared to 64-bit.

Build Info

  • On Windows this release was tested against LLVM 3.7.0, in 64-bit and 32-bit mode. The 64-bit build has known issues as stated below.
  • On Linux the build was tested against LLVM 3.7.0 and libgccjit 5.2.
  • On Mac OSX the build was tested against LLVM 3.7.0.

Known Issues

Please refer to the logged issues for known problems. In particular on Windows platforms the 64-bit JIT code does not handle longjmp/setjmp reliably due to limitations in LLVM 64-bit code generation on Windows. For details please refer to issue #30. As a workaround I am supplying 32-bit binaries for the Windows platform until the issue is resolved.

Please also refer to the Ravi documentation for a list of known differences between JIT mode and interpreted mode, and compatibility with Lua 5.3.

Ravi Alpha Release 0.10 - 64-bit with LLVM and libgccjit support

25 Oct 23:45
Compare
Choose a tag to compare

In this release there are following changes:

  • A bug in type analysis of boolean operators was fixed
  • A bug in metamethod invocation in JIT mode for IDIV operator was fixed
  • Support for updating savedpc added in LLVM JIT implementation - this means that error messages now show better stack trace, and the debug api works mostly (but see below).

API changes

  • New API ravi.tracehook(boolean) provided; default is false. If this is set to true then in JIT mode at every bytecode instruction the 'savedpc' will be set, and also line hooks enabled. If not set then 'savedpc' is only set at function calls. See issue #15 for details.
  • The debug API is now more functional thanks to changes above. debug.setlocal() performs type checks when updating local variables - this is experimental. debug.setupvalue() however doesn't and therefore should not be used on upvalues that are typed.

Build Info

  • On Windows this release was tested against the latest LLVM 3.7.0.
  • On Linux the build was tested against LLVM 3.7.0 and libgccjit 5.2.
  • On Mac OSX I tested against LLVM 3.7.0.

Known Issues

Please refer to the logged issues for known problems. In particular on Windows platforms the JIT code does not handle longjmp/setjmp reliably due to limitations in LLVM 64-bit code generation on Windows. For details please refer to issue 30 for details.

Other than this please also refer to the Ravi documentation for a list of known differences between JIT mode and interpreted mode, and compatibility with Lua 5.3.

Ravi Alpha Release 0.9 - 64-bit with LLVM and libgccjit support

06 Sep 09:43
Compare
Choose a tag to compare

In this release there are following changes:

Build Info

  • On Windows this release was tested against the latest LLVM 3.7.0.
  • On Linux the build was tested against LLVM 3.7.0 and libgccjit 5.2.
  • On Mac OSX I tested against LLVM 3.7.0.

Known Issues

Please refer to the logged issues for known problems. In particular on Windows platforms the JIT code does not handle longjmp/setjmp reliably due to limitations in LLVM code generation. For details please refer to issue 30 for details.

Other than this please also refer to the Ravi documentation for a list of known differences between JIT mode and interpreted mode, and compatibility with Lua 5.3.

Ravi Alpha Release 0.8 - 64-bit with LLVM and libgccjit support

09 Aug 13:15
Compare
Choose a tag to compare

In this release there are following changes:

  • Important bug fixes
  • Performance improvements for JITed code in comparison operations and bit-wise operations when types are known
  • The addition of a 'omitArrayGetRangeCheck' flag to switch array bounds checking off when reading array elements - this flag should only be used when the code is known to be correct.

Build Info

  • On Windows this release was tested against the latest LLVM release_37 branch snapshot taken on 9th August 2015.
  • On Linux the build was tested against LLVM 3.6.1 and libgccjit 5.2.
  • On Mac OSX I tested against LLVM 3.6.0.
  • No testing was done against LLVM 3.5.x.

Known Issues

Please refer to the logged issues for known problems. In particular on Windows platforms the JIT code does not handle longjmp/setjmp reliably due to limitations in LLVM code generation. For details please refer to issue 30 (#30) for details.

Other than this please also refer to the Ravi documentation for a list of known differences between JIT mode and interpreted mode, and compatibility with Lua 5.3.

Ravi Alpha Release 0.7 - Windows and Ubuntu 64-bit w/LLVM

11 Jul 13:15
Compare
Choose a tag to compare

In this release following changes are implemented:

  • Lua 5.3.1 has been merged
  • Function parameters can now be decorated with static types. Refer to documentation for details.
  • Bit-wise operations may be JIT compiled for a subset of scenarios.
  • Bug fixes

Build Info

  • On Windows this release was built against the latest LLVM snapshot as of 11th July.
  • On Linux the build was against LLVM 3.6.1
  • On Mac OSX I tested against LLVM 3.6.0.
  • No testing was done against LLVM 3.5.x.
  • Since tagging the release I found a memory bug - so I have updated the binaries on 12-July