Releases: sneha-afk/KeplerKV
v1.1
v1.0
version 1.0
Exciting, this will mark version 1.0 of KeplerKV! I'm proud of the codebase I've created thus far and hope to add more features to the project. Some of my aspirations are listed in the planning doc.
changelog
Full Changelog: v0.4.0-alpha...v1.0
- Added new commands for data manipulation:
INCR
andDECR
for integer types,APPEND
andPREPEND
for list types - Added a new
STATS
command with some basic statistics - Bug fix for
RESOLVE
: not going down identifiers that reference lists (thus not detecting some circular references) - Revamped the layout of the manual doc
v0.4.0-alpha: Testing
Full Changelog: v0.3.0-alpha...v0.4.0-alpha
changelog
- Introduced testing through a system of simple input and output files: see the
tests
directory - Easy to expand test input cases, just add the corresponding
_out
file to theoutputs
directory - New command:
RENAME
for renaming keys, confirms with user if an overwrite of an existing key is possible
v0.3.0-alpha : Save states
Full Changelog: v0.2.0-alpha...v0.3.0-alpha
changes
- Introduced saving and loading from
.kep
files denoted as being a valid save file. - File saves currently in the same directory the executable is contained in
- New commands:
SAVE
,LOAD
,CLEAR
for clearing the terminal screen - Extra: a
Makefile
at the top of the repo
v0.2.0-alpha: recursive definitions
Full Changelog: v0.1.0-alpha...v0.2.0-alpha
changes
- Recursive keys are now supported, with the feature of catching circular references. Comprehensive coverage of this is covered in the manual
- New commands:
LIST
,RESOLVE
- Moved error messages to a header file, removed
static const std::runtime_error
and opted for macro strings instead - Bugs associated with multidimensional lists were fixed in the parser
- Program exits are handled through
main.cpp
when prompted byhandler.cpp
Baseline reached for KeplerKV
pre-release: v0.1.0-alpha
current features
The current form of the project has reached the baseline requirements I set to do.
- Basic user CLI setup for five basic commands: quit, set, get, delete, and update
- Volatile storage of some basic types: integers, floats, strings, and lists (including multi-dimensional)
- Validation of user input during parsing
challenges
By far the most difficult part of getting the project running was understanding the parsing. The tokenization of user input was straightforward, but I had to restructure the format of my abstract syntax nodes continuously as I stumbled across errors with recursive definitions (for lists) and overcomplexity in the evaluator stage when dealing with values. For now, I settled on a basic model where nodes are either commands or values for commands.
next steps
The next steps for the project include:
- Ideally, finding an easier definition for ValueNode and StoreValue that would reduce redundancy and added overhead
- Lazy evaluation of identifiers whose values are set to other identifiers
- Serialization so data can be non-volatile and persist