[racket] syntax, differently

From: Shriram Krishnamurthi (sk at cs.brown.edu)
Date: Wed Aug 18 13:46:15 EDT 2010

The fundamental problem is the syntax of identifiers. The rest is details.

On Aug 18, 2010 11:25 AM, "Ray Racine" <ray.racine at gmail.com> wrote:
> This topic comes up so frequently (schemes structure accessors/mutators) ,
> and has been independently solved in and around the same conceptual
solution
> (a chaining dot syntax) that I've often wondered why Racket would not make
> such a capability "core" to the language. It seems such an obvious
> absolutely should (to some) that I'm interested in hearing the counter
> position of why it should not.
>
> Thanks,
>
> Ray
>
> On Wed, Aug 18, 2010 at 10:52 AM, Matthias Felleisen
> <matthias at ccs.neu.edu>wrote:
>
>>
>> Eduardo is providing a macro that helps you abbreviate complex
>> selector and mutator chains. The BENFIT you get is that instead
>> of writing
>>
>> (posn-x (bird-posn (sky-bird (world-sky some-world))))
>>
>> you can write -- in Racket --
>>
>> some-world.sky.bird.posn.x
>>
>> and make Racket programs look as short as C program selectors
>> or Java dots or Javascript dots etc.
>>
>> The PRICE you pay is that you annotate variables and fields
>> with struct information. That is, you have to say somewhere that
>> some-world is a variable that always stands for a world struct.
>> And the sky field in world has to come with information that it
>> always is a sky-struct. And so on.
>>
>> ;; ---
>>
>> To make this available in Racket, you'd have to port his macros
>> from R6RS Scheme to Racket. I suspect that this would be a minor
>> task.
>>
>> ;; ---
>>
>> To make this available in the teaching languages, you'd have to
>> export these macros in a way that makes sense for students. Or
>> you keep it all private to yourself.
>>
>> ;; ---
>>
>> I assume that you understand the differences between the various
>> operations. In Java,
>>
>> pos.draw
>>
>> comes with static knowledge about pos (an object of a certain type)
>> and draw (a field of a certain type) that is exploited to make the
>> notation short and safe. It isn't complete safe because of NULL,
>> which doesn't exist in Racket or the teaching languages, but let's
>> ignore that.
>>
>> In a language like Ruby,
>>
>> pos.draw
>>
>> just doesn't care, If pos has an draw field at run-time, good enough.
>> Even if pos isn't a position but happens to have a draw field, just
>> keep on computing.
>>
>> In Racket and the teaching languages, you are *forced* to write
>> down what kind of struct you expect and what field you want:
>>
>> pos.check-it-is-a-posn-and-select-x-then
>>
>> This gives you safety a la Java (at run-time) and tells the reader
>> at each site where you write down a selector expression what you
>> expect. It's verbose but readable.
>>
>>
>>
>>
>> On Aug 18, 2010, at 10:34 AM, Mathew Kurian wrote:
>>
>> >
>> >
>> > On Wed, Aug 18, 2010 at 2:41 AM, Eduardo Cavazos <
wayo.cavazos at gmail.com>
>> wrote:
>> >
>> > Mathew Kurian:
>> >
>> > However, in the case of universe/world teachpacks, where the use of
>> > states is a vital component, a set of code can get very long,
>> > especially if the program is very complex and contains multiple
>> > structures (in some cases structures inside structures inside
>> > structures) within the states.
>> >
>> > I agree with the critique of lengthy expressions involving nested
records
>> (structs).
>> >
>> > Here's how I deal with it:
>> >
>> > http://gist.github.com/364754
>> >
>> > The particular solution is for R6RS but PLT has the necessary
mechanisms
>> for it.
>> >
>> > Ed
>> >
>> > Hey Ed,
>> >
>> > If you have spare time, can you please explain by what you meant in
that
>> github website. All I saw was a comparison between C and Scheme.
>> >
>> > Thank you
>> >
>> > Mathew K.
>> >
>> >
>> > _________________________________________________
>> > For list-related administrative tasks:
>> > http://lists.racket-lang.org/listinfo/users
>>
>> _________________________________________________
>> For list-related administrative tasks:
>> http://lists.racket-lang.org/listinfo/users
>>
>
>
>
> --
> The object of life is not to be on the side of the majority, but to escape
> finding oneself in the ranks of the insane. - Marcus Aurelius
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20100818/b65eef61/attachment.html>

Posted on the users mailing list.