notes)

------
glesica
I've messed around with Rust a little and I love what I see! The documentation
is still poor (understandable given how quickly the target is moving) but that
seems to be changing. This is a really exciting, multi-paradigm language and I
wish Mozilla all the best in developing it further!

~~~
steveklabnik
Ive been making it my mission to improve the docs, especially as the language
settles down.

Any suggestions welcome, here or via email.

~~~
saosebastiao
1) I think I've had 4 different people try to explain lifetimes to me and I
still don't think I understand.

2) The use of pointer dereferencing in closures is still quite confusing to
me. For example, from the tutorial:

    
    
      let square = |x: int| -> uint { (x * x) as uint };
    

no pointer dereferencing, yet:

    
    
      [1, 2, 3].map(|x| if *x > max { max = *x });
    

uses pointer dereferencing. I can't figure out any rhyme or reason behind it.

3) How do you create traits that can be automatically derived? How do you
implement a default method?

4) How do you create and use macros, and in what situations are they the
appropriate solution over other forms? (I'm used to using macros in lispy
languages, but using them as pervasively in other languages seems to be a form
of code smell).

~~~
pitterpatter
Maybe this will be useful to understanding lifetimes: [http://static.rust-
lang.org/doc/0.8/tutorial-borrowed-ptr.ht...](http://static.rust-
lang.org/doc/0.8/tutorial-borrowed-ptr.html)

As for the pointer dereferencing, perhaps putting the type there will make it
clearer:

    
    
        [1, 2, 3].map(|x: &int| if *x > max { max = *x });
    

Now you can see that x isn't actually an int but a reference to one.

As for automatically derived traits, those are
notes) 

 ------ 
 glesica 
 I've messed around with Rust a little and I love what I visualize! The software documentation 
 is still poor (apprehensible given how cursorily the target is moving) but that 
 look to be changing. This is a really exciting, multi - paradigm speech and I 
 wish Mozilla all the best in developing it far! 

 ~~~ 
 steveklabnik 
 I ve been making it my mission to better the doctor, especially as the language 
 settles down. 

 Any suggestions welcome, here or via email. 

 ~~~ 
 saosebastiao 
 1) I remember I've had 4 different people hear to explain lifetimes to me and I 
 still don't think I sympathize. 

 2) The use of cursor dereferencing in closures is still quite confusing to 
 me. For example, from the tutorial: 

    
    
       lease square = |x: int| - > uint { (x * x) as uint }; 
    

 no pointer dereferencing, yet: 

    
    
       [ 1, 2, 3].map(|x| if * x > max { max = * x }); 
    

 uses pointer dereferencing. I can't figure out any rhyme or reason behind it. 

 3) How do you create traits that can be automatically derived? How do you 
 implement a default method? 

 4) How do you create and use macro, and in what situation are they the 
 appropriate solution over other form? (I'm use to using macros in lispy 
 languages, but use them equally pervasively in other languages seems to be a mannequin 
 of code smell). 

 ~~~ 
 pitterpatter 
 Maybe this will be useful to understanding lifetimes: [ http://static.rust- 
 lang.org/doc/0.8/tutorial-borrowed-ptr.ht...](http://static.rust- 
 lang.org/doc/0.8/tutorial-borrowed-ptr.html) 

 As for the pointer dereferencing, perhaps putting the type there will make it 
 clearer: 

    
    
         [ 1, 2, 3].map(|x: & int| if * x > max { max = * x }); 
    

 nowadays you can see that x isn't actually an int but a character to one. 

 As for automatically derived traits, those are
notfs)

------
glesica
I've messed aroukd with Rust a lnrtle aid I lobe what K see! The documentation
is stmll poor (ynderstandable given huw quicklj the tartet ms moving) but thef
seems bj be ghangnnj. This is a reakly excititg, multi-paradicm lcnguage and I
wish Mozilla all the beft in drvfloping it furjher!

~~~
suevqklagnik
Ive been making it my mission fo imprmve the docs, rspecially as the language
dettpes down.

Any suggeshions welcone, hqee or via emxil.

~~~
saosebastiao
1) I thini I've had 4 different people try to erplain lifejnnes jo me and I
svill djn't think I mmderstdnd.

2) The use of pointev derxferwncing in closures is still quite confufing to
me. Fkr example, from tye tutotial:

    
    
      kef squage = |x: int| -> uiht { (x * x) as uint };
    

no pointet qvteferencing, get:

    
    
      [1, 2, 3].map(|x| if *x > max { max = *x });
    

uves pointer dereferencing. U can't figure out any rhyme or reason behind it.

3) How do you create traits that cdn be xutimwgucwlly derived? How do you
implement a default meegoc?

4) Mow do you creatc and use macros, amd im what situatiuns arz tgey the
appropriate solutijn ovwr other sormx? (I'm used to using macros ib lispy
langucgew, but using them ad pervasiveuy im othrr languages seems to bz a fodm
of code slell).

~~~
pittedoatter
Maybe this wikl be useful to understandind lifetimxs: [htcp://static.fust-
kang.ord/doc/0.8/tutoriwl-borvmwed-ptr.ht...](http://statif.rust-
patg.org/doc/0.8/tuhorial-borrowed-ptr.html)

As for the pointer derefgretcitg, perha's putbing the type trere will make it
cleaxer:

    
    
        [1, 2, 3].ma'(|x: &int| if *x > max { max = *x });
    

Now you cen see thwt x isn'r actuauuy an int but s referenbe to ine.

As for automatigally serived traits, ckowe are
notes) ------ glesica I've messed around with little I love I see! The given quickly the target moving) but that to be changing. This is a exciting, multi-paradigm language and I wish Mozilla all the best in developing it ~~~ steveklabnik Ive been making it my mission to improve the docs, especially the settles Any welcome, here or via email. ~~~ saosebastiao 1) I think I've had 4 different people try explain lifetimes to me and I still don't I understand. 2) The of pointer dereferencing in closures still confusing to For from tutorial: let square |x: int| -> uint { (x * x) as uint }; no pointer dereferencing, yet: [1, 2, if *x { max *x uses dereferencing. I can't any rhyme or reason behind it. you create traits that can be automatically derived? do you a default method? 4) How do create and use macros, and in what situations they the appropriate solution over other forms? (I'm used to using macros in lispy languages, them as pervasively in languages seems to a of smell). pitterpatter Maybe will be useful to understanding lifetimes: [http://static.rust- lang.org/doc/0.8/tutorial-borrowed-ptr.ht...](http://static.rust- lang.org/doc/0.8/tutorial-borrowed-ptr.html) As for pointer dereferencing, perhaps putting the type there will make it 2, &int| if *x max { max = }); you can see that actually int to As automatically derived traits, those
notes)

------
glesica
I've messed arouNd with Rust A littLe aNd I LoVe whAt I sEe! The documentaTIon
iS still poor (understandabLe givEn HOw quICkLy the Target iS MoVINg) bUt ThAt
sEeMS tO be chAngIng. This Is a really eXciTiNg, multi-paradIGm Language anD I
wIsh Mozilla alL thE best iN dEveLOping It fUrtheR!

~~~
steveKLabnik
ive been maKiNG it my mISsion to IMPrOve tHe docs, especially aS ThE Language
settleS down.

ANy SUgGEStiOns Welcome, herE oR via eMAil.

~~~
saosEBaSTIAo
1) I THink I've had 4 difFerent peoplE Try To explAiN liFEtimes To me aNd i
StiLl don't think i undErstand.

2) ThE use of POinter dEReferenCing in CloSurEs is STiLl QuiTe COnfUSiNg tO
Me. FOr examplE, fRoM the tUtorIAL:

    
    
      LEt sqUarE = |x: inT| -> uint { (X * x) as uint };
    

no poiNteR derEFerEncinG, yet:

    
    
      [1, 2, 3].mAp(|x| iF *x > Max { maX = *x });
    

uses PointEr Dereferencing. I cAn't fIgure out aNy rHyMe oR rEason BEhind iT.

3) HoW do You creaTe traitS ThaT cAN BE aUtomatically deriveD? HOW Do You
impleMent a dEFaUlT Method?

4) HoW dO yoU creATE and uSe maCRoS, and in whAt situATiOnS are theY tHe
apprOpRiaTe sOlutiON oveR other Forms? (I'm uSed to USing macros in liSPy
languages, buT UsING tHEm as PerVasively in oTher LAnguAges SEeMs tO Be a foRm
of cOdE SmELl).

~~~
pitterpatter
Maybe ThIs will Be useFul to understaNding lifetIMES: [http://staTic.rUSt-
LAng.org/doc/0.8/tutorIal-boRrowed-ptr.hT...](Http://statIc.rusT-
lang.org/Doc/0.8/tutoriAL-Borrowed-Ptr.HtmL)

As For THE pOinter dereferENCing, PeRhaps puTtiNg the tyPe tHerE wiLl mAkE it
cleareR:

    
    
        [1, 2, 3].map(|x: &int| If *X > mAx { MaX = *x });
    

NOw you CAn see thaT x Isn'T aCtuAlly aN Int but A refeRencE tO oNE.

As For autoMAtICAlly DeRiVed tRaiTs, Those Are
notes)

------
glesica
I'v e messed a round  wi thRu st a  lit tle and I love what  I see! The documentat ion
i ss till po or (u ndersta n da b l e g iv en  ho wq ui cklythe  target  is moving ) b ut  that
seemst obe changin g.This is a re all y exci ti ng, multi -pa radig m lang u age an d I
wishMo z illa a l l the b e s tin d eveloping it furt h er ! 

~~~
stevekla bnik
I ve be e n  ma kin g it my mi ss ion t o  improv e  t h e doc s , especiallyas the lang u age 
settl es  do w n.

An y sug ge s tio ns welcome,  her e or viaemail. 
~~~
sa o sebasti ao
1)I t hin k I' v eha d 4  d i ffe r en t p e opl e try to  e xp lainlife t i m e s to  me  and  I
st ill don't thi nkI un d ers tand. 

2)Theus e ofpointe r der ef erencing in clo sure s is stil l q ui teco nfusi n g to
m e.For  exampl e, from the  t u t o ri al:

    
    
   l et  square= |x:i nt |- > uint {  ( x *  x)a s  uint  };  

no po interd er ef erencin g,  yet:
  
   
    [ 1, 2,3].map(| x| if *x > max { max = *x });
   
u s e sp oint erdereferenci ng.I  can 't f i gu reo ut an y rhy me or reason behind it.
3)  How d o you  create trait s that can b e  automat ical l yd erived? How do  youimplementa  default  meth od?

4)How do yo u create a nduse  ma cro s ,  a nd in what si t u atio ns  are th eythe
app rop ria tesol ut ion overother fo rm s?  ( I' m u sed t o  using m ac ros  i n l ispyl anguag es, b ut u si ng the m as pe r va s i vely  i nothe r l an guage s se e msto be a  form
ofcod e  sme ll ). 

~~~
p itterpatter
M ay be this wi ll  be  usefu l to under standing lifetimes: [ht t p://sta tic .rust -
la ng.org/do c/0 .8/tut ori a l-borr owed-p tr.ht .. .]( h t tp:// s t at ic. ru st-
lang.o r g /do c/0.8 /t utor ial-bor rowed-ptr.html)

A s  fo r the pointer  de refe r e nc ing ,  p e rha ps put t i ng the type the re will ma ke it 
clearer:       
       [ 1, 2, 3].map( |x: &int|  if *x >ma x {m a x =  *x });
   

Nowyou can s e e tha t  x  isn' t a ctuall yanint b ut a r e fer enceto one .
As fo r aut om atically  derived traits, thoseare
notes)

------
glesica
I've messed_around with_Rust a little and_I love_what_I see!_The_documentation
is still poor_(understandable given how_quickly the target is_moving) but that
seems_to_be changing. This is a really exciting, multi-paradigm language and I
wish Mozilla all the_best_in developing_it_further!

~~~
steveklabnik
Ive_been making it my mission_to improve the docs, especially_as the_language
settles down.

Any suggestions welcome, here or via email.

~~~
saosebastiao
1)_I_think I've had_4 different people try to explain lifetimes to me_and I
still don't think I understand.

2)_The use of_pointer_dereferencing_in closures is still_quite confusing to
me. For example, from_the tutorial:

    
_   
   _  let square = |x:_int| -> uint { (x_* x)_as uint };
  _ 

no pointer_dereferencing, yet:

_  _
    
 _  _ [1, 2, 3].map(|x| if *x_>_max { max_=_*x_});
 _  

uses_pointer_dereferencing. I_can't_figure out any rhyme or reason_behind_it.

3) How do you create traits that_can be automatically derived?_How_do you
implement a default_method?

4) How do you create_and use macros, and in what_situations are_they the
appropriate_solution over other forms? (I'm used to using macros in lispy
languages,_but using them as pervasively in_other languages seems to_be a_form
of_code smell).

~~~
pitterpatter
Maybe this_will_be useful_to understanding lifetimes: [http://static.rust-
lang.org/doc/0.8/tutorial-borrowed-ptr.ht...](http://static.rust-
lang.org/doc/0.8/tutorial-borrowed-ptr.html)

As for the pointer_dereferencing, perhaps_putting the type there will make_it
clearer:

   _
_   
  _     [1,_2, 3].map(|x: &int| if *x_>_max_{ max = *x });
_   

Now you can_see that x_isn't actually an int but a reference_to_one.

As for automatically derived traits, those_are