This site is a static rendering of the Trac instance that was used by R7RS-WG1 for its work on R7RS-small (PDF), which was ratified in 2013. For more information, see Home. For a version of this page that may be more recent, see WG1BallotMedernach in WG2's repo for R7RS-large.

WG1Ballot­Medernach

medernac
2010-06-15 01:04:34
1history
source

WG1 New Ballot Items

Notes about voting:

WG1 - Core

37 transcript-on and transcript-off

These were relegated to a compatibility library in R6RS. Do we want to keep them, drop them, or move them to a library?

38 letrec*

R6RS added letrec* and defined the semantics of internal define to be equivalent. Do we want to add this?

41 Should we adopt the SRFI-1 extension to MAP and FOR-EACH?

This extension allows the list arguments to be of unequal length, and stops the procedure whenever any of them run out. R5RS says the lists must be of the same length, R6RS says they should be.

Yes to allow unequal length.

Silently accepting lists of unequal length is error-prone, especially if argument lists are received in parameters and if we are not sure about their length, it means we need to check at every map / for-each call if lists are on the same length, really not a good idea to my opinion. If one wants a mapping function accepting unequal length lists it is easy to write its own version.

42 Should we adopt the SRFI-1 extension to ASSOC and MEMBER?

This extension accepts a third argument, the equality predicate to be used. Alternatively we could use the R6RS predicates ASSP and MEMP.

40 SRFI vs. R6RS precedence

Given equal technical merit and compatible extensibility for WG2, should WG1 prefer SRFIs or standardized behaviors from R6RS when faced with the choice. For example, a version of syntax-violation vs. syntax-error.

It is difficult to decide of a general rule. What matters mainly is what people really use and find most useful.

32 user-define types

Do we support any means of creating disjoint user-defined types, such as in SRFI-9, SRFI-99 or the R6RS record system?

33 dynamic-wind

New to R5RS, do we reaffirm the sometimes debated dynamic-wind?

34 multiple values

New to R5RS, do we reaffirm multiple values, specifically the procedures call-with-values and values?

51 support for cyclic structures in primitives

list?, length, equal? and other fundamental primitives may diverge when given cyclic data. In the former two cases, avoiding this is simple and not inefficient, and the equivalents are already provided in SRFI-1. In the latter case a proposal was made and rejected on the R6RS list.

Do we want to specify the behavior when these primitives encounter cyclic data?

54 optional arguments

Scheme's primitive mechanism of improper lambda-lists allows for optional arguments, but only with extra machinery. CL, DSSSL, and some Schemes provide a special word such as #!optional in lambda-lists, showing that the arguments which follow are optional and may have default values. SRFI-89 provides both optional and keyword arguments via lambda* and define* and without introducing #!foo special tokens.

Note the original ticket description mentions case-lambda, but this is easily provided as a separate module, and will be a separate item.

57 Simple randomness

Student programs often want a small amount of randomness, not necessarily of very high quality. Shall we provide a simple interface to a random variables in WG1 Scheme?

58 exact-integer-sqrt

Should WG1 include exact-integer-sqrt from R6RS? It allows square root operations in Schemes that don't provide inexact arithmetic, and has different semantics from sqrt, as it rounds its argument down to the nearest exact square.

59 current-error-port

Pretty much all Schemes except embedded ones provide a notion of current error distinct from current output. Should this be exposed as a Scheme output port?

60 Simple file operations

Should WG1 provide a module equivalent to the (rnrs files) module? This provides delete-file and file-exists?, which are pretty much necessities for any file-driven programming.

61 finite? nan?

Shall we add these numeric predicates?

63 call/cc short name

Should we allow call/cc as an equivalent to call-with-current-continuation?

64 Consistency in sequence procedures

Should we add the 10 procedures mentioned at CompleteSequenceCowan in order to make the Scheme sequence types consistent? They are `make-list copy-list list-set! string-map string-for-each string->vector copy-vector vector-map vector-for-each vector->string`, all with the obvious interface and semantics.

65 Precision indicators

R5RS requires that Scheme support five indicators for the precision of floating-point values, not only the default e but also s, f, d, and l. Only a few Schemes actually support more than one precision, so this is mostly noise. Shall we make it an optional feature?

66 Add EXACT-INTEGER?

Should we add an EXACT-INTEGER? predicate? Currently, to determine whether a number is both an integer and exact, we must test for both, which requires some hackery or poor pattern matching to optimize in existing Scheme implementations.

44 Testing function arity

We would like a standard for checking function arity. SRFI-102 proposes a way to check function arity:

SRFI 102 is a good start

53 Implicit BEGIN to implicit LET-NIL

In general, in places where an implict BEGIN occurs, it is possible to change this to an implicit LET-NIL and remain backwards compatible. Should we do this?

WG1 - Exceptions

17 error

Do we support the near ubiquitous SRFI-23 error procedure?

WG1 - I/O =

30 string ports

Do we support SRFI-6 string ports, reaffirmed by R6RS?

52 read/write cyclic data

SRFI-38 standardizes the #0=(1 . #0#) shared structure notation for read/write. In the case of write, this can be expensive to compute, but otherwise the common case of the repl printing a cyclic structure results in an infinite loop.

Do we want to add support for this, as an option or separate set of procedures?

About shared structures I would prefer an alternative parenthesis syntax for declaring this kind of values something like this:

(make-shared ((a 'foo) (b (1 (a b) c)) (c #(2 b))) (list a b c))

equivalent to in SRFI-38 external representation:

('foo #1=(1 ('foo #1#) #2#) #2=#(2 #1#))

The rationale behind it is to avoid wild mutations when building shared structures, and a more human readable notation.

Maybe this has to be discussed in a module for graph-like or circular data ?

WG1 - Libraries

36 hash-tables

R6RS and SRFI-69 both provide hash-table interfaces. Do we provide either of these, or try to provide some primitives on which efficient hash-tables can be implemented?

WG1 - Macros

6 syntax-rules _ and ... patterns

R6RS adds _ as a wild-card pattern, breaking some existing R5RS macros. Do we keep the _?

7 (... ...) ellipse escaping in syntax patterns

A popular extension, formalized in the R6RS, is to allow "(... <templ>)" in a syntax-rules template to be an escape for "<templ>". Do we use this, and if so what does (... <t1> <t2>) mean?

8 SRFI-46 ellipse specifier in syntax-rules

As an alternative to #7, SRFI-46 proposed allowing an optional ellipse specified as an identifier before the literals list in syntax-rules:

(syntax-rules ::: () <ellipse now represented as ::: instead of ...>)

Do we allow this?

9 tail patterns in syntax-rules

SRFI-46 and R6RS both allow a fixed number of tail patterns following an ellipsis in a syntax-rules pattern:

(P1 ... Pk Pe <ellipsis> Pm+1 ... Pn)

R6RS further allows dotted tail patterns

(P1 ... Pk Pe <ellipsis> Pm+1 ... Pn . Px)

where Px only matches a dotted list.

Do we allow either or both of these extensions?

39 syntax-error

Should we have syntax-error parallel to SRFI-23 error? This is evoked when macros are expanded.

There is a definition in JRM's Syntax-Rules Primer using syntax-rules, but it relies on the syntax-rules implementation reporting an unmatchable pattern with a complaint that includes the pattern.

5 syntax-rules

Do we keep syntax-rules in the core, relegate it to a standard module, or leave it out entirely (possibly letting WG2 specify it).

Yes to keep in core, no to remove from Scheme entirely.

10 identifier syntax

R6RS introduced identifier syntax as a way to expand identifiers in non-macro positions.

Orthogonal to the overall macro system and what types of expanders are provided, do we provide a means to specify identifier syntax?

47 internal define-syntax

R6RS extends define-syntax to be allowed in local lexical contexts. Do we allow this as well?

WG1 - Numerics

20 inexact infinities

R6RS provides support for inexact infinities and NaN objects. Do we keep these, and if so do we use the same literal syntax and arithmetic as in R6RS?

21 limited type arithmetic

R6RS provides libraries for limited type arithmetic on fixnums only and flonums only. Do we want these?

22 mantissa widths

R6RS introduced the concept of mantissa widths as an alternative to the R5RS #s in numbers. Do we want either or both of these?

WG1 - Reader Syntax

11 case-sensitivity

Does the reader fold case by default, and if so how?

Yes to fold-case (R5RS) no to preserve case (R6RS), additional votes to come later from specific proposals.

15 #\foo character names

R6RS greatly extends the list of character names, as well as allowing #\xNN numeric escapes for characters. Do we allow any or all of these names?

13 [brackets] as (parens)

R6RS allows [] brackets as identical to parenthesis, with the condition that they must balance. Do we accept this extension, propose some other use for brackets, or leave them unspecified?

14 alternate comment syntax

R6RS provides support for #; nested sexp comments, and #| ... |# nested block comments. Do we include either or both of these?

16 symbol escapes

[This ticket was originally about string escapes, but commenters have been talking about symbol escapes instead.]

R6RS provides character escapes in symbols of the form \xnnnn;, where nnnn is 1-5 hex digits. Do we accept this extension? Do we also allow |...| to escape a whole symbol or a part of one?

67 string escapes

R6RS provides character escapes in symbols of the form \xnnnn;, where nnnn is 1-5 hex digits, as well as \n, \t etc. C-like escapes for common control characters. Do we accept either or both of these extensions?

WG1 - Strings and Chars

24 char and string folding

R6RS provided operations to alter the case of strings and characters (upcase, downcase, titlecase and foldcase) using locale-independent Unicode mappings. Do we provide equivalent mappings?

26 string normalization

R6RS provides procedures to explicitly convert strings back and forth between the four Unicode normalization forms. Do we provide any sort of string normalization?

27 string-ref/set! access time

R6RS suggests string-ref and string-set! work in O(1) time, implying strings are implemented as character arrays. Do we reaffirm this?

Yes for required constant time.

23 character set

R5RS said almost nothing about character sets. R6RS specified full Unicode. Do we specify a character set, or limit the options in any way?

Working Group 1

1 Which VCS do we use?

There is the question of the right VCS to use. I prefer Monotone. Currently we are having an email vote on the list. I have entered this ticket to play with the Trac ticketing system. We can finalize the ticket once we have chosen a VCS.