Truly unifying R6RS and R7RS
Daphne Preston-Kendal
(04 Oct 2022 18:22 UTC)
|
||
Re: Truly unifying R6RS and R7RS Marc Nieper-Wißkirchen (04 Oct 2022 19:16 UTC)
|
||
Re: Truly unifying R6RS and R7RS
John Cowan
(06 Oct 2022 20:30 UTC)
|
||
Re: Truly unifying R6RS and R7RS
Marc Nieper-Wißkirchen
(06 Oct 2022 21:11 UTC)
|
||
Re: Truly unifying R6RS and R7RS
John Cowan
(07 Oct 2022 01:33 UTC)
|
||
Re: Truly unifying R6RS and R7RS
Marc Nieper-Wißkirchen
(07 Oct 2022 08:20 UTC)
|
||
Re: Truly unifying R6RS and R7RS
Arthur A. Gleckler
(07 Oct 2022 18:22 UTC)
|
||
Re: Truly unifying R6RS and R7RS
John Cowan
(07 Oct 2022 22:02 UTC)
|
||
Re: Truly unifying R6RS and R7RS
Marc Nieper-Wißkirchen
(08 Oct 2022 10:37 UTC)
|
||
Re: Truly unifying R6RS and R7RS
José Bollo
(27 Oct 2022 07:30 UTC)
|
||
Re: Truly unifying R6RS and R7RS
Marc Nieper-Wißkirchen
(27 Oct 2022 08:00 UTC)
|
||
Re: Truly unifying R6RS and R7RS
José Bollo
(01 Nov 2022 14:22 UTC)
|
||
Re: Truly unifying R6RS and R7RS
Marc Nieper-Wißkirchen
(01 Nov 2022 14:34 UTC)
|
||
Re: Truly unifying R6RS and R7RS
José Bollo
(03 Nov 2022 08:42 UTC)
|
||
(missing)
|
||
Fwd: Truly unifying R6RS and R7RS
Marc Nieper-Wißkirchen
(03 Nov 2022 13:18 UTC)
|
||
Re: Truly unifying R6RS and R7RS
José Bollo
(26 Nov 2022 10:02 UTC)
|
||
Re: Truly unifying R6RS and R7RS
Marc Nieper-Wißkirchen
(26 Nov 2022 17:26 UTC)
|
Am Di., 4. Okt. 2022 um 20:22 Uhr schrieb Daphne Preston-Kendal <xxxxxx@nonceword.org>: > > Glad to see this has made it to SRFI stage. > > As I said elsewhere while this was still in pre-SRFI state, although I strongly dislike the magic generation of identifiers and thus generally dislike R6RS define-record-type syntax, I would vote for this (with the changes below, especially the latter ones) as a resolution to the conflict between the R6RS and R7RS camps on the record type issue. The "magic generation of identifiers" has both advantages and disadvantages. The obvious disadvantage is that it makes it harder to use grep (at least as long as you are not accustomed to searching for record-type definitions). On the other hand, a significant advantage is that record-type definitions can be as concise as in `(define-record-type point (fields x y))`. As one can always write out all introduced identifiers - as in `(define-record-type (point make-point point?) (fields (immutable x point-x) (immutable y point-y))` -, I think the current state of affairs is fine for everyone. > However, I still maintain that we should abandon or deprecate the idea of the record constructor descriptor, i.e. the (default) record constructor descriptor should be rolled into the record type descriptor together and bound to the name given by the ⟨name spec⟩/⟨name⟩. The whole idea of the record constructor descriptor is over-engineering – if I want a custom constructor with default values or whatever, I write a simple wrapper procedure. If a constructor in the sense of R6RS were no more than a simple wrapper procedure, I would see your point, but it isn't. The proper constructor procedure enters in inheritance when records of a child type are constructed. You don't get this abstraction with wrapper procedures. In any case, if one doesn't need this abstraction in one's code, one doesn't have to use this feature, meaning the protocol clause in record types. (On the other hand, a record constructor descriptor won't appear in most code bases (even if they employ custom constructors) because the use of the procedural interface does not make sense for the vast majority of applications.) > This also means it would be possible to define a subtype of a record type in the SRFI 99 style, which I believe is essential. If we’re going to have opaque, sealed, and nongenerative records (which I don’t like, but can live with again for the sake of peace with the R6RS camp, if it will bring it), the R7RS style syntax should also be extended with a way to create those. If we’re going to support both styles, neither should be a second class citizen in terms of feature set. As for opaque, sealed, and non-generative records, I gave reasons in the SRFI why they can be essential in applications. Again, if you think you don't need these attributes, you don't have to use them. As it is well-known, the problem with the SRFI 99 syntax is that it is incompatible with the small language's interpretation of record field names as (hygienic) identifiers (which is a sensible interpretation for a language like R7RS-small that only has syntax-rules). I am willing to add syntax to add features to the second syntax of `define-record-type` described in this SRFI if you can come up with straight-forward syntax, that does not clash with the existing syntax, and that can work with record field names as (hygienic) identifiers. I have been unsuccessful so far, partly because the SRFI 9 syntax, which the small language adopted, is very inflexible and hard to extend. It does its job well for a record-type facility without inheritance as in SRFI 9 and R7RS-small, but doesn't offer a clear way to add extensions. Marc PS Some of the discussion above is slightly off-topic for this SRFI, whose purpose is to provide a syntax that encompasses both the R6RS and the R7RS record-type facility. Removing bits of one or the other facility would thus be against the spirit or idea of this SRFI.