Hi Miguel,

and welcome to the Chicken community! Your project looks very thourogh and
the Scheme code looks good.

There are a couple of issues related to building that I thought I'd point
out.

Like Felix points out, load and load-relative open files at runtime. So sdb
fails when run outside of its repo directory because of these:

> make
> ./sdb -h
> cd ~
~> ~/opt/simple_db/sdb
Error: (load) cannot open file: "./db-utils.scm"

====

In the same manner, the help-file is opened and read at runtime here:
https://github.com/MigAP/simple_db/blob/main/cli.scm#L31. This results in a
similar problem when sdb is used outside its repo directory:

> ~/opt/simple_db/sdb -h
Error: (open-input-file) cannot open file - No such file or directory:
"./cli-interface.txt"

In Scheme, the ordinary string syntax can have multiple lines. So if you
wanted to, you could wrap the content of cli-interface.txt in double-qoutes
and embed it directly into your sources. That'll eliminate these kinds of
runtime issues. You could also use include or read cli-interface.txt at
compile time using define-syntax or let-syntax.

====

There are also egg dependencies in use which don't seem to be mentioned
anywhere. Without these, I get this error message.

> ./sdb -h
Error: (import) during expansion of (import ...) - cannot import from
undefined module: list-utils.basic

I'm guessing I need to install list-utils, but that olso fails because of
transitive dependencies. So I need to run `chicken-install check-errors`,
then `chicken-install list-utils`. Then another `chicken-install
gnuplot-pipe`.

Manual dependency management like quickly gets out of hand. You can use
egg-files, which you've probably come across. Here's a bare minimum to get
dependencies and transitive dependencies installed:

~/o/simple_db (main)> cat sdb.egg
((dependencies list-utils gnuplot-pipe))
~/o/simple_db (main)> chicken-install
...
building gnuplot-pipe
installing gnuplot-pipe
building sdb
installing sdb

chicken-install runs for the current directory if nothing is specified, so
it picks up sdb.egg. I often use egg files even for small toy project that
I don't tend to release because of this, amongst other things. You can also
use egg files to install programs like sdb if you wish.

If you run chicken-install with -test, it'll run test/run.scm, where you
can put your unit tests. This is all chicken-specific stuff, other Schemes
do it their way. A Makefile like you have is a pretty global mechanism so
it has its advantages.

===
I hope none of this is discouraging! Looking forward to seeing what else
you produce.

Hoppy holidays,
K.


On Fri, Mar 22, 2024, 19:54 <felix.winkelm...@bevuta.com> wrote:

> > Hello everyone!
> >
> > My name is Miguel, and I am interested in developing in Chicken Scheme.
> >
> > I just created a toy project to put in practice what I have been
> > learning in the Little Schemer and SICP books, you can find it here:
> >
> > https://github.com/MigAP/simple_db
> >
> > It is a simple database to store urls. I am not a developer, so I would
> > appreciate any feedback from you. In particular, it is the first time I
> > write unit tests, and I am not sure if this is the correct way of
> doing-it.
> >
> > I thank you in advance for any feedback. I am looking forward to start
> > building stuff using Chicken Scheme!
> >
> > I wish you all a good day.
>
> Hi!
>
> Your code looks good to me. I haven't examined it in detail, but
> the overall impression is fine. Also, the unit-tests seem to be similar
> to what I've seen in other code by more experienced Schemers.
>
> Note that you compile your program but load additional files via
> "load-relative". This technically works, but if you want all code to
> be compiled, I recommend to use "include" instead: that way,
> the parts are inserted into your main program and fully compiled,
> which is of course more efficient and also makes it easier to
> move the compiled program around or call it from a different
> location.
>
> > PS: Is there any small/medium project that I could study to learn the
> > "good practices" for Chicken Scheme? One of my goals is to use Chicken
> > Scheme for scientific computing and embedded applications.
>
> The egg sources are usually good examples for how to structure
> libraries. Some of these have example programs that you might
> want to study. Also, you can look at
>
>         http://wiki.call-cc.org/Software
>
> which lists a couple of larger projects that use CHICKEN.
>
>
> cheers,
> felix
>
>
>

Reply via email to