Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

R7RS

Name: Anonymous 2011-04-18 7:12

First draft of R7RS small language

http://trac.sacrideo.us/wg/attachment/wiki/WikiStart/r7rs-draft-1.pdf

List of changes:

* Modules have been added as a new program structure to improve
  encapsulation and sharing of code. Some existing and new
  identifiers have been factored out into separate modules.

* Exceptions can now be signalled explicitly with raise,
  raise-continuable or error, and can be handled with
  with-exception-handler and the guard syntax.

* New disjoint types supporting access to multiple fields can be
  generated with define-record-type.

* Parameter objects can be created with make-parameter, and
  dynamically rebound with parameterize.

* Blobs, homogeneous vectors of integers in the range [0..255],
  have been added as a new disjoint type.

* Ports can now be designated as binary or character ports, with
  new procedures for reading and writing binary data.

* String ports have been added as a way to write characters to
  and read characters from strings.

* Current-input-port and current-output-port are now parameter
  objects, along with the newly introduced current-error-port.

* Syntax-rules now recognizes as a wildcard, allows the ellipsis
  symbol to be specified explicitly instead of the default ...,
  allows template escapes with an ellipsis-prefixed list, and
  allows tail patterns to follow an ellipsis pattern.

* Syntax-error has been added as a way to signal immediate and
  more informative errors when a form is expanded.

* Internal define-syntax forms are now allowed preceding any
  internal defines.

* Letrec* has been added, and internal define specified in terms
  of it.

* Case now supports a => syntax analagous to cond.

* Case-lambda has been added to the base library as a way to
  dispatch on the number of arguments passed to a procedure.

* Positive and negative infinity and a NaN object have been added
  to the numeric tower as inexact values with the written
  representations +inf.0, -inf.0 and +nan.0, respectively.

* Map and for-each are now required to terminate on the shortest
  list when inputs have different length.

* Member and assoc now take an optional third argument for the
  equality predicate to use.

* Exact-integer? and exact-integer-sqrt have been added.

* Make-list, copy-list, list-set!, string-map, string-for-each,
  string->vector, copy-vector, vector-map, vector-for-each, and
  vector->string have been added to round out the sequence
  operations.

* The set of characters used is required to be consistent with
  the latest Unicode standard only in so far as the
  implementation supports Unicode.

* string-ni=? and related procedures have been added to compare
  strings as though they had gone through an
  implementation-defined normalization, without exposing the
  normalization.

* The case-folding behavior of the reader can now be explicitly
  controlled, with no folding as the default.

* The reader now recognizes the new comment syntax #; to skip the
  next datum, and allows nested block comments with #| ... |#.

* Data prefixed with reader labels #<n>= can be referenced with
  #<n># allowing for reading and writing of data with shared
  structure.

* Strings and symbols now allow mnemonic and numeric escape
  sequences, and the list of named characters has been extended.

* File-exists? and delete-file are available in the (scheme file)
  module.

* An interface to the system environment and command line is
  available in the (scheme process-context) module.

* Procedures for accessing the current time are available in
  the (scheme time) module.

* A complete set of integer division operators is available in
  the (scheme division) module.

* Transcript-on and transcript-off have been removed.

Thank you!

Name: Anonymous 2011-04-18 7:17

So, the module system still has a static syntax? Didn't they learn anything from the R6RS failure?

Name: Anonymous 2011-04-18 8:47

>>2
Static syntax is the least common denominator, like syntax-rules.

The R6RS failure wasn't because of its static library syntax, but because it added loads of new features badly and wasn't compatible with R5RS.

Name: Anonymous 2011-04-18 8:53

>>3
I'm not saying it was THE reaspm why R6RS failed, but the static library syntax sucked giant mandingo balls.

But, oh well, the large R7RS must extend the module system anyway, if they want low-level macros.

Name: Anonymous 2011-04-18 8:54

>>4
s/p/o/

Name: Anonymous 2011-04-18 8:58

Blobs?

Name: Anonymous 2011-04-18 9:17

>>6
<jcowan> There will be things that upset you, but it would be very useful for us if you complained about them.
<jcowan> In particular, the word "blob" appears as a deliberate lightning rod.
<foof> The charter asks us to be compatible in as much as makes sense with the R6RS, and in R6RS they're called "bytevector"s
<cky> Right, but does sticking with bytevector make sense?
<Riastradh> Well, `bytevector' is a silly word, but `byte vector', `octet vector', `u8vector', and `blob' are all reasonable.
<jcowan> And the storm is on, the lightning flashes, all the other changes slip by under the radar!

Name: Anonymous 2011-04-18 9:54

>>6-7
Let me guess, it's like CL's equivalent for a buffer type? '(vector (unsigned-byte 8))

To exemplify:

CL-USER> (deftype blob (&optional size) `(vector (unsigned-byte 8) ,size))
BLOB
CL-USER> (coerce #(1 2 3) 'blob)
#(1 2 3)
CL-USER> (type-of *)
(SIMPLE-ARRAY (UNSIGNED-BYTE 8) (3))

Most modern implementations would store simple vectors made of 8bit-sized unsigned integers as a buffer (raw memory) on most modern architectures. The difference here is that while Common Lisp was designed with portability in mind and multiple architectures in mind (some who might not have 8 bit bytes), they decided to give the user to easily define any such types and implementations themselves can optimize for them. In some exotic architecture, a CL implementation may have very different buffers and yet still be properly optimized without introducing hacks into the language spec, while if such a Scheme spec does come to pass, a needless architecture-specific hack (albeit, a very common arch) would be introduced into the spec.

Name: Anonymous 2011-04-18 10:07

>>8
Bytevectors.

Name: Anonymous 2011-04-18 12:31

Working implementation: http://code.google.com/p/chibi-scheme/

Name: Anonymous 2011-04-18 14:00

>>8
(some who might not have 8 bit bytes)
Meh.

Name: Anonymous 2011-04-18 15:47

NVVVVVVV\
\        \
<         `ヽ、
</ /"" \ .ノヽ. \
 //, '〆     \ \ ヽ
〃 {_{   ─   。─ │i| 
レ!小§  (●)  (●) .| イ      < R7RS? More like ERR6RS
 レ §    (__人__)  |ノ      
/     ∩ノ ⊃ 。/l
(  \ / _ノ  |. |
.\ “∞∞/__ノ  |
  \。/____ノ

Name: Anonymous 2011-04-19 5:27

R7RS big language will be better than Common Lisp. Infa 100%.

Name: Anonymous 2011-04-19 5:34

I'll start using R7RS right after I switch to IPv7.

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List