[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: wrapping procedures



 | From: Matthew Flatt <mflatt@xxxxxxxxxxx>
 | Date: Fri, 2 Dec 2005 21:58:24 -0700
 | 
 | At Fri,  2 Dec 2005 14:43:25 -0500 (EST), Aubrey Jaffer wrote:
 | > Does SRFI-83 allow some way for a module to import, wrap, then
 | > export an identifier?
 | 
 | Yes - renaming (either on import, export, or both) supports this
 | kind of wrapping.  The only question is whether the exported name
 | can be imported elsewhere without further renaming.
 | 
 | > Does SRFI-83 allow redefinition and export of R5RS procedures?
 | 
 | Yes, as above.  However, no SRFI-83 library would be able to import
 | the names without prefixing them or renaming, since every SRFI-83
 | library imports "scheme://r6rs".

There are four language extensions in SLIB which redefine builtin R4RS
procedures:

  "array.scm"	equal?

Even if no other procedures are affected, the introduction of a new
type will often require changes to `equal?'.

  "cring.scm"	+, *, /, -, zero?

  "dynwind.scm"	call-with-current-continuation

Because R5RS includes `dynamic-wind', this isn't a problem in
practice.

  "record.scm"	vector?, vector-ref?, vector-set!, vector->list,
		vector-fill!, display, write

If R6RS includes the record datatype, then this won't be an issue.

I find five SRFIs which redefine builtin syntax:

  srfi-5	let
  srfi-17	set!
  srfi-46	syntax-rules
  srfi-61	cond
  srfi-71	let, let*, letrec

 | If we manage to at least agree on libraries that are all in the
 | "scheme://r6rs" (e.g., this SRFI), then we may eventually be able
 | to agree on ways to portably define new languages --- where a new
 | language could provide alternate bindings for names exported by
 | "scheme://r6rs".  This SRFI, meanwhile, doesn't support it.
 | 
 | I forgot the simpler possibility, which is that we define
 | additional pre-defined languages, including one that only binds
 | `import', `export', and `indirect-export'.  This seems likely to
 | me.

So module extension of the language would be disallowed; one must
create a new language for each extension, whether its procedures can
be made R6RS backward-compatible or not!  That would mean that
extended languages could not be combined without defining a
combination language.

I think that for practical purposes, R6RS would then have reserved
identifiers; namely the builtin procedures and syntax.

If that is the case, and given that "no reserved identifiers"
motivated much of the macro system, this change should be explicitly
stated.