On that note, I would like to mention, how elegant I find Guile's port system. You know, the whole "write to port to write to a file", "write to a string port" (for example when you want to avoid building many temporary in-between strings), "reading from ports", etc..
I've not seen something like this in other languages yet. Not sure how much of it is Scheme standards, but I like it. It composes quite well, at least on the surface, when you write procedures. You can always accept an optional or keyword argument, which is the port and then leave the choice of what that port is to the caller. It seems more elegant than a file handle or a location of a file or something like that in some other programming languages, where I wanted something similar. At the beginning it was a little confusing to me, as I had not the understanding of what a port is in Guile (and perhaps my understanding is still superficial, but at least working), but now I enjoy it. On 12/28/20 7:48 AM, Dr. Arne Babenhauserheide wrote: > Hi Ludo, > > that’s pretty cool! Thank you! > > Looking at the readme I get the feeling that two little helpers could be > useful: > > (call-with-zstd-output-file "compressed.zstd" > (lambda (port) > (define data > ;; Read the input file in memory. > (call-with-input-file "input-file.txt" > get-bytevector-all)) > > ;; Write data to PORT. > (put-bytevector port data))) > > (call-with-zstd-input-file "compressed.zst" > (lambda (port) > ;; Read decompressed data from PORT. > ...)) > > Potentially with streaming added (if that’s possible from the library): > > (call-with-zstd-output-file "compressed.zstd" > (lambda (outport) > (call-with-input-file "input-file.txt" > (lambda (inport) > (let loop ((data (get-bytevector-some inport))) > (when (not (eof-object? data)) > (put-bytevector outport data) > (loop (get-bytevector-some inport)))))))) > > Also maybe a minimal representation of the commandline-interface: > > (zstd-compress "input-file.txt" #:output "compressed.zst") > (zstd-decompress "compressed.zstd" #:output "cleartext-file.zst") > > Best wishes, > Arne > > Ludovic Courtès <l...@gnu.org> writes: > >> Ludovic Courtès <l...@gnu.org> skribis: >> >>> I’m pleased to announce the first release of Guile-zstd: >> Oops, a file was missing from the repo, so here’s a brand new release! >> >> git clone https://notabug.org/guile-zstd/guile-zstd >> cd guile-zstd >> git checkout v0.1.1 # or f853c8eb81088f8fbf33d38e62cddea9a4984180 >> git tag -v v0.1.1 >> >> Ludo’. > -- repositories: https://notabug.org/ZelphirKaltstahl