This page is part of the web mail archives of SRFI 47 from before July 7th, 2015. The new archives for SRFI 47 contain all messages, not just those from before July 7th, 2015.
The new SRFI is deliberately incompatible with a prior SRFI, and one that is implemented in multiple Scheme systems. It does not provide a rationale for why we need an incompatible SRFI. It says it provides a "richer set of features" than SRFI-25, but it does not explain why it would be impossible or inferior to instead extend SRFI-25. It also says the new SRFI has "more compatibility with Common-Lisp" but surely that is secondary compared to compatibility with existing Scheme implementations.
An alternative (implemented in Kawa) is to allow the base array of SRFI-24's share-array to be a uniform vector:
(share-array (f64vector 1.0 2.0 3.0 4.0 5.0 6.0) (shape 0 2 0 3) (lambda (i j) (+ (* 2 i) j)))This is may admittedly be a bit tedious, but we can provide an alternative make-array that takes a "prototype" of some kind. A simple and general prototype mechanism that does not require us to define "types" and "prototypes" (but does not proclude a future SRFI that does that) is to use procedures. I.e.
(make-array shape [object [prototype]])where 'prototype' is a 2-argument procedure that creates a vector, using it's first argument as the length and the second as the value.
The default for the prototype is make-vector. So (make-array (shape 0 2 0 3) 99 make-s32vector) is equivalent to: (share-array (make-s32vector 6 99) (shape 0 2 0 3) (lambda (i j) (+ (* 2 i) j))) If we later define "type specifiers" in a new SRFI, we can extend this: (make-array (shape 0 2 0 3) 99 <sint32>) ;; or whatever -- --Per Bothner per@xxxxxxxxxxx http://per.bothner.com/