Hi

In the context of my "algorithm and data structures" course, I have recently 
developed (in R6RS) an educational implementation of the following "stack" of 
external algorithms&data structures:

- virtual disks : an implementation of "read-block" and "write-block" 
        on top of R6RS sequential files,
        by positioning the current of a file to a given byte number and 
reading/writing the number of bytes (in a byte vector) representing a disk block
- on top of this I have developed an educational file system by linking up 
blocks
        - in a freelist to allocate and deallocate blocks
        - in a sequence to form a primitive educational directory
- I have implemented sequential files by linking up blocks
        - read takes a scheme value, converts it to bytes and encodes the bytes 
in the disk blocks
        - write does the opposite
- I have implemented balanced multiway merge sort + polyphase sort on top of 
these sequential files. The goal was to show students the number of block 
transfers for external sorting.
- I have implemented SQL-styled data files as double linked lists of disk 
blocks storing tuples + I have implemented B+-trees as index files. The trees 
consist of nodes that are raw disk blocks of the first abstraction
- Finally, I have implemented a "mini SQL" that supports (create-table…) 
(create-index…) (select/eq? …) (delete-where!…) (insert-into-table! …) using 
these abstractions

I have written a draft of a textbook covering the implementation (in English). 
It was my intention to publish it after a few iterations.


Now the questions:

My entire implementation-stack is based on:
        (a) the ability to read and write a byte vector from/to a sequential 
file/port in Scheme.
        (b) the ability to position the current of a port to a given byte 
number (and subsequently read/write a byte vector at that position).
        (c) the ability to encode / decode integers, floats and strings in a 
byte vector.

I had a look at the R7RS report. 
        - I cannot find (b)
        - I understood that (c) has been removed to the big language.

Is (b) a conscious decision? Same question for (c) : to me, byte vectors are 
pretty useless if you don't have a minimal amount of comfort for 
encoding/decoding data types. And, given the fact that you no longer support 
this comfort, is there sufficient support to break down/ build up Scheme data 
types (integers, float,…) into / from raw bytes ? I.e., can I convert an 
integer or a float to a byte vector? I only see string->utf8 and utf8->string. 
However, converting a string to a byte vector is not the same as encoding a 
string in an existing byte vector. 



Regards

Wolf
_______________________________________________
Scheme-reports mailing list
[email protected]
http://lists.scheme-reports.org/cgi-bin/mailman/listinfo/scheme-reports

Reply via email to