[re-directed to Dev]
On Dec 16, 2011, at 9:47 AM, Matthew Flatt wrote: > If I had it all to do over again, I'd probably get rid of multiple > values and just have tuples. The compiler and run-time system would > cooperate to match tuple results with tuple receives to avoid > allocation much of the time, but a tuple would still count as a value. > That choice, of course, would move even further away from the idea that > extra result values can be ignored, and it would move away from a > symmetry between arguments and return values. I think it would work > better overall, but I'm not sure. This is an interesting point. We can think of vectors as syntactically awkward tuples and we can use match to fake tuple-receive. We could at least implement some syntactically tolerable version of it and experiment. ;; --- Having said that I will personally admit that I went a full 180 degrees. I really disliked multiple values in the 1990s when both Soft Scheme and MrSpidey did badly with values and any study of 'type inference' for Scheme suggested values weren't quite right -- from a meta-perspective. By now, I find myself programming with multiple values quite a bit. I like the convenience of define-syntax for sharing something state-ish and easily. I like for/fold with multiple-values a lot because it makes loops that 'feel imperative' so functional. I don't even know whether Haskellians or MLers have anything remotely as elegant, and I'd love for you to check and write a 5-page JFP paper that explains these for loops. In short I have come around to the pragmatics of multiple values as provided by Racket. ;; --- My hunch is that I forgot my meta-meta-lessons from the 1980s. Back then the standard argument for lazy programming was that 'the regular lambda calculus is uniform and easy to use and you never have to think about when substitution works'. [This argument applied both for the misleading idea of thinking 'applicative reduction' -- whatever that really is -- had anything to do with CBV or the Plotkin-style reasoning.] Worse, when you generalize this to imperative languages, it looked like it all broke down and therefore it wasn't any good either. My reply used to be that pragmatics of programming comes first and we have got to develop the reasoning tools for the pragmatically good languages, though with some give and take. [My argument works equally well for axiomatic condemnation of call/cc and friends.] Well, this argument applies to multiple values, too, and I just wish I had recalled it in the 90s. -- Matthias _________________________________________________ For list-related administrative tasks: http://lists.racket-lang.org/listinfo/dev