[racket] syntax, differently

From: Jay McCarthy (jay.mccarthy at gmail.com)
Date: Wed Aug 18 11:14:35 EDT 2010

This is a price you are already paying in Typed Racket. I'd like to see more ways of putting types to work implemented. 

Jay

Sent from my iPhone

On Aug 18, 2010, at 8: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


Posted on the users mailing list.