Gauche Devlog

< Two-argument reverse | Gc update >


Action items for 0.9.3

I wish I could write solid articles explaining upcoming features one by one, but if I wait for having enough time to do so, it's not likely to happen in near future. So I just write this down as a casual memorandum.

There are three features I definitely want to put in; the first two are already coded and working, but lack documentation (and it is often the case that I find better ideas and/or flaws while writing the docs, so in a sense they're just half way through.) The third one is working on Linux but needs some more work to make sure it work on other platforms:

  • Generators: gauche.generator module provides generic operations on generators, a thunk that yields a value at a time. For example, read-char works as a generator (if we call it without arguments). We can have operations like filter, take, drop, append, zip, etc. on those generators. The places where generators themselves are useful may be limited, but they are basis of the lazy sequence, described next.
  • Lazy sequence: Yes, Gauche now have a lazy list. From the Scheme code, it just look like an ordinary list, but the list's cdr is calculated as needed. It's different from, which provides a disjoint type for lazy streams. That is, you can use car/cdr and all other list operations on lazy sequences. In fact, it responds #t to pair?, so you cannot distinguish ordinary lists and lazy sequence.
  • TLS/SSL support: In tls branch we have native TLS support working on Linux, using axTLS (thanks to Kirill Zorin). We no longer need to rely on external stunnel process.

Then, here's a list of features I did some work, but not sure 0.9.3 have full of it.

  • List library reorganization: I'm tired writing (use srfi-1) in every Gauche code I write. There are already some srfi-1 procedures moved into core, for they are required by the compiler. Until 0.8.3 or so, we needed to keep the set of built-in procedures small, since they needed to be written in C. However, it's been quite some time that we can precompile Scheme procedures and link to, so there's not much reason we need to have useful list procedures into a separate library. I'm moving most srfi-1 list procedures into core (probably I keep list-as-set operations in srfi-1). I'll also revise util.list, for it is just confusing to have a bunch of list libraries.
  • PEG parser. It was originally written by Rui Ueyama several years ago, and I heavily modified it to run faster on Gauche. However, I didn't like the way it is optimized---it's ugly. The code has been already in Gauche distribution for some time, and actually rfc.json is written on top of it, but I refrained from making PEG API official. Now, with the lazy sequence support and some advanced optimizations in the compiler, I'm revisiting the PEG parser to make it simple yet efficient. In my local branch it is working, but the performance isn't satisfying. It looks like I have to work more on the compiler to optimize it. 0.9.3 will likely to contain this new code, but I'm not sure I make it official or not.

... and there are plenty of other ideas sitting on the shelf. I started to write them down but it got pretty long so I just keep them for the next time.

Tags: 0.9.3, srfi-1, LazySequence, peg

Post a comment