Skip to content

v0.2.2 - Optimisations and stabilisation

Pre-release
Pre-release
Compare
Choose a tag to compare
@c3d c3d released this 07 Jul 06:47
· 2305 commits to stable since this release

Bugs fixed since v0.2.1:

  • Fixed the while loop
    The test for the while loop was inverted
    The location of the end and repeat keywords was swapped

  • Fixed bug in detection of multiplication overflow
    The computation of the factorial of 23 and up is now correct.

  • Fixed bug mistakenly converting some fractions to integers
    For example, 2/17 INV would return 17 instead of 17/2

  • Add spacing to large numbers
    A number that did not fit on 64-bit would not respect spacing settings

  • Repaired the test suite
    Tests were setting-dependent, and would fail with default settings because
    they did not take number spacing into account.

Features implemented since v0.2.1:

  • Implemented local variables, e.g. << -> A B C << A B - C * >> >>
    Local variables are a very fast way to reference data. Internally, they are
    represented by an offset to a known location, which makes them practically as
    fast as stack accesses, and much faster than global variable lookups.

  • Implement the same function
    The same function detects if two objects are identical.
    Like the HP48, there are multiple "equality" variants:

    • same detects if two objects are binary-identical
    • == does the same, but dereference names
    • = is a mathematical equality (does not exist in HP48 RPL)
  • Add feature to import ASCII versions of «, » and
    In .48S files, you can use <<, >> and -> instead.

  • Implement →List (stack to list)
    This was the last missing command to be able to execute the
    HP calculator's N-queens benchmark

  • Better truncation of very large numbers when shown on stack
    A very large number, like the factorial of 64, would show up truncated
    at 80 digits, so the first digits shown were wrong.

  • Various optimizations to make things a bit snappier, notably on battery power

    • Refactored the object model to use a simpler lookup mechanism

    • Implemented a C++ interface for arithmetic and functions, which will be
      useful when implementing complex number and matrix operations, and already
      simplified the code for operations such as abs or cubed.

    • Sime fine-tuning of LEB128 handling for types

    • Execution time for NQueens measured, reduced from about 980ms down
      to about 530ms.

Full Changelog: v0.2.1...v0.2.2