Releases: louisrubet/rpn
rpn v2.5
Added
- A new command
endl
, meaning end-line was added for line formatting sake. #269 - Clang compilation is now warning-free (tested with clang 14.0). #274
- Program run now optimized. Programs were parsed then linked at each run ; now the parsing and linking phases are done only once at entry time, avoiding terrible performance loss. #267
- Contrary to what was said in version 2.4, some
rpm
anddeb
packages are attached to this delivery, thanks to multi-distro-packager 🤩
Changed
- C++20 standard is used instead of C++17. This detected some warnings (now corrected). #268
Fixed
- Syntax errors (and other errors) are now shown after the stack, which is much more convenient. #273
- Warnings shown by clang and C++20 (braces initializers, some bad types, removed dangerous #pragma). #268, #274
- The linenoise-ng submodule version was well set in CMakeLists.txt but not in the submodule, which showed a permanent linenoise-ng modification in git although the version was the good one. #277
Full Changelog: v2.4.2...v2.5
rpn v2.4.2
Fixed
- Version string were not correctly shown using flatpak generation. #261
rpn v2.4.1
Added
- A welcome message has been added in interactive mode. #252
Changed
- The function
date
return format is now a string"YYY-MM-DD"
(local ISO 8601). #253 - The function
time
return format is now a string"HH:MM:SS"
(local ISO 8601). #253
Removed
- The useless function
nop
has been removed. #255 - GENERATION.md file has been removed, the generation instructions are in README.md.
- The useless file TODO.md has been removed.
Fixed
- The function
ticks
now returns correctly the current date in µs. #254
rpn v2.4
rpn v2.4 is a major delivery as it holds a big code refactoring, mainly for maintainance reasons.
Despite significant changes to the code as well as some compatibility losses with version 2.3.2, the major version of the software has not changed, as no major new features have been added.
Here is the extract of the newly added CHANGELOG.md
about this version.
Added
- Better parser (in fact just a lexer, because that's all it takes).
- Use of mpreal instead of raw mpfr for calc on reals.
- Use of the standard C++ complex class.
- Enhanced code quality and memory usage checks.
- Added github actions to pass functional tests and valgrind mem checks at each pull request.
- Applied google c++ style guide
- points covered are very numerous: c++17, define guard, name and order of inclusions, static and global variables, common patterns, classes, naming conventions etc.
- cpplint used with a CPPLINT.cfg removing some warnings.
- clang-format is now based on google style.
- Test files are now markdown (.md) files, tests result are slightly changed.
- Delived as flatpak, not as rpm and deb anymore.
- Automatic version string from git.
- hex and bin numbers accept floating point input and C99 standard output.
«
and»
are now valid as program delimiters.<<
and>>
are still valid.- Entering the sign after the base (ex: 0x-1e2) is allowed.
Changed
Be carefull, compatibility is broken on these points compared to last version 2.3.2:
<< <<
input doesn't lead to««»»
but to«<< »
, preventing to eval the real program content.- Making an operation stick to the previous entry is not possible anymore (ex:
1 2+
instead of1 2 +
), this corrects bad behaviors like3b114
pushing3b11
and4
. - Complexes are written in the form
(1,2)
instead of(1, 2)
(space is removed). - The binary prefix is always
0b
on display, but the input can be0b
,0B
,2b
or2B
. - The hex prefix is always
0x
on display, but the input still can be0x
,0X
or16B
at input. mant
andxpon
now give binary (and not decimal) significand and exponent, as it is the norm in the 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 onlyvalue 'varname' stoX
, ex:3 'a' sto*
.- Incomplete entry
(1,
is not available anymore.
Removed
- Removed useless
unti
,repea
,whil
(prev. existing for HP28S compatibility). - Removed
sqr
function, please usesq
instead (prev. existing for HP28S compatibility). - Removed CtrlC for interrupting a program (considered useless).
- Removed old memory management, efficient but poorly maintainable.
- Removed man page generation.
Fixed
sub
now only accepts boundaries between 1 and the string length.sto/
behavior: sto/ now correctly stores variable divided by constant and not constant divided by variable.cosh
now returns the hyp cosinus instead of the hyp sinus.
rpn v2.3.2
rpn v2.3.2 corrects some bugs of v2.3.1
- numbers as loop variables: could wrongly exclude boundaries: #112
- negating a hex number causes a crash: #201
It also add some commands which were planned in v2.3 but were forgotten
- stack depth is no more marked on each line if rpn is used with arguments: #209
- Ctrl-C with text already entered should only clear this text and go back to prompt: #146
- New REAL commands expm and lnp1: #192
- New commands: date, time, ticks: #8
- Multiline editing: #147, #154
A quite big code refactoring has also be done: #210, #211, #212, #213, #214
Implemented milestones are Delivery v2.3.2, Enhancements for v2.3.2, Non compliance and debug for v2.3.2 and New commands TIME
A complete test report is provided here: #216
rpn v2.3.1
rpn v2.3
rpn v2.3 provides a lot of new functionalities
-
arbitrary bases and reals display
- user can enter a number in an arbitrary base between
2
and62
, ex4b123220
- the new command
base
displays reals with arbitrary base, ex4 base
- the new command
bin
displays a number in base 2, ex0b1100101
- the command
hex
displays reals in a more convenient way, ex0xdeadbeefcafe
- and last, command
prec
now auto-calculates the number of decimal digits matching to the precision bits
- user can enter a number in an arbitrary base between
-
commands history
- commands history is saved in the file $HOME/.rpn_history and has a max of 100 lines
- the new command
history
is added
-
a (very light) man page is added in deb, rpm and tgz packages
-
all commands are now case insensitive
-
these LOG, TRIG and TEST commands now apply to complexes too
ln
log
exp
log2
alog2
log10
alog10
sinh
asinh
cosh
acosh
tanh
atanh
sin
cos
tan
asin
acos
atan
!=
==
same
-
the commands
sqrt
,^
(aliaspower
) apply to negative reals -
the command
log
disappeared in v2.2 is re-introduced as an alias ofln
-
del
command is now an alias oferase
to match HP48 syntax -
a bug occuring on long outputs has been fixed
rpn is now dynamically linked to mpfr and gmp which are installed in main linux distributions
Implemented github milestones are Enhancements for v2.3, Commands history, Non compliance and debug for v2.3, Delivery v2.3
A complete test report is provided here: #163
rpn v2.2
rpn v2.2 main functionality is complex numbers with
- entries like
rpn> (1,-2.33)
- and keywords
+
-
*
/
re
im
abs
arg
conj
chs
neg
inv
sign
sq
sqr
sqrt
^
r->c
c->r
r->p
p->r
Some evolutions
type
keyword now- consumes stack level 1
- returns a string result and not a symbol anymore
- former
log
keyword is renamed aslog10
ln
log10
log2
keywords now accept negative reals as argumentsip
fp
floor
ceil
keywords are added- Ctrl-C is caught to go out a running program
Some bug corrections
- Ctrl-C is caught to go out rpn (regression)
Implemented github milestones are New REAL keywords for v2.2, New object COMPLEX, Enhancements for v2.2, Non compliance and debug for v2.2, Delivery v2.2
A complete test report is provided here: #136
rpn v2.1
rpn v2.1 provides a lot of new keywords
- New STORE keywords: sto+, sto-, sto*, sto/, sneg, sinv
- New REAL keywords: fact, minr, maxr, sign, mant, xpon, ip, fp, floor, ceil, min, max
- New STRING keywords: chr, num, pos, sub, size, +
- New TEST keywords: >, >=, <, <=, ==, same, != for strings
- New MEMORY keyword: clusr
- New BRANCH keywords: iferr, ift, ifte, do, until, while, repeat
rpn now uses CMake for its generation and is provided as RPM, DEB and TGZ packages
A complete test report is provided here: #121
rpn v2.0
This major release
- now uses GNU-MPFR (Multiple Precision Floating-point computations) for arbitrary precision calcs
- adds a bunch of new keywords:
- general: type
- stack: roll, rolld, over, dupn, dropn
- real: chs, prec, round (associated to MPFR), abs, log2, alog2 and aliases exp2, exp10, pow, sqr
- makes programs correctly inherit from parent programs variables
- implements stack allocations more efficiently, even very large
- removes binary type and binary functions 'r->b' and 'b->r'
- removes useless keyword 'verbose'
Now under LGPL v3