rpn/Changelog.md
2022-02-25 16:03:44 +01:00

3 KiB

Changelog

  • Better parser (now called lexer)
  • Use of mpreal instead of raw mpfr for calc on reals
  • Use of C++ complex class
  • Removing old memory management, efficient but poorly maintainable
  • Enhanced code quality and memory usage checks
  • Added CircleCI checks: passing functional tests and valgrind mem checks at each pull request
  • SonarCloud integration, Sonar way profile
  • clang-format now based on google style
  • google c++ style guide applied
    • c++17
    • define guard
    • name and order of inclusions
    • static and global variables
      • common patterns (ex: no static maps or vectors)
    • classes (explicit)
    • naming:
      • file names (.cc .h), types (PascalCase), variables (snake_case), members (trailing _), static const (camelCase begining with k), enum (enum class, values like static const
      • consistent comments (//), class comments, functions comments
    • cpplint used with a CPPLINT.cfg removing some warnings
  • Test files are now markdown (.md) files, tests result are slightly changed
  • Delivery as flatpak and snap
  • error string are slightly different, althought error codes are still the same

New

  • « and » are now valid as program delimiters. << and >> are still valid
  • entering the sign after the base (ex: 0x-1e2) is allowed
  • rpn is delivered as flatpak and snap packages to be compatible with a maximum of Linux distribs. rpm and deb are no longer generated

Compatibility is broken on these points

  • << << input doesn't lead to ««»» but to «<< », preventing to eval the real program content
  • 1 2+ not allowed anymore, keep 1 2 +, this corrects bad behaviors like 3b114 pushing 3b11 and 4
  • complexes are written in the form (1,2) instead of (1, 2) (space is removed)
  • removed useless unti, repea, whil (prev.existing for HP28S compatibility)
  • removed sqr function, please use sq instead (prev.existing for HP28S compatibility)
  • the binary prefix is always 0b on display, but still can be 0b, 0B, 2b or 2B at input
  • the hex prefix is always 0x on display, but still can be 0x, 0X or 16B at input
  • mant and xpon now give binary (and not decimal) significand and exponent, as it is the norm in standard libs (libC, standard C++, mpfr, gmp)
  • dupn, roll, rolld are not leaving anymore their argument in front of the stack in case of error
  • sto+ sto- sto* sto/ don't accept anymore the syntax 'varname' value stoX, but only value 'varname' stoX, ex: 3 'a' sto*
  • incomplete entry (1, is not available anymore
  • signed zero is the sign of zero is subject to change compared to previous version, for example -3 sqrt now equals (0.000000,1.732051) instead of (-0.000000,1.732051)
  • removed CtrlC for interrupting a program (considered useless)

Debug

  • sub now only accepts boundaries between 1 and the string length
  • sto/ behavior: sto/ now correctly stores variable / constant and not constant / variable
  • cosh now returns the hyp cosinus instead of the hyp sinus (!)