Quick vote about portable keyword argument syntax
Lassi Kortela
(01 Nov 2019 19:44 UTC)
|
Re: Quick vote about portable keyword argument syntax
Marc Feeley
(01 Nov 2019 20:12 UTC)
|
The name of "keyword-call"
Lassi Kortela
(01 Nov 2019 20:45 UTC)
|
Re: The name of "keyword-call"
Lassi Kortela
(01 Nov 2019 20:51 UTC)
|
Re: The name of "keyword-call"
John Cowan
(01 Nov 2019 20:54 UTC)
|
Re: The name of "keyword-call"
Lassi Kortela
(01 Nov 2019 20:59 UTC)
|
Re: The name of "keyword-call"
John Cowan
(01 Nov 2019 21:30 UTC)
|
lambda*
Lassi Kortela
(01 Nov 2019 21:47 UTC)
|
Re: lambda*
John Cowan
(01 Nov 2019 21:48 UTC)
|
Re: lambda*
Lassi Kortela
(01 Nov 2019 21:59 UTC)
|
curry/partial
Lassi Kortela
(01 Nov 2019 22:18 UTC)
|
Re: curry/partial
John Cowan
(01 Nov 2019 22:47 UTC)
|
Re: The name of "keyword-call"
Marc Nieper-Wißkirchen
(02 Nov 2019 16:23 UTC)
|
Re: The name of "keyword-call"
Lassi Kortela
(02 Nov 2019 23:16 UTC)
|
Re: The name of "keyword-call"
hga@xxxxxx
(01 Nov 2019 21:34 UTC)
|
Re: Quick vote about portable keyword argument syntax
Per Bothner
(01 Nov 2019 20:57 UTC)
|
Re: Quick vote about portable keyword argument syntax
Lassi Kortela
(01 Nov 2019 21:06 UTC)
|
Re: Quick vote about portable keyword argument syntax
Marc Nieper-Wißkirchen
(02 Nov 2019 16:22 UTC)
|
Re: Quick vote about portable keyword argument syntax
Marc Nieper-Wißkirchen
(02 Nov 2019 16:42 UTC)
|
Re: Quick vote about portable keyword argument syntax
John Cowan
(02 Nov 2019 16:48 UTC)
|
Re: Quick vote about portable keyword argument syntax
Marc Nieper-Wißkirchen
(02 Nov 2019 16:57 UTC)
|
Re: Quick vote about portable keyword argument syntax
Lassi Kortela
(02 Nov 2019 23:28 UTC)
|
Re: Quick vote about portable keyword argument syntax
Lassi Kortela
(02 Nov 2019 23:47 UTC)
|
Re: Quick vote about portable keyword argument syntax
John Cowan
(03 Nov 2019 02:36 UTC)
|
Re: Quick vote about portable keyword argument syntax
Marc Nieper-Wißkirchen
(03 Nov 2019 08:49 UTC)
|
Re: Quick vote about portable keyword argument syntax
Lassi Kortela
(03 Nov 2019 09:56 UTC)
|
Re: Quick vote about portable keyword argument syntax
Marc Nieper-Wißkirchen
(03 Nov 2019 10:27 UTC)
|
Re: Quick vote about portable keyword argument syntax Lassi Kortela (03 Nov 2019 11:17 UTC)
|
Re: Quick vote about portable keyword argument syntax
Marc Nieper-Wißkirchen
(03 Nov 2019 11:31 UTC)
|
Re: Quick vote about portable keyword argument syntax
Lassi Kortela
(03 Nov 2019 12:41 UTC)
|
Re: Quick vote about portable keyword argument syntax
Marc Nieper-Wißkirchen
(03 Nov 2019 15:20 UTC)
|
Re: Quick vote about portable keyword argument syntax
Lassi Kortela
(03 Nov 2019 15:40 UTC)
|
Re: Quick vote about portable keyword argument syntax
Lassi Kortela
(03 Nov 2019 15:50 UTC)
|
Re: Quick vote about portable keyword argument syntax
John Cowan
(03 Nov 2019 19:39 UTC)
|
> As soon as other SRFIs (especially SRFIs for inclusion into > R7RS-large) begin to use SRFI 177 in their external API, things will > be set into stone. > > Thus, let's be careful from the beginning. I still don't understand why the lambda/kw and call/kw syntax needs to be set in stone. As far as I can tell, it does not have to be. A keyword procedure is often defined in a different place than where it is called. That means the definition and the call can use completely different syntax, as long as those syntaxes have compatible semantics. The current 177 call/kw can call Gambit/Gauche/Kawa built-in procedures that have been defined using the native keyword syntax of those Schemes. It works just fine. This is what I want to preserve :) > No. :) > > While you can certainly define macros that destroy this uniformity, > all special forms (including macros) in R7RS(-large) retain Scheme's > uniformity. > > For example, "cond" and "case" match "else" and "=>" hygienically and > do look at how "else" or "=>" are spelled. > > Let's keep this uniformity with SRFI 177. That's true. However, we probably can't keep that aspect with 177 without using something IMHO worse like keywords-as-strings or quoted symbols. Again, my defense is that 177 does not need to be the only keyword syntax, and doesn't need to be the syntax that goes into R7RS-large. > R7RS-large builds upon R7RS. > > Of course, one could think of a reader flag "#!keywords" that changes > how ":foo" and/or "foo:" are read. In this case, however, they would > be no identifiers and my argument from above doesn't apply. > > In the absence of such a flag, however, ":foo" and "foo:" are > identifiers in portable (R7RS-portable) code. The trouble is that implementations don't always conform to the portable syntax in the obvious manner. As a practical example, the #u8 vs #vu8 vector syntax causes trouble. If you write libraries and you care mainly about the widest compatibility, with the standards being only a means to that end, it's no problem to stick to a least-common-denominator subset of all desired syntaxes in your code. It's usually a small sacrifice to make if you can achieve more portable code. Again, R7RS-large is a big enough effort that maybe it should "bless" a particular keyword syntax. I'll leave that decision to others. > The best way out would be to standardize something like "#!keywords" > first. When this flag is not enabled in a source file, Schemes should > offer an R7RS conformant mode if they claim R7RS conformity. As a library writer, I would just use whatever mode works :) It might be worth writing a "keyword syntax truce" SRFI that makes all implementations support the same read syntax for keywords. But it would take years until most implementations support that SRFI. > Let's first try to get the semantics (and syntax) of SRFI 177 right. > And in a way such that SRFI 177 allows for native implementations by > various Schemes. For better or worse, the semantics have been dictacted by Common Lisp, DSSSL, and 10 Scheme implementations long before work started on R7RS-large and 177. Implementations like Gambit and Gauche that use kwargs a lot in their built-in procedures will have a hard time if incompatible semantics are introduced in a future Scheme standard, not to mention the culture shock of programmers coming from any other language :) 177 has never introduced any new semantics, and I don't think it should. What it can do, is leave the door open for future standards to have semantics that are a compatible superset of what it can do. > If the reference implementation can only implement 98% of the > semantics (because 2% have to implemented non-portably), it's fine as > long as it is not hard for each Scheme to copy with the remaining 2% > individually. I agree that this is fine. A fully portable implementation is not possible anyway if we want to be compatible with existing native keywords. The current R5RS syntax-rules thing is just a fallback so every Scheme at least has something. > But good design also includes the uniformity I mentioned above. And > here, it would become non-uniform and non intuitive, especially in > Scheme dialects where the natural keyword syntax is "#:key" (which is > probably better than ":key" or "key:" because it does not clash with > the R7RS identifier syntax). That applies to code written specifically for those Schemes. But I hope we'll have an increasing amount of portable code that is not written specifically for any particular Scheme implementation. In that situation, one has to watch out for things like the :key or key: differences anyway. I regret that 177 probably has to be done in such a way that vertical-bars don't protect you from the ambiguity, but the alternatives are worse.