
LMDB – First version of Redis written in Tcl - weeber
https://gist.github.com/antirez/6ca04dd191bdb82aad9fb241013e88a8
======
dunkelheit
This is really inspiring. Reminds me of the quote "A complex system that works
is invariably found to have evolved from a simple system that worked."

The interesting question of course is how to evolve a simple system into a
successful complex system. One thing that seems important is nailing the right
architecture early on - the simple system must contain all the right ideas in
it and it is important to weed out bad ideas before they are entrenched in the
code base. Still, planning the long-term evolution of a software system
remains an arcane art to me. "Listen to your users and do what is necessary at
the moment" is too simplistic.

~~~
ben_jones
On the contrary I don't think you can plan architectural perfection from the
beginning. IMO you have to throw it in a prod-like environment early
(preferably as an internal app with a minimal SLO) so that you can iterate
early and often.

~~~
dunkelheit
That's what I talked about in the last sentence of my post. It is important to
do this, but it is not the whole story. How do you decide _in which direction_
to iterate?

~~~
ben_jones
Make it feature-driven. When Facebook came out they didn't know photo sharing
would be a definitive feature. When they put it out there they took a slug to
the shoulder for not realizing it sooner and then implemented relevant
features (like tagging).

Similarly when Redis came out I doubt the creator realized everybody and their
grandmother would use lists as a defacto message queue but now look at all the
commands list has that facilitate just that.

Key point is to accept and welcome that slug to the shoulder that _pushes_ you
in the right direction, to abuse the metaphor.

~~~
wand3r
Iirc Zuckerberg allowed profile pics but realized people kept changing them
all the time so they implemented photos

------
user5994461
This naming is so confusing.

For those not aware, LMDB is the memory mapped database that's powering
OpenLDAP. [https://symas.com/lightning-memory-mapped-
database/](https://symas.com/lightning-memory-mapped-database/)

~~~
nurettin
LMDB is one of the backends that you can choose. BDB is more common in my
experience.
[http://www.openldap.org/doc/admin24/backends.html](http://www.openldap.org/doc/admin24/backends.html)

------
unwttng
As someone who worked for a company for a few years on a vast Tcl codebase, a
company in which almost every engineer lamented the fact that they were
working in an unused and unknown language, it warms my heart to see that it
was used for this.

~~~
stevekemp
Antirez has long-been a TCL fan, as you can see by his piece here:

[http://antirez.com/articoli/tclmisunderstood.html](http://antirez.com/articoli/tclmisunderstood.html)

I dabbled with it myself, writing a simple TCL interpreter in C, but I always
find myself comparing it to FORTH a language I still find it easy to love.

------
js2
antirez mentions that this forks to save, but I'm not seeing that. The
backgroundsave procedure makes a copy of db to dbcopy, but then never saves
dbcopy. I wonder how much further the TCL implementation was extended before
antirez switched to C.

BTW, I hadn't heard of LLOOGG (the L in LMDB) before. It was this:

"LLOGG was web service I (Salvatore Sanfilippo) and my co-founder Fabio
Pitrola ran for seven years for free."

[https://github.com/antirez/lloogg/blob/master/README.md](https://github.com/antirez/lloogg/blob/master/README.md)

~~~
tyingq
Looks like the intention was there, they pull in TclX with a comment about it.

[https://gist.github.com/antirez/6ca04dd191bdb82aad9fb241013e...](https://gist.github.com/antirez/6ca04dd191bdb82aad9fb241013e88a8#file-
lmdb-tcl-L17)

Guessing he just found some interim version that wasn't the one he actually
wanted to post.

~~~
antirez
You are right, the intention was that but now I'm reminding that, in the
middle of doing it, I thought, ok I reached the limits of the Tcl prototype,
let's rewrite in C.

------
SonOfLilit
If you enjoyed reading this, you might enjoy reading git's first self-hosted
commit:
[https://github.com/git/git/commit/e83c5163316f89bfbde7d9ab23...](https://github.com/git/git/commit/e83c5163316f89bfbde7d9ab23ca2e25604af290)

------
KasianFranks
Nice to see Tcl used here.

