I have finally released
v0.2.1 of my project
qemantra. This release removed a lot of code, made it cleaner.
Things I have learned while developing this release.
How to build a sexy website for any project. Using
mdbook, I made a website inspired from WezTerm, mostly it’s homepage. I tried to include a visual element (Picture or GIF) to improve user engagement and understanding.
How not to complicate
argument parsing. When using
flaggy, I used to have a separate struct for each subcommand, over the structs I had for actually running the program. With this, I eliminated flaggy and brought the good’ol
flagpackage. I also tried to eliminate almost all other
structs. Now I have a single struct for the entire project. This simplifies things a lot.
Things I could have improved
Testing: Even though I don’t write a single line of code without testing, refactoring made lot of the tests not-passing. Causing my CI/CD (
Github Actions) to fail on every commit. I would have to re-write these tests.
Website deployment: Currently deploying the
qemantrawebsite is a chore. I need to build, archive, transfer to my server (Using sftp) and then unarchive and restart my reverse proxy. This is a lot of work and I would have to improve the workflow by a large margin. This is my plan over the next few days.
Better planning: This release was a little mess, the website had a lot of references to the
v0.0.1release, I had to do a little cleanup for the few days after the release. Next time I can have a ready changelog and beautiful CI/CD pipelines to make the process easier.
Try it here
This is my Lisp implementation inspired from
bash. I finally built a hand-written recursive descent parser.
My last implementation
boombash had no actual parser. It had a very rude implementation and had no actual AST creation.
With the current implementation I have finally created a proper AST. I have also started the
evaluator work. It can evaluate strings, numbers and other simple objects.
Ideas I have for this project
Write a compiler: Once I have a working interpreter, I can have convert it into a working compiler. I am learning this while writing a VM based compiler
uranus( My implementation for
Writing a Interpreter/Compiler in Go.).
Writing a transpiler: As
b#is inspired from Bash and aims to replace bash scripts, transpiling to Bash script sounds like a good idea! With this evaluation shifts to the much better bash implementation.
Adding a macro system
Writing a Interpreter in Gohas a secret chapter called
Writing a Macro System. In keeping with this, I am also interested in making a macro system for
b#. Anyway every lisp is incomplete without a macro system!
Try it here
You can also checkout uranus and boombash
My goals for next few days/week.
- Work on publishing
groomwith a sexy website.
groom-install, bringing number of subcommands to 3.
- Maybe implement task dependency ordering using a topological sort for
- Finally complete