Changes between Initial Version and Version 1 of WG1Ballot7

11/26/12 07:42:19 (5 years ago)

archiving seventh ballot


  • WG1Ballot7

    v1 v1  
     1= Instructions = 
     3    * You may list as many of the options as you want in order of preference. 
     4    * Options are comma-delimited (ignoring space) and case-insensitive. 
     5    * You can pipe-delimit (|) options you want to give equal weight to. 
     6    * You may write in your own option if you announce it to the list first. 
     7    * You may specify a variant with option/variant, for example srfi-1/module to vote for srfi-1 but clarify it should be in a separate module. Please also include the srfi-1 option in this case. 
     8    * You can write a free-form rationale after the "preferences" line, 
     9    * module means "yes, but I want it in a separate module", 
     10    * wg2 means "no, but I think it should go in WG2". 
     11    * undecided means I want to discuss this issue further. 
     12    * Abstain on any item by leaving the preferences blank.  
     14= WG1 Ballot Items To Finalize By Sep. 18 = 
     16== WG1 - Core == 
     18=== #121 The semantics of expt for zero bases has been refined === 
     20The R5RS definition of expt is: 
     23 -- procedure: expt z1 z2 
     24     Returns Z1 raised to the power Z2.  For z_1 ~= 0 
     26                          z_1^z_2 = e^z_2 log z_1 
     28     0^z is 1 if z = 0 and 0 otherwise. 
     31however exponents with negative real parts are undefined. 
     32R6RS attempted to clarify this with: 
     35     0.0^z is 1.0 if z = 0.0, and 0.0 if (real-part z) is positive. 
     36     For other cases in which the first argument is zero, either 
     37     an error is signalled or an unspecified number is returned. 
     40(Ignore the change in exactness, which was strictly editorial 
     41and the examples clarify that the rules ignore exactness.) 
     43This is unique in all the reports of a result either 
     44signalling an error or returning a value.  The motivation 
     45for this was because R6RS consistently removed uses of the 
     46"is an error" terminology which would more naturally fit 
     47this situation. 
     49An alternative, `r5rs-error`, is to restore the "is an error" 
     50text since we are not avoiding this in R7RS: 
     53     The value of 0^z is 1 if (zero? z), 0 if (real-part z) 
     54     is positive, and an error otherwise.  Similarly for 0.0^z, 
     55     with inexact results. 
     58The `/real` variant restricts the domain for the zero 
     59base exception to the real numbers.  This is because 
     600^z^ is mathematically undefined for non-real z, and 
     61implementations do not agree on the result. 
     63  * '''Options:''' r5rs, r5rs-error, r5rs-error/real, r6rs, r6rs/real, undecided 
     64  * '''Default:''' r6rs 
     65  * '''Preferences:'''  
     67=== #472 clarify semantics of non-library library declarations === 
     69In items #91, #148 and #150 we voted to allow the 
     70use of `include`, `include-ci` and `cond-expand` 
     71at the "top-level" respectively, but there remains 
     72some confusion as to their semantics. 
     74Here "top-level" refers to repl and program body 
     75top-levels, but not library bodies. 
     77One interpretation is that these behave like library 
     78declarations, and can expand into `import` forms. 
     79In this case, for a purely static implementation of 
     80R7RS libraries, they must first be statically scanned 
     81from all top-level forms.  They cannot be used 
     82outside the top-level, and are not even available 
     83as bindings otherwise.  This is the `declaration` 
     86Another interpretation is that they are just normal 
     87macros with the obvious definitions (cond-expand 
     88in terms of the output of the `features` macro), 
     89are available in the `(scheme base)` library, and 
     90consequently can't be used to expand into `import` 
     91since imports have already been resolved.  This is 
     92the `syntax` proposal. 
     94Alternately, we could provide `both`.  If you think 
     95this is all too confusing you could also vote `remove`, 
     96to drop these extensions. 
     98  * '''Options:''' declaration, syntax, both, remove 
     99  * '''Default:'''  
     100  * '''Preferences:'''  
     102=== #473 library declaration locations in top-level === 
     104R6RS allows only a single library declaration, `import`, 
     105at the beginning of a program body, and this must 
     106contain all imported libraries. 
     108Pending the result of ticket #472 we may also allow 
     109`include(-ci)` and `cond-expand` to expand into 
     110imports, and so the single form restriction would not 
     111make sense.  However, it would be reasonable to 
     112restrict all library declarations to the beginning of 
     113a program - the first non-declaration would begin 
     114the real body.  This is the `beginning-only` option. 
     116The advantage of the `r6rs` proposal is that it would 
     117not require any changes in existing R6RS program 
     118loading implementations to support.  If the result of 
     119ticket #472 indicates multiple declaration types are 
     120available this option would automatically become 
     121invalid, so you don't need to vote against it on those 
     124The advantage of the `beginning-only` option is 
     125that it becomes possible to statically determine 
     126all program imports without expansion, which was 
     127the primary motivation of a static library system. 
     129The final alternative is `any-top-level`, which 
     130allows these forms anywhere at the top-level, 
     131possibly interspersed with definitions.  The advantage 
     132of this is that you can cut&paste repl sessions 
     133(for which interspersed imports are always allowed) 
     134as a program.  The disadvantage is that programs 
     135can no longer be resolved separately from expansion. 
     137  * '''Options:''' r6rs, beginning-only, any-top-level 
     138  * '''Default:'''  
     139  * '''Preferences:'''  
     141=== #405 Retract language requiring force to accept non-promises === 
     143#405 lumped together several issues, one of which was a requirement 
     144(as opposed to an option) to make `force` applied to a non-promise 
     145return its argument, as opposed to it being an error.  Thus, it would 
     146require `(force 2) => 2`.  However, R6RS 
     147requires `(force 2)` to signal an error, and many non-R6RS Schemes also 
     148signal an error (see ForceNonPromise for details).  These facts were not 
     149considered at the time. 
     151Vote `retain` to retain this requirement, or `retract` to retract it 
     152and leave the result of `(force 2)` implementation-dependent. 
     154  * '''Options:''' retain, retract 
     155  * '''Default:''' retain 
     156  * '''Preferences:'''