Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Pygments / examplefiles / output / test.cr
Size: Mime:
€]q(cpygments.token
_TokenType
qXCommentqXSingleq†q…qq}q(Xsubtypesqcbuiltins
set
q	]q
…qRqXparentq
hh…q…qq}q(hh	]q(hhXPreprocq†q…qq}q(hh	]q…qRqh
hubhhXMultiq†q…qq}q(hh	]q …q!Rq"h
hubhhXHashbangq#†q$…q%q&}q'(hh	]q(…q)Rq*h
hubhhhX
SingleLineq+†q,…q-q.}q/(hh	]q0…q1Rq2h
hubhhXDocq3†q4…q5q6}q7(hh	]q8…q9Rq:h
hubhhX	Directiveq;†q<…q=q>}q?(hh	]q@…qARqBh
hubhhX	MultilineqC†qD…qEqF}qG(hh	]qH…qIRqJh
hubhhX
SinglelineqK†qL…qMqN}qO(hh	]qP…qQRqRh
hubhhXPreprocFileqS†qT…qUqV}qW(hh	]qX…qYRqZh
hubhhXSpecialq[†q\…q]q^}q_(hh	]q`…qaRqbh
hube…qcRqdh
h)…qeqf}qg(hh	]qh(hXEscapeqi…qj…qkql}qm(hh	]qn…qoRqph
hfubhXOperatorqq…qr…qsqt}qu(hh	]qv(hhqXDBSqw†qx…qyqz}q{(hh	]q|…q}Rq~h
htubhhqXWordq†q€…qq‚}qƒ(hh	]q„…q…Rq†h
htube…q‡Rqˆh
hfhh‚hwhzubhXNameq‰…qŠ…q‹qŒ}q(hh	]qŽ(hh‰XTagq†q…q‘q’}q“(hh	]q”…q•Rq–h
hŒubhh‰XEntityq—†q˜…q™qš}q›(hh	]qœhh‰h—hw‡q…qžqŸ}q (hh	]q¡…q¢Rq£h
hšuba…q¤Rq¥h
hŒhwhŸubhh‰X	Exceptionq¦†q§…q¨q©}qª(hh	]q«…q¬Rq­h
hŒubhh‰X	Decoratorq®†q¯…q°q±}q²(hh	]q³…q´Rqµh
hŒubhh‰XClassq¶†q·…q¸q¹}qº(hh	]q»(hh‰h¶hw‡q¼…q½q¾}q¿(hh	]qqÁRqÂh
h¹ubhh‰h¶XStartqÇqąqŁqÆ}qÇ(hh	]qȅqÉRqÊh
h¹ube…qËRqÌh
hŒhÃhÆhwh¾ubhh‰XVariableq͆q΅qρqÐ}qÑ(hh	]qÒ(hh‰hÍX	AnonymousqӇqԅqՁqÖ}q×(hh	]q؅qÙRqÚh
hÐubhh‰hÍh¶‡qۅq܁qÝ}qÞ(hh	]q߅qàRqáh
hÐubhh‰hÍXMagicqâ‡qã…qäqå}qæ(hh	]qç…qèRqéh
hÐubhh‰hÍXGlobalqê‡që…qìqí}qî(hh	]qï…qðRqñh
hÐubhh‰hÍXInstanceqò‡qó…qôqõ}qö(hh	]q÷…qøRqùh
hÐube…qúRqûh
hŒh¶hÝhêhíhòhõhâhåhÓhÖubhh‰X	Attributeqü†qý…qþqÿ}r(hh	]rhh‰hüh͇r…rr}r(hh	]r…rRrh
hÿuba…r	Rr
h
hŒhÍjubhh‰X	Namespacer†r…r
r}r(hh	]r…rRrh
hŒubhh‰XPropertyr†r…rr}r(hh	]r…rRrh
hŒubhh‰XSymbolr†r…rr}r(hh	]r …r!Rr"h
hŒubhh‰XClassesr#†r$…r%r&}r'(hh	]r(…r)Rr*h
hŒubhh‰XPseudor+†r,…r-r.}r/(hh	]r0…r1Rr2h
hŒubhh‰XLabelr3†r4…r5r6}r7(hh	]r8…r9Rr:h
hŒubhh‰hq†r;…r<r=}r>(hh	]r?…r@RrAh
hŒubhh‰XBuiltinrB†rC…rDrE}rF(hh	]rG(hh‰jBj+‡rH…rIrJ}rK(hh	]rL…rMRrNh
jEubhh‰jBXTyperO‡rP…rQrR}rS(hh	]rT…rURrVh
jEube…rWRrXh
hŒj+jJjOjRubhh‰XFieldrY†rZ…r[r\}r](hh	]r^…r_Rr`h
hŒubhh‰XOtherra†rb…rcrd}re(hh	]rfhh‰jaXMemberrg‡rh…rirj}rk(hh	]rl…rmRrnh
jduba…roRrph
hŒjgjjubhh‰XFunctionrq†rr…rsrt}ru(hh	]rvhh‰jqhâ‡rw…rxry}rz(hh	]r{…r|Rr}h
jtuba…r~Rrh
hŒhâjyubhh‰jO†r€…rr‚}rƒ(hh	]r„…r…Rr†h
hŒubhh‰XConstantr‡†rˆ…r‰rŠ}r‹(hh	]rŒ…rRrŽh
hŒube…rRrh
hfhühÿjBjEh¶h¹j‡jŠh®h±h—hšh¦h©jqjtjjj3j6jjjajdhh’hÍhÐjYj\jjj+j.hqj=j#j&jOj‚ubhXLiteralr‘…r’…r“r”}r•(hh	]r–(hj‘ja†r—…r˜r™}rš(hh	]r›…rœRrh
j”ubhj‘XCharrž†rŸ…r r¡}r¢(hh	]r£…r¤Rr¥h
j”ubhj‘XDater¦†r§…r¨r©}rª(hh	]r«…r¬Rr­h
j”ubhj‘XScalarr®†r¯…r°r±}r²(hh	]r³hj‘j®XPlainr´‡rµ…r¶r·}r¸(hh	]r¹…rºRr»h
j±uba…r¼Rr½h
j”j´j·ubhj‘XStringr¾†r¿…rÀrÁ}rÂ(hh	]rÃ(hj‘j¾XInterpolrćrÅ…rƁrÇ}rÈ(hh	]rÉ…rÊRrËh
jÁubhj‘j¾X	DelimeterṙrÍ…r΁rÏ}rÐ(hh	]rÑ…rÒRrÓh
jÁubhj‘j¾jž‡rÔ…rՁrÖ}r×(hh	]rØ…rÙRrÚh
jÁubhj‘j¾j‡rÛ…r܁rÝ}rÞ(hh	]rß…ràRráh
jÁubhj‘j¾h‡râ…rãrä}rå(hh	]ræ…rçRrèh
jÁubhj‘j¾ja‡ré…rêrë}rì(hh	]rí…rîRrïh
jÁubhj‘j¾XBacktickrð‡rñ…ròró}rô(hh	]rõ…röRr÷h
jÁubhj‘j¾hi‡rø…rùrú}rû(hh	]rü…rýRrþh
jÁubhj‘j¾XRegexrÿ‡r…rr}r(hh	]r…rRrh
jÁubhj‘j¾XMomentr‡r…r	r
}r(hh	]r…r
Rrh
jÁubhj‘j¾XBooleanr‡r…rr}r(hh	]r…rRrh
jÁubhj‘j¾X	Characterr‡r…rr}r(hh	]r…rRrh
jÁubhj‘j¾X	Delimiterr‡r …r!r"}r#(hh	]r$…r%Rr&h
jÁubhj‘j¾h3‡r'…r(r)}r*(hh	]r+…r,Rr-h
jÁubhj‘j¾h‰‡r.…r/r0}r1(hh	]r2…r3Rr4h
jÁubhj‘j¾XAffixr5‡r6…r7r8}r9(hh	]r:…r;Rr<h
jÁubhj‘j¾XHeredocr=‡r>…r?r@}rA(hh	]rB…rCRrDh
jÁubhj‘j¾XDoublerE‡rF…rGrH}rI(hh	]rJ…rKRrLh
jÁubhj‘j¾XInterprM‡rN…rOrP}rQ(hh	]rR…rSRrTh
jÁubhj‘j¾XAtomrU‡rV…rWrX}rY(hh	]rZ…r[Rr\h
jÁube…r]Rr^h
j”j5j8jðjójžjÖjj"h3j)jEjHhijúj=j@jÄjÇjajëjÿjhjäjjÝjjjj
jMjPjjjÌjÏjUjXh‰j0ubhj‘XNumberr_†r`…rarb}rc(hh	]rd(hj‘j_XFloatre‡rf…rgrh}ri(hh	]rj…rkRrlh
jbubhj‘j_XDecrm‡rn…rorp}rq(hh	]rr…rsRrth
jbubhj‘j_XRadixru‡rv…rwrx}ry(hh	]rz…r{Rr|h
jbubhj‘j_XOctr}‡r~…rr€}r(hh	]r‚…rƒRr„h
jbubhj‘j_XBinr…‡r†…r‡rˆ}r‰(hh	]rŠ…r‹RrŒh
jbubhj‘j_hü‡r…rށr}r(hh	]r‘…r’Rr“h
jbubhj‘j_XHexr”‡r•…r–r—}r˜(hh	]r™…ršRr›h
jbubhj‘j_XIntegerrœ‡r…ržrŸ}r (hh	]r¡h(j‘j_jœXLongr¢tr£…r¤r¥}r¦(hh	]r§…r¨Rr©h
jŸuba…rªRr«h
jbj¢j¥ubhj‘j_XDecimalr¬‡r­…r®r¯}r°(hh	]r±…r²Rr³h
jbube…r´Rrµh
j”j…jˆjejhj”j—jœjŸj}j€jujxhüjj¬j¯jmjpube…r¶Rr·h
hfj¾jÁj_jbj¦j©j®j±jaj™jžj¡ubhXGenericr¸…r¹…rºr»}r¼(hh	]r½(hj¸XErrorr¾†r¿…rÀrÁ}rÂ(hh	]rÃ…rÄRrÅh
j»ubhj¸X
SubheadingrƆrÇ…rȁrÉ}rÊ(hh	]rË…rÌRrÍh
j»ubhj¸X	TracebackrΆrÏ…rЁrÑ}rÒ(hh	]rÓ…rÔRrÕh
j»ubhj¸XOutputrÖ†r×…r؁rÙ}rÚ(hh	]rÛ…rÜRrÝh
j»ubhj¸XPromptrÞ†rß…ràrá}râ(hh	]rã…räRråh
j»ubhj¸XDeletedræ†rç…rèré}rê(hh	]rë…rìRríh
j»ubhj¸XInsertedrî†rï…rðrñ}rò(hh	]ró…rôRrõh
j»ubhj¸XHeadingrö†r÷…rørù}rú(hh	]rû…rüRrýh
j»ubhj¸XStrongrþ†rÿ…rr}r(hh	]r…rRrh
j»ubhj¸XEmphr†r…rr	}r
(hh	]r…rRr
h
j»ube…rRrh
hfjæjéjj	j¾jÁjöjùjîjñjÖjÙjÞjájþjjÆjÉjÎjÑubhj¾…r…rr}r(hh	]r…rRrh
hfubhXKeywordr…r…rr}r(hh	]r(hjh†r…rr}r (hh	]r!…r"Rr#h
jubhjj†r$…r%r&}r'(hh	]r(…r)Rr*h
jubhjjO†r+…r,r-}r.(hh	]r/…r0Rr1h
jubhjXPreProcr2†r3…r4r5}r6(hh	]r7…r8Rr9h
jubhjXControlr:†r;…r<r=}r>(hh	]r?…r@RrAh
jubhjj‡†rB…rCrD}rE(hh	]rF…rGRrHh
jubhjj†rI…rJrK}rL(hh	]rM…rNRrOh
jubhjj+†rP…rQrR}rS(hh	]rT…rURrVh
jubhjXDeclarationrW†rX…rYrZ}r[(hh	]r\…r]Rr^h
jubhjXReservedr_†r`…rarb}rc(hh	]rd…reRrfh
jube…rgRrhh
hfj‡jDjWjZjjKj+jRj_jbjOj-j:j=jj&j2j5hjubhja…ri…rjrk}rl(hh	]rm…rnRroh
hfubhXTextrp…rq…rrrs}rt(hh	]ru(hjpXRootrv†rw…rxry}rz(hh	]r{…r|Rr}h
jsubhjpj†r~…rr€}r(hh	]r‚…rƒRr„h
jsubhjpXRagr…†r†…r‡rˆ}r‰(hh	]rŠ…r‹RrŒh
jsubhjpX
Whitespacer†rŽ…rr}r‘(hh	]r’…r“Rr”h
jsubhjpXBeerr•†r–…r—r˜}r™(hh	]rš…r›Rrœh
jsubhjpXPunctuationr†rž…rŸr }r¡(hh	]r¢…r£Rr¤h
jsube…r¥Rr¦h
hfjjjj€jj jvjyj•j˜j…jˆubhhj…r§…r¨r©}rª(hh	]r«hjX	Indicatorr¬†r­…r®r¯}r°(hh	]r±…r²Rr³h
j©uba…r´Rrµh
hfj¬j¯ube…r¶Rr·jpjshihlj¾jjajkjjh‰hŒj‘j”jj©hqhthhj¸j»XTokenr¸hfj¾jÁj_jbubh#h&hChFhhhShVhhh[h^h;h>h+h.h3h6hhhKhNububX3# Examples taken from http://crystal-lang.org/docs/r¹†rºjsX
r»†r¼hX1# Copyright 2012-2016 Manas Technology Solutions.r½†r¾jsX


r¿†rÀjXrequirerÁ†rÂjsX rÆrÄjHX"rņrÆjHXhttp/serverrdžrÈjHjņrÉjsX

rʆrËhŒXserverr̆rÍjsjÆrÎhtX=rφrÐjsjÆrÑjŠXHTTPrÒ†rÓhtX::rÔ†rÕhŒXServerrÖ†r×htX.r؆rÙhŒXnewrÚ†rÛj©X(r܆rÝjŸX8080rÞ†rßj©X)rà†rájsjÆrâjXdorã†räjsjÆråhtX|ræ†rçhŒXcontextrè†réhtjæ†rêjsX
  rë†rìhŒXcontextrí†rîhtj؆rïhŒXresponserð†rñhtj؆ròhŒXcontent_typeró†rôjsjÆrõhtjφröjsjÆr÷jHjņrøjHX
text/plainrù†rújHjņrûjsX
  rü†rýhŒXcontextrþ†rÿhtj؆rhŒXresponser†rhtj؆rhŒXprintr†rjsjÆrjHjņrjHXHello world! The time is r†r	jÇX#{r
†rjEXTimer†r
htj؆rhŒXnowr†rjÇX}r†rjHjņrjsj»†rjXendr†rjsX

r†rjEXputsr†rjsjÆrjHjņrjHX Listening on http://0.0.0.0:8080r†rjHjņrjsj»†r hŒXserverr!†r"htj؆r#hŒXlistenr$†r%jsX


r&†r'jXmoduler(†r)jsjÆr*jXHTTPr+†r,jsX
  r-†r.jXclassr/†r0jsjÆr1h¹XRequestHandlerr2†r3jsX
  r4†r5jXendr6†r7jsj»†r8jXendr9†r:jsX

r;†r<jXaliasr=†r>jsjÆr?h¹XNumericValuer@†rAjsjÆrBhtjφrCjsjÆrDjEXFloat32rE†rFjsjÆrGhtjæ†rHjsjÆrIjEXFloat64rJ†rKjsjÆrLhtjæ†rMjsjÆrNjEXInt32rO†rPjsjÆrQhtjæ†rRjsjÆrSjEXInt64rT†rUjsX

rV†rWjXenumrX†rYjsjÆrZjXTime::r[†r\h¹X	DayOfWeekr]†r^jsj»†r_jXendr`†rajsX


rb†rchíX$global_greetingrd†rejsjÆrfhtjφrgjsjÆrhjHjņrijHXHello worldrj†rkjHjņrljsX

rm†rnjXclassro†rpjsjÆrqh¹XGreetingrr†rsjsX
  rt†ruhÝX@@default_greetingrv†rwjsjÆrxhtjφryjsjÆrzjHjņr{jHXHello worldr|†r}jHjņr~jsX

  r†r€jXdefr†r‚jsjÆrƒjtX
initializer„†r…j©j܆r†hõX@custom_greetingr‡†rˆjsjÆr‰htjφrŠjsjÆr‹jDXnilrŒ†rj©jà†rŽjsX
  r†rjXendr‘†r’jsX

  r“†r”jXdefr•†r–jsjÆr—jtXprint_greetingr˜†r™jsX
    rš†r›hŒXgreetingrœ†rjsjÆržhtjφrŸjsjÆr hõX@custom_greetingr¡†r¢jsjÆr£htX||r¤†r¥jsjÆr¦hÝX@@default_greetingr§†r¨jsX
    r©†rªjEXputsr«†r¬jsjÆr­hŒXgreetingr®†r¯jsX
  r°†r±jXendr²†r³jsj»†r´jXendrµ†r¶jsX


r·†r¸jŠX
LUCKY_NUMBERSr¹†rºjsX     r»†r¼htjφr½jsjÆr¾htX[r¿†rÀjŸX3rÁ†rÂj©X,rÆrÄjsjÆrÅjŸX7rƆrÇj©jÆrÈjsjÆrÉjŸX11rʆrËhtX]r̆rÍjsj»†rÎjŠXDOCUMENTATION_URLrφrÐjsjÆrÑhtjφrÒjsjÆrÓjHjņrÔjHXhttp://crystal-lang.org/docsrÕ†rÖjHjņr×jsX


r؆rÙjXmodulerÚ†rÛjsjÆrÜjX	Scorecardr݆rÞjsX
  r߆ràjXclassrá†râjsjÆrãh¹XParserrä†råjsX
    ræ†rçjXdefrè†réjsjÆrêjtXparserë†rìj©j܆ríhŒX
score_textrî†rïj©jà†rðjsX
      rñ†ròjXbeginró†rôjsX	
        rõ†röhŒX
score_textr÷†røhtj؆rùhŒXscanrú†rûj©j܆rüjŠX
SCORE_PATTERNrý†rþj©jà†rÿjsjÆrjXdor†rjsjÆrhtjæ†rhŒXmatchr†rhtjæ†rjsX
          r†r	hŒXhandle_matchr
†rj©j܆rhŒXmatchr
†rj©jà†rjsX	
        r†rjXendr†rjsX
      r†rjXrescuer†rjsjÆrhŒXerrr†rjsjÆrj©X:r†rjsjÆrhŒX
ParseErrorr†r jsX	
        r!†r"hX# handle error ...r#†r$jsX
      r%†r&jXendr'†r(jsX
    r)†r*jXendr+†r,jsX
  r-†r.jXendr/†r0jsj»†r1jXendr2†r3jsX


r4†r5jXmoduler6†r7jsjÆr8jXMoneyr9†r:jsX
  r;†r<jŠX
CURRENCIESr=†r>jsjÆr?htjφr@jsjÆrAj©X{rB†rCjsX
    rD†rEjHjņrFjHXEURrG†rHjHjņrIjsjÆrJhtjφrKhtX>rL†rMjsjÆrNjhX1.0rO†rPj©jÆrQjsX
    rR†rSjHjņrTjHXARSrU†rVjHjņrWjsjÆrXhtjφrYhtjL†rZjsjÆr[jhX10.55r\†r]j©jÆr^jsX
    r_†r`jHjņrajHXUSDrb†rcjHjņrdjsjÆrehtjφrfhtjL†rgjsjÆrhjhX1.12ri†rjj©jÆrkjsX
    rl†rmjHjņrnjHXJPYro†rpjHjņrqjsjÆrrhtjφrshtjL†rtjsjÆrujhX134.15rv†rwj©jÆrxjsX
  ry†rzj©j†r{jsX

  r|†r}jXclassr~†rjsjÆr€h¹XAmountr†r‚jsX
    rƒ†r„jJXgetterr…†r†jsjÆr‡jÝX	:currencyrˆ†r‰j©jÆrŠjsjÆr‹jÝX:valuerŒ†rjsX

    rކrjXdefr†r‘jsjÆr’jtX
initializer“†r”j©j܆r•hõX	@currencyr–†r—j©jÆr˜jsjÆr™hõX@valuerš†r›j©jà†rœjsX
    r†ržjXendrŸ†r jsX
  r¡†r¢jXendr£†r¤jsX

  r¥†r¦jXclassr§†r¨jsjÆr©h¹XCurrencyConversionrª†r«jsX
    r¬†r­jXdefr®†r¯jsjÆr°jtX
initializer±†r²j©j܆r³hõX@amountr´†rµj©jÆr¶jsjÆr·hõX@target_currencyr¸†r¹j©jà†rºjsX
    r»†r¼jXendr½†r¾jsX

    r¿†rÀjXdefrÁ†rÂjsjÆrÃjtXamountrĆrÅjsX
      rƆrÇhX# implement conversion ...rȆrÉjsX
    rʆrËjXendr̆rÍjsX
  rΆrÏjXendrІrÑjsj»†rÒjXendrÓ†rÔjsX


rÕ†rÖhŒXir׆rØjsjÆrÙhtjφrÚjsjÆrÛjŸX0r܆rÝjsj»†rÞjXwhiler߆ràjsjÆráhŒj׆râjsjÆrãhtX<rä†råjsjÆræjŸX10rç†rèjsX
  ré†rêhŒXprocrë†rìjsjÆríhtjφrîjsjÆrïhtX-rð†rñhtjL†ròj©j܆róhŒXxrô†rõjsjÆröj©j†r÷jsjÆrøjEXInt32rù†rúj©jà†rûjsjÆrüjXdorý†rþjsX
    rÿ†rjJXspawnr†rjsjÆrjXdor†rjsX
      r†rjEXputsr†r	j©j܆r
hŒjô†rj©jà†rjsX
    r
†rjXendr†rjsX
  r†rjXendr†rjsX
  r†rhŒXprocr†rhtj؆rhŒXcallr†rj©j܆rhŒj׆rj©jà†rjsX
  r†r hŒj׆r!jsjÆr"htX+=r#†r$jsjÆr%jŸX1r&†r'jsj»†r(jXendr)†r*jsX

r+†r,hŒXFiberr-†r.htj؆r/hŒXyieldr0†r1jsX


r2†r3hX"# A buffered channel of capacity 2r4†r5jsj»†r6hŒXchannelr7†r8jsjÆr9htjφr:jsjÆr;jEXChannelr<†r=j©j܆r>jEXInt32r?†r@j©jà†rAhtj؆rBhŒXnewrC†rDj©j܆rEjŸX2rF†rGj©jà†rHjsX

rI†rJjJXspawnrK†rLjsjÆrMjXdorN†rOjsX
  rP†rQhŒXchannelrR†rShtj؆rThŒXsendrU†rVj©j܆rWjŸj&†rXj©jà†rYjsX
  rZ†r[hŒXchannelr\†r]htj؆r^hŒXsendr_†r`j©j܆rajŸjF†rbj©jà†rcjsX
  rd†rehŒXchannelrf†rghtj؆rhhŒXsendri†rjj©j܆rkjŸjÁ†rlj©jà†rmjsj»†rnjXendro†rpjsX

rq†rrjŸjÁ†rshtj؆rthŒXtimesru†rvjsjÆrwjXdorx†ryjsjÆrzhtjæ†r{hŒj׆r|htjæ†r}jsX
  r~†rjEXputsr€†rjsjÆr‚hŒXchannelrƒ†r„htj؆r…hŒXreceiver††r‡jsj»†rˆjXendr‰†rŠjsX


r‹†rŒjXclassr†rŽjsjÆrh¹XMyDictionaryr†r‘j©j܆r’hŒXKr“†r”j©jÆr•jsjÆr–hŒXVr—†r˜j©jà†r™jsj»†ršjXendr›†rœjsX


r†ržhŒXMyBoxrŸ†r htj؆r¡hŒXnewr¢†r£j©j܆r¤jŸj&†r¥j©jà†r¦jsX       r§†r¨hX#:: MyBox(Int32)r©†rªjsj»†r«hŒXMyBoxr¬†r­htj؆r®hŒXnewr¯†r°j©j܆r±jHjņr²jHXhellor³†r´jHjņrµj©jà†r¶jsjÆr·hX#:: MyBox(String)r¸†r¹jsX


rº†r»jXmoduler¼†r½jsjÆr¾jXMoor¿†rÀj©j܆rÁhŒXTr†rÃj©jà†rÄjsX
  rņrÆjXdefrdžrÈjsjÆrÉjtXtrʆrËjsX
    r̆rÍhŒj†rÎjsX
  rφrÐjXendrцrÒjsj»†rÓjXendrÔ†rÕjsX

rÖ†r×jXclassr؆rÙjsjÆrÚh¹XFoorÛ†rÜj©j܆rÝh¹XUrÞ†rßj©jà†ràjsX
  rá†râjXincluderã†räjsjÆråhŒXMooræ†rçj©j܆rèhŒjÞ†réj©jà†rêjsX

  rë†rìjXdefrí†rîjsjÆrïjtX
initializerð†rñj©j܆ròhõX@valueró†rôjsjÆrõj©j†röjsjÆr÷hŒjÞ†røj©jà†rùjsX
  rú†rûjXendrü†rýjsj»†rþjXendrÿ†rjsX

r†rhŒXfoor†rjsjÆrhtjφrjsjÆrhŒXFoor†r	htj؆r
hŒXnewr†rj©j܆r
jŸj&†rj©jà†rjsj»†rhŒXfoor†rhtj؆rhŒjʆrjsjÆrhX# Int32r†rjsX


r†rjXclassr†rjsjÆrh¹XParentr†rj©j܆rh¹j†r j©jà†r!jsj»†r"jXendr#†r$jsX

r%†r&jXclassr'†r(jsjÆr)h¹X
Int32Childr*†r+jsjÆr,htjä†r-jsjÆr.hŒXParentr/†r0j©j܆r1jEXInt32r2†r3j©jà†r4jsj»†r5jXendr6†r7jsX

r8†r9jXclassr:†r;jsjÆr<h¹XGenericChildr=†r>j©j܆r?h¹j†r@j©jà†rAjsjÆrBhtjä†rCjsjÆrDhŒXParentrE†rFj©j܆rGhŒj†rHj©jà†rIjsj»†rJjXendrK†rLjsX


rM†rNjXclassrO†rPjsjÆrQh¹XPersonrR†rSjsj»†rTjXendrU†rVjsX


rW†rXhŒXarY†rZjsjÆr[htjφr\jsjÆr]jŸj&†r^jsj»†r_hŒXptrr`†rajsjÆrbhtjφrcjsjÆrdjX	pointerofre†rfj©j܆rghŒjY†rhj©jà†rijsj»†rjhŒXptrrk†rlhtj¿†rmjŸX100_000rn†rohtj̆rpjsjÆrqhtjφrrjsjÆrsjŸjF†rtjsX   ru†rvhX4# undefined behaviour, probably a segmentation faultrw†rxjsX


ry†rzjXaliasr{†r|jsjÆr}h¹X
Int32OrStringr~†rjsjÆr€htjφrjsjÆr‚jEXInt32rƒ†r„jsjÆr…htjæ†r†jsjÆr‡jEXStringrˆ†r‰jsX


rІr‹jXaliasrŒ†rjsjÆrŽh¹X
Int32OrNilr†rjsjÆr‘htjφr’jsjÆr“jEXInt32r”†r•j©X?r–†r—jsX


r˜†r™jXaliasrš†r›jsjÆrœh¹XInt32OrNil_r†ržjsjÆrŸhtjφr jsjÆr¡jEXInt32r¢†r£jsjÆr¤htjæ†r¥jsjÆr¦htX::r§†r¨jEXNilr©†rªjsX


r«†r¬jXaliasr­†r®jsjÆr¯h¹XInt32Ptrr°†r±jsjÆr²htjφr³jsjÆr´jEXInt32rµ†r¶htX*r·†r¸jsX


r¹†rºjXaliasr»†r¼jsjÆr½h¹X	Int32Ptr_r¾†r¿jsjÆrÀhtjφrÁjsjÆrÂjEXPointerrÆrÄj©j܆rÅjEXInt32rƆrÇj©jà†rÈjsX


rɆrÊjXaliasrˆrÌjsjÆrÍh¹XInt32_8rΆrÏjsjÆrÐhtjφrÑjsjÆrÒjEXInt32rÓ†rÔhtj¿†rÕjŸX8rÖ†r×htj̆rØjsX


rÙ†rÚjXaliasrÛ†rÜjsjÆrÝh¹XInt32_8_rÞ†rßjsjÆràhtjφrájsjÆrâjEXStaticArrayrã†räj©j܆råjEXInt32ræ†rçj©jÆrèjsjÆréjŸjÖ†rêj©jà†rëjsX


rì†ríjXaliasrî†rïjsjÆrðh¹XInt32StringTuplerñ†ròjsjÆróhtjφrôjsjÆrõj©jB†röjEXInt32r÷†røj©jÆrùjsjÆrújEXStringrû†rüj©j†rýjsX


rþ†rÿjXaliasr†rjsjÆrh¹XInt32StringTuple_r†rjsjÆrhtjφrjsjÆrjEXTupler†r	j©j܆r
jEXInt32r†rj©jÆr
jsjÆrjEXStringr†rj©jà†rjsX


r†rjXaliasr†rjsjÆrh¹X
Int32ToStringr†rjsjÆrhtjφrjsjÆrjEXInt32r†rjsjÆrhtjð†rhtjL†r jsjÆr!jEXStringr"†r#jsX


r$†r%jXaliasr&†r'jsjÆr(h¹XInt32ToString_r)†r*jsjÆr+htjφr,jsjÆr-jEXProcr.†r/j©j܆r0jEXInt32r1†r2j©jÆr3jsjÆr4jEXStringr5†r6j©jà†r7jsX


r8†r9jXaliasr:†r;jsjÆr<h¹XProcThatReturnsInt32r=†r>jsjÆr?htjφr@jsjÆrAhtjð†rBhtjL†rCjsjÆrDjEXInt32rE†rFjsX


rG†rHjXaliasrI†rJjsjÆrKh¹XInt32AndCharToStringrL†rMjsjÆrNhtjφrOjsjÆrPjEXInt32rQ†rRj©jÆrSjsjÆrTjEXCharrU†rVjsjÆrWhtjð†rXhtjL†rYjsjÆrZjEXStringr[†r\jsX


r]†r^jXaliasr_†r`jsjÆrah¹XComplexProcrb†rcjsjÆrdhtjφrejsjÆrfj©j܆rgjEXInt32rh†rijsjÆrjhtjð†rkhtjL†rljsjÆrmjEXInt32rn†roj©jà†rpjsjÆrqhtjð†rrhtjL†rsjsjÆrtjEXStringru†rvjsX


rw†rxjXdefry†rzjsjÆr{jtXfoor|†r}j©j܆r~hŒjô†rjsjÆr€j©j†rjsjÆr‚jEXInt32rƒ†r„j©jà†r…jsX
  r††r‡jHjņrˆjHXinstancer‰†rŠjHjņr‹jsj»†rŒjXendr†rŽjsX

r†rjXdefr‘†r’jsjÆr“jtXfoor”†r•j©j܆r–hŒjô†r—jsjÆr˜j©j†r™jsjÆršjEXInt32r›†rœhtj؆rhŒXclassrž†rŸj©jà†r jsX
  r¡†r¢jHjņr£jHXclassr¤†r¥jHjņr¦jsj»†r§jXendr¨†r©jsX

rª†r«hŒXfoor¬†r­jsjÆr®jŸj&†r¯jsX     r°†r±hX# "instance"r²†r³jsj»†r´hŒXfoorµ†r¶jsjÆr·jEXInt32r¸†r¹jsjÆrºhX	# "class"r»†r¼jsX


r½†r¾jXclassr¿†rÀjsjÆrÁh¹XParentr†rÃjsj»†rÄjXendrņrÆjsX

rdžrÈjXclassrɆrÊjsjÆrËh¹XChild1r̆rÍjsjÆrÎhtjä†rÏjsjÆrÐhŒXParentrцrÒjsj»†rÓjXendrÔ†rÕjsX

rÖ†r×jXclassr؆rÙjsjÆrÚh¹XChild2rÛ†rÜjsjÆrÝhtjä†rÞjsjÆrßhŒXParentrà†rájsj»†râjXendrã†räjsX

rå†ræhŒXaryrç†rèjsjÆréhtjφrêjsjÆrëhtj¿†rìhtj̆ríjsjÆrîjXofrï†rðjsjÆrñhŒXParentrò†róhtj؆rôhŒXclassrõ†röjsj»†r÷hŒXaryrø†rùjsjÆrúhtX<<rû†rüjsjÆrýhŒXChild1rþ†rÿjsj»†r	hŒXaryr	†r	jsjÆr	htX<<r	†r	jsjÆr	hŒXChild2r	†r	jsX


r		†r
	hX7# Same as not specifying a restriction, not very usefulr	†r	jsj»†r
	jXdefr	†r	jsjÆr	jtXfoor	†r	j©j܆r	hŒjô†r	jsjÆr	j©j†r	jsjÆr	hŒX_r	†r	j©jà†r	jsj»†r	jXendr	†r	jsX

r	†r	hXB# A bit more useful: any two arguments Proc that returns an Int32:r 	†r!	jsj»†r"	jXdefr#	†r$	jsjÆr%	jtXfoor&	†r'	j©j܆r(	hŒjô†r)	jsjÆr*	j©j†r+	jsjÆr,	hŒj	†r-	j©jÆr.	jsjÆr/	hŒj	†r0	jsjÆr1	htjð†r2	htjL†r3	jsjÆr4	jEXInt32r5	†r6	j©jà†r7	jsj»†r8	jXendr9	†r:	jsX


r;	†r<	hX#alias SameAsInt32 = typeof(2)r=	†r>	jsj»†r?	hX&#alias Int32OrString_ = typeof(1, "a")r@	†rA	jsX


rB	†rC	jXclassrD	†rE	jsjÆrF	h¹XPersonrG	†rH	jsX
  rI	†rJ	jXdefrK	†rL	jsjÆrM	jtX
initializerN	†rO	j©j܆rP	hŒXnamerQ	†rR	j©jà†rS	jsX
    rT	†rU	hõX@namerV	†rW	jsjÆrX	htjφrY	jsjÆrZ	hŒXnamer[	†r\	jsX
    r]	†r^	hõX@ager_	†r`	jsjÆra	htjφrb	jsjÆrc	jŸj܆rd	jsX
  re	†rf	jXendrg	†rh	jsX

  ri	†rj	jXdefrk	†rl	jsjÆrm	jtXnamern	†ro	jsX
    rp	†rq	hõX@namerr	†rs	jsX
  rt	†ru	jXendrv	†rw	jsX

  rx	†ry	jXdefrz	†r{	jsjÆr|	jtXager}	†r~	jsX
    r	†r€	hõX@ager	†r‚	jsX
  rƒ	†r„	jXendr…	†r†	jsj»†r‡	jXendrˆ	†r‰	jsX


rŠ	†r‹	hŒXjohnrŒ	†r	jsjÆrŽ	htjφr	jsjÆr	e(hŒXPersonr‘	†r’	htj؆r“	hŒXnewr”	†r•	jsjÆr–	jHjņr—	jHXJohnr˜	†r™	jHjņrš	jsj»†r›	hŒXpeterrœ	†r	jsjÆrž	htjφrŸ	jsjÆr 	hŒXPersonr¡	†r¢	htj؆r£	hŒXnewr¤	†r¥	jsjÆr¦	jHjņr§	jHXPeterr¨	†r©	jHjņrª	jsX

r«	†r¬	hŒXjohnr­	†r®	htj؆r¯	hŒXnamer°	†r±	jsjÆr²	hX
#=> "John"r³	†r´	jsj»†rµ	hŒXjohnr¶	†r·	htj؆r¸	hŒXager¹	†rº	jsjÆr»	hX#=> 0r¼	†r½	jsX

r¾	†r¿	hŒXpeterrÀ	†rÁ	htj؆rÂ	hŒXnamerÃ	†rÄ	jsjÆrÅ	hX#=> "Peter"rÆ	†rÇ	jsX


rÈ	†rÉ	jXclassrÊ	†rË	jsjÆrÌ	h¹XPersonrÍ	†rÎ	jsX
  rÏ	†rÐ	jXdefrÑ	†rÒ	jsjÆrÓ	h¹XselfrÔ	†rÕ	htj؆rÖ	jtXnewr×	†rØ	j©j܆rÙ	hŒXnamerÚ	†rÛ	j©jà†rÜ	jsX
    rÝ	†rÞ	hŒXinstancerß	†rà	jsjÆrá	htjφrâ	jsjÆrã	hŒXPersonrä	†rå	htj؆ræ	hŒXallocaterç	†rè	jsX
    ré	†rê	hŒXinstancerë	†rì	htj؆rí	hŒX
initializerî	†rï	j©j܆rð	hŒXnamerñ	†rò	j©jà†ró	jsX
    rô	†rõ	hŒXinstancerö	†r÷	jsX
  rø	†rù	jXendrú	†rû	jsX
 rü	†rý	jXendrþ	†rÿ	jsX


r
†r
jXifr
†r
jsjÆr
hŒjY†r
htj؆r
hŒXis_a?r
†r
j©j܆r	
jEXStringr

†r
j©jà†r
jsX
  r
†r
hX# here a is a Stringr
†r
jsjȠr
jXendr
†r
jsX

r
†r
jXifr
†r
jsjÆr
hŒXbr
†r
htj؆r
hŒXis_a?r
†r
j©j܆r
jEXNumberr
†r 
j©jà†r!
jsX
  r"
†r#
hX# here b is a Numberr$
†r%
jsjȠr&
jXendr'
†r(
jsX


r)
†r*
hŒjY†r+
jsjÆr,
htjφr-
jsjÆr.
hŒXsome_conditionr/
†r0
jsjÆr1
j©j–†r2
jsjÆr3
jŸj&†r4
jsjÆr5
j©j†r6
jsjÆr7
jHjņr8
jHXhellor9
†r:
jHjņr;
jsjȠr<
hX# a : Int32 | Stringr=
†r>
jsX

r?
†r@
jXifrA
†rB
jsjÆrC
hŒjY†rD
htj؆rE
hŒXis_a?rF
†rG
j©j܆rH
jEXNumberrI
†rJ
j©jà†rK
jsX
  rL
†rM
hX# a : Int32rN
†rO
jsjȠrP
jXelserQ
†rR
jsX
  rS
†rT
hX# a : StringrU
†rV
jsjȠrW
jXendrX
†rY
jsX


rZ
†r[
jXifr\
†r]
jsjÆr^
hŒjY†r_
htj؆r`
hŒXis_a?ra
†rb
j©j܆rc
jEXStringrd
†re
j©jà†rf
jsjÆrg
htX&&rh
†ri
jsjÆrj
hŒj
†rk
htj؆rl
hŒXis_a?rm
†rn
j©j܆ro
jEXNumberrp
†rq
j©jà†rr
jsX
  rs
†rt
hX&# here a is a String and b is a Numberru
†rv
jsjȠrw
jXendrx
†ry
jsX


rz
†r{
hŒjY†r|
htj؆r}
j=X+r~
†r
j©j܆r€
hŒj
†r
j©jà†r‚
jsX


rƒ
†r„
jXstructr…
†r†
jsjÆr‡
h¹XVector2rˆ
†r‰
jsX
  rŠ
†r‹
jJXgetterrŒ
†r
jsjÆrŽ
hŒjô†r
j©jÆr
jsjÆr‘
hŒXyr’
†r“
jsX

  r”
†r•
jXdefr–
†r—
jsjÆr˜
jtX
initializer™
†rš
j©j܆r›
hõX@xrœ
†r
j©jÆrž
jsjÆrŸ
hõX@yr 
†r¡
j©jà†r¢
jsX
  r£
†r¤
jXendr¥
†r¦
jsX

  r§
†r¨
jXdefr©
†rª
jsjÆr«
jtj~
†r¬
j©j܆r­
hŒXotherr®
†r¯
j©jà†r°
jsX
    r±
†r²
hŒXVector2r³
†r´
htj؆rµ
hŒXnewr¶
†r·
j©j܆r¸
hŒjô†r¹
jsjÆrº
htj~
†r»
jsjÆr¼
hŒXotherr½
†r¾
htj؆r¿
hŒjô†rÀ
j©jÆrÁ
jsjÆrÂ
hŒj’
†rÃ
jsjÆrÄ
htj~
†rÅ
jsjÆrÆ
hŒXotherrÇ
†rÈ
htj؆rÉ
hŒj’
†rÊ
j©jà†rË
jsX
  rÌ
†rÍ
jXendrÎ
†rÏ
jsj»†rÐ
jXendrÑ
†rÒ
jsX

rÓ
†rÔ
hŒXv1rÕ
†rÖ
jsjÆr×
htjφrØ
jsjÆrÙ
hŒXVector2rÚ
†rÛ
htj؆rÜ
hŒXnewrÝ
†rÞ
j©j܆rß
jŸj&†rà
j©jÆrá
jsjÆrâ
jŸjF†rã
j©jà†rä
jsj»†rå
hŒXv2ræ
†rç
jsjÆrè
htjφré
jsjÆrê
hŒXVector2rë
†rì
htj؆rí
hŒXnewrî
†rï
j©j܆rð
jŸjÁ†rñ
j©jÆrò
jsjÆró
jŸX4rô
†rõ
j©jà†rö
jsj»†r÷
hŒXv1rø
†rù
jsjÆrú
htj~
†rû
jsjÆrü
hŒXv2rý
†rþ
jsX               rÿ
†rhX#=> Vector2(@x=4, @y=6)r†rjsX




r†rjXstructr†rjsjÆrh¹XVector2r†r	jsX
  r
†rjXdefr†r
jsjÆrjtjð†rjsX
    r†rhŒXVector2r†rhtj؆rhŒXnewr†rj©j܆rhtjð†rhŒjô†rj©jÆrjsjÆrhtjð†rhŒj’
†rj©jà†rjsX
  r†r jXendr!†r"jsj»†r#jXendr$†r%jsX

r&†r'hŒXv1r(†r)jsjÆr*htjφr+jsjÆr,hŒXVector2r-†r.htj؆r/hŒXnewr0†r1j©j܆r2jŸj&†r3j©jÆr4jsjÆr5jŸjF†r6j©jà†r7jsj»†r8htjð†r9hŒXv1r:†r;jsX                    r<†r=hX#=> Vector2(@x=-1, @y=-2)r>†r?jsX





r@†rAjXclassrB†rCjsjÆrDh¹XMyArrayrE†rFjsX
  rG†rHjXdefrI†rJjsjÆrKjtX[]rL†rMj©j܆rNhŒXindexrO†rPj©jà†rQjsX
    rR†rShX# ...rT†rUjsX
  rV†rWjXendrX†rYjsX

  rZ†r[jXdefr\†r]jsjÆr^jtX[]r_†r`j©j܆rahŒXindex1rb†rcj©jÆrdjsjÆrehŒXindex2rf†rgj©jÆrhjsjÆrihŒXindex3rj†rkj©jà†rljsX
    rm†rnhX# ...ro†rpjsX
  rq†rrjXendrs†rtjsX

  ru†rvjXdefrw†rxjsjÆryjtX[]=rz†r{j©j܆r|hŒXindexr}†r~j©jÆrjsjÆr€hŒXvaluer†r‚j©jà†rƒjsX
    r„†r…hX# ...r††r‡jsX
  rˆ†r‰jXendrІr‹jsj»†rŒjXendr†rŽjsX

r†rhŒXarrayr‘†r’jsjÆr“htjφr”jsjÆr•hŒXMyArrayr–†r—htj؆r˜hŒXnewr™†ršjsX

r›†rœhŒXarrayr†ržhtj¿†rŸjŸj&†r htj̆r¡jsX       r¢†r£hX# invokes the first methodr¤†r¥jsj»†r¦hŒXarrayr§†r¨htj¿†r©jŸj&†rªj©jÆr«jsjÆr¬jŸjF†r­j©jÆr®jsjÆr¯jŸjÁ†r°htj̆r±jsjÆr²hX# invokes the second methodr³†r´jsj»†rµhŒXarrayr¶†r·htj¿†r¸jŸj&†r¹htj̆rºjsjÆr»htjφr¼jsjÆr½jŸjF†r¾jsX   r¿†rÀhX# invokes the third methodrÁ†rÂjsX

rÆrÄhŒXarrayrņrÆhtj؆rÇj=X[]rȆrÉj©j܆rÊjŸj&†rËj©jà†rÌjsX       r͆rÎhX# invokes the first methodrφrÐjsj»†rÑhŒXarrayrÒ†rÓhtj؆rÔj=X[]rÕ†rÖj©j܆r×jŸj&†rØj©jÆrÙjsjÆrÚjŸjF†rÛj©jÆrÜjsjÆrÝjŸjÁ†rÞj©jà†rßjsjÆràhX# invokes the second methodrá†râjsj»†rãhŒXarrayrä†råhtj؆ræj=X[]=rç†rèj©j܆réjŸj&†rêj©jÆrëjsjÆrìjŸjF†ríj©jà†rîjsX   rï†rðhX# invokes the third methodrñ†ròjsX


ró†rôjEXraiserõ†röjsjÆr÷jHjņrøjHXOH NO!rù†rújHjņrûjsj»†rüjEXraiserý†rþjsjÆrÿjEX	Exceptionr†rhtj؆rhŒXnewr†rj©j܆rjHjņrjHX
Some errorr†rjHjņr	j©jà†r
jsX


r†rjXclassr
†rjsjÆrh¹XMyExceptionr†rjsjÆrhtjä†rjsjÆrjEX	Exceptionr†rjsj»†rjXendr†rjsX


r†rjXbeginr†rjsX
  r†rjEXraiser †r!jsjÆr"hŒXMyExceptionr#†r$htj؆r%hŒXnewr&†r'j©j܆r(jHjņr)jHXOH NO!r*†r+jHjņr,j©jà†r-jsj»†r.jXrescuer/†r0jsjÆr1hŒXexr2†r3jsjÆr4j©j†r5jsjÆr6hŒXMyExceptionr7†r8jsX
  r9†r:jEXputsr;†r<jsjÆr=jHjņr>jHXRescued MyException: r?†r@jÇX#{rA†rBhŒXexrC†rDhtj؆rEhŒXmessagerF†rGjÇj†rHjHjņrIjsj»†rJjXendrK†rLjsX


rM†rNjXbeginrO†rPjsX
  rQ†rRhX# ...rS†rTjsj»†rUjXrescuerV†rWjsjÆrXhŒXexrY†rZjsjÆr[j©j†r\jsjÆr]hŒXMyExceptionr^†r_jsjÆr`htjæ†rajsjÆrbhŒXMyOtherExceptionrc†rdjsX
  re†rfhX&# only MyException or MyOtherExceptionrg†rhjsj»†rijXrescuerj†rkjsX
  rl†rmhX# any other kind of exceptionrn†rojsj»†rpjXensurerq†rrjsX
  rs†rtjEXputsru†rvjsjÆrwjHjņrxjHX
Cleanup...ry†rzjHjņr{jsj»†r|jXendr}†r~jsX


r†r€jXdefr†r‚jsjÆrƒjtXsome_methodr„†r…jsX
  r††r‡hŒXsomething_dangerousrˆ†r‰jsj»†rŠjXrescuer‹†rŒjsX
  r†rŽhX## execute if an exception is raisedr†rjsj»†r‘jXendr’†r“jsX


r”†r•hŒXarrayr–†r—jsjÆr˜htjφr™jsjÆršhtj¿†r›jŸj&†rœj©jÆrjsjÆržjŸjF†rŸj©jÆr jsjÆr¡jŸjÁ†r¢htj̆r£jsj»†r¤hŒXarrayr¥†r¦htj¿†r§jŸjô
†r¨htj̆r©jsX  rª†r«hX# raises because of IndexErrorr¬†r­jsj»†r®hŒXarrayr¯†r°htj¿†r±jŸjô
†r²htX]?r³†r´jsjÆrµhX,# returns nil because of index out of boundsr¶†r·jsX


r¸†r¹jXdefrº†r»jsjÆr¼jtX	some_procr½†r¾j©j܆r¿htX&rÀ†rÁhŒXblockrÂ†rÃjsjÆrÄj©j†rÅjsjÆrÆjEXInt32rÇ†rÈjsjÆrÉhtjð†rÊhtjL†rËjsjÆrÌjEXInt32rÍ†rÎj©jà†rÏjsX
  rÐ†rÑhŒXblockrÒ†rÓjsj»†rÔjXendrÕ†rÖjsX

r×†rØhŒjô†rÙjsjÆrÚhtjφrÛjsjÆrÜjŸj܆rÝjsj»†rÞhŒXprocrß†ràjsjÆráhtjφrâjsjÆrãhtjð†rähtjL†råj©j܆ræhŒj׆rçjsjÆrèj©j†réjsjÆrêjEXInt32rë†rìj©jà†ríjsjÆrîj©jB†rïjsjÆrðhŒjô†rñjsjÆròhtX+=ró†rôjsjÆrõhŒj׆röjsjÆr÷j©j†røjsj»†rùhŒXprocrú†rûjsjÆrühtjφrýjsjÆrþhŒX	some_procrÿ†r
j©j܆r
htjÀ†r
hŒXprocr
†r
j©jà†r
jsjȠr
hŒXprocr
†r
htj؆r	
hŒXcallr

†r
j©j܆r
jŸj&†r

j©jà†r
jsX  r
†r
hX#=> 1r
†r
jsjȠr
hŒXprocr
†r
htj؆r
hŒXcallr
†r
j©j܆r
jŸX10r
†r
j©jà†r
jsjÆr
hX#=> 11r
†r
jsjȠr 
hŒjô†r!
jsjÆr"
hX#=> 11r#
†r$
jsX


r%
†r&
jXdefr'
†r(
jsjÆr)
jtXaddr*
†r+
j©j܆r,
hŒjô†r-
j©jÆr.
jsjÆr/
hŒj’
†r0
j©jà†r1
jsX
  r2
†r3
hŒjô†r4
jsjÆr5
htj~
†r6
jsjÆr7
hŒj’
†r8
jsjȠr9
jXendr:
†r;
jsX

r<
†r=
hŒXadderr>
†r?
jsjÆr@
htjφrA
jsjÆrB
htjð†rC
htjL†rD
hŒXaddrE
†rF
j©j܆rG
jEXInt32rH
†rI
j©jÆrJ
jsjÆrK
jEXInt32rL
†rM
j©jà†rN
jsjȠrO
hŒXadderrP
†rQ
htj؆rR
hŒXcallrS
†rT
j©j܆rU
jŸj&†rV
j©jÆrW
jsjÆrX
jŸjF†rY
j©jà†rZ
jsjÆr[
hX#=> 3r\
†r]
jsX


r^
†r_
jXmoduler`
†ra
jsjÆrb
jXCursesrc
†rd
jsX
  re
†rf
jXclassrg
†rh
jsjÆri
h¹XWindowrj
†rk
jsX
  rl
†rm
jXendrn
†ro
jsjȠrp
jXendrq
†rr
jsX

rs
†rt
hŒXCursesru
†rv
htX::rw
†rx
hŒXWindowry
†rz
htj؆r{
hŒXnewr|
†r}
jsX


r~
†r
jXmoduler€
†r
jsjÆr‚
jX	ItemsSizerƒ
†r„
jsX
  r…
†r†
jXdefr‡
†rˆ
jsjÆr‰
jtXsizerŠ
†r‹
jsX
    rŒ
†r
hŒXitemsrŽ
†r
htj؆r
hŒXsizer‘
†r’
jsX
  r“
†r”
jXendr•
†r–
jsj»†r—
jXendr˜
†r™
jsX

rš
†r›
jXclassrœ
†r
jsjÆrž
h¹XItemsrŸ
†r 
jsX
  r¡
†r¢
jXincluder£
†r¤
jsjÆr¥
hŒX	ItemsSizer¦
†r§
jsX

  r¨
†r©
jXdefrª
†r«
jsjÆr¬
jtXitemsr­
†r®
jsX
    r¯
†r°
htj¿†r±
jŸj&†r²
j©jÆr³
jsjÆr´
jŸjF†rµ
j©jÆr¶
jsjÆr·
jŸjÁ†r¸
htj̆r¹
jsX
  rº
†r»
jXendr¼
†r½
jsj»†r¾
jXendr¿
†rÀ
jsX

rÁ
†rÂ
hŒXitemsrÃ
†rÄ
jsjÆrÅ
htjφrÆ
jsjÆrÇ
hŒXItemsrÈ
†rÉ
htj؆rÊ
hŒXnewrË
†rÌ
jsj»†rÍ
hŒXitemsrÎ
†rÏ
htj؆rÐ
hŒXsizerÑ
†rÒ
jsjÆrÓ
hX#=> 3rÔ
†rÕ
jsX


rÖ
†r×
jXmodulerØ
†rÙ
jsjÆrÚ
jXBase64rÛ
†rÜ
jsX
  rÝ
†rÞ
jXextendrß
†rà
jsjÆrá
jRXselfrâ
†rã
jsX

  rä
†rå
jXdefræ
†rç
jsjÆrè
jtXencode64ré
†rê
j©j܆rë
hŒXstringrì
†rí
j©jà†rî
jsX
    rï
†rð
hX# ...rñ
†rò
jsX
  ró
†rô
jXendrõ
†rö
jsX

  r÷
†rø
jXdefrù
†rú
jsjÆrû
jtXdecode64rü
†rý
j©j܆rþ
hŒXstringrÿ
†rj©jà†rjsX
    r†rhX# ...r†rjsX
  r†rjXendr†r	jsj»†r
jXendr†rjsX

r
†rhŒXBase64r†rhtj؆rhŒXencode64r†rjsjÆrjHjņrjHXhellor†rjHjņrjsjÆrhX#=> "aGVsbG8="r†rjsX


r†rjXifr†rjsjÆr hŒXsome_conditionr!†r"jsX
  r#†r$hŒjY†r%jsjÆr&htjφr'jsjÆr(jŸj&†r)jsj»†r*jXelser+†r,jsX
  r-†r.hŒjY†r/jsjÆr0htjφr1jsjÆr2jHjņr3jHXhellor4†r5jHjņr6jsj»†r7jXendr8†r9jsX

r:†r;hŒXa_as_intr<†r=jsjÆr>htjφr?jsjÆr@hŒjY†rAjsjÆrBjXasrC†rDjsjÆrEjEXInt32rF†rGjsj»†rHhŒXa_as_intrI†rJhtj؆rKhŒXabsrL†rMjsX
          rN†rOhX.# works, compiler knows that a_as_int is Int32rP†rQjsX


rR†rShŒXptrrT†rUjsjÆrVhtjφrWjsjÆrXjEXPointerrY†rZj©j܆r[jEXInt32r\†r]j©jà†r^htj؆r_hŒXmallocr`†raj©j܆rbjŸj&†rcj©jà†rdjsj»†rehŒXptrrf†rgjsjÆrhjXasri†rjjsjÆrkjEXInt8rl†rmhtj·†rnjsX                    ro†rphX#:: Pointer(Int8)rq†rrjsX


rs†rthŒXarrayru†rvjsjÆrwhtjφrxjsjÆryhtj¿†rzjŸj&†r{j©jÆr|jsjÆr}jŸjF†r~j©jÆrjsjÆr€jŸjÁ†rhtj̆r‚jsX

rƒ†r„hX7# object_id returns the address of an object in memory,r…†r†jsj»†r‡hX*# so we create a pointer with that addressrˆ†r‰jsj»†rŠhŒXptrr‹†rŒjsjÆrhtjφrŽjsjÆrjEXPointerr†r‘j©j܆r’jEXVoidr“†r”j©jà†r•htj؆r–hŒXnewr—†r˜j©j܆r™hŒXarrayrš†r›htj؆rœhŒX	object_idr†ržj©jà†rŸjsX

r †r¡hX0# Now we cast that pointer to the same type, andr¢†r£jsj»†r¤hX# we should get the same valuer¥†r¦jsj»†r§hŒXarray2r¨†r©jsjÆrªhtjφr«jsjÆr¬hŒXptrr­†r®jsjÆr¯jXasr°†r±jsjÆr²jEXArrayr³†r´j©j܆rµjEXInt32r¶†r·j©jà†r¸jsj»†r¹hŒXarray2rº†r»htj؆r¼hŒXsame?r½†r¾j©j܆r¿hŒXarrayrÀ†rÁj©jà†rÂjsjÆrÃhX#=> truerĆrÅjsX


rƆrÇhŒjY†rÈjsjÆrÉhtjφrÊjsjÆrËjŸj&†rÌjsj»†rÍhŒj
†rÎjsjÆrÏhtjφrÐjsjÆrÑhŒjY†rÒjsjÆrÓjXasrÔ†rÕjsjÆrÖjEXInt32r׆rØjsjÆrÙhtjæ†rÚjsjÆrÛjEXFloat64r܆rÝjsj»†rÞhŒj
†rßjsjÆràhX#:: Int32 | Float64rá†râjsX


rã†rähŒXaryrå†ræjsjÆrçhtjφrèjsjÆréhtj¿†rêjŸj&†rëj©jÆrìjsjÆríjŸjF†rîj©jÆrïjsjÆrðjŸjÁ†rñhtj̆ròjsX

ró†rôhX7# We want to create an array 1, 2, 3 of Int32 | Float64rõ†röjsj»†r÷hŒXary2rø†rùjsjÆrúhtjφrûjsjÆrühŒXaryrý†rþhtj؆rÿhŒXmapr†rjsjÆrj©jB†rjsjÆrhtjæ†rhŒjô†rhtjæ†rjsjÆrhŒjô†r	jsjÆr
jXasr†rjsjÆr
jEXInt32r†rjsjÆrhtjæ†rjsjÆrjEXFloat64r†rjsjÆrj©j†rjsX

r†rhŒXary2r†rjsjÆrhX#:: Array(Int32 | Float64)r†rjsj»†rhŒXary2r†r jsjÆr!htX<<r"†r#jsjÆr$jhX1.5r%†r&jsjÆr'hX# OKr(†r)jsX


r*†r+jXclassr,†r-jsjÆr.h¹XPersonr/†r0jsX
  r1†r2jXdefr3†r4e(jsjÆr5jtX
initializer6†r7j©j܆r8hõX@namer9†r:j©jà†r;jsX
  r<†r=jXendr>†r?jsX

  r@†rAjXdefrB†rCjsjÆrDjtXnamerE†rFjsX
    rG†rHhõX@namerI†rJjsX
  rK†rLjXendrM†rNjsj»†rOjXendrP†rQjsX

rR†rShŒjY†rTjsjÆrUhtjφrVjsjÆrWhtj¿†rXhtj̆rYjsjÆrZjXofr[†r\jsjÆr]hŒXPersonr^†r_jsj»†r`hŒjô†rajsjÆrbhtjφrcjsjÆrdhŒjY†rehtj؆rfhŒXmaprg†rhjsjÆrij©jB†rjjsjÆrkhtjæ†rlhŒXfrm†rnhtjæ†rojsjÆrphŒjm†rqhtj؆rrhŒXnamers†rtjsjÆruj©j†rvjsjÆrwhX&# Error: can't infer block return typerx†ryjsX


rz†r{hŒjY†r|jsjÆr}htjφr~jsjÆrhtj¿†r€htj̆rjsjÆr‚jXofrƒ†r„jsjÆr…hŒXPersonr††r‡jsj»†rˆhŒjô†r‰jsjÆrŠhtjφr‹jsjÆrŒhŒjY†rhtj؆rŽhŒXmapr†rjsjÆr‘j©jB†r’jsjÆr“htjæ†r”hŒjm†r•htjæ†r–jsjÆr—hŒjm†r˜htj؆r™hŒXnamerš†r›jsjÆrœjXasr†ržjsjÆrŸjEXStringr †r¡jsjÆr¢j©j†r£jsjÆr¤hX# OKr¥†r¦jsX


r§†r¨hŒXPersonr©†rªhtj؆r«hŒXnewr¬†r­jsjÆr®jHjņr¯jHXJohnr°†r±jHjņr²jsX

r³†r´hŒjY†rµjsjÆr¶htjφr·jsjÆr¸htj¿†r¹htj̆rºjsjÆr»jXofr¼†r½jsjÆr¾hŒXPersonr¿†rÀjsj»†rÁhŒjô†rÂjsjÆrÃhtjφrÄjsjÆrÅhŒjY†rÆhtj؆rÇhŒXmaprȆrÉjsjÆrÊj©jB†rËjsjÆrÌhtjæ†rÍhŒjm†rÎhtjæ†rÏjsjÆrÐhŒjm†rÑhtj؆rÒhŒXnamerÓ†rÔjsjÆrÕj©j†rÖjsjÆr×hX# OKr؆rÙjsX


rÚ†rÛjEXloopr܆rÝjsjÆrÞjXdor߆ràjsX
  rá†râhŒXdo_somethingrã†räjsX
  rå†ræjXbreakrç†rèjsjÆréjXifrê†rëjsjÆrìhŒXsome_conditionrí†rîjsj»†rïjXendrð†rñjsX


rò†rójXclassrô†rõjsjÆröh¹XPointr÷†røjsX
  rù†rújXdefrû†rüjsjÆrýjtX
initializerþ†rÿj©j܆rhõX@xr†rj©jÆrjsjÆrhõX@yr†rj©jà†rjsX
  r†r	jXendr
†rjsj»†rjXendr
†rjsX

r†rhŒXPointr†rhtj؆rhŒXnewr†rjsjÆrjŸj&†rj©jÆrjsjÆrjŸjF†rjsX

r†rhX# 2 x Int32 = 2 x 4 = 8r†rjsj»†rjXinstance_sizeofr †r!j©j܆r"hŒXPointr#†r$j©jà†r%jsjÆr&hX#=> 12r'†r(jsX


r)†r*hŒjY†r+jsjÆr,htjφr-jsjÆr.jŸj&†r/jsj»†r0jXwhiler1†r2jsjÆr3hŒjY†r4jsjÆr5htjä†r6jsjÆr7jŸX5r8†r9jsX
  r:†r;hŒjY†r<jsjÆr=htX+=r>†r?jsjÆr@jŸj&†rAjsX
  rB†rCjXifrD†rEjsjÆrFhŒjY†rGjsjÆrHhtX==rI†rJjsjÆrKjŸjÁ†rLjsX
    rM†rNjXnextrO†rPjsX
  rQ†rRjXendrS†rTjsX
  rU†rVjEXputsrW†rXjsjÆrYhŒjY†rZjsj»†r[jXendr\†r]jsj»†r^hX)# The above prints the numbers 2, 4 and 5r_†r`jsX


ra†rbjXlibrc†rdjsjÆrejXCrf†rgjsX
  rh†rihX# In C: double cos(double x)rj†rkjsX
  rl†rmjXfunrn†rojsjÆrpjtXcosrq†rrj©j܆rshŒXvaluert†rujsjÆrvj©j†rwjsjÆrxjEXFloat64ry†rzj©jà†r{jsjÆr|j©j†r}jsjÆr~jEXFloat64r†r€jsX

  r†r‚jXfunrƒ†r„jsjÆr…jtXgetchr††r‡jsjÆrˆj©j†r‰jsjÆrŠjEXInt32r‹†rŒjsX

  r†rŽjXfunr†rjsjÆr‘jtXsrandr’†r“j©j܆r”hŒXseedr•†r–jsjÆr—j©j†r˜jsjÆr™jEXUInt32rš†r›j©jà†rœjsX

  r†ržjXfunrŸ†r jsjÆr¡jtXexitr¢†r£j©j܆r¤hŒXstatusr¥†r¦jsjÆr§j©j†r¨jsjÆr©jEXInt32rª†r«j©jà†r¬jsjÆr­j©j†r®jsjÆr¯hŒXNoReturnr°†r±jsX

  r²†r³jXfunr´†rµjsjÆr¶jtXprintfr·†r¸j©j܆r¹hŒXformatrº†r»jsjÆr¼j©j†r½jsjÆr¾jEXUInt8r¿†rÀhtj·†rÁj©jÆrÂjsjÆrÃhtX...rĆrÅj©jà†rÆjsjÆrÇj©j†rÈjsjÆrÉjEXInt32rʆrËjsj»†rÌjXendr͆rÎjsX

rφrÐhŒjf†rÑhtj؆rÒhŒXcosrÓ†rÔj©j܆rÕjhX1.5rÖ†r×j©jà†rØjsjÆrÙhX
#=> 0.0707372rÚ†rÛjsj»†rÜhŒjf†rÝhtj؆rÞhŒXsrandr߆ràj©j܆rájŸX1_u32râ†rãj©jà†räjsX

rå†ræhŒjY†rçjsjÆrèhtjφréjsjÆrêjŸj&†rëjsj»†rìhŒj
†ríjsjÆrîhtjφrïjsjÆrðjŸjF†rñjsj»†ròhŒjf†róhtj؆rôhŒXprintfrõ†röjsjÆr÷jHjņrøjHX%d + %d = %drù†rújúX\nrû†rüjHjņrýj©jÆrþjsjÆrÿhŒjY†rj©jÆrjsjÆrhŒj
†rj©jÆrjsjÆrhŒjY†rjsjÆrhtj~
†rjsjÆr	hŒj
†r
jsX


r†rjXlibr
†rjsjÆrjXLibSDLr†rjsX
  r†rjXfunr†rjsjÆrjtXinitr†rjsjÆrhtjφrjsjÆrhŒXSDL_Initr†rj©j܆rhŒXflagsr†r jsjÆr!j©j†r"jsjÆr#jEXUInt32r$†r%j©jà†r&jsjÆr'j©j†r(jsjÆr)jEXInt32r*†r+jsj»†r,jXendr-†r.jsX

r/†r0jXlibr1†r2jsjÆr3jXLLVMIntrinsicsr4†r5jsX
  r6†r7jXfunr8†r9jsjÆr:jtXceil_f32r;†r<jsjÆr=htjφr>jsjÆr?jHjņr@jHX
llvm.ceil.f32rA†rBjHjņrCj©j܆rDhŒXvaluerE†rFjsjÆrGj©j†rHjsjÆrIjEXFloat32rJ†rKj©jà†rLjsjÆrMj©j†rNjsjÆrOjEXFloat32rP†rQjsj»†rRjXendrS†rTjsX

rU†rVjXlibrW†rXjsjÆrYjXMyLibrZ†r[jsX
  r\†r]jXfunr^†r_jsjÆr`jtXmy_funra†rbj©j܆rchŒX	some_sizerd†rejsjÆrfj©j†rgjsjÆrhhŒXLibCri†rjhtX::rk†rlhŒXSizeTrm†rnj©jà†rojsj»†rpjXendrq†rrjsX

rs†rthtX@[ru†rvh±XLinkrw†rxj©j܆ryjHjņrzjHXpcrer{†r|jHjņr}j©jà†r~htj̆rjsj»†r€jXlibr†r‚jsjÆrƒjXLibPCREr„†r…jsj»†r†jXendr‡†rˆjsX


r‰†rŠjXlibr‹†rŒjsjÆrjjf†rŽjsX
  r†rjXifdefr‘†r’jsjÆr“hŒXx86_64r”†r•jsX
    r–†r—jXaliasr˜†r™jsjÆršh¹XSizeTr›†rœjsjÆrhtjφržjsjÆrŸjEXUInt64r †r¡jsX
  r¢†r£jXelser¤†r¥jsX
    r¦†r§jXaliasr¨†r©jsjÆrªh¹XSizeTr«†r¬jsjÆr­htjφr®jsjÆr¯jEXUInt32r°†r±jsX
  r²†r³jXendr´†rµjsX

  r¶†r·jXfunr¸†r¹jsjÆrºjtXmemcmpr»†r¼j©j܆r½hŒXp1r¾†r¿jsjÆrÀj©j†rÁjsjÆrÂjEXVoidrÆrÄhtj·†rÅj©jÆrÆjsjÆrÇhŒXp2rȆrÉjsjÆrÊj©j†rËjsjÆrÌjEXVoidr͆rÎhtj·†rÏj©jÆrÐjsjÆrÑhŒXsizerÒ†rÓjsjÆrÔj©j†rÕjsjÆrÖhŒjf†r×htX::r؆rÙhŒXSizeTrÚ†rÛj©jà†rÜjsjÆrÝj©j†rÞjsjÆrßjEXInt32rà†rájsj»†râjXendrã†räjsX


rå†ræjXlibrç†rèjsjÆréjXXrê†rëjsX
  rì†ríjXenumrî†rïjsjÆrðh¹XSomeEnumrñ†ròjsX
    ró†rôhŒXTenrõ†röjsjÆr÷htjφrøjsjÆrùjŸX10rú†rûjsX
    rü†rýhŒXTwentyrþ†rÿjsjÆrhtjφrjsjÆrjŸX10r†rjsjÆrhtj·†rjsjÆrjŸjF†rjsX
    r	†r
hŒX	ThirtyTwor†rjsjÆr
htjφrjsjÆrjŸj&†rjsjÆrhtX<<r†rjsjÆrjŸj8†rjsX
  r†rjXendr†rjsj»†rjXendr†rjsX


r†rjXlibr†r jsjÆr!jjê†r"jsX
  r#†r$jXenumr%†r&jsjÆr'h¹XSomeEnumr(†r)jsX
    r*†r+hŒXAr,†r-jsjÆr.htjφr/jsjÆr0jŸX1_u32r1†r2jsX
  r3†r4jXendr5†r6jsj»†r7jXendr8†r9jsX


r:†r;hŒjê†r<htX::r=†r>hŒXSomeEnumr?†r@htX::rA†rBhŒXZerorC†rDjsjÆrEhX#=> 0_i8rF†rGjsj»†rHhŒjê†rIhtX::rJ†rKhŒXSomeEnumrL†rMhtX::rN†rOhŒXTworP†rQjsX  rR†rShX#=> 2_i8rT†rUjsX


rV†rWjXlibrX†rYjsjÆrZjjê†r[jsX
  r\†r]jXfunr^†r_jsjÆr`jtXcallbackra†rbj©j܆rchŒjm†rdjsjÆrej©j†rfjsjÆrgjEXInt32rh†rijsjÆrjhtjð†rkhtjL†rljsjÆrmjEXInt32rn†roj©jà†rpjsj»†rqjXendrr†rsjsX


rt†ruhŒjm†rvjsjÆrwhtjφrxjsjÆryhtjð†rzhtjL†r{j©j܆r|hŒjô†r}jsjÆr~j©j†rjsjÆr€jEXInt32r†r‚j©jà†rƒjsjÆr„j©jB†r…jsjÆr†hŒjô†r‡jsjÆrˆhtj~
†r‰jsjÆrŠjŸj&†r‹jsjÆrŒj©j†rjsj»†rŽhŒjê†rhtj؆rhŒXcallbackr‘†r’j©j܆r“hŒjm†r”j©jà†r•jsX


r–†r—hŒjê†r˜htj؆r™hŒXcallbackrš†r›jsjÆrœhtjð†rhtjL†ržj©j܆rŸhŒjô†r j©jà†r¡jsjÆr¢j©jB†r£jsjÆr¤hŒjô†r¥jsjÆr¦htj~
†r§jsjÆr¨jŸj&†r©jsjÆrªj©j†r«jsX


r¬†r­hŒjê†r®htj؆r¯hŒXcallbackr°†r±jsjÆr²jDXnilr³†r´jsX


rµ†r¶jXlibr·†r¸jsjÆr¹jXLibFoorº†r»jsX
  r¼†r½jXfunr¾†r¿jsjÆrÀjtXstore_callbackrÁ†rÂj©j܆rÃhŒXcallbackrĆrÅjsjÆrÆj©j†rÇjsjÆrÈhtjð†rÉhtjL†rÊj©jà†rËjsX
  r̆rÍjXfunrΆrÏjsjÆrÐjtXexecute_callbackrцrÒjsj»†rÓjXendrÔ†rÕjsX

rÖ†r×hŒXLibFoor؆rÙhtj؆rÚhŒXstore_callbackrÛ†rÜjsjÆrÝhtjð†rÞhtjL†rßj©jB†ràjsjÆrájEXraiserâ†rãjsjÆräjHjņråjHXOH NO!ræ†rçjHjņrèjsjÆréj©j†rêjsj»†rëhŒXLibFoorì†ríhtj؆rîhŒXexecute_callbackrï†rðjsX


rñ†ròjXlibró†rôjsjÆrõjXLibFoorö†r÷jsX
  rø†rùjXfunrú†rûjsjÆrüjtXstore_callbackrý†rþj©j܆rÿhŒXcallbackr†rjsjÆrj©j†rjsjÆrhtjð†rhtjL†rj©jà†rjsX

  r†r	htX@[r
†rh±XRaisesr†r
htj̆rjsX
  r†rjXfunr†rjsjÆrjtXexecute_callbackr†rjsj»†rjXendr†rjsX


r†rhtX@[r†rh±XLinkr†rj©j܆rjHjņr jHXpcrer!†r"jHjņr#j©jà†r$htj̆r%jsj»†r&jXlibr'†r(jsjÆr)jXPCREr*†r+jsX
  r,†r-jŠXINFO_CAPTURECOUNTr.†r/jsjÆr0htjφr1jsjÆr2jŸjF†r3jsj»†r4jXendr5†r6jsX

r7†r8jŠXPCREr9†r:htX::r;†r<jŠXINFO_CAPTURECOUNTr=†r>jsjÆr?hX#=> 2r@†rAjsX


rB†rCjXlibrD†rEjsjÆrFjjÞ†rGjsX
  rH†rIhX# In C:rJ†rKjsX
  rL†rMhX#rN†rOjsX
  rP†rQhX#  union IntOrFloat {rR†rSjsX
  rT†rUhX#    int some_int;rV†rWjsX
  rX†rYhX#    double some_float;rZ†r[jsX
  r\†r]hX#  };r^†r_jsX
  r`†rajXunionrb†rcjsjÆrdh¹X
IntOrFloatre†rfjsX
    rg†rhhŒXsome_intri†rjjsjÆrkj©j†rljsjÆrmjEXInt32rn†rojsX
    rp†rqhŒX
some_floatrr†rsjsjÆrtj©j†rujsjÆrvjEXFloat64rw†rxjsX
  ry†rzjXendr{†r|jsj»†r}jXendr~†rjsX


r€†rhŒXvaluer‚†rƒjsjÆr„htjφr…jsjÆr†hŒjÞ†r‡htX::rˆ†r‰hŒX
IntOrFloatrІr‹htj؆rŒhŒXnewr†rŽjsX


r†rhŒXvaluer‘†r’jsjÆr“htjφr”jsjÆr•jRX
uninitializedr–†r—jsjÆr˜hŒjÞ†r™htX::rš†r›hŒX
IntOrFlaotrœ†rjsj»†ržhŒXvaluerŸ†r htj؆r¡hŒXsome_intr¢†r£jsjÆr¤hX#=> some garbage valuer¥†r¦jsX


r§†r¨hŒXvaluer©†rªjsjÆr«htjφr¬jsjÆr­hŒjÞ†r®htX::r¯†r°hŒX
IntOrFloatr±†r²htj؆r³hŒXnewr´†rµjsj»†r¶hŒXvaluer·†r¸htj؆r¹hŒXsome_intrº†r»jsjÆr¼htjφr½jsjÆr¾jŸj&†r¿jsj»†rÀhŒXvaluerÁ†rÂhtj؆rÃhŒXsome_intrĆrÅjsjÆrÆhX#=> 1rdžrÈjsj»†rÉhŒXvaluerʆrËhtj؆rÌhŒX
some_floatr͆rÎjsjÆrÏhX#=> 4.94066e-324rІrÑjsX


rÒ†rÓjXdefrÔ†rÕjsjÆrÖjtX	change_itr׆rØj©j܆rÙhŒXvaluerÚ†rÛj©jà†rÜjsX
  r݆rÞhŒXvaluer߆ràhtj؆ráhŒXsome_intrâ†rãjsjÆrähtjφråjsjÆræjŸj&†rçjsj»†rèjXendré†rêjsX

rë†rìhŒXvaluerí†rîjsjÆrïhtjφrðjsjÆrñhŒjÞ†ròhtX::ró†rôhŒX
IntOrFloatrõ†röhtj؆r÷hŒXnewrø†rùjsj»†rúhŒX	change_itrû†rüjsjÆrýhŒXvaluerþ†rÿjsj»†rhŒXvaluer†rhtj؆rhŒXsome_intr†rjsjÆrhX#=> 0r†rjsX


r	†r
jXlibr†rjsjÆr
jjf†rjsX
  r†rhX# In C:r†rjsX
  r†rhjN†rjsX
  r†rhX#  struct TimeZone {r†rjsX
  r†rhX#    int minutes_west;r†rjsX
  r†rhX#    int dst_time;r †r!jsX
  r"†r#hX#  };r$†r%jsX
  r&†r'jXstructr(†r)jsjÆr*h¹XTimeZoner+†r,jsX
    r-†r.hŒXminutes_westr/†r0jsjÆr1j©j†r2jsjÆr3jEXInt32r4†r5jsX
    r6†r7hŒXdst_timer8†r9jsX     r:†r;j©j†r<jsjÆr=jEXInt32r>†r?jsX
  r@†rAjXendrB†rCjsj»†rDjXendrE†rFjsX


rG†rHjXlibrI†rJjsjÆrKjjf†rLjsX
  rM†rNhX# This is a forward declarationrO†rPjsX
  rQ†rRjXstructrS†rTjsjÆrUh¹XNoderV†rWjsX
  rX†rYjXendrZ†r[jsX

  r\†r]jXstructr^†r_jsjÆr`h¹XNodera†rbjsX
    rc†rdhŒXnodere†rfjsjÆrgj©j†rhjsjÆrihŒXNoderj†rkhtj·†rljsX
  rm†rnjXendro†rpjsj»†rqjXendrr†rsjsX


rt†ruhŒXtzrv†rwjsjÆrxhtjφryjsjÆrzhŒjf†r{htX::r|†r}hŒXTimeZoner~†rhtj؆r€hŒXnewr†r‚jsX


rƒ†r„hŒXtzr…†r†jsjÆr‡htjφrˆjsjÆr‰jRX
uninitializedrІr‹jsjÆrŒhŒjf†rhtX::rކrhŒXTimeZoner†r‘jsj»†r’hŒXtzr“†r”htj؆r•hŒXminutes_westr–†r—jsjÆr˜hX#=> some garbage valuer™†ršjsX


r›†rœhŒXtzr†ržjsjÆrŸhtjφr jsjÆr¡hŒjf†r¢htX::r£†r¤hŒXTimeZoner¥†r¦htj؆r§hŒXnewr¨†r©jsj»†rªhŒXtzr«†r¬htj؆r­hŒXminutes_westr®†r¯jsjÆr°htjφr±jsjÆr²jŸj&†r³jsj»†r´hŒXtzrµ†r¶htj؆r·hŒXminutes_westr¸†r¹jsjÆrºhX#=> 1r»†r¼jsX


r½†r¾hŒXtzr¿†rÀjsjÆrÁhtjφrÂjsjÆrÃhŒjf†rÄhtX::rņrÆhŒXTimeZonerdžrÈhtj؆rÉhŒXnewrʆrËjsjÆrÌjÝXminutes_westr͆rÎj©j†rÏjsjÆrÐjŸj&†rÑj©jÆrÒjsjÆrÓjÝXdst_timerÔ†rÕj©j†rÖe(jsjÆr×jŸjF†rØjsj»†rÙhŒXtzrÚ†rÛhtj؆rÜhŒXminutes_westr݆rÞjsjÆrßhX#=> 1rà†rájsj»†râhŒXtzrã†rähtj؆råhŒXdst_timeræ†rçjsX     rè†réhX#=> 2rê†rëjsX


rì†ríjXdefrî†rïjsjÆrðjtX	change_itrñ†ròj©j܆róhŒXtzrô†rõj©jà†röjsX
  r÷†røhŒXtzrù†rúhtj؆rûhŒXminutes_westrü†rýjsjÆrþhtjφrÿjsjÆrjŸj&†rjsj»†rjXendr†rjsX

r†rhŒXtzr†rjsjÆr	htjφr
jsjÆrhŒjf†rhtX::r
†rhŒXTimeZoner†rhtj؆rhŒXnewr†rjsj»†rhŒX	change_itr†rjsjÆrhŒXtzr†rjsj»†rhŒXtzr†rhtj؆rhŒXminutes_westr†rjsjÆr hX#=> 0r!†r"jsX


r#†r$jXlibr%†r&jsjÆr'jjf†r(jsX
  r)†r*híX$errnor+†r,jsjÆr-j©j†r.jsjÆr/jEXInt32r0†r1jsj»†r2jXendr3†r4jsX


r5†r6hŒjf†r7htj؆r8hŒXerrnor9†r:jsjÆr;hX#=> some valuer<†r=jsj»†r>hŒjf†r?htj؆r@hŒXerrnorA†rBjsjÆrChtjφrDjsjÆrEjŸj܆rFjsj»†rGhŒjf†rHhtj؆rIhŒXerrnorJ†rKjsjÆrLhX#=> 0rM†rNjsX


rO†rPjXlibrQ†rRjsjÆrSjjf†rTjsX
  rU†rVhtX@[rW†rXh±XThreadLocalrY†rZhtj̆r[jsX
  r\†r]híX$errnor^†r_jsjÆr`j©j†rajsjÆrbjEXInt32rc†rdjsj»†rejXendrf†rgjsX


rh†rijXlibrj†rkjsjÆrljjf†rmjsX
  rn†rojXfunrp†rqjsjÆrrjtXwaitpidrs†rtj©j܆ruhŒXpidrv†rwjsjÆrxj©j†ryjsjÆrzjEXInt32r{†r|j©jÆr}jsjÆr~hŒX
status_ptrr†r€jsjÆrj©j†r‚jsjÆrƒjEXInt32r„†r…htj·†r†j©jÆr‡jsjÆrˆhŒXoptionsr‰†rŠjsjÆr‹j©j†rŒjsjÆrjEXInt32rކrj©jà†rjsjÆr‘j©j†r’jsjÆr“jEXInt32r”†r•jsj»†r–jXendr—†r˜jsX


r™†ršhŒX
status_ptrr›†rœjsjÆrhtjφržjsjÆrŸjRX
uninitializedr †r¡jsjÆr¢jEXInt32r£†r¤jsX

r¥†r¦hŒjf†r§htj؆r¨hŒXwaitpidr©†rªj©j܆r«hŒXpidr¬†r­j©jÆr®jsjÆr¯jX	pointerofr°†r±j©j܆r²hŒX
status_ptrr³†r´j©jà†rµj©jÆr¶jsjÆr·hŒXoptionsr¸†r¹j©jà†rºjsX


r»†r¼hŒjf†r½htj؆r¾hŒXwaitpidr¿†rÀj©j܆rÁhŒXpidr†rÃj©jÆrÄjsjÆrÅjRXoutrƆrÇjsjÆrÈhŒX
status_ptrrɆrÊj©jÆrËjsjÆrÌhŒXoptionsr͆rÎj©jà†rÏjsX


rІrÑjXlibrÒ†rÓjsjÆrÔjjê†rÕjsX
  rÖ†r×jXtyper؆rÙjsjÆrÚh¹XCIntrÛ†rÜjsjÆrÝhtjφrÞjsjÆrßjEXInt32rà†rájsj»†râjXendrã†räjsX


rå†ræjXifdefrç†rèjsjÆréhŒXx86_64rê†rëjsX
  rì†ríhX*# some specific code for 64 bits platformsrî†rïjsj»†rðjXelserñ†ròjsX
  ró†rôhX.# some specific code for non-64 bits platformsrõ†röjsj»†r÷jXendrø†rùjsX


rú†rûjXifdefrü†rýjsjÆrþhŒXlinuxrÿ†rjsjÆrhtX&&r†rjsjÆrhŒXx86_64r†rjsX
  r†rhX&# some specific code for linux 64 bitsr	†r
jsj»†rjXendr†r
jsX


r†rjXlibr†rjsjÆrjjf†rjsX
  r†rjXifdefr†rjsjÆrhŒXlinuxr†rjsX
    r†rjXstructr†rjsjÆrh¹X
SomeStructr †r!jsX
      r"†r#hŒX
some_fieldr$†r%jsjÆr&j©j†r'jsjÆr(jEXInt32r)†r*jsX
    r+†r,jXendr-†r.jsX
  r/†r0jXelser1†r2jsX
    r3†r4jXstructr5†r6jsjÆr7h¹X
SomeStructr8†r9jsX
      r:†r;hŒX
some_fieldr<†r=jsjÆr>j©j†r?jsjÆr@jEXInt64rA†rBjsX
    rC†rDjXendrE†rFjsX
  rG†rHjXendrI†rJjsj»†rKjXendrL†rMjsX


rN†rOhX# Assigns to a local variablerP†rQjsj»†rRhŒXlocalrS†rTjsjÆrUhtjφrVjsjÆrWjŸj&†rXjsX

rY†rZhX# Assigns to a global variabler[†r\jsj»†r]híX$globalr^†r_jsjÆr`htjφrajsjÆrbjŸjô
†rcjsX

rd†rejXclassrf†rgjsjÆrhh¹XTestingri†rjjsX
  rk†rlhX!# Assigns to an instance variablerm†rnjsX
  ro†rphõX	@instancerq†rrjsjÆrshtjφrtjsjÆrujŸjF†rvjsX

  rw†rxhX# Assigns to a class variablery†rzjsX
  r{†r|hÝX@@classr}†r~jsjÆrhtjφr€jsjÆrjŸjÁ†r‚jsj»†rƒjXendr„†r…jsX


r††r‡hŒXlocalrˆ†r‰jsjÆrŠhtX+=r‹†rŒjsjÆrjŸj&†rŽjsX  r†rhX# same as: local = local + 1r‘†r’jsX

r“†r”hX*# The above is valid with these operators:r•†r–jsj»†r—hX$# +, -, *, /, %, |, &, ^, **, <<, >>r˜†r™jsX

rš†r›hŒXlocalrœ†rjsjÆržhtX||rŸ†r htjφr¡jsjÆr¢jŸj&†r£jsjÆr¤hX# same as: local || (local = 1)r¥†r¦jsj»†r§hŒXlocalr¨†r©jsjÆrªhtX&&r«†r¬htjφr­jsjÆr®jŸj&†r¯jsjÆr°hX# same as: local && (local = 1)r±†r²jsX


r³†r´hX
# A setterrµ†r¶jsj»†r·hŒXpersonr¸†r¹htj؆rºhŒXnamer»†r¼htjφr½j©j܆r¾jHjņr¿jHXJohnrÀ†rÁjHjņrÂj©jà†rÃjsX

rĆrÅhX# The above can be written as:rƆrÇjsj»†rÈhŒXpersonrɆrÊhtj؆rËhŒXnamer̆rÍjsjÆrÎhtjφrÏjsjÆrÐjHjņrÑjHXJohnrÒ†rÓjHjņrÔjsX

rÕ†rÖhX# An indexed assignmentr׆rØjsj»†rÙhŒXobjectsrÚ†rÛhtj؆rÜj=X[]=r݆rÞj©j܆rßjŸjF†ràj©jÆrájsjÆrâjŸjÁ†rãj©jà†räjsX

rå†ræhX# The above can be written as:rç†rèjsj»†réhŒXobjectsrê†rëhtj¿†rìjŸjF†ríhtj̆rîjsjÆrïhtjφrðjsjÆrñjŸjÁ†ròjsX

ró†rôhX0# Not assignment-related, but also syntax sugar:rõ†röjsj»†r÷hŒXobjectsrø†rùhtj؆rúj=X[]rû†rüj©j܆rýjŸjF†rþj©jÆrÿjsjÆrjŸjÁ†rj©jà†rjsX

r†rhX# The above can be written as:r†rjsj»†rhŒXobjectsr†r	htj¿†r
jŸjF†rj©jÆrjsjÆr
jŸjÁ†rhtj̆rjsX


r†rhŒXpersonr†rhtj؆rhŒXager†rjsjÆrhtX+=r†rjsjÆrjŸj&†rjsX        r†rhX&# same as: person.age = person.age + 1r†rjsX

r †r!hŒXpersonr"†r#htj؆r$hŒXnamer%†r&jsjÆr'htX||r(†r)htjφr*jsjÆr+jHjņr,jHXJohnr-†r.jHjņr/jsjÆr0hX0# same as: person.name || (person.name = "John")r1†r2jsj»†r3hŒXpersonr4†r5htj؆r6hŒXnamer7†r8jsjÆr9htX&&r:†r;htjφr<jsjÆr=jHjņr>jHXJohnr?†r@jHjņrAjsjÆrBhX0# same as: person.name && (person.name = "John")rC†rDjsX

rE†rFhŒXobjectsrG†rHhtj¿†rIjŸj&†rJhtj̆rKjsjÆrLhtX+=rM†rNjsjÆrOjŸjF†rPjsX        rQ†rRhX&# same as: objects[1] = objects[1] + 2rS†rTjsX

rU†rVhŒXobjectsrW†rXhtj¿†rYjŸj&†rZhtj̆r[jsjÆr\htX||r]†r^htjφr_jsjÆr`jŸjF†rajsX       rb†rchX*# same as: objects[1]? || (objects[1] = 2)rd†rejsj»†rfhŒXobjectsrg†rhhtj¿†rijŸj&†rjhtj̆rkjsjÆrlhtX&&rm†rnhtjφrojsjÆrpjŸjF†rqjsX       rr†rshX*# same as: objects[1]? && (objects[1] = 2)rt†rujsX


rv†rwjXaliasrx†ryjsjÆrzh¹XPInt32r{†r|jsjÆr}htjφr~jsjÆrjEXPointerr€†rj©j܆r‚jEXInt32rƒ†r„j©jà†r…jsX

r††r‡hŒXptrrˆ†r‰jsjÆrŠhtjφr‹jsjÆrŒhŒXPInt32r†rŽhtj؆rhŒXmallocr†r‘j©j܆r’jŸj&†r“j©jà†r”jsjÆr•hX# : Pointer(Int32)r–†r—jsX


r˜†r™jXaliasrš†r›jsjÆrœh¹XRecArrayr†ržjsjÆrŸhtjφr jsjÆr¡jEXArrayr¢†r£j©j܆r¤jEXInt32r¥†r¦j©jà†r§jsjÆr¨htjæ†r©jsjÆrªjEXArrayr«†r¬j©j܆r­hŒXRecArrayr®†r¯j©jà†r°jsX

r±†r²hŒXaryr³†r´jsjÆrµhtjφr¶jsjÆr·htj¿†r¸htj̆r¹jsjÆrºjXofr»†r¼jsjÆr½hŒXRecArrayr¾†r¿jsj»†rÀhŒXaryrÁ†rÂhtj؆rÃhŒXpushrĆrÅjsjÆrÆhtj¿†rÇjŸj&†rÈj©jÆrÉjsjÆrÊjŸjF†rËj©jÆrÌjsjÆrÍjŸjÁ†rÎhtj̆rÏjsj»†rÐhŒXaryrцrÒhtj؆rÓhŒXpushrÔ†rÕjsjÆrÖhŒXaryr׆rØjsj»†rÙhŒXaryrÚ†rÛjsjÆrÜhX#=> [[1, 2, 3], [...]]r݆rÞjsX


r߆ràjXmodulerá†râjsjÆrãjXJsonrä†råjsX
  ræ†rçjXaliasrè†réjsjÆrêh¹XTyperë†rìjsjÆríhtjφrîjsjÆrïjEXNilrð†rñjsjÆròhtjæ†rójsX
               rô†rõjEXBoolrö†r÷jsjÆrøhtjæ†rùjsX
               rú†rûjEXInt64rü†rýjsjÆrþhtjæ†rÿjsX
               r†rjEXFloat64r†rjsjÆrhtjæ†rjsX
               r†rjEXStringr†r	jsjÆr
htjæ†rjsX
               r†r
jEXArrayr†rj©j܆rhŒXTyper†rj©jà†rjsjÆrhtjæ†rjsX
               r†rjEXHashr†rj©j܆rjEXStringr†rj©jÆrjsjÆrhŒXTyper†r j©jà†r!jsj»†r"jXendr#†r$jsX


r%†r&hŒjY†r'jsjÆr(htjφr)jsjÆr*jŸj&†r+jsj»†r,jXifr-†r.jsjÆr/hŒjY†r0jsjÆr1htjL†r2jsjÆr3jŸj܆r4jsX
  r5†r6hŒjY†r7jsjÆr8htjφr9jsjÆr:jŸX10r;†r<jsj»†r=jXendr>†r?jsj»†r@hŒjY†rAjsjÆrBhX#=> 10rC†rDjsX

rE†rFhŒj
†rGjsjÆrHhtjφrIjsjÆrJjŸj&†rKjsj»†rLjXifrM†rNjsjÆrOhŒj
†rPjsjÆrQhtjL†rRjsjÆrSjŸjF†rTjsX
  rU†rVhŒj
†rWjsjÆrXhtjφrYjsjÆrZjŸX10r[†r\jsj»†r]jXelser^†r_jsX
  r`†rahŒj
†rbjsjÆrchtjφrdjsjÆrejŸX20rf†rgjsj»†rhjXendri†rjjsj»†rkhŒj
†rljsjÆrmhX#=> 20rn†rojsX


rp†rqjXifrr†rsjsjÆrthŒXsome_conditionru†rvjsX
  rw†rxhŒXdo_somethingry†rzjsj»†r{jXelsifr|†r}jsjÆr~hŒXsome_other_conditionr†r€jsX
  r†r‚hŒXdo_something_elserƒ†r„jsj»†r…jXelser††r‡jsX
  rˆ†r‰hŒXdo_thatrІr‹jsj»†rŒjXendr†rŽjsX


r†rhŒjY†r‘jsjÆr’htjφr“jsjÆr”jŸj&†r•jsj»†r–jXifr—†r˜jsjÆr™hŒXsome_conditionrš†r›jsX
  rœ†rhŒjY†ržjsjÆrŸhtjφr jsjÆr¡jHjņr¢jHXhellor£†r¤jHjņr¥jsj»†r¦jXelser§†r¨jsX
  r©†rªhŒjY†r«jsjÆr¬htjφr­jsjÆr®jDXtruer¯†r°jsj»†r±jXendr²†r³jsj»†r´hX# a : String | Boolrµ†r¶jsX

r·†r¸hŒj
†r¹jsjÆrºhtjφr»jsjÆr¼jŸj&†r½jsj»†r¾jXifr¿†rÀjsjÆrÁhŒXsome_conditionr†rÃjsX
  rĆrÅhŒj
†rÆjsjÆrÇhtjφrÈjsjÆrÉjHjņrÊjHXhellorˆrÌjHjņrÍjsj»†rÎjXendrφrÐjsj»†rÑhX# b : Int32 | StringrÒ†rÓjsX

rÔ†rÕjXifrÖ†r×jsjÆrØhŒXsome_conditionrÙ†rÚjsX
  rÛ†rÜhŒXcr݆rÞjsjÆrßhtjφràjsjÆrájŸj&†râjsj»†rãjXelserä†råjsX
  ræ†rçhŒj݆rèjsjÆréhtjφrêjsjÆrëjHjņrìjHXhellorí†rîjHjņrïjsj»†rðjXendrñ†ròjsj»†róhX# c : Int32 | Stringrô†rõjsX

rö†r÷jXifrø†rùjsjÆrúhŒXsome_conditionrû†rüjsX
  rý†rþhŒXdrÿ†rjsjÆrhtjφrjsjÆrjŸj&†rjsj»†rjXendr†rjsj»†rhX# d : Int32 | Nilr	†r
jsX


r†rhŒjY†r
jsjÆrhtjφrjsjÆrjŸj&†rjsj»†rjXifr†rjsjÆrhŒXsome_conditionr†rjsX
  r†rhŒjY†rjsjÆrhtjφrjsjÆrjHjņrjHXhellor†r jHjņr!jsX
  r"†r#hX# a : Stringr$†r%jsX
  r&†r'hŒjY†r(htj؆r)hŒXsizer*†r+jsj»†r,jXendr-†r.jsj»†r/hX# a : String | Int32r0†r1jsX


r2†r3jXifr4†r5jsjÆr6hŒXsome_conditionr7†r8jsX
  r9†r:hŒXer;†r<jsjÆr=htjφr>jsjÆr?jŸj&†r@jsj»†rAjXelserB†rCjsX
  rD†rEhŒj;†rFjsjÆrGhtjφrHjsjÆrIjHjņrJjHXhellorK†rLjHjņrMjsX
  rN†rOhX# e : StringrP†rQjsX
  rR†rSjXreturnrT†rUjsj»†rVjXendrW†rXjsj»†rYhX# e : Int32rZ†r[jsX


r\†r]jXenumr^†r_jsjÆr`h¹XColorra†rbjsjÆrcj©j†rdjsjÆrejEXUInt8rf†rgjsX
  rh†rihŒXRedrj†rkjsX	         rl†rmhX# 0rn†rojsX
  rp†rqhŒXGreenrr†rsjsX       rt†ruhX# 1rv†rwjsX
  rx†ryhŒXBluerz†r{jsX   r|†r}htjφr~jsjÆrjŸj8†r€jsX  r†r‚hX# overwritten to 5rƒ†r„jsX
  r…†r†hŒXYellowr‡†rˆjsX      r‰†rŠhX# 6 (5 + 1)r‹†rŒjsX

  r†rŽjXdefr†rjsjÆr‘jtXred?r’†r“jsX
    r”†r•jRXselfr–†r—jsjÆr˜htX==r™†ršjsjÆr›hŒXColorrœ†rhtX::rž†rŸhŒXRedr †r¡jsX
  r¢†r£jXendr¤†r¥jsj»†r¦jXendr§†r¨jsX

r©†rªhŒXColorr«†r¬htX::r­†r®hŒXRedr¯†r°htj؆r±hŒXvaluer²†r³jsjÆr´hX	#:: UInt8rµ†r¶jsX


r·†r¸htX@[r¹†rºh±XFlagsr»†r¼htj̆r½jsj»†r¾jXenumr¿†rÀjsjÆrÁh¹XIOModer†rÃjsX
  rĆrÅhŒXReadrƆrÇjsjÆrÈhX# 1rɆrÊjsX
  rˆrÌhŒXWriter͆rÎjsX  rφrÐhX# 2rцrÒjsX
  rÓ†rÔhŒXAsyncrÕ†rÖjsjÆr×hX# 4r؆rÙjsj»†rÚjXendrÛ†rÜjsX


r݆rÞhŒXIOModer߆ràhtX::rá†râhŒXNonerã†rähtj؆råhŒXvalueræ†rçjsjÆrèhX#=> 0ré†rêjsj»†rëhŒXIOModerì†ríhtX::rî†rïhŒXAllrð†rñhtj؆ròhŒXvalueró†rôjsX  rõ†röhX#=> 7r÷†røjsX


rù†rújEXputsrû†rüj©j܆rýhŒXColorrþ†rÿhtX::r†rhŒXRedr†rj©jà†rjsX                    r†rhX# prints "Red"r†rjsj»†r	jEXputsr
†rj©j܆rhŒXIOModer
†rhtX::r†rhŒXWriter†rjsjÆrhtjæ†rjsjÆrhŒXIOModer†rhtX::r†rhŒXAsyncr†rj©jà†rjsjÆrhX# prints "Write, Async"r†rjsX


r †r!jEXputsr"†r#jsjÆr$hŒXColorr%†r&htj؆r'hŒXnewr(†r)j©j܆r*jŸj&†r+j©jà†r,jsjÆr-hX#=> prints "Green"r.†r/jsX


r0†r1jEXputsr2†r3jsjÆr4hŒXColorr5†r6htj؆r7hŒXnewr8†r9j©j܆r:jŸX10r;†r<j©jà†r=jsjÆr>hX#=> prints "10"r?†r@jsX


rA†rBhŒXColorrC†rDhtX::rE†rFhŒXRedrG†rHhtj؆rIhŒXred?rJ†rKjsX  rL†rMhX#=> truerN†rOjsj»†rPhŒXColorrQ†rRhtX::rS†rThŒXBluerU†rVhtj؆rWhŒXred?rX†rYjsjÆrZhX	#=> falser[†r\jsX


r]†r^jXdefr_†r`jsjÆrajtXpaintrb†rcj©j܆rdhŒXcolorre†rfjsjÆrgj©j†rhjsjÆrihŒXColorrj†rkj©jà†rljsX
  rm†rnjXcasero†rpjsjÆrqhŒXcolorrr†rsjsX
  rt†rujXwhenrv†rwjsjÆrxhŒXColorry†rzhtX::r{†r|hŒXRedr}†r~jsX
    r†r€hX# ...r†r‚jsX
  rƒ†r„jXelser…†r†jsX
    r‡†rˆhX# Unusual, but still can happenr‰†rŠjsX
    r‹†rŒjEXraiser†rŽjsjÆrjHjņrjHXunknown color: r‘†r’jÇX#{r“†r”hŒXcolorr•†r–jÇj†r—jHjņr˜jsX
  r™†ršjXendr›†rœjsj»†rjXendrž†rŸjsX

r †r¡hŒXpaintr¢†r£e(jsjÆr¤hŒXColorr¥†r¦htX::r§†r¨hŒXRedr©†rªjsX


r«†r¬jXdefr­†r®jsjÆr¯jtXpaintr°†r±j©j܆r²hŒXcolorr³†r´jsjÆrµj©j†r¶jsjÆr·jEXSymbolr¸†r¹j©jà†rºjsX
  r»†r¼jXcaser½†r¾jsjÆr¿hŒXcolorrÀ†rÁjsX
  r†rÃjXwhenrĆrÅjsjÆrÆjÝX:redrdžrÈjsX
    rɆrÊhX# ...rˆrÌjsX
  r͆rÎjXelserφrÐjsX
    rцrÒjEXraiserÓ†rÔjsjÆrÕjHjņrÖjHXunknown color: r׆rØjÇX#{rÙ†rÚhŒXcolorrÛ†rÜjÇj†rÝjHjņrÞjsX
  r߆ràjXendrá†râjsj»†rãjXendrä†råjsX

ræ†rçhŒXpaintrè†réjsjÆrêjÝX:redrë†rìjsX


rí†rîhŒXnamerï†rðjsjÆrñhtjφròjsjÆrójHjņrôjHXCrystalrõ†röjHjņr÷jsj»†røhŒXagerù†rújsjÆrûhtjφrüjsjÆrýjŸj&†rþjsX


rÿ†rhŒXflowerr†rjsjÆrhtjφrjsjÆrjHjņrjHXTulipr†rjHjņr	jsj»†r
hX$# At this point 'flower' is a Stringr†rjsX

r
†rhŒXflowerr†rjsjÆrhtjφrjsjÆrjŸj&†rjsj»†rhX$# At this point 'flower' is an Int32r†rjsX


r†rjXclassr†rjsjÆrh¹XFoor†rjsX
  r†r jXdefr!†r"jsjÆr#jtXfinalizer$†r%jsX
    r&†r'hX'# Invoked when Foo is garbage-collectedr(†r)jsX
    r*†r+jEXputsr,†r-jsjÆr.jHjņr/jHX
Bye bye from r0†r1jÇX#{r2†r3jRXselfr4†r5jÇj†r6jHX!r7†r8jHjņr9jsX
  r:†r;jXendr<†r=jsj»†r>jXendr?†r@jsX

rA†rBhX # Prints "Bye bye ...!" for everrC†rDjsj»†rEjEXlooprF†rGjsjÆrHjXdorI†rJjsX
  rK†rLhŒXFoorM†rNhtj؆rOhŒXnewrP†rQjsj»†rRjXendrS†rTjsX


rU†rVhX!# Defines a method in the programrW†rXjsj»†rYjXdefrZ†r[jsjÆr\jtXaddr]†r^j©j܆r_hŒjô†r`j©jÆrajsjÆrbhŒj’
†rcj©jà†rdjsX
  re†rfhŒjô†rgjsjÆrhhtj~
†rijsjÆrjhŒj’
†rkjsj»†rljXendrm†rnjsX

ro†rphX'# Invokes the add method in the programrq†rrjsj»†rshŒXaddrt†ruj©j܆rvjŸj&†rwj©jÆrxjsjÆryjŸjF†rzj©jà†r{jsjÆr|hX#=> 3r}†r~jsX


r†r€jXdefr†r‚jsjÆrƒjtXeven?r„†r…j©j܆r†hŒXnumr‡†rˆj©jà†r‰jsX
  rІr‹jXifrŒ†rjsjÆrŽhŒXnumr†rjsjÆr‘htX%r’†r“jsjÆr”jŸjF†r•jsjÆr–htX==r—†r˜jsjÆr™jŸj܆ršjsX
    r›†rœjXreturnr†ržjsjÆrŸjDXtruer †r¡jsX
  r¢†r£jXendr¤†r¥jsX

  r¦†r§jXreturnr¨†r©jsjÆrªjDXfalser«†r¬jsj»†r­jXendr®†r¯jsX


r°†r±jXdefr²†r³jsjÆr´jtXaddrµ†r¶j©j܆r·hŒjô†r¸j©jÆr¹jsjÆrºhŒj’
†r»j©jà†r¼jsX
  r½†r¾hŒjô†r¿jsjÆrÀhtj~
†rÁjsjÆrÂhŒj’
†rÃjsj»†rÄjXendrņrÆjsX

rdžrÈjXclassrɆrÊjsjÆrËh¹XFoor̆rÍjsX
  rΆrÏjXdefrІrÑjsjÆrÒjtXbarrÓ†rÔjsX
    rÕ†rÖhX"# invokes the program's add methodr׆rØjsX
    rÙ†rÚhŒXaddrÛ†rÜj©j܆rÝjŸj&†rÞj©jÆrßjsjÆràjŸjF†ráj©jà†râjsX

    rã†rähX# invokes Foo's baz methodrå†ræjsX
    rç†rèhŒXbazré†rêj©j܆rëjŸj&†rìj©jÆríjsjÆrîjŸjF†rïj©jà†rðjsX
  rñ†ròjXendró†rôjsX

  rõ†röjXdefr÷†røjsjÆrùjtXbazrú†rûj©j܆rühŒjô†rýj©jÆrþjsjÆrÿhŒj’
†rj©jà†rjsX
    r†rhŒjô†rjsjÆrhtj·†rjsjÆrhŒj’
†rjsX
  r	†r
jXendr†rjsj»†r
jXendr†rjsX


r†rjXdefr†rjsjÆrjtXbazr†rj©j܆rhŒjô†rj©jÆrjsjÆrhŒj’
†rj©jà†rjsX
  r†rhŒjô†rjsjÆr htj~
†r!jsjÆr"hŒj’
†r#jsj»†r$jXendr%†r&jsX

r'†r(jXclassr)†r*jsjÆr+h¹XFoor,†r-jsX
  r.†r/jXdefr0†r1jsjÆr2jtXbarr3†r4jsX
    r5†r6hŒXbazr7†r8j©j܆r9jŸjô
†r:j©jÆr;jsjÆr<jŸjF†r=j©jà†r>jsjÆr?hX#=> 2r@†rAjsX
    rB†rChtX::rD†rEhŒXbazrF†rGj©j܆rHjŸjô
†rIj©jÆrJjsjÆrKjŸjF†rLj©jà†rMjsjÆrNhX#=> 6rO†rPjsX
  rQ†rRjXendrS†rTjsX

  rU†rVjXdefrW†rXjsjÆrYjtXbazrZ†r[j©j܆r\hŒjô†r]j©jÆr^jsjÆr_hŒj’
†r`j©jà†rajsX
    rb†rchŒjô†rdjsjÆrehtjð†rfjsjÆrghŒj’
†rhjsX
  ri†rjjXendrk†rljsj»†rmjXendrn†rojsX


rp†rqhŒjô†rrjsjÆrshtjφrtjsjÆrujŸj&†rvjsX

rw†rxjXdefry†rzjsjÆr{jtXaddr|†r}j©j܆r~hŒj’
†rj©jà†r€jsX
  r†r‚hŒjô†rƒjsjÆr„htj~
†r…jsjÆr†hŒj’
†r‡jsjÆrˆhX/# error: undefined local variable or method 'x'r‰†rŠjsj»†r‹jXendrŒ†rjsX

rކrhŒXaddr†r‘j©j܆r’jŸjF†r“j©jà†r”jsX


r•†r–hŒXaddr—†r˜jsjÆr™jŸj&†ršj©jÆr›jsjÆrœjŸjF†rjsjÆržhX# same as add(1, 2)rŸ†r jsX


r¡†r¢jXclassr£†r¤jsjÆr¥h¹XCounterr¦†r§jsX
  r¨†r©hÝX@@instancesrª†r«jsjÆr¬htjφr­jsjÆr®jŸj܆r¯jsX

  r°†r±jXdefr²†r³jsjÆr´jtX
initializerµ†r¶jsX
    r·†r¸hÝX@@instancesr¹†rºjsjÆr»htX+=r¼†r½jsjÆr¾jŸj&†r¿jsX
  rÀ†rÁjXendr†rÃjsX

  rĆrÅjXdefrƆrÇjsjÆrÈh¹XselfrɆrÊhtj؆rËjtX	instancesr̆rÍjsX
    rΆrÏhÝX@@instancesrІrÑjsX
  rÒ†rÓjXendrÔ†rÕjsj»†rÖjXendr׆rØjsX

rÙ†rÚhŒXCounterrÛ†rÜhtj؆rÝhŒX	instancesrÞ†rßjsjÆràhX#=> 0rá†râjsj»†rãhŒXCounterrä†råhtj؆ræhŒXnewrç†rèjsj»†réhŒXCounterrê†rëhtj؆rìhŒXnewrí†rîjsj»†rïhŒXCounterrð†rñhtj؆ròhŒXnewró†rôjsj»†rõhŒXCounterrö†r÷htj؆røhŒX	instancesrù†rújsjÆrûhX#=> 3rü†rýjsX


rþ†rÿjXclassr†rjsjÆrh¹XCounterr†rjsX
  r†rjXdefr†rjsjÆr	h¹Xselfr
†rhtj؆rjtX	incrementr
†rjsX
    r†rhÝX@@instancesr†rjsjÆrhtX+=r†rjsjÆrjŸj&†rjsX
  r†rjXendr†rjsj»†rjXendr†rjsX

r†r hŒXCounterr!†r"htj؆r#hŒX	incrementr$†r%jsjÆr&hX%# Error: undefined method '+' for Nilr'†r(jsX


r)†r*jXclassr+†r,jsjÆr-h¹XParentr.†r/jsX
  r0†r1hÝX	@@counterr2†r3jsjÆr4htjφr5jsjÆr6jŸj܆r7jsj»†r8jXendr9†r:jsX

r;†r<jXclassr=†r>jsjÆr?h¹XChildr@†rAjsjÆrBhtjä†rCjsjÆrDhŒXParentrE†rFjsX
  rG†rHjXdefrI†rJjsjÆrKh¹XselfrL†rMhtj؆rNjtXcounterrO†rPjsX
    rQ†rRhÝX	@@counterrS†rTjsX
  rU†rVjXendrW†rXjsj»†rYjXendrZ†r[jsX

r\†r]hŒXChildr^†r_htj؆r`hŒXcounterra†rbjsjÆrchX#=> nilrd†rejsX


rf†rgjXunlessrh†rijsjÆrjhŒXsome_conditionrk†rljsX
  rm†rnhŒXthen_expressionro†rpjsj»†rqjXelserr†rsjsX
  rt†ruhŒXelse_expressionrv†rwjsj»†rxjXendry†rzjsX

r{†r|hX!# Can also be written as a suffixr}†r~jsj»†rhŒX
close_doorr€†rjsjÆr‚jXunlessrƒ†r„jsjÆr…hŒXdoor_closed?r††r‡jsX


rˆ†r‰hŒjY†rŠjsjÆr‹htjφrŒjsjÆrjŸj&†rŽjsj»†rhŒj
†rjsjÆr‘htjφr’jsjÆr“jXtypeofr”†r•j©j܆r–hŒjY†r—j©jà†r˜jsjÆr™hX	#=> Int32rš†r›jsX


rœ†rjXtypeofrž†rŸj©j܆r jŸj&†r¡j©jÆr¢jsjÆr£jHjņr¤jHjY†r¥jHjņr¦j©jÆr§jsjÆr¨jÖX'a'r©†rªj©jà†r«jsjÆr¬hX#=> (Int32 | String | Char)r­†r®jsX


r¯†r°hŒXhashr±†r²jsjÆr³htjφr´jsjÆrµj©jB†r¶j©j†r·jsjÆr¸jXofr¹†rºjsjÆr»jEXInt32r¼†r½jsjÆr¾htjφr¿htjL†rÀjsjÆrÁjEXStringr†rÃjsj»†rÄhŒXanother_hashrņrÆjsjÆrÇhtjφrÈjsjÆrÉjXtypeofrʆrËj©j܆rÌhŒXhashr͆rÎj©jà†rÏhtj؆rÐhŒXnewrцrÒjsjÆrÓhX#:: Hash(Int32, String)rÔ†rÕjsX


rÖ†r×jXclassr؆rÙjsjÆrÚh¹XArrayrÛ†rÜjsX
  r݆rÞjXdefr߆ràjsjÆráh¹Xselfrâ†rãhtj؆räjtX	elem_typerå†ræj©j܆rçhŒXtyprè†réj©jà†rêjsX
    rë†rìjXifrí†rîjsjÆrïhŒXtyprð†rñhtj؆ròhŒXis_a?ró†rôj©j܆rõjEXArrayrö†r÷j©jà†røjsX
      rù†rúhŒX	elem_typerû†rüj©j܆rýhŒXtyprþ†rÿhtj؆rhŒXfirstr†rj©jà†rjsX
    r†rjXelser†rjsX
      r†r	hŒXtypr
†rjsX
    r†r
jXendr†rjsX
  r†rjXendr†rjsj»†rjXendr†rjsX

r†rhŒXnestr†rjsjÆrhtjφrjsjÆrhtj¿†rjŸj&†rj©jÆr jsjÆr!htj¿†r"jHjņr#jHj
†r$jHjņr%j©jÆr&jsjÆr'htj¿†r(jÝX:cr)†r*j©jÆr+jsjÆr,htj¿†r-jÖX'd'r.†r/htj̆r0htj̆r1htj̆r2htj̆r3jsj»†r4hŒXflatr5†r6jsjÆr7htjφr8jsjÆr9jEXArrayr:†r;j©j܆r<jXtypeofr=†r>j©j܆r?jEXArrayr@†rAhtj؆rBhŒX	elem_typerC†rDj©j܆rEhŒXnestrF†rGj©jà†rHj©jà†rIj©jà†rJhtj؆rKhŒXnewrL†rMjsj»†rNjXtypeofrO†rPj©j܆rQhŒXnestrR†rSj©jà†rTjsjÆrUhX>#=> Array(Int32 | Array(String | Array(Symbol | Array(Char))))rV†rWjsj»†rXjXtypeofrY†rZj©j܆r[hŒXflatr\†r]j©jà†r^jsjÆr_hX)#=> Array(String | Int32 | Symbol | Char)r`†rajsX


rb†rchŒjY†rdjsjÆrehtjφrfjsjÆrgjŸjF†rhjsjÆrijXifrj†rkjsjÆrlhŒXsome_conditionrm†rnjsX


ro†rphŒjô†rqjsjÆrrhtjφrsjsjÆrtjŸj܆rujsj»†rvhŒXprocrw†rxjsjÆryhtjφrzjsjÆr{htjð†r|htjL†r}j©jB†r~jsjÆrhŒjô†r€jsjÆrhtX+=r‚†rƒjsjÆr„jŸj&†r…j©X;r††r‡jsjÆrˆhŒjô†r‰jsjÆrŠj©j†r‹jsj»†rŒhŒXprocr†rŽhtj؆rhŒXcallr†r‘jsjÆr’hX#=> 1r“†r”jsj»†r•hŒXprocr–†r—htj؆r˜hŒXcallr™†ršjsjÆr›hX#=> 2rœ†rjsj»†ržhŒjô†rŸjsX	         r †r¡hX#=> 2r¢†r£jsX


r¤†r¥jXdefr¦†r§jsjÆr¨jtXcounterr©†rªjsX
  r«†r¬hŒjô†r­jsjÆr®htjφr¯jsjÆr°jŸj܆r±jsX
  r²†r³htjð†r´htjL†rµj©jB†r¶jsjÆr·hŒjô†r¸jsjÆr¹htX+=rº†r»jsjÆr¼jŸj&†r½j©j††r¾jsjÆr¿hŒjô†rÀjsjÆrÁj©j†rÂjsj»†rÃjXendrĆrÅjsX

rƆrÇhŒXprocrȆrÉjsjÆrÊhtjφrËjsjÆrÌhŒXcounterr͆rÎjsj»†rÏhŒXprocrІrÑhtj؆rÒhŒXcallrÓ†rÔjsjÆrÕhX#=> 1rÖ†r×jsj»†rØhŒXprocrÙ†rÚhtj؆rÛhŒXcallr܆rÝjsjÆrÞhX#=> 2r߆ràjsX


rá†râjXdefrã†räjsjÆråjtXfooræ†rçjsX
  rè†réjXyieldrê†rëjsj»†rìjXendrí†rîjsX

rï†rðhŒjô†rñjsjÆròhtjφrójsjÆrôjŸj&†rõjsj»†röhŒXfoor÷†røjsjÆrùjXdorú†rûjsX
  rü†rýhŒjô†rþjsjÆrÿhtjφrjsjÆrjHjņrjHXhellor†rjHjņrjsj»†rjXendr†rjsj»†r	hŒjô†r
jsjÆrhX# : Int32 | Stringr†r
jsX


r†rhŒjô†rjsjÆrhtjφrjsjÆrjŸj&†rjsj»†rhŒXfoor†rjsjÆrjXdor†rjsX
  r†rhŒjô†rjsjÆrhtjφrjsjÆr jHjņr!jHXhellor"†r#jHjņr$jsj»†r%jXendr&†r'jsj»†r(hŒjô†r)jsjÆr*hX# : Int32 | Stringr+†r,jsX

r-†r.hŒjô†r/jsjÆr0htjφr1jsjÆr2jÖX'a'r3†r4jsj»†r5hŒjô†r6jsjÆr7hX# : Charr8†r9jsX


r:†r;jXdefr<†r=jsjÆr>jtXcapturer?†r@j©j܆rAhtjÀ†rBhŒXblockrC†rDj©jà†rEjsX
  rF†rGhŒXblockrH†rIjsj»†rJjXendrK†rLjsX

rM†rNhŒjô†rOjsjÆrPhtjφrQjsjÆrRjŸj&†rSjsj»†rThŒXcapturerU†rVjsjÆrWj©jB†rXjsjÆrYhŒjô†rZjsjÆr[htjφr\jsjÆr]jHjņr^jHXhellor_†r`jHjņrajsjÆrbj©j†rcjsX

rd†rehŒjô†rfjsjÆrghtjφrhjsjÆrijÖX'a'rj†rkjsj»†rlhŒjô†rmjsjÆrnhX# : Int32 | String | Charro†rpjsX


rq†rrjXdefrs†rtjsjÆrujtXcapturerv†rwj©j܆rxhtjÀ†ryhŒXblockrz†r{j©jà†r|jsX
  r}†r~hŒXblockr†r€jsj»†rjXendr‚†rƒjsX

r„†r…hŒjô†r†jsjÆr‡htjφrˆjsjÆr‰jŸj&†rŠjsj»†r‹htjð†rŒhtjL†rj©jB†rŽjsjÆrhŒjô†rjsjÆr‘htjφr’jsjÆr“jHjņr”jHXhellor•†r–jHjņr—jsjÆr˜j©j†r™jsX

rš†r›hŒjô†rœjsjÆrhtjφržjsjÆrŸjÖX'a'r †r¡jsj»†r¢hŒjô†r£jsjÆr¤hX# : Int32 | String | Charr¥†r¦jsX


r§†r¨jXabstractr©†rªjsjÆr«jXclassr¬†r­jsjÆr®h¹XAnimalr¯†r°jsX
  r±†r²hX# Makes this animal talkr³†r´jsX
  rµ†r¶jXabstractr·†r¸jsjÆr¹jXdefrº†r»jsjÆr¼jtXtalkr½†r¾jsj»†r¿jXendrÀ†rÁjsX

r†rÃjXclassrĆrÅjsjÆrÆh¹XDogrdžrÈjsjÆrÉhtjä†rÊjsjÆrËhŒXAnimalr̆rÍjsX
  rΆrÏjXdefrІrÑjsjÆrÒjtXtalkrÓ†rÔjsX
    rÕ†rÖjHjņr×jHXWoof!r؆rÙjHjņrÚjsX
  rÛ†rÜjXendr݆rÞjsj»†rßjXendrà†rájsX

râ†rãjXclassrä†råjsjÆræh¹XCatrç†rèjsjÆréhtjä†rêjsjÆrëhŒXAnimalrì†ríjsX
  rî†rïjXdefrð†rñjsjÆròjtXtalkró†rôjsX
    rõ†röjHjņr÷jHXMiaurø†rùjHjņrújsX
  rû†rüjXendrý†rþjsj»†rÿjXendr †r jsX

r †r jXclassr †r jsjÆr h¹XPersonr †r jsX
  r	 †r
 jJXgetterr †r jsjÆr
 hŒXpetr †r jsX

  r †r jXdefr †r jsjÆr jtX
initializer †r j©j܆r hõX@namer †r j©jÆr jsjÆr hõX@petr †r j©jà†r jsX
  r †r  jXendr! †r" jsj»†r# jXendr$ †r% jsX

r& †r' hŒXjohnr( †r) jsjÆr* htjφr+ jsjÆr, hŒXPersonr- †r. htj؆r/ hŒXnewr0 †r1 jsjÆr2 jHjņr3 jHXJohnr4 †r5 jHjņr6 j©jÆr7 jsjÆr8 hŒXDogr9 †r: htj؆r; hŒXnewr< †r= jsj»†r> hŒXpeterr? †r@ jsjÆrA htjφrB jsjÆrC hŒXPersonrD †rE htj؆rF hŒXnewrG †rH jsjÆrI jHjņrJ e(jHXPeterrK †rL jHjņrM j©jÆrN jsjÆrO hŒXCatrP †rQ htj؆rR hŒXnewrS †rT jsX


rU †rV hŒXjohnrW †rX htj؆rY hŒXpetrZ †r[ htj؆r\ hŒXtalkr] †r^ jsjÆr_ hX#=> "Woof!"r` †ra jsX


rb †rc hŒjY†rd jsjÆre htjφrf jsjÆrg jŸj&†rh jsjÆri htjL†rj jsjÆrk jŸjF†rl jsjÆrm htj–†rn jsjÆro jŸjÁ†rp jsjÆrq j©j†rr jsjÆrs jŸjô
†rt jsX

ru †rv hX# The above is the same as:rw †rx jsj»†ry hŒjY†rz jsjÆr{ htjφr| jsjÆr} jXifr~ †r jsjÆr€ jŸj&†r jsjÆr‚ htjL†rƒ jsjÆr„ jŸjF†r… jsX
      r† †r‡ jŸjÁ†rˆ jsX
    r‰ †rŠ jXelser‹ †rŒ jsX
      r †rŽ jŸjô
†r jsX
    r †r‘ jXendr’ †r“ jsX


r” †r• jXdefr– †r— jsjÆr˜ jtXsome_methodr™ †rš jsjÆr› j©j†rœ jsjÆr jEXStringrž †rŸ jsX
  r  †r¡ jHjņr¢ jHXhellor£ †r¤ jHjņr¥ jsj»†r¦ jXendr§ †r¨ jsX


r© †rª jŠXPIr« †r¬ jsjÆr­ htjφr® jsjÆr¯ jhX3.14r° †r± jsX

r² †r³ jXmoduler´ †rµ jsjÆr¶ jXEarthr· †r¸ jsX
  r¹ †rº jŠXRADIUSr» †r¼ jsjÆr½ htjφr¾ jsjÆr¿ jŸX	6_371_000rÀ †rÁ jsj»†r jXendrà †rÄ jsX

rÅ †rÆ jŠXPIrÇ †rÈ jsjÆrÉ hX#=> 3.14rÊ †rË jsj»†rÌ hŒXEarthrÍ †rÎ htX::rÏ †rÐ jŠXRADIUSrÑ †rÒ jsjÆrÓ hX
#=> 6_371_000rÔ †rÕ jsX


rÖ †r× jŠXTENrØ †rÙ jsjÆrÚ htjφrÛ jsjÆrÜ jXbeginrÝ †rÞ jsX
  rß †rà hŒjY†rá jsjÆrâ htjφrã jsjÆrä jŸj܆rå jsX
  ræ †rç jXwhilerè †ré jsjÆrê hŒjY†rë jsjÆrì htjä†rí jsjÆrî jŸX10rï †rð jsX
    rñ †rò hŒjY†ró jsjÆrô htX+=rõ †rö jsjÆr÷ jŸj&†rø jsX
  rù †rú jXendrû †rü jsX
  rý †rþ hŒjY†rÿ jsj»†r!jXendr!†r!jsX

r!†r!jŠXTENr!†r!jsjÆr!hX#=> 10r!†r	!jsX


r
!†r!jXclassr!†r
!jsjÆr!h¹XPersonr!†r!jsX
  r!†r!jJXgetterr!†r!jsjÆr!hŒXnamer!†r!jsX

  r!†r!jXdefr!†r!jsjÆr!jtX
initializer!†r!j©j܆r!hõX@namer !†r!!j©jà†r"!jsX
    r#!†r$!hõX@ager%!†r&!jsjÆr'!htjφr(!jsjÆr)!jŸj܆r*!jsX
  r+!†r,!jXendr-!†r.!jsj»†r/!jXendr0!†r1!jsX

r2!†r3!hŒXjohnr4!†r5!jsjÆr6!htjφr7!jsjÆr8!hŒXPersonr9!†r:!htj؆r;!hŒXnewr<!†r=!jsjÆr>!jHjņr?!jHXJohnr@!†rA!jHjņrB!jsj»†rC!hŒXjohnrD!†rE!htj؆rF!hŒXnamerG!†rH!jsjÆrI!hX
#=> "John"rJ!†rK!jsj»†rL!hŒXjohnrM!†rN!htj؆rO!hŒXnamerP!†rQ!htj؆rR!hŒXsizerS!†rT!jsjÆrU!hX#=> 4rV!†rW!jsX


rX!†rY!hŒXonerZ!†r[!jsjÆr\!htjφr]!jsjÆr^!hŒXPersonr_!†r`!htj؆ra!hŒXnewrb!†rc!jsjÆrd!jŸj&†re!jsj»†rf!hŒXonerg!†rh!htj؆ri!hŒXnamerj!†rk!jsjÆrl!hX#=> 1rm!†rn!jsj»†ro!hŒXonerp!†rq!htj؆rr!hŒXnamers!†rt!jsjÆru!htj~
†rv!jsjÆrw!jŸjF†rx!jsjÆry!hX#=> 3rz!†r{!jsX


r|!†r}!hŒXjohnr~!†r!jsjÆr€!htjφr!jsjÆr‚!hŒXPersonrƒ!†r„!htj؆r…!hŒXnewr†!†r‡!jsjÆrˆ!jHjņr‰!jHXJohnrŠ!†r‹!jHjņrŒ!jsj»†r!hŒXonerŽ!†r!jsjÆr!htjφr‘!jsjÆr’!hŒXPersonr“!†r”!htj؆r•!hŒXnewr–!†r—!jsjÆr˜!jŸj&†r™!jsX


rš!†r›!hŒXjohnrœ!†r!jsjÆrž!htjφrŸ!jsjÆr !hŒXPersonr¡!†r¢!htj؆r£!hŒXnewr¤!†r¥!jsjÆr¦!jHjņr§!jHXJohnr¨!†r©!jHjņrª!jsj»†r«!hŒXoner¬!†r­!jsjÆr®!htjφr¯!jsjÆr°!hŒXPersonr±!†r²!htj؆r³!hŒXnewr´!†rµ!jsjÆr¶!jŸj&†r·!jsX

r¸!†r¹!hX*# Error: undefined method 'size' for Int32rº!†r»!jsj»†r¼!hŒXjohnr½!†r¾!htj؆r¿!hŒXnamerÀ!†rÁ!htj؆rÂ!hŒXsizerÃ!†rÄ!jsX

rÅ!†rÆ!hX8# Error: no overload matches 'String#+' with types Int32rÇ!†rÈ!jsj»†rÉ!hŒXjohnrÊ!†rË!htj؆rÌ!hŒXnamerÍ!†rÎ!jsjÆrÏ!htj~
†rÐ!jsjÆrÑ!jŸjÁ†rÒ!jsX


rÓ!†rÔ!hŒXjohnrÕ!†rÖ!jsjÆr×!htjφrØ!jsjÆrÙ!hŒXPersonrÚ!†rÛ!htj؆rÜ!hŒXnewrÝ!†rÞ!jsjÆrß!jHjņrà!jHXJohnrá!†râ!jHjņrã!jsj»†rä!hŒXjohnrå!†ræ!htj؆rç!hŒXnamerè!†ré!htj؆rê!hŒXsizerë!†rì!jsj»†rí!hŒXonerî!†rï!jsjÆrð!htjφrñ!jsjÆrò!hŒXPersonró!†rô!htj؆rõ!hŒXnewrö!†r÷!jsjÆrø!jŸj&†rù!jsX


rú!†rû!jXclassrü!†rý!jsjÆrþ!h¹XPersonrÿ!†r"jsX
  r"†r"jJXgetterr"†r"jsjÆr"hŒXnamer"†r"jsX

  r"†r	"jXdefr
"†r"jsjÆr"jtX
initializer
"†r"j©j܆r"hõX@namer"†r"j©jà†r"jsX
    r"†r"hõX@ager"†r"jsjÆr"htjφr"jsjÆr"jŸj܆r"jsX
  r"†r"jXendr"†r"jsX

  r"†r "jXdefr!"†r""jsjÆr#"jtXaddressr$"†r%"jsX
    r&"†r'"hõX@addressr("†r)"jsX
  r*"†r+"jXendr,"†r-"jsX

  r."†r/"jXdefr0"†r1"jsjÆr2"jtXaddressr3"†r4"htjφr5"j©j܆r6"hõX@addressr7"†r8"j©jà†r9"jsX
  r:"†r;"jXendr<"†r="jsj»†r>"jXendr?"†r@"jsX

rA"†rB"hŒXjohnrC"†rD"jsjÆrE"htjφrF"jsjÆrG"hŒXPersonrH"†rI"htj؆rJ"hŒXnewrK"†rL"jsjÆrM"jHjņrN"jHXJohnrO"†rP"jHjņrQ"jsj»†rR"hŒXjohnrS"†rT"htj؆rU"hŒXaddressrV"†rW"jsjÆrX"htjφrY"jsjÆrZ"jHjņr["jHX	Argentinar\"†r]"jHjņr^"jsX


r_"†r`"hX(# Error: undefined method 'size' for Nilra"†rb"jsj»†rc"hŒXjohnrd"†re"htj؆rf"hŒXaddressrg"†rh"htj؆ri"hŒXsizerj"†rk"jsX


rl"†rm"jXclassrn"†ro"jsjÆrp"h¹XPersonrq"†rr"jsX
  rs"†rt"hõX@ageru"†rv"jsjÆrw"htjφrx"jsjÆry"jŸj܆rz"jsX

  r{"†r|"jXdefr}"†r~"jsjÆr"jtX
initializer€"†r"j©j܆r‚"hõX@namerƒ"†r„"j©jà†r…"jsX
  r†"†r‡"jXendrˆ"†r‰"jsj»†rŠ"jXendr‹"†rŒ"jsX


r"†rŽ"jXclassr"†r"jsjÆr‘"h¹XPersonr’"†r“"jsX
  r”"†r•"hõX@ager–"†r—"jsjÆr˜"j©j†r™"jsjÆrš"jEXInt32r›"†rœ"jsX

  r"†rž"jXdefrŸ"†r "jsjÆr¡"jtX
initializer¢"†r£"j©j܆r¤"hõX@namer¥"†r¦"j©jà†r§"jsX
    r¨"†r©"hõX@agerª"†r«"jsjÆr¬"htjφr­"jsjÆr®"jŸj܆r¯"jsX
  r°"†r±"jXendr²"†r³"jsj»†r´"jXendrµ"†r¶"jsX


r·"†r¸"hŒjY†r¹"jsjÆrº"htjφr»"jsjÆr¼"jXifr½"†r¾"jsjÆr¿"jŸjF†rÀ"jsjÆrÁ"htjL†rÂ"jsjÆrÃ"jŸj&†rÄ"jsX
      rÅ"†rÆ"jŸjÁ†rÇ"jsX
    rÈ"†rÉ"jXelserÊ"†rË"jsX
      rÌ"†rÍ"jŸjô
†rÎ"jsX
    rÏ"†rÐ"jXendrÑ"†rÒ"jsj»†rÓ"hŒjY†rÔ"jsjÆrÕ"hX#=> 3rÖ"†r×"jsX


rØ"†rÙ"jXifrÚ"†rÛ"jsjÆrÜ"jŸj&†rÝ"jsjÆrÞ"htjL†rß"jsjÆrà"jŸjF†rá"jsj»†râ"jXelserã"†rä"jsX
  rå"†ræ"jŸjÁ†rç"jsj»†rè"jXendré"†rê"jsX


rë"†rì"jXdefrí"†rî"jsjÆrï"jtXtwicerð"†rñ"j©j܆rò"htjÀ†ró"hŒXblockrô"†rõ"j©jà†rö"jsX
  r÷"†rø"jXyieldrù"†rú"jsX
  rû"†rü"jXyieldrý"†rþ"jsj»†rÿ"jXendr#†r#jsX


r#†r#hŒXtwicer#†r#j©j܆r#j©jà†r#jsjÆr#jXdor	#†r
#jsX
  r#†r#jEXputsr
#†r#jsjÆr#jHjņr#jHXHello!r#†r#jHjņr#jsj»†r#jXendr#†r#jsX

r#†r#hŒXtwicer#†r#jsjÆr#jXdor#†r#jsX
  r#†r#jEXputsr #†r!#jsjÆr"#jHjņr##jHXHello!r$#†r%#jHjņr&#jsj»†r'#jXendr(#†r)#jsX

r*#†r+#hŒXtwicer,#†r-#jsjÆr.#j©jB†r/#jsjÆr0#jEXputsr1#†r2#jsjÆr3#jHjņr4#jHXHello!r5#†r6#jHjņr7#jsjÆr8#j©j†r9#jsX


r:#†r;#jXdefr<#†r=#jsjÆr>#jtXtwicer?#†r@#jsX
  rA#†rB#jXyieldrC#†rD#jsjÆrE#jŸj&†rF#jsX
  rG#†rH#jXyieldrI#†rJ#jsjÆrK#jŸjF†rL#jsj»†rM#jXendrN#†rO#jsX

rP#†rQ#hŒXtwicerR#†rS#jsjÆrT#jXdorU#†rV#jsjÆrW#htjæ†rX#hŒj׆rY#htjæ†rZ#jsX
  r[#†r\#jEXputsr]#†r^#jsjÆr_#jHjņr`#jHXGot ra#†rb#jÇX#{rc#†rd#hŒj׆re#jÇj†rf#jHjņrg#jsj»†rh#jXendri#†rj#jsX


rk#†rl#hŒXtwicerm#†rn#jsjÆro#j©jB†rp#jsjÆrq#htjæ†rr#hŒj׆rs#htjæ†rt#jsjÆru#jEXputsrv#†rw#jsjÆrx#jHjņry#jHXGot rz#†r{#jÇX#{r|#†r}#hŒj׆r~#jÇj†r#jHjņr€#jsjÆr#j©j†r‚#jsX


rƒ#†r„#jXdefr…#†r†#jsjÆr‡#jtXmanyrˆ#†r‰#jsX
  rŠ#†r‹#jXyieldrŒ#†r#jsjÆrŽ#jŸj&†r#j©jÆr#jsjÆr‘#jŸjF†r’#j©jÆr“#jsjÆr”#jŸjÁ†r•#jsj»†r–#jXendr—#†r˜#jsX

r™#†rš#hŒXmanyr›#†rœ#jsjÆr#jXdorž#†rŸ#jsjÆr #htjæ†r¡#hŒjô†r¢#j©jÆr£#jsjÆr¤#hŒj’
†r¥#j©jÆr¦#jsjÆr§#hŒXzr¨#†r©#htjæ†rª#jsX
  r«#†r¬#jEXputsr­#†r®#jsjÆr¯#hŒjô†r°#jsjÆr±#htj~
†r²#jsjÆr³#hŒj’
†r´#jsjÆrµ#htj~
†r¶#jsjÆr·#hŒj¨#†r¸#jsj»†r¹#jXendrº#†r»#jsX

r¼#†r½#hX# Output: 6r¾#†r¿#jsX


rÀ#†rÁ#jXdefrÂ#†rÃ#jsjÆrÄ#jtXmanyrÅ#†rÆ#jsX
  rÇ#†rÈ#jXyieldrÉ#†rÊ#jsjÆrË#jŸj&†rÌ#j©jÆrÍ#jsjÆrÎ#jŸjF†rÏ#j©jÆrÐ#jsjÆrÑ#jŸjÁ†rÒ#jsj»†rÓ#jXendrÔ#†rÕ#jsX

rÖ#†r×#hŒXmanyrØ#†rÙ#jsjÆrÚ#jXdorÛ#†rÜ#jsjÆrÝ#htjæ†rÞ#hŒjô†rß#j©jÆrà#jsjÆrá#hŒj’
†râ#htjæ†rã#jsX
  rä#†rå#jEXputsræ#†rç#jsjÆrè#hŒjô†ré#jsjÆrê#htj~
†rë#jsjÆrì#hŒj’
†rí#jsj»†rî#jXendrï#†rð#jsX

rñ#†rò#hX# Output: 3ró#†rô#jsX


rõ#†rö#jXdefr÷#†rø#jsjÆrù#jtXtwicerú#†rû#jsX
  rü#†rý#jXyieldrþ#†rÿ#jsX
  r$†r$jXyieldr$†r$jsj»†r$jXendr$†r$jsX

r$†r$hŒXtwicer	$†r
$jsjÆr$jXdor$†r
$jsjÆr$htjæ†r$hŒj׆r$htjæ†r$jsX
  r$†r$jEXputsr$†r$jsjÆr$hŒj׆r$htj؆r$hŒXinspectr$†r$jsj»†r$jXendr$†r$jsX


r$†r$jXdefr $†r!$jsjÆr"$jtXsomer#$†r$$jsX
  r%$†r&$jXyieldr'$†r($jsjÆr)$jŸj&†r*$j©jÆr+$jsjÆr,$jÖX'a'r-$†r.$jsX
  r/$†r0$jXyieldr1$†r2$jsjÆr3$jDXtruer4$†r5$j©jÆr6$jsjÆr7$jHjņr8$jHXhellor9$†r:$jHjņr;$jsX
  r<$†r=$jXyieldr>$†r?$jsjÆr@$jŸjF†rA$jsj»†rB$jXendrC$†rD$jsX

rE$†rF$hŒXsomerG$†rH$jsjÆrI$jXdorJ$†rK$jsjÆrL$htjæ†rM$hŒXfirstrN$†rO$j©jÆrP$jsjÆrQ$hŒXsecondrR$†rS$htjæ†rT$jsX
  rU$†rV$hX# first is Int32 | BoolrW$†rX$jsX
  rY$†rZ$hX# second is Char | String | Nilr[$†r\$jsj»†r]$jXendr^$†r_$jsX


r`$†ra$hŒXmethodrb$†rc$jsjÆrd$jXdore$†rf$jsjÆrg$htjæ†rh$hŒXargumentri$†rj$htjæ†rk$jsX
  rl$†rm$hŒXargumentrn$†ro$htj؆rp$hŒXsome_methodrq$†rr$jsj»†rs$jXendrt$†ru$jsX


rv$†rw$hŒXmethodrx$†ry$j©j܆rz$htjÀ†r{$htj؆r|$hŒXsome_methodr}$†r~$j©jà†r$jsX


r€$†r$hŒXmethodr‚$†rƒ$jsjÆr„$htjÀ†r…$htj؆r†$hŒXsome_methodr‡$†rˆ$j©j܆r‰$hŒXarg1rŠ$†r‹$j©jÆrŒ$jsjÆr$hŒXarg2rŽ$†r$j©jà†r$jsX


r‘$†r’$hŒXmethodr“$†r”$jsjÆr•$htjÀ†r–$htj؆r—$j=j~
†r˜$j©j܆r™$jŸjF†rš$j©jà†r›$jsj»†rœ$hŒXmethodr$†rž$jsjÆrŸ$htjÀ†r $htj؆r¡$hŒj¿†r¢$hŒXindexr£$†r¤$htj̆r¥$jsX


r¦$†r§$jXdefr¨$†r©$jsjÆrª$jtXtwicer«$†r¬$jsX
  r­$†r®$hŒXv1r¯$†r°$jsjÆr±$htjφr²$jsjÆr³$jXyieldr´$†rµ$jsjÆr¶$jŸj&†r·$jsX
  r¸$†r¹$jEXputsrº$†r»$jsjÆr¼$hŒXv1r½$†r¾$jsX

  r¿$†rÀ$hŒXv2rÁ$†rÂ$jsjÆrÃ$htjφrÄ$jsjÆrÅ$jXyieldrÆ$†rÇ$jsjÆrÈ$jŸjF†rÉ$jsX
  rÊ$†rË$jEXputsrÌ$†rÍ$jsjÆrÎ$hŒXv2rÏ$†rÐ$jsj»†rÑ$jXendrÒ$†rÓ$jsX

rÔ$†rÕ$hŒXtwicerÖ$†r×$jsjÆrØ$jXdorÙ$†rÚ$jsjÆrÛ$htjæ†rÜ$hŒj׆rÝ$htjæ†rÞ$jsX
  rß$†rà$hŒj׆rá$jsjÆrâ$htj~
†rã$jsjÆrä$jŸj&†rå$jsj»†ræ$jXendrç$†rè$jsX


ré$†rê$hŒXaryrë$†rì$jsjÆrí$htjφrî$jsjÆrï$htj¿†rð$jŸj&†rñ$j©jÆrò$jsjÆró$jŸjF†rô$j©jÆrõ$jsjÆrö$jŸjÁ†r÷$htj̆rø$jsj»†rù$hŒXaryrú$†rû$htj؆rü$hŒXmaprý$†rþ$jsjÆrÿ$j©jB†r%jsjÆr%htjæ†r%hŒjô†r%htjæ†r%jsjÆr%hŒjô†r%jsjÆr%htj~
†r%jsjÆr	%jŸj&†r
%jsjÆr%j©j†r%jsX	         r
%†r%hX
#=> [2, 3, 4]r%†r%jsj»†r%hŒXaryr%†r%htj؆r%hŒXselectr%†r%jsjÆr%j©jB†r%jsjÆr%htjæ†r%hŒjô†r%htjæ†r%jsjÆr%hŒjô†r%jsjÆr%htj’†r %jsjÆr!%jŸjF†r"%jsjÆr#%htX==r$%†r%%jsjÆr&%jŸj&†r'%jsjÆr(%j©j†r)%jsjÆr*%hX
#=> [1, 3]r+%†r,%jsX


r-%†r.%jXdefr/%†r0%jsjÆr1%jtX	transformr2%†r3%j©j܆r4%hŒXvaluer5%†r6%j©jà†r7%jsX
  r8%†r9%jXyieldr:%†r;%jsjÆr<%hŒXvaluer=%†r>%jsj»†r?%jXendr@%†rA%jsX

rB%†rC%hŒX	transformrD%†rE%j©j܆rF%jŸj&†rG%j©jà†rH%jsjÆrI%j©jB†rJ%jsjÆrK%htjæ†rL%hŒjô†rM%htjæ†rN%jsjÆrO%hŒjô†rP%jsjÆrQ%htj~
†rR%jsjÆrS%jŸj&†rT%jsjÆrU%j©j†rV%jsjÆrW%hX#=> 2rX%†rY%jsX


rZ%†r[%jXdefr\%†r]%jsjÆr^%jtXthricer_%†r`%jsX
  ra%†rb%jEXputsrc%†rd%jsjÆre%jHjņrf%jHXBefore 1rg%†rh%jHjņri%jsX
  rj%†rk%jXyieldrl%†rm%jsjÆrn%jŸj&†ro%jsX
  rp%†rq%jEXputsrr%†rs%jsjÆrt%jHjņru%jHXBefore 2rv%†rw%jHjņrx%jsX
  ry%†rz%jXyieldr{%†r|%jsjÆr}%jŸjF†r~%jsX
  r%†r€%jEXputsr%†r‚%jsjÆrƒ%jHjņr„%jHXBefore 3r…%†r†%jHjņr‡%jsX
  rˆ%†r‰%jXyieldrŠ%†r‹%jsjÆrŒ%jŸjÁ†r%jsX
  rŽ%†r%jEXputsr%†r‘%jsjÆr’%jHjņr“%jHXAfter 3r”%†r•%jHjņr–%jsj»†r—%jXendr˜%†r™%jsX

rš%†r›%hŒXthricerœ%†r%jsjÆrž%jXdorŸ%†r %jsjÆr¡%htjæ†r¢%hŒj׆r£%htjæ†r¤%jsX
  r¥%†r¦%jXifr§%†r¨%jsjÆr©%hŒj׆rª%jsjÆr«%htX==r¬%†r­%jsjÆr®%jŸjF†r¯%jsX
    r°%†r±%jXbreakr²%†r³%jsX
  r´%†rµ%jXendr¶%†r·%jsj»†r¸%jXendr¹%†rº%jsX


r»%†r¼%jXdefr½%†r¾%jsjÆr¿%jtXtwicerÀ%†rÁ%jsX
  rÂ%†rÃ%jXyieldrÄ%†rÅ%jsjÆrÆ%jŸj&†rÇ%jsX
  rÈ%†rÉ%jXyieldrÊ%†rË%jsjÆrÌ%jŸjF†rÍ%jsj»†rÎ%jXendrÏ%†rÐ%jsX

rÑ%†rÒ%hŒXtwicerÓ%†rÔ%jsjÆrÕ%j©jB†rÖ%jsjÆr×%htjæ†rØ%hŒj׆rÙ%htjæ†rÚ%jsjÆrÛ%hŒj׆rÜ%jsjÆrÝ%htj~
†rÞ%jsjÆrß%jŸj&†rà%jsjÆrá%j©j†râ%jsjÆrã%e(hX#=> 3rä%†rå%jsj»†ræ%hŒXtwicerç%†rè%jsjÆré%j©jB†rê%jsjÆrë%htjæ†rì%hŒj׆rí%htjæ†rî%jsjÆrï%jXbreakrð%†rñ%jsjÆrò%jHjņró%jHXhellorô%†rõ%jHjņrö%jsjÆr÷%j©j†rø%jsjÆrù%hX#=> "hello"rú%†rû%jsX


rü%†rý%hŒXvaluerþ%†rÿ%jsjÆr&htjφr&jsjÆr&hŒXtwicer&†r&jsjÆr&jXdor&†r&jsjÆr&htjæ†r	&hŒj׆r
&htjæ†r&jsX
  r&†r
&jXifr&†r&jsjÆr&hŒj׆r&jsjÆr&htX==r&†r&jsjÆr&jŸj&†r&jsX
    r&†r&jXbreakr&†r&jsjÆr&jHjņr&jHXhellor&†r&jHjņr&jsX
  r &†r!&jXendr"&†r#&jsX
  r$&†r%&hŒj׆r&&jsjÆr'&htj~
†r(&jsjÆr)&jŸj&†r*&jsj»†r+&jXendr,&†r-&jsj»†r.&hŒXvaluer/&†r0&jsjÆr1&hX#:: Int32 | Stringr2&†r3&jsX


r4&†r5&hŒXvaluesr6&†r7&jsjÆr8&htjφr9&jsjÆr:&hŒXtwicer;&†r<&jsjÆr=&j©jB†r>&jsjÆr?&jXbreakr@&†rA&jsjÆrB&jŸj&†rC&j©jÆrD&jsjÆrE&jŸjF†rF&jsjÆrG&j©j†rH&jsj»†rI&hŒXvaluesrJ&†rK&jsjÆrL&hX
#=> {1, 2}rM&†rN&jsX


rO&†rP&hŒXvaluerQ&†rR&jsjÆrS&htjφrT&jsjÆrU&hŒXtwicerV&†rW&jsjÆrX&j©jB†rY&jsjÆrZ&jXbreakr[&†r\&jsjÆr]&j©j†r^&jsj»†r_&hŒXvaluer`&†ra&jsjÆrb&hX#=> nilrc&†rd&jsX


re&†rf&jXdefrg&†rh&jsjÆri&jtXtwicerj&†rk&jsX
  rl&†rm&jXyieldrn&†ro&jsjÆrp&jŸj&†rq&jsX
  rr&†rs&jXyieldrt&†ru&jsjÆrv&jŸjF†rw&jsj»†rx&jXendry&†rz&jsX

r{&†r|&hŒXtwicer}&†r~&jsjÆr&jXdor€&†r&jsjÆr‚&htjæ†rƒ&hŒj׆r„&htjæ†r…&jsX
  r†&†r‡&jXifrˆ&†r‰&jsjÆrŠ&hŒj׆r‹&jsjÆrŒ&htX==r&†rŽ&jsjÆr&jŸj&†r&jsX
    r‘&†r’&jEXputsr“&†r”&jsjÆr•&jHjņr–&jHX
Skipping 1r—&†r˜&jHjņr™&jsX
    rš&†r›&jXnextrœ&†r&jsX
  rž&†rŸ&jXendr &†r¡&jsX

  r¢&†r£&jEXputsr¤&†r¥&jsjÆr¦&jHjņr§&jHXGot r¨&†r©&jÇX#{rª&†r«&hŒj׆r¬&jÇj†r­&jHjņr®&jsj»†r¯&jXendr°&†r±&jsX



r²&†r³&jXdefr´&†rµ&jsjÆr¶&jtXtwicer·&†r¸&jsX
  r¹&†rº&hŒXv1r»&†r¼&jsjÆr½&htjφr¾&jsjÆr¿&jXyieldrÀ&†rÁ&jsjÆrÂ&jŸj&†rÃ&jsX
  rÄ&†rÅ&jEXputsrÆ&†rÇ&jsjÆrÈ&hŒXv1rÉ&†rÊ&jsX

  rË&†rÌ&hŒXv2rÍ&†rÎ&jsjÆrÏ&htjφrÐ&jsjÆrÑ&jXyieldrÒ&†rÓ&jsjÆrÔ&jŸjF†rÕ&jsX
  rÖ&†r×&jEXputsrØ&†rÙ&jsjÆrÚ&hŒXv2rÛ&†rÜ&jsj»†rÝ&jXendrÞ&†rß&jsX

rà&†rá&hŒXtwicerâ&†rã&jsjÆrä&jXdorå&†ræ&jsjÆrç&htjæ†rè&hŒj׆ré&htjæ†rê&jsX
  rë&†rì&jXifrí&†rî&jsjÆrï&hŒj׆rð&jsjÆrñ&htX==rò&†ró&jsjÆrô&jŸj&†rõ&jsX
    rö&†r÷&jXnextrø&†rù&jsjÆrú&jŸX10rû&†rü&jsX
  rý&†rþ&jXendrÿ&†r'jsX

  r'†r'hŒj׆r'jsjÆr'htj~
†r'jsjÆr'jŸj&†r'jsj»†r'jXendr	'†r
'jsX

r'†r'hX# Outputr
'†r'jsj»†r'hX# 10r'†r'jsj»†r'hX# 3r'†r'jsX


r'†r'jXclassr'†r'jsjÆr'h¹XFoor'†r'jsX
  r'†r'jXdefr'†r'jsjÆr 'jtXoner!'†r"'jsX
    r#'†r$'jŸj&†r%'jsX
  r&'†r''jXendr('†r)'jsX

  r*'†r+'jXdefr,'†r-'jsjÆr.'jtXyield_with_selfr/'†r0'jsX
    r1'†r2'jXwithr3'†r4'jsjÆr5'jRXselfr6'†r7'jsjÆr8'jXyieldr9'†r:'jsX
  r;'†r<'jXendr='†r>'jsX

  r?'†r@'jXdefrA'†rB'jsjÆrC'jtXyield_normallyrD'†rE'jsX
    rF'†rG'jXyieldrH'†rI'jsX
  rJ'†rK'jXendrL'†rM'jsj»†rN'jXendrO'†rP'jsX

rQ'†rR'jXdefrS'†rT'jsjÆrU'jtXonerV'†rW'jsX
  rX'†rY'jHjņrZ'jHXoner['†r\'jHjņr]'jsj»†r^'jXendr_'†r`'jsX

ra'†rb'hŒXFoorc'†rd'htj؆re'hŒXnewrf'†rg'htj؆rh'hŒXyield_with_selfri'†rj'jsjÆrk'j©jB†rl'jsjÆrm'hŒXonern'†ro'jsjÆrp'j©j†rq'jsjÆrr'hX# => 1rs'†rt'jsj»†ru'hŒXFoorv'†rw'htj؆rx'hŒXnewry'†rz'htj؆r{'hŒXyield_normallyr|'†r}'jsjÆr~'j©jB†r'jsjÆr€'hŒXoner'†r‚'jsjÆrƒ'j©j†r„'jsX  r…'†r†'hX
# => "one"r‡'†rˆ'jsX


r‰'†rŠ'jXdefr‹'†rŒ'jsjÆr'jtXtwicerŽ'†r'jsX
  r'†r‘'jXyieldr’'†r“'jsjÆr”'jŸj&†r•'jsX
  r–'†r—'jXyieldr˜'†r™'jsjÆrš'jŸjF†r›'jsj»†rœ'jXendr'†rž'jsX

rŸ'†r 'hŒXtwicer¡'†r¢'jsjÆr£'jXdor¤'†r¥'jsjÆr¦'htjæ†r§'hŒj׆r¨'htjæ†r©'jsX
  rª'†r«'jEXputsr¬'†r­'jsjÆr®'jHjņr¯'jHXGot: r°'†r±'jÇX#{r²'†r³'hŒj׆r´'jÇj†rµ'jHjņr¶'jsj»†r·'jXendr¸'†r¹'jsX


rº'†r»'hŒj׆r¼'jsjÆr½'htjφr¾'jsjÆr¿'jŸj&†rÀ'jsj»†rÁ'jEXputsrÂ'†rÃ'jsjÆrÄ'jHjņrÅ'jHXGot: rÆ'†rÇ'jÇX#{rÈ'†rÉ'hŒj׆rÊ'jÇj†rË'jHjņrÌ'jsj»†rÍ'hŒj׆rÎ'jsjÆrÏ'htjφrÐ'jsjÆrÑ'jŸjF†rÒ'jsj»†rÓ'jEXputsrÔ'†rÕ'jsjÆrÖ'jHjņr×'jHXGot: rØ'†rÙ'jÇX#{rÚ'†rÛ'hŒj׆rÜ'jÇj†rÝ'jHjņrÞ'jsX


rß'†rà'jŸjÁ†rá'htj؆râ'hŒXtimesrã'†rä'jsjÆrå'jXdoræ'†rç'jsjÆrè'htjæ†ré'hŒj׆rê'htjæ†rë'jsX
  rì'†rí'jEXputsrî'†rï'jsjÆrð'hŒj׆rñ'jsj»†rò'jXendró'†rô'jsX


rõ'†rö'jXstructr÷'†rø'jsjÆrù'h¹XIntrú'†rû'jsX
  rü'†rý'jXdefrþ'†rÿ'jsjÆr(jtXtimesr(†r(jsX
    r(†r(hŒj׆r(jsjÆr(htjφr(jsjÆr(jŸj܆r	(jsX
    r
(†r(jXwhiler(†r
(jsjÆr(hŒj׆r(jsjÆr(htjä†r(jsjÆr(jRXselfr(†r(jsX
      r(†r(jXyieldr(†r(jsjÆr(hŒj׆r(jsX
      r(†r(hŒj׆r(jsjÆr(htX+=r(†r (jsjÆr!(jŸj&†r"(jsX
    r#(†r$(jXendr%(†r&(jsX
  r'(†r((jXendr)(†r*(jsj»†r+(jXendr,(†r-(jsX


r.(†r/(hŒj׆r0(jsjÆr1(htjφr2(jsjÆr3(jŸj܆r4(jsj»†r5(jXwhiler6(†r7(jsjÆr8(hŒj׆r9(jsjÆr:(htjä†r;(jsjÆr<(jŸjÁ†r=(jsX
  r>(†r?(jEXputsr@(†rA(jsjÆrB(hŒj׆rC(jsX
  rD(†rE(hŒj׆rF(jsjÆrG(htX+=rH(†rI(jsjÆrJ(jŸj&†rK(jsj»†rL(jXendrM(†rN(jsX


rO(†rP(jXclassrQ(†rR(jsjÆrS(h¹XPersonrT(†rU(jsX
  rV(†rW(jXdefrX(†rY(jsjÆrZ(jtX
initializer[(†r\(j©j܆r](hõX@namer^(†r_(j©jà†r`(jsX
  ra(†rb(jXendrc(†rd(jsX

  re(†rf(jXdefrg(†rh(jsjÆri(jtXgreetrj(†rk(jsX
    rl(†rm(jEXputsrn(†ro(jsjÆrp(jHjņrq(jHXHi, I'm rr(†rs(jÇX#{rt(†ru(hõX@namerv(†rw(jÇj†rx(jHjņry(jsX
  rz(†r{(jXendr|(†r}(jsj»†r~(jXendr(†r€(jsX

r(†r‚(jXclassrƒ(†r„(jsjÆr…(h¹XEmployeer†(†r‡(jsjÆrˆ(htjä†r‰(jsjÆrŠ(hŒXPersonr‹(†rŒ(jsj»†r(jXendrŽ(†r(jsX

r(†r‘(hŒXemployeer’(†r“(jsjÆr”(htjφr•(jsjÆr–(hŒXEmployeer—(†r˜(htj؆r™(hŒXnewrš(†r›(jsjÆrœ(jHjņr(jHXJohnrž(†rŸ(jHjņr (jsj»†r¡(hŒXemployeer¢(†r£(htj؆r¤(hŒXgreetr¥(†r¦(jsjÆr§(hX# "Hi, I'm John"r¨(†r©(jsX


rª(†r«(jXclassr¬(†r­(jsjÆr®(h¹XPersonr¯(†r°(jsX
  r±(†r²(jXdefr³(†r´(jsjÆrµ(jtX
initializer¶(†r·(j©j܆r¸(hõX@namer¹(†rº(j©jà†r»(jsX
  r¼(†r½(jXendr¾(†r¿(jsj»†rÀ(jXendrÁ(†rÂ(jsX

rÃ(†rÄ(jXclassrÅ(†rÆ(jsjÆrÇ(h¹XEmployeerÈ(†rÉ(jsjÆrÊ(htjä†rË(jsjÆrÌ(hŒXPersonrÍ(†rÎ(jsX
  rÏ(†rÐ(jXdefrÑ(†rÒ(jsjÆrÓ(jtX
initializerÔ(†rÕ(j©j܆rÖ(hõX@namer×(†rØ(j©jÆrÙ(jsjÆrÚ(hõX
@company_namerÛ(†rÜ(j©jà†rÝ(jsX
  rÞ(†rß(jXendrà(†rá(jsj»†râ(jXendrã(†rä(jsX

rå(†ræ(hŒXEmployeerç(†rè(htj؆ré(hŒXnewrê(†rë(jsjÆrì(jHjņrí(jHXJohnrî(†rï(jHjņrð(j©jÆrñ(jsjÆrò(jHjņró(jHXAcmerô(†rõ(jHjņrö(jsjÆr÷(hX# OKrø(†rù(jsj»†rú(hŒXEmployeerû(†rü(htj؆rý(hŒXnewrþ(†rÿ(jsjÆr)jHjņr)jHXPeterr)†r)jHjņr)jsjÆr)hX"# Error: wrong number of argumentsr)†r)jsX
                     r)†r	)hX$# for 'Employee:Class#new' (1 for 2)r
)†r)jsX


r)†r
)jXclassr)†r)jsjÆr)h¹XPersonr)†r)jsX
  r)†r)jXdefr)†r)jsjÆr)jtXgreetr)†r)j©j܆r)hŒXmsgr)†r)j©jà†r)jsX
    r)†r)jEXputsr )†r!)jsjÆr")jHjņr#)jHXHi, r$)†r%)jÇX#{r&)†r')hŒXmsgr()†r))jÇj†r*)jHjņr+)jsX
  r,)†r-)jXendr.)†r/)jsj»†r0)jXendr1)†r2)jsX

r3)†r4)jXclassr5)†r6)jsjÆr7)h¹XEmployeer8)†r9)jsjÆr:)htjä†r;)jsjÆr<)hŒXPersonr=)†r>)jsX
  r?)†r@)jXdefrA)†rB)jsjÆrC)jtXgreetrD)†rE)j©j܆rF)hŒXmsgrG)†rH)j©jà†rI)jsX
    rJ)†rK)jEXputsrL)†rM)jsjÆrN)jHjņrO)jHXHello, rP)†rQ)jÇX#{rR)†rS)hŒXmsgrT)†rU)jÇj†rV)jHjņrW)jsX
  rX)†rY)jXendrZ)†r[)jsj»†r\)jXendr])†r^)jsX

r_)†r`)jEXpra)†rb)jsjÆrc)htjφrd)jsjÆre)hŒXPersonrf)†rg)htj؆rh)hŒXnewri)†rj)jsj»†rk)jEja)†rl)htj؆rm)hŒXgreetrn)†ro)jsjÆrp)jHjņrq)jHXeveryonerr)†rs)jHjņrt)jsjÆru)hX# "Hi, everyone"rv)†rw)jsX

rx)†ry)hŒj;†rz)jsjÆr{)htjφr|)jsjÆr})hŒXEmployeer~)†r)htj؆r€)hŒXnewr)†r‚)jsj»†rƒ)hŒj;†r„)htj؆r…)hŒXgreetr†)†r‡)jsjÆrˆ)jHjņr‰)jHXeveryonerŠ)†r‹)jHjņrŒ)jsjÆr)hX# "Hello, everyone"rŽ)†r)jsX


r)†r‘)jXclassr’)†r“)jsjÆr”)h¹XPersonr•)†r–)jsX
  r—)†r˜)jXdefr™)†rš)jsjÆr›)jtXgreetrœ)†r)j©j܆rž)hŒXmsgrŸ)†r )j©jà†r¡)jsX
    r¢)†r£)jEXputsr¤)†r¥)jsjÆr¦)jHjņr§)jHXHi, r¨)†r©)jÇX#{rª)†r«)hŒXmsgr¬)†r­)jÇj†r®)jHjņr¯)jsX
  r°)†r±)jXendr²)†r³)jsj»†r´)jXendrµ)†r¶)jsX

r·)†r¸)jXclassr¹)†rº)jsjÆr»)h¹XEmployeer¼)†r½)jsjÆr¾)htjä†r¿)jsjÆrÀ)hŒXPersonrÁ)†rÂ)jsX
  rÃ)†rÄ)jXdefrÅ)†rÆ)jsjÆrÇ)jtXgreetrÈ)†rÉ)j©j܆rÊ)hŒXmsgrË)†rÌ)jsjÆrÍ)j©j†rÎ)jsjÆrÏ)jEXInt32rÐ)†rÑ)j©jà†rÒ)jsX
    rÓ)†rÔ)jEXputsrÕ)†rÖ)jsjÆr×)jHjņrØ)jHXHi, this is a number: rÙ)†rÚ)jÇX#{rÛ)†rÜ)hŒXmsgrÝ)†rÞ)jÇj†rß)jHjņrà)jsX
  rá)†râ)jXendrã)†rä)jsj»†rå)jXendræ)†rç)jsX

rè)†ré)hŒj;†rê)jsjÆrë)htjφrì)jsjÆrí)hŒXEmployeerî)†rï)htj؆rð)hŒXnewrñ)†rò)jsj»†ró)hŒj;†rô)htj؆rõ)hŒXgreetrö)†r÷)jsjÆrø)jHjņrù)jHXeveryonerú)†rû)jHjņrü)jsjÆrý)hX# "Hi, everyone"rþ)†rÿ)jsX

r*†r*hŒj;†r*htj؆r*hŒXgreetr*†r*jsjÆr*jŸj&†r*jsjÆr*hX# "Hi, this is a number: 1"r	*†r
*jsX


r*†r*jXclassr
*†r*jsjÆr*h¹XPersonr*†r*jsX
  r*†r*jXdefr*†r*jsjÆr*jtXgreetr*†r*j©j܆r*hŒXmsgr*†r*j©jà†r*jsX
    r*†r*jEXputsr*†r *jsjÆr!*jHjņr"*jHXHello, r#*†r$*jHjņr%*hX#{msg}"r&*†r'*jsX
  r(*†r)*jXendr**†r+*jsj»†r,*jXendr-*†r.*jsX

r/*†r0*jXclassr1*†r2*jsjÆr3*h¹XEmployeer4*†r5*jsjÆr6*htjä†r7*jsjÆr8*hŒXPersonr9*†r:*jsX
  r;*†r<*jXdefr=*†r>*jsjÆr?*jtXgreetr@*†rA*j©j܆rB*hŒXmsgrC*†rD*j©jà†rE*jsX
    rF*†rG*jXsuperrH*†rI*jsjÆrJ*hX# Same as: super(msg)rK*†rL*jsX
    rM*†rN*jXsuperrO*†rP*j©j܆rQ*jHjņrR*jHXanother messagerS*†rT*jHjņrU*j©jà†rV*jsX
  rW*†rX*jXendrY*†rZ*jsj»†r[*jXendr\*†r]*jsX


r^*†r_*jXdefr`*†ra*jsjÆrb*jtX
int_to_intrc*†rd*j©j܆re*htjÀ†rf*hŒXblockrg*†rh*jsjÆri*j©j†rj*jsjÆrk*jEXInt32rl*†rm*jsjÆrn*htjð†ro*htjL†rp*jsjÆrq*jEXInt32rr*†rs*j©jà†rt*jsX
  ru*†rv*hŒXblockrw*†rx*jsj»†ry*jXendrz*†r{*jsX

r|*†r}*hŒXprocr~*†r*jsjÆr€*htjφr*jsjÆr‚*hŒX
int_to_intrƒ*†r„*jsjÆr…*j©jB†r†*jsjÆr‡*htjæ†rˆ*hŒjô†r‰*htjæ†rŠ*jsjÆr‹*hŒjô†rŒ*jsjÆr*htj~
†rŽ*jsjÆr*jŸj&†r*jsjÆr‘*j©j†r’*jsj»†r“*hŒXprocr”*†r•*htj؆r–*hŒXcallr—*†r˜*j©j܆r™*jŸj&†rš*j©jà†r›*jsjÆrœ*hX#=> 2r*†rž*jsX


rŸ*†r *jXclassr¡*†r¢*jsjÆr£*h¹XModelr¤*†r¥*jsX
  r¦*†r§*jXdefr¨*†r©*jsjÆrª*jtXon_saver«*†r¬*j©j܆r­*htjÀ†r®*hŒXblockr¯*†r°*j©jà†r±*jsX
    r²*†r³*hõX@on_save_callbackr´*†rµ*jsjÆr¶*htjφr·*jsjÆr¸*hŒXblockr¹*†rº*jsX
  r»*†r¼*jXendr½*†r¾*jsX

  r¿*†rÀ*jXdefrÁ*†rÂ*jsjÆrÃ*jtXsaverÄ*†rÅ*jsX
    rÆ*†rÇ*jXifrÈ*†rÉ*jsjÆrÊ*hŒXcallbackrË*†rÌ*jsjÆrÍ*htjφrÎ*jsjÆrÏ*hõX@on_save_callbackrÐ*†rÑ*jsX
      rÒ*†rÓ*hŒXcallbackrÔ*†rÕ*htj؆rÖ*hŒXcallr×*†rØ*jsX
    rÙ*†rÚ*jXendrÛ*†rÜ*jsX
  rÝ*†rÞ*jXendrß*†rà*jsj»†rá*jXendrâ*†rã*jsX

rä*†rå*hŒXmodelræ*†rç*jsjÆrè*htjφré*jsjÆrê*hŒXModelrë*†rì*htj؆rí*hŒXnewrî*†rï*jsj»†rð*hŒXmodelrñ*†rò*htj؆ró*hŒXon_saverô*†rõ*jsjÆrö*j©jB†r÷*jsjÆrø*jEXputsrù*†rú*jsjÆrû*jHjņrü*jHXSaved!rý*†rþ*jHjņrÿ*jsjÆr+j©j†r+jsj»†r+hŒXmodelr+†r+htj؆r+hŒXsaver+†r+jsjÆr+hX# prints "Saved!"r	+†r
+jsX


r+†r+jXdefr
+†r+jsjÆr+jtX	some_procr+†r+j©j܆r+htjÀ†r+hŒXblockr+†r+jsjÆr+j©j†r+jsjÆr+jEXInt32r+†r+jsjÆr+htjð†r+htjL†r+j©jà†r+jsX
  r+†r +hŒXblockr!+†r"+jsj»†r#+jXendr$+†r%+jsX

r&+†r'+hŒXprocr(+†r)+jsjÆr*+htjφr++jsjÆr,+hŒX	some_procr-+†r.+jsjÆr/+j©jB†r0+jsjÆr1+htjæ†r2+hŒjô†r3+htjæ†r4+jsjÆr5+hŒjô†r6+jsjÆr7+htj~
†r8+jsjÆr9+jŸj&†r:+jsjÆr;+j©j†r<+jsj»†r=+hŒXprocr>+†r?+htj؆r@+hŒXcallrA+†rB+j©j܆rC+jŸj&†rD+j©jà†rE+jsjÆrF+hX# voidrG+†rH+jsX


rI+†rJ+jXdefrK+†rL+jsjÆrM+jtX	some_procrN+†rO+j©j܆rP+htjÀ†rQ+hŒXblockrR+†rS+jsjÆrT+j©j†rU+jsjÆrV+jEXInt32rW+†rX+jsjÆrY+htjð†rZ+htjL†r[+jsjÆr\+hŒj	†r]+j©jà†r^+jsX
  r_+†r`+hŒXblockra+†rb+jsj»†rc+jXendrd+†re+jsX

rf+†rg+hŒXprocrh+†ri+jsjÆrj+htjφrk+jsjÆrl+hŒX	some_procrm+†rn+jsjÆro+j©jB†rp+jsjÆrq+htjæ†rr+hŒjô†rs+htjæ†rt+jsjÆru+hŒjô†rv+jsjÆrw+htj~
†rx+jsjÆry+jŸj&†rz+jsjÆr{+j©j†r|+jsj»†r}+hŒXprocr~+†r+htj؆r€+hŒXcallr+†r‚+j©j܆rƒ+jŸj&†r„+j©jà†r…+jsjÆr†+hX# 2r‡+†rˆ+jsX

r‰+†rŠ+hŒXprocr‹+†rŒ+jsjÆr+htjφrŽ+jsjÆr+hŒX	some_procr+†r‘+jsjÆr’+j©jB†r“+jsjÆr”+htjæ†r•+e(hŒjô†r–+htjæ†r—+jsjÆr˜+hŒjô†r™+htj؆rš+hŒXto_sr›+†rœ+jsjÆr+j©j†rž+jsj»†rŸ+hŒXprocr +†r¡+htj؆r¢+hŒXcallr£+†r¤+j©j܆r¥+jŸj&†r¦+j©jà†r§+jsjÆr¨+hX# "1"r©+†rª+jsX


r«+†r¬+jXmacror­+†r®+jsjÆr¯+jtXupdate_xr°+†r±+jsX
  r²+†r³+hŒjô†r´+jsjÆrµ+htjφr¶+jsjÆr·+jŸj&†r¸+jsj»†r¹+jXendrº+†r»+jsX

r¼+†r½+hŒjô†r¾+jsjÆr¿+htjφrÀ+jsjÆrÁ+jŸj܆rÂ+jsj»†rÃ+hŒXupdate_xrÄ+†rÅ+jsj»†rÆ+hŒjô†rÇ+jsjÆrÈ+hX#=> 1rÉ+†rÊ+jsX


rË+†rÌ+jXmacrorÍ+†rÎ+jsjÆrÏ+jtX
dont_update_xrÐ+†rÑ+jsX
  rÒ+†rÓ+htj’†rÔ+hŒjô†rÕ+jsjÆrÖ+htjφr×+jsjÆrØ+jŸj&†rÙ+jsX
  rÚ+†rÛ+jEXputsrÜ+†rÝ+jsjÆrÞ+htj’†rß+hŒjô†rà+jsj»†rá+jXendrâ+†rã+jsX

rä+†rå+hŒjô†ræ+jsjÆrç+htjφrè+jsjÆré+jŸj܆rê+jsj»†rë+hŒX
dont_update_xrì+†rí+jsjÆrî+hX# outputs 1rï+†rð+jsj»†rñ+hŒjô†rò+jsjÆró+hX#=> 0rô+†rõ+jsX


rö+†r÷+jXmacrorø+†rù+jsjÆrú+jtXfresh_vars_samplerû+†rü+j©j܆rý+htj·†rþ+hŒXnamesrÿ+†r,j©jà†r,jsX
  r,†r,hX# First declare varsr,†r,jsX
  r,†r,jÇX{%r,†r	,jsjÆr
,jXforr,†r,jsjÆr
,hŒXnamer,†r,j©jÆr,jsjÆr,hŒXindexr,†r,jsjÆr,jXinr,†r,jsjÆr,hŒXnamesr,†r,jsjÆr,jÇX%}r,†r,jsX
    r,†r,jEXprintr,†r ,jsjÆr!,jHjņr",jHXDeclaring: r#,†r$,jHjņr%,j©jÆr&,jsjÆr',jHjņr(,jHX%name{index}r),†r*,jHjņr+,j©jÆr,,jsjÆr-,jÖX'\n'r.,†r/,jsX
    r0,†r1,htj’†r2,hŒXnamer3,†r4,j©jB†r5,hŒXindexr6,†r7,j©j†r8,jsjÆr9,htjφr:,jsjÆr;,jÇX{{r<,†r=,hŒXindexr>,†r?,jÇX}}r@,†rA,jsX
  rB,†rC,jÇX{%rD,†rE,jsjÆrF,jXendrG,†rH,jsjÆrI,jÇX%}rJ,†rK,jsX

  rL,†rM,hX# Then print themrN,†rO,jsX
  rP,†rQ,jÇX{%rR,†rS,jsjÆrT,jXforrU,†rV,jsjÆrW,hŒXnamerX,†rY,j©jÆrZ,jsjÆr[,hŒXindexr\,†r],jsjÆr^,jXinr_,†r`,jsjÆra,hŒXnamesrb,†rc,jsjÆrd,jÇX%}re,†rf,jsX
    rg,†rh,jEXprintri,†rj,jsjÆrk,jHjņrl,jHX%name{index}: rm,†rn,jHjņro,j©jÆrp,jsjÆrq,htj’†rr,hŒXnamers,†rt,j©jB†ru,hŒXindexrv,†rw,j©j†rx,j©jÆry,jsjÆrz,jÖX'\n'r{,†r|,jsX
  r},†r~,jÇX{%r,†r€,jsjÆr,jXendr‚,†rƒ,jsjÆr„,jÇX%}r…,†r†,jsj»†r‡,jXendrˆ,†r‰,jsX

rŠ,†r‹,hŒXfresh_vars_samplerŒ,†r,jsjÆrŽ,hŒjY†r,j©jÆr,jsjÆr‘,hŒj
†r’,j©jÆr“,jsjÆr”,hŒj݆r•,jsX

r–,†r—,hX# Sample output:r˜,†r™,jsj»†rš,hX# Declaring: __temp_255r›,†rœ,jsj»†r,hX# Declaring: __temp_256rž,†rŸ,jsj»†r ,hX# Declaring: __temp_257r¡,†r¢,jsj»†r£,hX# __temp_255: 0r¤,†r¥,jsj»†r¦,hX# __temp_256: 1r§,†r¨,jsj»†r©,hX# __temp_257: 2rª,†r«,jsX


r¬,†r­,jXclassr®,†r¯,jsjÆr°,h¹XObjectr±,†r²,jsX
  r³,†r´,jXmacrorµ,†r¶,jsjÆr·,jtXdefr¸,†r¹,jsjÆrº,hŒXinstance_vars_namesr»,†r¼,jsjÆr½,j©j†r¾,jsjÆr¿,jEXArrayrÀ,†rÁ,j©j܆rÂ,jEXStringrÃ,†rÄ,j©jà†rÅ,jsX
    rÆ,†rÇ,jÇX{{rÈ,†rÉ,jsjÆrÊ,hõX@typerË,†rÌ,htj؆rÍ,hŒX
instance_varsrÎ,†rÏ,htj؆rÐ,hŒXmaprÑ,†rÒ,jsjÆrÓ,htjÀ†rÔ,htj؆rÕ,hŒXnamerÖ,†r×,htj؆rØ,hŒX	stringifyrÙ,†rÚ,jsjÆrÛ,jÇX}}rÜ,†rÝ,jsX
  rÞ,†rß,jXendrà,†rá,jsj»†râ,jXendrã,†rä,jsX

rå,†ræ,jXclassrç,†rè,jsjÆré,h¹XPersonrê,†rë,jsX
  rì,†rí,jXdefrî,†rï,jsjÆrð,jtX
initializerñ,†rò,j©j܆ró,hõX@namerô,†rõ,j©jÆrö,jsjÆr÷,hõX@agerø,†rù,j©jà†rú,jsX
  rû,†rü,jXendrý,†rþ,jsj»†rÿ,jXendr-†r-jsX

r-†r-hŒXpersonr-†r-jsjÆr-htjφr-jsjÆr-hŒXPersonr	-†r
-htj؆r-hŒXnewr-†r
-jsjÆr-jHjņr-jHXJohnr-†r-jHjņr-j©jÆr-jsjÆr-jŸX30r-†r-jsj»†r-hŒXpersonr-†r-htj؆r-hŒXinstance_vars_namesr-†r-jsjÆr-hX#=> ["name", "age"]r-†r-jsX


r -†r!-jXclassr"-†r#-jsjÆr$-h¹XObjectr%-†r&-jsX
  r'-†r(-jXmacror)-†r*-jsjÆr+-jtXdefr,-†r--jsjÆr.-hŒXhas_instance_var?r/-†r0-j©j܆r1-hŒXnamer2-†r3-j©jà†r4-jsjÆr5-j©j†r6-jsjÆr7-jEXBoolr8-†r9-jsX
    r:-†r;-hX8# We cannot access name inside the macro expansion here,r<-†r=-jsX
    r>-†r?-hXA# instead we need to use the macro language to construct an arrayr@-†rA-jsX
    rB-†rC-hX(# and do the inclusion check at runtime.rD-†rE-jsX
    rF-†rG-jÇX{{rH-†rI-jsjÆrJ-hõX@typerK-†rL-htj؆rM-hŒX
instance_varsrN-†rO-htj؆rP-hŒXmaprQ-†rR-jsjÆrS-htjÀ†rT-htj؆rU-hŒXnamerV-†rW-htj؆rX-hŒX	stringifyrY-†rZ-jsjÆr[-jÇX}}r\-†r]-htj؆r^-hŒX	includes?r_-†r`-jsjÆra-hŒXnamerb-†rc-jsX
  rd-†re-jXendrf-†rg-jsj»†rh-jXendri-†rj-jsX

rk-†rl-hŒXpersonrm-†rn-jsjÆro-htjφrp-jsjÆrq-hŒXPersonrr-†rs-htj؆rt-hŒXnewru-†rv-jsjÆrw-jHjņrx-jHXJohnry-†rz-jHjņr{-j©jÆr|-jsjÆr}-jŸX30r~-†r-jsj»†r€-hŒXpersonr-†r‚-htj؆rƒ-hŒXhas_instance_var?r„-†r…-j©j܆r†-jHjņr‡-jHXnamerˆ-†r‰-jHjņrŠ-j©jà†r‹-jsjÆrŒ-hX#=> truer-†rŽ-jsj»†r-hŒXpersonr-†r‘-htj؆r’-hŒXhas_instance_var?r“-†r”-j©j܆r•-jHjņr–-jHXbirthdayr—-†r˜-jHjņr™-j©jà†rš-jsjÆr›-hX	#=> falserœ-†r-jsX


rž-†rŸ-jXclassr -†r¡-jsjÆr¢-h¹XParentr£-†r¤-jsX
  r¥-†r¦-jXmacror§-†r¨-jsjÆr©-jtX	inheritedrª-†r«-jsX
    r¬-†r­-jXdefr®-†r¯-jsjÆr°-jÇX{{r±-†r²-hõX@typer³-†r´-htj؆rµ-hŒXnamer¶-†r·-htj؆r¸-hŒXdowncaser¹-†rº-htj؆r»-hŒXidr¼-†r½-jÇX}}r¾-†r¿-jsX
      rÀ-†rÁ-jŸj&†rÂ-jsX
    rÃ-†rÄ-jXendrÅ-†rÆ-jsX
  rÇ-†rÈ-jXendrÉ-†rÊ-jsj»†rË-jXendrÌ-†rÍ-jsX

rÎ-†rÏ-jXclassrÐ-†rÑ-jsjÆrÒ-h¹XChildrÓ-†rÔ-jsjÆrÕ-htjä†rÖ-jsjÆr×-hŒXParentrØ-†rÙ-jsj»†rÚ-jXendrÛ-†rÜ-jsX

rÝ-†rÞ-hŒXChildrß-†rà-htj؆rá-hŒXnewrâ-†rã-htj؆rä-hŒXchildrå-†ræ-jsjÆrç-hX#=> 1rè-†ré-jsX


rê-†rë-jXmacrorì-†rí-jsjÆrî-jtXmethod_missingrï-†rð-j©j܆rñ-hŒXnamerò-†ró-j©jÆrô-jsjÆrõ-hŒXargsrö-†r÷-j©jÆrø-jsjÆrù-hŒXblockrú-†rû-j©jà†rü-jsX
  rý-†rþ-jEXprintrÿ-†r.jsjÆr.jHjņr.jHXGot r.†r.jHjņr.j©jÆr.jsjÆr.jÇX{{r.†r	.hŒXnamer
.†r.htj؆r.hŒXidr
.†r.htj؆r.hŒX	stringifyr.†r.jÇX}}r.†r.j©jÆr.jsjÆr.jHjņr.jHX with r.†r.jHjņr.j©jÆr.jsjÆr.jÇX{{r.†r.hŒXargsr.†r.htj؆r .hŒXsizer!.†r".jÇX}}r#.†r$.j©jÆr%.jsjÆr&.jHjņr'.jHX
 argumentsr(.†r).jHjņr*.j©jÆr+.jsjÆr,.jÖX'\n'r-.†r..jsj»†r/.jXendr0.†r1.jsX

r2.†r3.hŒXfoor4.†r5.jsX
          r6.†r7.hX"# Prints: Got foo with 0 argumentsr8.†r9.jsj»†r:.hŒXbarr;.†r<.jsjÆr=.jÖX'a'r>.†r?.j©jÆr@.jsjÆrA.jÖX'b'rB.†rC.jsjÆrD.hX"# Prints: Got bar with 2 argumentsrE.†rF.jsX


rG.†rH.jXsizeofrI.†rJ.j©j܆rK.jEXInt32rL.†rM.j©jà†rN.jsX  rO.†rP.hX#=> 4rQ.†rR.jsj»†rS.jXsizeofrT.†rU.j©j܆rV.jEXInt64rW.†rX.j©jà†rY.jsX  rZ.†r[.hX#=> 8r\.†r].jsX


r^.†r_.hX# On a 64 bits machiner`.†ra.jsj»†rb.jXsizeofrc.†rd.j©j܆re.jEXPointerrf.†rg.j©j܆rh.jEXInt32ri.†rj.j©jà†rk.j©jà†rl.jsjÆrm.hX#=> 8rn.†ro.jsj»†rp.jXsizeofrq.†rr.j©j܆rs.jEXStringrt.†ru.j©jà†rv.jsX	         rw.†rx.hX#=> 8ry.†rz.jsX


r{.†r|.hŒjY†r}.jsjÆr~.htjφr.jsjÆr€.jŸj&†r.jsj»†r‚.jXsizeofrƒ.†r„.j©j܆r….jXtypeofr†.†r‡.j©j܆rˆ.hŒjY†r‰.j©jà†rŠ.j©jà†r‹.jsjÆrŒ.hX#=> 4r.†rŽ.jsX


r.†r.jXclassr‘.†r’.jsjÆr“.h¹XFoor”.†r•.jsX
  r–.†r—.jXmacror˜.†r™.jsjÆrš.jtX	emphasizer›.†rœ.j©j܆r.hŒXvaluerž.†rŸ.j©jà†r .jsX
    r¡.†r¢.jHjņr£.jHX***r¤.†r¥.jÇX#{r¦.†r§.jsjÆr¨.jÇjB†r©.jÇjB†rª.hŒXvaluer«.†r¬.jÇj†r­.jÇj†r®.jsjÆr¯.jÇj†r°.jHX***r±.†r².jHjņr³.jsX
  r´.†rµ.jXendr¶.†r·.jsX

  r¸.†r¹.jXdefrº.†r».jsjÆr¼.jtXyield_with_selfr½.†r¾.jsX
    r¿.†rÀ.jXwithrÁ.†rÂ.jsjÆrÃ.jRXselfrÄ.†rÅ.jsjÆrÆ.jXyieldrÇ.†rÈ.jsX
  rÉ.†rÊ.jXendrË.†rÌ.jsj»†rÍ.jXendrÎ.†rÏ.jsX

rÐ.†rÑ.hŒXFoorÒ.†rÓ.htj؆rÔ.hŒXnewrÕ.†rÖ.htj؆r×.hŒXyield_with_selfrØ.†rÙ.jsjÆrÚ.j©jB†rÛ.jsjÆrÜ.hŒX	emphasizerÝ.†rÞ.j©j܆rß.jŸX10rà.†rá.j©jà†râ.jsjÆrã.j©j†rä.jsjÆrå.hX#=> "***10***"ræ.†rç.jsX


rè.†ré.hX# This generates:rê.†rë.jsj»†rì.hjN†rí.jsj»†rî.hX#     def :foorï.†rð.jsj»†rñ.hX	#       1rò.†ró.jsj»†rô.hX	#     endrõ.†rö.jsj»†r÷.hŒX
define_methodrø.†rù.jsjÆrú.jÝX:foorû.†rü.j©jÆrý.jsjÆrþ.jŸj&†rÿ.jsX


r/†r/jXmacror/†r/jsjÆr/jtX
define_methodr/†r/j©j܆r/hŒXnamer/†r	/j©jÆr
/jsjÆr/hŒXcontentr/†r
/j©jà†r/jsX
  r/†r/jXdefr/†r/jsjÆr/jÇX{{r/†r/hŒXnamer/†r/htj؆r/hŒXidr/†r/jÇX}}r/†r/jsX
    r/†r/jÇX{{r/†r /hŒXcontentr!/†r"/jÇX}}r#/†r$/jsX
  r%/†r&/jXendr'/†r(/jsj»†r)/jXendr*/†r+/jsX

r,/†r-/hX# This correctly generates:r./†r//jsj»†r0/hjN†r1/jsj»†r2/hX
#     def foor3/†r4/jsj»†r5/hX	#       1r6/†r7/jsj»†r8/hX	#     endr9/†r:/jsj»†r;/hŒX
define_methodr</†r=/jsjÆr>/jÝX:foor?/†r@/j©jÆrA/jsjÆrB/jŸj&†rC/jsX


rD/†rE/jXmacrorF/†rG/jsjÆrH/jtX
define_methodrI/†rJ/j©j܆rK/hŒXnamerL/†rM/j©jÆrN/jsjÆrO/hŒXcontentrP/†rQ/j©jà†rR/jsX
  rS/†rT/jXdefrU/†rV/jsjÆrW/jÇX{{rX/†rY/hŒXnamerZ/†r[/jÇX}}r\/†r]/jsX
    r^/†r_/jÇX{%r`/†ra/jsjÆrb/jXifrc/†rd/jsjÆre/hŒXcontentrf/†rg/jsjÆrh/htX==ri/†rj/jsjÆrk/jŸj&†rl/jsjÆrm/jÇX%}rn/†ro/jsX
      rp/†rq/jHjņrr/jHXoners/†rt/jHjņru/jsX
    rv/†rw/jÇX{%rx/†ry/jsjÆrz/jXelser{/†r|/jsjÆr}/jÇX%}r~/†r/jsX
      r€/†r/jÇX{{r‚/†rƒ/hŒXcontentr„/†r…/jÇX}}r†/†r‡/jsX
    rˆ/†r‰/jÇX{%rŠ/†r‹/jsjÆrŒ/jXendr/†rŽ/jsjÆr/jÇX%}r/†r‘/jsX
  r’/†r“/jXendr”/†r•/jsj»†r–/jXendr—/†r˜/jsX

r™/†rš/hŒX
define_methodr›/†rœ/jsjÆr/hŒXfoorž/†rŸ/j©jÆr /jsjÆr¡/jŸj&†r¢/jsj»†r£/hŒX
define_methodr¤/†r¥/jsjÆr¦/hŒXbarr§/†r¨/j©jÆr©/jsjÆrª/jŸjF†r«/jsX

r¬/†r­/hŒXfoor®/†r¯/jsjÆr°/hX#=> oner±/†r²/jsj»†r³/hŒXbarr´/†rµ/jsjÆr¶/hX#=> 2r·/†r¸/jsX


r¹/†rº/jÇX{%r»/†r¼/jsjÆr½/jXifr¾/†r¿/jsjÆrÀ/hŒXenvrÁ/†rÂ/j©j܆rÃ/jHjņrÄ/jHXTESTrÅ/†rÆ/jHjņrÇ/j©jà†rÈ/jsjÆrÉ/jÇX%}rÊ/†rË/jsX
  rÌ/†rÍ/jEXputsrÎ/†rÏ/jsjÆrÐ/jHjņrÑ/jHXWe are in test moderÒ/†rÓ/jHjņrÔ/jsj»†rÕ/jÇX{%rÖ/†r×/jsjÆrØ/jXendrÙ/†rÚ/jsjÆrÛ/jÇX%}rÜ/†rÝ/jsX


rÞ/†rß/jXmacrorà/†rá/jsjÆrâ/jtXdefine_dummy_methodsrã/†rä/j©j܆rå/hŒXnamesræ/†rç/j©jà†rè/jsX
  ré/†rê/jÇX{%rë/†rì/jsjÆrí/jXforrî/†rï/jsjÆrð/hŒXnamerñ/†rò/j©jÆró/jsjÆrô/hŒXindexrõ/†rö/jsjÆr÷/jXinrø/†rù/jsjÆrú/hŒXnamesrû/†rü/jsjÆrý/jÇX%}rþ/†rÿ/jsX
    r0†r0jXdefr0†r0jsjÆr0jÇX{{r0†r0hŒXnamer0†r0htj؆r	0hŒXidr
0†r0jÇX}}r0†r
0jsX
      r0†r0jÇX{{r0†r0hŒXindexr0†r0jÇX}}r0†r0jsX
    r0†r0jXendr0†r0jsX
  r0†r0jÇX{%r0†r0jsjÆr0jXendr0†r 0jsjÆr!0jÇX%}r"0†r#0jsj»†r$0jXendr%0†r&0jsX

r'0†r(0hŒXdefine_dummy_methodsr)0†r*0jsjÆr+0htj¿†r,0hŒXfoor-0†r.0j©jÆr/0jsjÆr00hŒXbarr10†r20j©jÆr30jsjÆr40hŒXbazr50†r60htj̆r70jsX

r80†r90hŒXfoor:0†r;0jsjÆr<0hX#=> 0r=0†r>0jsj»†r?0hŒXbarr@0†rA0jsjÆrB0hX#=> 1rC0†rD0jsj»†rE0hŒXbazrF0†rG0jsjÆrH0hX#=> 2rI0†rJ0jsX


rK0†rL0jXmacrorM0†rN0jsjÆrO0jtXdefine_dummy_methodsrP0†rQ0j©j܆rR0hŒXhashrS0†rT0j©jà†rU0jsX
  rV0†rW0jÇX{%rX0†rY0jsjÆrZ0jXforr[0†r\0jsjÆr]0hŒXkeyr^0†r_0j©jÆr`0jsjÆra0hŒXvaluerb0†rc0jsjÆrd0jXinre0†rf0jsjÆrg0hŒXhashrh0†ri0jsjÆrj0jÇX%}rk0†rl0jsX
    rm0†rn0jXdefro0†rp0jsjÆrq0jÇX{{rr0†rs0hŒXkeyrt0†ru0htj؆rv0hŒXidrw0†rx0jÇX}}ry0†rz0jsX
      r{0†r|0jÇX{{r}0†r~0hŒXvaluer0†r€0jÇX}}r0†r‚0jsX
    rƒ0†r„0jXendr…0†r†0jsX
  r‡0†rˆ0jÇX{%r‰0†rŠ0jsjÆr‹0jXendrŒ0†r0jsjÆrŽ0jÇX%}r0†r0jsj»†r‘0jXendr’0†r“0jsj»†r”0hŒXdefine_dummy_methodsr•0†r–0j©j܆r—0j©jB†r˜0jÝXfoor™0†rš0j©j†r›0jsjÆrœ0jŸX10r0†rž0j©jÆrŸ0jsjÆr 0jÝXbarr¡0†r¢0j©j†r£0jsjÆr¤0jŸX20r¥0†r¦0j©j†r§0j©jà†r¨0jsj»†r©0hŒXfoorª0†r«0jsjÆr¬0hX#=> 10r­0†r®0jsj»†r¯0hŒXbarr°0†r±0jsjÆr²0hX#=> 20r³0†r´0jsX


rµ0†r¶0jÇX{%r·0†r¸0jsjÆr¹0jXforrº0†r»0jsjÆr¼0hŒXnamer½0†r¾0j©jÆr¿0jsjÆrÀ0hŒXindexrÁ0†rÂ0jsjÆrÃ0jXinrÄ0†rÅ0jsjÆrÆ0htj¿†rÇ0jHjņrÈ0jHXfoorÉ0†rÊ0jHjņrË0j©jÆrÌ0jsjÆrÍ0jHjņrÎ0jHXbarrÏ0†rÐ0jHjņrÑ0j©jÆrÒ0jsjÆrÓ0jHjņrÔ0jHXbazrÕ0†rÖ0jHjņr×0htj̆rØ0jsjÆrÙ0jÇX%}rÚ0†rÛ0jsX
  rÜ0†rÝ0jXdefrÞ0†rß0jsjÆrà0jÇX{{rá0†râ0hŒXnamerã0†rä0htj؆rå0hŒXidræ0†rç0jÇX}}rè0†ré0jsX
    rê0†rë0jÇX{{rì0†rí0hŒXindexrî0†rï0jÇX}}rð0†rñ0jsX
  rò0†ró0jXendrô0†rõ0jsj»†rö0jÇX{%r÷0†rø0jsjÆrù0jXendrú0†rû0jsjÆrü0jÇX%}rý0†rþ0jsX

rÿ0†r1hŒXfoor1†r1jsjÆr1hX#=> 0r1†r1jsj»†r1hŒXbarr1†r1jsjÆr	1hX#=> 1r
1†r1jsj»†r1hŒXbazr
1†r1jsjÆr1hX#=> 2r1†r1jsX


r1†r1jXmacror1†r1jsjÆr1jtXdefine_dummy_methodsr1†r1j©j܆r1htj·†r1hŒXnamesr1†r1j©jà†r1jsX
  r1†r1jÇX{%r 1†r!1jsjÆr"1jXforr#1†r$1jsjÆr%1hŒXnamer&1†r'1j©jÆr(1jsjÆr)1hŒXindexr*1†r+1jsjÆr,1jXinr-1†r.1jsjÆr/1hŒXnamesr01†r11jsjÆr21jÇX%}r31†r41jsX
    r51†r61jXdefr71†r81jsjÆr91jÇX{{r:1†r;1hŒXnamer<1†r=1htj؆r>1hŒXidr?1†r@1jÇX}}rA1†rB1jsX
      rC1†rD1jÇX{{rE1†rF1hŒXindexrG1†rH1jÇX}}rI1†rJ1jsX
    rK1†rL1jXendrM1†rN1jsX
  rO1†rP1jÇX{%rQ1†rR1jsjÆrS1jXendrT1†rU1jsjÆrV1jÇX%}rW1†rX1jsj»†rY1jXendrZ1†r[1jsX

r\1†r]1hŒXdefine_dummy_methodsr^1†r_1jsjÆr`1hŒXfoora1†rb1j©jÆrc1jsjÆrd1hŒXbarre1†rf1j©jÆrg1jsjÆrh1hŒXbazri1†rj1jsX

rk1†rl1hŒXfoorm1†rn1jsjÆro1hX#=> 0rp1†rq1jsj»†rr1hŒXbarrs1†rt1jsjÆru1hX#=> 1rv1†rw1jsj»†rx1hŒXbazry1†rz1jsjÆr{1hX#=> 2r|1†r}1jsX


r~1†r1jXmacror€1†r1jsjÆr‚1jtXprintlnrƒ1†r„1j©j܆r…1htj·†r†1e(hŒXvaluesr‡1†rˆ1j©jà†r‰1jsX
   rŠ1†r‹1jEXprintrŒ1†r1jsjÆrŽ1jÇX{{r1†r1htj·†r‘1hŒXvaluesr’1†r“1jÇX}}r”1†r•1j©jÆr–1jsjÆr—1jÖX'\n'r˜1†r™1jsj»†rš1jXendr›1†rœ1jsX

r1†rž1hŒXprintlnrŸ1†r 1jsjÆr¡1jŸj&†r¢1j©jÆr£1jsjÆr¤1jŸjF†r¥1j©jÆr¦1jsjÆr§1jŸjÁ†r¨1jsjÆr©1hX# outputs 123\nrª1†r«1jsX


r¬1†r­1jŠXVALUESr®1†r¯1jsjÆr°1htjφr±1jsjÆr²1htj¿†r³1jŸj&†r´1j©jÆrµ1jsjÆr¶1jŸjF†r·1j©jÆr¸1jsjÆr¹1jŸjÁ†rº1htj̆r»1jsX

r¼1†r½1jÇX{%r¾1†r¿1jsjÆrÀ1jXforrÁ1†rÂ1jsjÆrÃ1hŒXvaluerÄ1†rÅ1jsjÆrÆ1jXinrÇ1†rÈ1jsjÆrÉ1jŠXVALUESrÊ1†rË1jsjÆrÌ1jÇX%}rÍ1†rÎ1jsX
  rÏ1†rÐ1jEXputsrÑ1†rÒ1jsjÆrÓ1jÇX{{rÔ1†rÕ1hŒXvaluerÖ1†r×1jÇX}}rØ1†rÙ1jsj»†rÚ1jÇX{%rÛ1†rÜ1jsjÆrÝ1jXendrÞ1†rß1jsjÆrà1jÇX%}rá1†râ1jsX


rã1†rä1jXuntilrå1†ræ1jsjÆrç1hŒXsome_conditionrè1†ré1jsX
  rê1†rë1hŒXdo_thisrì1†rí1jsj»†rî1jXendrï1†rð1jsX

rñ1†rò1hX# The above is the same as:ró1†rô1jsj»†rõ1jXwhilerö1†r÷1jsjÆrø1htj7†rù1hŒXsome_conditionrú1†rû1jsX
  rü1†rý1hŒXdo_thisrþ1†rÿ1jsj»†r2jXendr2†r2jsX


r2†r2hŒjY†r2jsjÆr2htjφr2jsjÆr2hŒXsome_conditionr	2†r
2jsjÆr2j©j–†r2jsjÆr
2jDXnilr2†r2jsjÆr2j©j†r2jsjÆr2jŸjÁ†r2jsj»†r2hX# a is Int32 or Nilr2†r2jsX

r2†r2jXifr2†r2jsjÆr2hŒjY†r2jsX
  r2†r2hX3# Since the only way to get here is if a is truthy,r2†r 2jsX
  r!2†r"2hX%# a can't be nil. So here a is Int32.r#2†r$2jsX
  r%2†r&2hŒjY†r'2htj؆r(2hŒXabsr)2†r*2jsj»†r+2jXendr,2†r-2jsX


r.2†r/2jXifr02†r12jsjÆr22hŒjY†r32jsjÆr42htjφr52jsjÆr62hŒXsome_expressionr72†r82jsX
  r92†r:2hX# here a is not nilr;2†r<2jsj»†r=2jXendr>2†r?2jsX


r@2†rA2jXifrB2†rC2jsjÆrD2hŒjY†rE2jsjÆrF2htX&&rG2†rH2jsjÆrI2hŒj
†rJ2jsX
  rK2†rL2hX0# here both a and b are guaranteed not to be NilrM2†rN2jsj»†rO2jXendrP2†rQ2jsX


rR2†rS2jXifrT2†rU2jsjÆrV2hõX@arW2†rX2jsX
  rY2†rZ2hX# here @a can be nilr[2†r\2jsj»†r]2jXendr^2†r_2jsX


r`2†ra2hX'# First option: assign it to a variablerb2†rc2jsj»†rd2jXifre2†rf2jsjÆrg2hŒjY†rh2jsjÆri2htjφrj2jsjÆrk2hõX@arl2†rm2jsX
  rn2†ro2hX# here a can't be nilrp2†rq2jsj»†rr2jXendrs2†rt2jsX

ru2†rv2hX?# Second option: use `Object#try` found in the standard libraryrw2†rx2jsj»†ry2hõX@arz2†r{2htj؆r|2hŒXtryr}2†r~2jsjÆr2jXdor€2†r2jsjÆr‚2htjæ†rƒ2hŒjY†r„2htjæ†r…2jsX
  r†2†r‡2hX# here a can't be nilrˆ2†r‰2jsj»†rŠ2jXendr‹2†rŒ2jsX


r2†rŽ2jXifr2†r2jsjÆr‘2hŒXmethodr’2†r“2jsjÆr”2hX5# first call to a method that can return Int32 or Nilr•2†r–2jsX
          r—2†r˜2hX5# here we know that the first call did not return Nilr™2†rš2jsX
  r›2†rœ2hŒXmethodr2†rž2jsX  rŸ2†r 2hX+# second call can still return Int32 or Nilr¡2†r¢2jsj»†r£2jXendr¤2†r¥2jsX


r¦2†r§2jXclassr¨2†r©2jsjÆrª2h¹XPersonr«2†r¬2jsX
  r­2†r®2jXdefr¯2†r°2jsjÆr±2jtXbecome_olderr²2†r³2j©j܆r´2hŒXbyrµ2†r¶2jsjÆr·2htjφr¸2jsjÆr¹2jŸj&†rº2j©jà†r»2jsX
    r¼2†r½2hõX@ager¾2†r¿2jsjÆrÀ2htX+=rÁ2†rÂ2jsjÆrÃ2hŒXbyrÄ2†rÅ2jsX
  rÆ2†rÇ2jXendrÈ2†rÉ2jsj»†rÊ2jXendrË2†rÌ2jsX

rÍ2†rÎ2hŒXjohnrÏ2†rÐ2jsjÆrÑ2htjφrÒ2jsjÆrÓ2hŒXPersonrÔ2†rÕ2htj؆rÖ2hŒXnewr×2†rØ2jsjÆrÙ2jHjņrÚ2jHXJohnrÛ2†rÜ2jHjņrÝ2jsj»†rÞ2hŒXjohnrß2†rà2htj؆rá2hŒXagerâ2†rã2jsjÆrä2hX#=> 0rå2†ræ2jsX

rç2†rè2hŒXjohnré2†rê2htj؆rë2hŒXbecome_olderrì2†rí2jsj»†rî2hŒXjohnrï2†rð2htj؆rñ2hŒXagerò2†ró2jsjÆrô2hX#=> 1rõ2†rö2jsX

r÷2†rø2hŒXjohnrù2†rú2htj؆rû2hŒXbecome_olderrü2†rý2jsjÆrþ2jŸjF†rÿ2jsj»†r3hŒXjohnr3†r3htj؆r3hŒXager3†r3jsjÆr3hX#=> 3r3†r3jsX


r	3†r
3hŒXjohnr3†r3htj؆r
3hŒXbecome_olderr3†r3jsjÆr3jÝXbyr3†r3j©j†r3jsjÆr3jŸj8†r3jsX


r3†r3jXdefr3†r3jsjÆr3jtXsome_methodr3†r3j©j܆r3hŒjô†r3j©jÆr3jsjÆr 3hŒj’
†r!3jsjÆr"3htjφr#3jsjÆr$3jŸj&†r%3j©jÆr&3jsjÆr'3hŒj¨#†r(3jsjÆr)3htjφr*3jsjÆr+3jŸjF†r,3j©jÆr-3jsjÆr.3hŒXwr/3†r03jsjÆr13htjφr23jsjÆr33jŸjÁ†r43j©jà†r53jsX
  r63†r73hX# do something...r83†r93jsj»†r:3jXendr;3†r<3jsX

r=3†r>3hŒXsome_methodr?3†r@3jsjÆrA3jŸX10rB3†rC3jsjÆrD3hX# x = 10, y = 1, z = 2, w = 3rE3†rF3jsj»†rG3hŒXsome_methodrH3†rI3jsjÆrJ3jŸX10rK3†rL3j©jÆrM3jsjÆrN3jÝj¨#†rO3j©j†rP3jsjÆrQ3jŸX10rR3†rS3jsjÆrT3hX# x = 10, y = 1, z = 10, w = 3rU3†rV3jsj»†rW3hŒXsome_methodrX3†rY3jsjÆrZ3jŸX10r[3†r\3j©jÆr]3jsjÆr^3jÝj/3†r_3j©j†r`3jsjÆra3jŸj&†rb3j©jÆrc3jsjÆrd3jÝj’
†re3j©j†rf3jsjÆrg3jŸjF†rh3j©jÆri3jsjÆrj3jÝj¨#†rk3j©j†rl3jsjÆrm3jŸjÁ†rn3jsjÆro3hX# x = 10, y = 2, z = 3, w = 1rp3†rq3jsX


rr3†rs3jXcasert3†ru3jsjÆrv3hŒXexprw3†rx3jsj»†ry3jXwhenrz3†r{3jsjÆr|3hŒXvalue1r}3†r~3j©jÆr3jsjÆr€3hŒXvalue2r3†r‚3jsX
  rƒ3†r„3hŒXdo_somethingr…3†r†3jsj»†r‡3jXwhenrˆ3†r‰3jsjÆrŠ3hŒXvalue3r‹3†rŒ3jsX
  r3†rŽ3hŒXdo_something_elser3†r3jsj»†r‘3jXelser’3†r“3jsX
  r”3†r•3hŒXdo_another_thingr–3†r—3jsj»†r˜3jXendr™3†rš3jsX


r›3†rœ3jXcaser3†rž3jsjÆrŸ3hŒXvarr 3†r¡3jsj»†r¢3jXwhenr£3†r¤3jsjÆr¥3jEXStringr¦3†r§3jsX
  r¨3†r©3hX# var : Stringrª3†r«3jsX
  r¬3†r­3hŒXdo_somethingr®3†r¯3jsj»†r°3jXwhenr±3†r²3jsjÆr³3jEXInt32r´3†rµ3jsX
  r¶3†r·3hX
# var : Int32r¸3†r¹3jsX
  rº3†r»3hŒXdo_something_elser¼3†r½3jsj»†r¾3jXelser¿3†rÀ3jsX
  rÁ3†rÂ3hX+# here var is neither a String nor an Int32rÃ3†rÄ3jsX
  rÅ3†rÆ3hŒXdo_another_thingrÇ3†rÈ3jsj»†rÉ3jXendrÊ3†rË3jsX


rÌ3†rÍ3jXcaserÎ3†rÏ3jsjÆrÐ3hŒXnumrÑ3†rÒ3jsj»†rÓ3jXwhenrÔ3†rÕ3jsjÆrÖ3htj؆r×3hŒXeven?rØ3†rÙ3jsX
  rÚ3†rÛ3hŒXdo_somethingrÜ3†rÝ3jsj»†rÞ3jXwhenrß3†rà3jsjÆrá3htj؆râ3hŒXodd?rã3†rä3jsX
  rå3†ræ3hŒXdo_something_elserç3†rè3jsj»†ré3jXendrê3†rë3jsX


rì3†rí3jXcaserî3†rï3jsj»†rð3jXwhenrñ3†rò3jsjÆró3hŒXcond1rô3†rõ3j©jÆrö3jsjÆr÷3hŒXcond2rø3†rù3jsX
  rú3†rû3hŒXdo_somethingrü3†rý3jsj»†rþ3jXwhenrÿ3†r4jsjÆr4hŒXcond3r4†r4jsX
  r4†r4hŒXdo_something_elser4†r4jsj»†r4jXendr	4†r
4jsX


r4†r4hŒjY†r
4jsjÆr4htjφr4jsjÆr4jŸj&†r4jsj»†r4hŒjY†r4htj؆r4hŒXresponds_to?r4†r4j©j܆r4jÝX:absr4†r4j©jà†r4jsX    r4†r4hX#=> truer4†r4jsj»†r4hŒjY†r 4htj؆r!4hŒXresponds_to?r"4†r#4j©j܆r$4jÝX:sizer%4†r&4j©jà†r'4jsjÆr(4hX	#=> falser)4†r*4jsX


r+4†r,4hŒX
foo_or_barr-4†r.4jsjÆr/4htjφr04jsjÆr14jX/r24†r34jXfoo|barr44†r54jj24†r64jsj»†r74hŒXheeellor84†r94jsX    r:4†r;4htjφr<4jsjÆr=4jj24†r>4jXh(e+)llor?4†r@4jj24†rA4jsj»†rB4hŒXintegerrC4†rD4jsX    rE4†rF4htjφrG4jsjÆrH4jj24†rI4jX\rJ4†rK4jXd+rL4†rM4jj24†rN4jsX


rO4†rP4hŒXrrQ4†rR4jsjÆrS4htjφrT4jsjÆrU4jj24†rV4jXfoorW4†rX4jX/imxrY4†rZ4jsX


r[4†r\4hŒXslashr]4†r^4jsjÆr_4htjφr`4jsjÆra4jj24†rb4jX\/rc4†rd4jj24†re4jsX


rf4†rg4hŒjQ4†rh4jsjÆri4htjφrj4jsjÆrk4jX%r(rl4†rm4jXregex with slash: /rn4†ro4jjà†rp4jsX


rq4†rr4jHjņrs4jHXhello worldrt4†ru4jHjņrv4jsX


rw4†rx4jHjņry4júX\"rz4†r{4jHjņr|4jsjÆr}4hX# double quoter~4†r4jsj»†r€4jHjņr4júX\\r‚4†rƒ4jHjņr„4jsjÆr…4hX# backslashr†4†r‡4jsj»†rˆ4jHjņr‰4júX\erŠ4†r‹4jHjņrŒ4jsjÆr4hX# escaperŽ4†r4jsj»†r4jHjņr‘4júX\fr’4†r“4jHjņr”4jsjÆr•4hX# form feedr–4†r—4jsj»†r˜4jHjņr™4júX\nrš4†r›4jHjņrœ4jsjÆr4hX	# newlinerž4†rŸ4jsj»†r 4jHjņr¡4jHjJ4†r¢4jHjQ4†r£4jHjņr¤4jsjÆr¥4hX# carriage returnr¦4†r§4jsj»†r¨4jHjņr©4júX\trª4†r«4jHjņr¬4jsjÆr­4hX# tabr®4†r¯4jsj»†r°4jHjņr±4júX\vr²4†r³4jHjņr´4jsjÆrµ4hX# vertical tabr¶4†r·4jsX


r¸4†r¹4jHjņrº4júX\101r»4†r¼4jHjņr½4jsjÆr¾4hX# == "A"r¿4†rÀ4jsj»†rÁ4jHjņrÂ4júX\123rÃ4†rÄ4jHjņrÅ4jsjÆrÆ4hX# == "S"rÇ4†rÈ4jsj»†rÉ4jHjņrÊ4júX\12rË4†rÌ4jHjņrÍ4jsX  rÎ4†rÏ4hX	# == "\n"rÐ4†rÑ4jsj»†rÒ4jHjņrÓ4júX\1rÔ4†rÕ4jHjņrÖ4jsX   r×4†rØ4hX-# string with one character with code point 1rÙ4†rÚ4jsX


rÛ4†rÜ4jHjņrÝ4jHjJ4†rÞ4jHXu0041rß4†rà4jHjņrá4jsjÆrâ4hX# == "A"rã4†rä4jsX


rå4†ræ4jHjņrç4jHjJ4†rè4jHXu{41}ré4†rê4jHjņrë4jsX    rì4†rí4hX# == "A"rî4†rï4jsj»†rð4jHjņrñ4jHjJ4†rò4jHXu{1F52E}ró4†rô4jHjņrõ4jsjÆrö4hX# == "🔮"r÷4†rø4jsX


rù4†rú4jHjņrû4jHXhello
      worldrü4†rý4jHjņrþ4jsjÆrÿ4hX# same as "hello\n      world"r5†r5jsX


r5†r5jHjņr5jHXhello r5†r5jHjņr5jsjÆr5j©jJ4†r	5jsj»†r
5jHjņr5jHXworld, r5†r
5jHjņr5jsjÆr5j©jJ4†r5jsj»†r5jHjņr5jHXno newlinesr5†r5jHjņr5jsjÆr5hX$# same as "hello world, no newlines"r5†r5jsX


r5†r5jHjņr5jHXhello r5†r5jHjJ4†r5jHX

     world, r5†r 5jHjJ4†r!5jHX
     no newlinesr"5†r#5jHjņr$5jsjÆr%5hX$# same as "hello world, no newlines"r&5†r'5jsX


r(5†r)5hX/# Supports double quotes and nested parenthesisr*5†r+5jsj»†r,5jëX%(r-5†r.5jëXhello r/5†r05jëj܆r15jëX"world"r25†r35jëjà†r45jëjà†r55jsjÆr65hX# same as "hello (\"world\")"r75†r85jsX

r95†r:5hX,# Supports double quotes and nested bracketsr;5†r<5jsj»†r=5jëX%[r>5†r?5jëXhello r@5†rA5jëj¿†rB5jëX"world"rC5†rD5jëj̆rE5jëj̆rF5jsjÆrG5hX# same as "hello [\"world\"]"rH5†rI5jsX

rJ5†rK5hX+# Supports double quotes and nested curliesrL5†rM5jsj»†rN5jëX%{rO5†rP5jëXhello rQ5†rR5jëjB†rS5jëX"world"rT5†rU5jëj†rV5jëj†rW5jsjÆrX5hX# same as "hello {\"world\"}"rY5†rZ5jsX

r[5†r\5hX*# Supports double quotes and nested anglesr]5†r^5jsj»†r_5jëX%<r`5†ra5jëXhello rb5†rc5jëjä†rd5jëX"world"re5†rf5jëjL†rg5jëjL†rh5jsjÆri5hX# same as "hello <\"world\">"rj5†rk5jsX


rl5†rm5htX<<-rn5†ro5j@Xrp5†rq5j"XXMLrr5†rs5j@jp5†rt5jsj»†ru5j@X	<parent>
rv5†rw5j@X  <child />
rx5†ry5j@X
</parent>
rz5†r{5j"XXML
r|5†r}5jsX

r~5†r5hX# Same as "Hello\n  world"r€5†r5jsj»†r‚5htX<<-rƒ5†r„5j@jp5†r…5j"XSTRINGr†5†r‡5j@jp5†rˆ5jsj»†r‰5j@X  Hello
rŠ5†r‹5j@X
    world
rŒ5†r5j"X	  STRING
rŽ5†r5jsj»†r5hX# Same as "  Hello\n    world"r‘5†r’5jsj»†r“5htX<<-r”5†r•5j@jp5†r–5j"XSTRINGr—5†r˜5j@jp5†r™5jsj»†rš5j@X
    Hello
r›5†rœ5j@X      world
r5†rž5j"X	  STRING
rŸ5†r 5jsX

r¡5†r¢5hŒjY†r£5jsjÆr¤5htjφr¥5jsjÆr¦5jŸj&†r§5jsj»†r¨5hŒj
†r©5jsjÆrª5htjφr«5jsjÆr¬5jŸjF†r­5jsj»†r®5jHjņr¯5jHXsum = r°5†r±5jÇX#{r²5†r³5hŒjY†r´5jsjÆrµ5htj~
†r¶5jsjÆr·5hŒj
†r¸5jÇj†r¹5jHjņrº5jsX        r»5†r¼5hX# "sum = 3"r½5†r¾5jsX


r¿5†rÀ5jhX1.0rÁ5†rÂ5jsX      rÃ5†rÄ5hX	# Float64rÅ5†rÆ5jsj»†rÇ5jhX1.0_f32rÈ5†rÉ5jsX  rÊ5†rË5hX	# Float32rÌ5†rÍ5jsj»†rÎ5jhX1_f32rÏ5†rÐ5jsX    rÑ5†rÒ5hX	# Float32rÓ5†rÔ5jsX

rÕ5†rÖ5jhX1e10r×5†rØ5jsX     rÙ5†rÚ5hX	# Float64rÛ5†rÜ5jsj»†rÝ5jhX1.5e10rÞ5†rß5jsX   rà5†rá5hX	# Float64râ5†rã5jsj»†rä5jhX1.5e-7rå5†ræ5jsX   rç5†rè5hX	# Float64ré5†rê5jsX

rë5†rì5htj~
†rí5jhX1.3rî5†rï5jsX     rð5†rñ5hX	# Float64rò5†ró5jsj»†rô5htjð†rõ5jhX0.5rö5†r÷5jsX     rø5†rù5hX	# Float64rú5†rû5jsX


rü5†rý5jhX1_000_000.111_111rþ5†rÿ5jsjÆr6hX# better than 1000000.111111r6†r6jsX


r6†r6jÖX'a'r6†r6jsj»†r6jÖX'z'r6†r	6jsj»†r
6jÖX'0'r6†r6jsj»†r
6jÖX'_'r6†r6jsj»†r6jÖX'あ'r6†r6jsX


r6†r6jÖX'\''r6†r6jsjÆr6hX# single quoter6†r6jsj»†r6jÖX'\\'r6†r6jsjÆr6hX# backslashr6†r6jsj»†r 6jÖX'\e'r!6†r"6jsjÆr#6hX# escaper$6†r%6jsj»†r&6jÖX'\f'r'6†r(6jsjÆr)6hX# form feedr*6†r+6jsj»†r,6jÖX'\n'r-6†r.6jsjÆr/6hX	# newliner06†r16jsj»†r26jÖX'\r'r36†r46jsjÆr56hX# carriage returnr66†r76jsj»†r86jÖX'\t'r96†r:6jsjÆr;6hX# tabr<6†r=6jsj»†r>6jÖX'\v'r?6†r@6jsjÆrA6hX# vertical tabrB6†rC6jsX


rD6†rE6jÖX'\101'rF6†rG6jsjÆrH6hX# == 'A'rI6†rJ6jsj»†rK6jÖX'\123'rL6†rM6jsjÆrN6hX# == 'S'rO6†rP6jsj»†rQ6jÖX'\12'rR6†rS6jsX  rT6†rU6hX	# == '\n'rV6†rW6jsj»†rX6jÖX'\1'rY6†rZ6jsX   r[6†r\6hX# code point 1r]6†r^6jsX


r_6†r`6jÖX'\u0041'ra6†rb6jsjÆrc6hX# == 'A'rd6†re6jsX


rf6†rg6jÖX'\u{41}'rh6†ri6jsX    rj6†rk6hX# == 'A'rl6†rm6jsj»†rn6jÖX'\u{1F52E}'ro6†rp6jsjÆrq6hX# == '🔮'rr6†rs6jsX


rt6†ru6j©jB†rv6jŸj&†rw6jsjÆrx6htjφry6htjL†rz6jsjÆr{6jŸjF†r|6j©jÆr}6jsjÆr~6jŸjÁ†r6jsjÆr€6htjφr6htjL†r‚6jsjÆrƒ6jŸjô
†r„6j©j†r…6jsX     r†6†r‡6hX# Hash(Int32, Int32)rˆ6†r‰6jsj»†rŠ6j©jB†r‹6jŸj&†rŒ6jsjÆr6htjφrŽ6htjL†r6jsjÆr6jŸjF†r‘6j©jÆr’6jsjÆr“6jÖX'a'r”6†r•6jsjÆr–6htjφr—6htjL†r˜6jsjÆr™6jŸjÁ†rš6j©j†r›6jsX   rœ6†r6hX# Hash(Int32 | Char, Int32)rž6†rŸ6jsX


r 6†r¡6j©jB†r¢6j©j†r£6jsjÆr¤6jXofr¥6†r¦6jsjÆr§6jEXInt32r¨6†r©6jsjÆrª6htjφr«6htjL†r¬6jsjÆr­6jEXInt32r®6†r¯6jsjÆr°6hX # same as Hash(Int32, Int32).newr±6†r²6jsX


r³6†r´6j©jB†rµ6jÝXkey1r¶6†r·6j©j†r¸6jsjÆr¹6jÖX'a'rº6†r»6j©jÆr¼6jsjÆr½6jÝXkey2r¾6†r¿6j©j†rÀ6jsjÆrÁ6jÖX'b'rÂ6†rÃ6j©j†rÄ6jsjÆrÅ6hX# Hash(Symbol, Char)rÆ6†rÇ6jsX


rÈ6†rÉ6j©jB†rÊ6jHjņrË6jHXkey1rÌ6†rÍ6jHjņrÎ6j©j†rÏ6jsjÆrÐ6jÖX'a'rÑ6†rÒ6j©jÆrÓ6jsjÆrÔ6jHjņrÕ6jHXkey2rÖ6†r×6jHjņrØ6j©j†rÙ6jsjÆrÚ6jÖX'b'rÛ6†rÜ6j©j†rÝ6jsjÆrÞ6hX# Hash(String, Char)rß6†rà6jsX


rá6†râ6hŒXMyTyperã6†rä6j©jB†rå6jHjņræ6jHXfoorç6†rè6jHjņré6j©j†rê6jsjÆrë6jHjņrì6jHXbarrí6†rî6jHjņrï6j©j†rð6jsX


rñ6†rò6hŒXtmpró6†rô6jsjÆrõ6htjφrö6jsjÆr÷6hŒXMyTyperø6†rù6htj؆rú6hŒXnewrû6†rü6jsj»†rý6hŒXtmprþ6†rÿ6htj¿†r7jHjņr7jHXfoor7†r7jHjņr7htj̆r7jsjÆr7htjφr7jsjÆr7jHjņr	7jHXbarr
7†r7jHjņr7jsj»†r
7hŒXtmpr7†r7jsX


r7†r7hŒXtmpr7†r7jsjÆr7htjφr7jsjÆr7hŒXMyTyper7†r7j©j܆r7jXtypeofr7†r7j©j܆r7jHjņr7jHXfoor7†r7jHjņr 7j©jà†r!7j©jÆr"7jsjÆr#7jXtypeofr$7†r%7j©j܆r&7jHjņr'7jHXbarr(7†r)7jHjņr*7j©jà†r+7j©jà†r,7htj؆r-7hŒXnewr.7†r/7jsj»†r07hŒXtmpr17†r27htj¿†r37jHjņr47jHXfoor57†r67jHjņr77htj̆r87jsjÆr97htjφr:7jsjÆr;7jHjņr<7jHXbarr=7†r>7e(jHjņr?7jsj»†r@7hŒXtmprA7†rB7jsX


rC7†rD7hŒXMyTyperE7†rF7j©j܆rG7jEXStringrH7†rI7j©jÆrJ7jsjÆrK7jEXStringrL7†rM7j©jà†rN7jsjÆrO7j©jB†rP7jHjņrQ7jHXfoorR7†rS7jHjņrT7j©j†rU7jsjÆrV7jHjņrW7jHXbarrX7†rY7jHjņrZ7j©j†r[7jsX


r\7†r]7jÝX:hellor^7†r_7jsj»†r`7jÝX	:good_byera7†rb7jsX

rc7†rd7hX# With spaces and symbolsre7†rf7jsj»†rg7jÝX:"rh7†ri7jÝXsymbol with spacesrj7†rk7jÝjņrl7jsX

rm7†rn7hX,# Ending with question and exclamation marksro7†rp7jsj»†rq7jÝX
:question?rr7†rs7jsj»†rt7jÝX
:exclamation!ru7†rv7jsX

rw7†rx7hX# For the operatorsry7†rz7jsj»†r{7jÝX:+r|7†r}7jsj»†r~7jÝX:-r7†r€7jsj»†r7jÝX:*r‚7†rƒ7jsj»†r„7jÝX:/r…7†r†7jsj»†r‡7jÝX:==rˆ7†r‰7jsj»†rŠ7jÝX:<r‹7†rŒ7jsj»†r7jÝX:<=rŽ7†r7jsj»†r7jÝX:>r‘7†r’7jsj»†r“7jÝX:>=r”7†r•7jsj»†r–7jÝX:!r—7†r˜7jsj»†r™7jÝX:!=rš7†r›7jsj»†rœ7jÝX:=~r7†rž7jsj»†rŸ7jÝX:!~r 7†r¡7jsj»†r¢7jÝX:&r£7†r¤7jsj»†r¥7jÝX:|r¦7†r§7jsj»†r¨7jÝX:^r©7†rª7jsj»†r«7jÝX:~r¬7†r­7jsj»†r®7jÝX:**r¯7†r°7jsj»†r±7jÝX:>>r²7†r³7jsj»†r´7jÝX:<<rµ7†r¶7jsj»†r·7jÝX:%r¸7†r¹7jsj»†rº7jÝX:[]r»7†r¼7jsj»†r½7jÝX:[]?r¾7†r¿7jsj»†rÀ7jÝX:[]=rÁ7†rÂ7jsj»†rÃ7jÝX:<=>rÄ7†rÅ7jsj»†rÆ7jÝX:===rÇ7†rÈ7jsX


rÉ7†rÊ7hŒjô†rË7htX..rÌ7†rÍ7hŒj’
†rÎ7jsX  rÏ7†rÐ7hX,# an inclusive range, in mathematics: [x, y]rÑ7†rÒ7jsj»†rÓ7hŒjô†rÔ7htX...rÕ7†rÖ7hŒj’
†r×7jsjÆrØ7hX,# an exclusive range, in mathematics: [x, y)rÙ7†rÚ7jsX


rÛ7†rÜ7hX# A proc without argumentsrÝ7†rÞ7jsj»†rß7htjð†rà7htjL†rá7j©jB†râ7jsjÆrã7jŸj&†rä7jsjÆrå7j©j†ræ7jsjÆrç7hX
# Proc(Int32)rè7†ré7jsX

rê7†rë7hX# A proc with one argumentrì7†rí7jsj»†rî7htjð†rï7htjL†rð7j©j܆rñ7hŒjô†rò7jsjÆró7j©j†rô7jsjÆrõ7jEXInt32rö7†r÷7j©jà†rø7jsjÆrù7j©jB†rú7jsjÆrû7hŒjô†rü7htj؆rý7hŒXto_srþ7†rÿ7jsjÆr8j©j†r8jsjÆr8hX# Proc(Int32, String)r8†r8jsX

r8†r8hX# A proc with two arguments:r8†r8jsj»†r	8htjð†r
8htjL†r8j©j܆r8hŒjô†r
8jsjÆr8j©j†r8jsjÆr8jEXInt32r8†r8j©jÆr8jsjÆr8hŒj’
†r8jsjÆr8j©j†r8jsjÆr8jEXInt32r8†r8j©jà†r8jsjÆr8j©jB†r8jsjÆr8hŒjô†r8jsjÆr 8htj~
†r!8jsjÆr"8hŒj’
†r#8jsjÆr$8j©j†r%8jsjÆr&8hX# Proc(Int32, Int32, Int32)r'8†r(8jsX


r)8†r*8jEXProcr+8†r,8j©j܆r-8jEXInt32r.8†r/8j©jÆr08jsjÆr18jEXStringr28†r38j©jà†r48htj؆r58hŒXnewr68†r78jsjÆr88j©jB†r98jsjÆr:8htjæ†r;8hŒjô†r<8htjæ†r=8jsjÆr>8hŒjô†r?8htj؆r@8hŒXto_srA8†rB8jsjÆrC8j©j†rD8jsjÆrE8hX# Proc(Int32, String)rF8†rG8jsX


rH8†rI8hŒXprocrJ8†rK8jsjÆrL8htjφrM8jsjÆrN8htjð†rO8htjL†rP8j©j܆rQ8hŒjô†rR8jsjÆrS8j©j†rT8jsjÆrU8jEXInt32rV8†rW8j©jÆrX8jsjÆrY8hŒj’
†rZ8jsjÆr[8j©j†r\8jsjÆr]8jEXInt32r^8†r_8j©jà†r`8jsjÆra8j©jB†rb8jsjÆrc8hŒjô†rd8jsjÆre8htj~
†rf8jsjÆrg8hŒj’
†rh8jsjÆri8j©j†rj8jsj»†rk8hŒXprocrl8†rm8htj؆rn8hŒXcallro8†rp8j©j܆rq8jŸj&†rr8j©jÆrs8jsjÆrt8jŸjF†ru8j©jà†rv8jsjÆrw8hX#=> 3rx8†ry8jsX


rz8†r{8jXdefr|8†r}8jsjÆr~8jtXoner8†r€8jsX
  r8†r‚8jŸj&†rƒ8jsj»†r„8jXendr…8†r†8jsX

r‡8†rˆ8hŒXprocr‰8†rŠ8jsjÆr‹8htjφrŒ8jsjÆr8htjð†rŽ8htjL†r8hŒXoner8†r‘8jsj»†r’8hŒXprocr“8†r”8htj؆r•8hŒXcallr–8†r—8jsjÆr˜8hX#=> 1r™8†rš8jsX


r›8†rœ8jXdefr8†rž8jsjÆrŸ8jtXplus_oner 8†r¡8j©j܆r¢8hŒjô†r£8j©jà†r¤8jsX
  r¥8†r¦8hŒjô†r§8jsjÆr¨8htj~
†r©8jsjÆrª8jŸj&†r«8jsj»†r¬8jXendr­8†r®8jsX

r¯8†r°8hŒXprocr±8†r²8jsjÆr³8htjφr´8jsjÆrµ8htjð†r¶8htjL†r·8hŒXplus_oner¸8†r¹8j©j܆rº8jEXInt32r»8†r¼8j©jà†r½8jsj»†r¾8hŒXprocr¿8†rÀ8htj؆rÁ8hŒXcallrÂ8†rÃ8j©j܆rÄ8jŸX41rÅ8†rÆ8j©jà†rÇ8jsjÆrÈ8hX#=> 42rÉ8†rÊ8jsX


rË8†rÌ8hŒXstrrÍ8†rÎ8jsjÆrÏ8htjφrÐ8jsjÆrÑ8jHjņrÒ8jHXhellorÓ8†rÔ8jHjņrÕ8jsj»†rÖ8hŒXprocr×8†rØ8jsjÆrÙ8htjφrÚ8jsjÆrÛ8htjð†rÜ8htjL†rÝ8hŒXstrrÞ8†rß8htj؆rà8hŒXcountrá8†râ8j©j܆rã8jEXCharrä8†rå8j©jà†ræ8jsj»†rç8hŒXprocrè8†ré8htj؆rê8hŒXcallrë8†rì8j©j܆rí8jÖX'e'rî8†rï8j©jà†rð8jsjÆrñ8hX#=> 1rò8†ró8jsj»†rô8hŒXprocrõ8†rö8htj؆r÷8hŒXcallrø8†rù8j©j܆rú8jÖX'l'rû8†rü8j©jà†rý8jsjÆrþ8hX#=> 2rÿ8†r9jsX


r9†r9hŒXtupler9†r9jsjÆr9htjφr9jsjÆr9j©jB†r9jŸj&†r	9j©jÆr
9jsjÆr9jHjņr9jHXhellor
9†r9jHjņr9j©jÆr9jsjÆr9jÖX'x'r9†r9j©j†r9jsjÆr9hX# Tuple(Int32, String, Char)r9†r9jsj»†r9hŒXtupler9†r9htj¿†r9jŸj܆r9htj̆r9jsX                  r9†r9hX#=> 1       (Int32)r 9†r!9jsj»†r"9hŒXtupler#9†r$9htj¿†r%9jŸj&†r&9htj̆r'9jsX                  r(9†r)9hX#=> "hello" (String)r*9†r+9jsj»†r,9hŒXtupler-9†r.9htj¿†r/9jŸjF†r09htj̆r19jsX                  r29†r39hX#=> 'x'     (Char)r49†r59jsX


r69†r79htj¿†r89jŸj&†r99j©jÆr:9jsjÆr;9jŸjF†r<9j©jÆr=9jsjÆr>9jŸjÁ†r?9htj̆r@9jsX	         rA9†rB9hX# Array(Int32)rC9†rD9jsj»†rE9htj¿†rF9jŸj&†rG9j©jÆrH9jsjÆrI9jHjņrJ9jHXhellorK9†rL9jHjņrM9j©jÆrN9jsjÆrO9jÖX'x'rP9†rQ9htj̆rR9jsjÆrS9hX# Array(Int32 | String | Char)rT9†rU9jsX


rV9†rW9htj¿†rX9htj̆rY9jsjÆrZ9jXofr[9†r\9jsjÆr]9jEXInt32r^9†r_9jsjÆr`9hX# same as Array(Int32).newra9†rb9jsX


rc9†rd9jëX%w(re9†rf9jëX
one two threerg9†rh9jëjà†ri9jsjÆrj9hX# ["one", "two", "three"]rk9†rl9jsX


rm9†rn9jëX%i(ro9†rp9jëX
one two threerq9†rr9jëjà†rs9jsjÆrt9hX# [:one, :two, :three]ru9†rv9jsX


rw9†rx9hŒXMyTypery9†rz9j©jB†r{9jŸj&†r|9j©jÆr}9jsjÆr~9jŸjF†r9j©jÆr€9jsjÆr9jŸjÁ†r‚9j©j†rƒ9jsX


r„9†r…9hŒXtmpr†9†r‡9jsjÆrˆ9htjφr‰9jsjÆrŠ9hŒXMyTyper‹9†rŒ9htj؆r9hŒXnewrŽ9†r9jsj»†r9hŒXtmpr‘9†r’9jsjÆr“9htX<<r”9†r•9jsjÆr–9jŸj&†r—9jsj»†r˜9hŒXtmpr™9†rš9jsjÆr›9htX<<rœ9†r9jsjÆrž9jŸjF†rŸ9jsj»†r 9hŒXtmpr¡9†r¢9jsjÆr£9htX<<r¤9†r¥9jsjÆr¦9jŸjÁ†r§9jsj»†r¨9hŒXtmpr©9†rª9jsX


r«9†r¬9hŒXtmpr­9†r®9jsjÆr¯9htjφr°9jsjÆr±9hŒXMyTyper²9†r³9j©j܆r´9jXtypeofrµ9†r¶9j©j܆r·9jŸj&†r¸9j©jÆr¹9jsjÆrº9jŸjF†r»9j©jÆr¼9jsjÆr½9jŸjÁ†r¾9j©jà†r¿9j©jà†rÀ9htj؆rÁ9hŒXnewrÂ9†rÃ9jsj»†rÄ9hŒXtmprÅ9†rÆ9jsjÆrÇ9htX<<rÈ9†rÉ9jsjÆrÊ9jŸj&†rË9jsj»†rÌ9hŒXtmprÍ9†rÎ9jsjÆrÏ9htX<<rÐ9†rÑ9jsjÆrÒ9jŸjF†rÓ9jsj»†rÔ9hŒXtmprÕ9†rÖ9jsjÆr×9htX<<rØ9†rÙ9jsjÆrÚ9jŸjÁ†rÛ9jsj»†rÜ9hŒXtmprÝ9†rÞ9jsX


rß9†rà9hŒXMyTyperá9†râ9j©j܆rã9jEXInt32rä9†rå9jsjÆræ9htjæ†rç9jsjÆrè9jEXStringré9†rê9j©jà†rë9jsjÆrì9j©jB†rí9jŸj&†rî9j©jÆrï9jsjÆrð9jŸjF†rñ9j©jÆrò9jsjÆró9jHjņrô9jHXfoorõ9†rö9jHjņr÷9j©j†rø9jsX


rù9†rú9jDXnilrû9†rü9jsX


rý9†rþ9jŸj&†rÿ9jsX      r:†r:hX# Int32r:†r:jsX

r:†r:jŸX1_i8r:†r:jsX   r:†r	:hX# Int8r
:†r:jsj»†r:jŸX1_i16r
:†r:jsX  r:†r:hX# Int16r:†r:jsj»†r:jŸX1_i32r:†r:jsX  r:†r:hX# Int32r:†r:jsj»†r:jŸX1_i64r:†r:jsX  r:†r:hX# Int64r:†r :jsX

r!:†r":jŸX1_u8r#:†r$:jsX   r%:†r&:hX# UInt8r':†r(:jsj»†r):jŸX1_u16r*:†r+:jsX  r,:†r-:hX# UInt16r.:†r/:jsj»†r0:jŸX1_u32r1:†r2:jsX  r3:†r4:hX# UInt32r5:†r6:jsj»†r7:jŸX1_u64r8:†r9:jsX  r::†r;:hX# UInt64r<:†r=:jsX

r>:†r?:htj~
†r@:jŸX10rA:†rB:jsX    rC:†rD:hX# Int32rE:†rF:jsj»†rG:htjð†rH:jŸX20rI:†rJ:jsX    rK:†rL:hX# Int32rM:†rN:jsX

rO:†rP:jŸX
2147483648rQ:†rR:jsX
          rS:†rT:hX# Int64rU:†rV:jsj»†rW:jŸX9223372036854775808rX:†rY:jsjÆrZ:hX# UInt64r[:†r\:jsX


r]:†r^:jŸX	1_000_000r_:†r`:jsjÆra:hX# better than 1000000rb:†rc:jsX


rd:†re:jˆX0b1101rf:†rg:jsjÆrh:hX# == 13ri:†rj:jsX


rk:†rl:j€X0o123rm:†rn:jsjÆro:hX# == 83rp:†rq:jsX


rr:†rs:j—X0xFE012Drt:†ru:jsjÆrv:hX
# == 16646445rw:†rx:jsj»†ry:j—X0xfe012drz:†r{:jsjÆr|:hX
# == 16646445r}:†r~:jsX


r:†r€:jDXtruer:†r‚:jsX  rƒ:†r„:hX# A Bool that is truer…:†r†:jsj»†r‡:jDXfalserˆ:†r‰:jsjÆrŠ:hX# A Bool that is falser‹:†rŒ:jsX


r:†rŽ:hŒjY†r:jsjÆr:htjφr‘:jsjÆr’:jŸj&†r“:jsX

r”:†r•:hŒXptrr–:†r—:jsjÆr˜:htjφr™:jsjÆrš:jX	pointerofr›:†rœ:j©j܆r:hŒjY†rž:j©jà†rŸ:jsj»†r :hŒXptrr¡:†r¢:htj؆r£:hŒXvaluer¤:†r¥:jsjÆr¦:htjφr§:jsjÆr¨:jŸjF†r©:jsX

rª:†r«:hŒjY†r¬:jsjÆr­:hX#=> 2r®:†r¯:jsX


r°:†r±:jXclassr²:†r³:jsjÆr´:h¹XPointrµ:†r¶:jsX
  r·:†r¸:jXdefr¹:†rº:jsjÆr»:jtX
initializer¼:†r½:j©j܆r¾:hõX@xr¿:†rÀ:j©jÆrÁ:jsjÆrÂ:hõX@yrÃ:†rÄ:j©jà†rÅ:jsX
  rÆ:†rÇ:jXendrÈ:†rÉ:jsX

  rÊ:†rË:jXdefrÌ:†rÍ:jsjÆrÎ:jtjô†rÏ:jsX
    rÐ:†rÑ:hõX@xrÒ:†rÓ:jsX
  rÔ:†rÕ:jXendrÖ:†r×:jsX

  rØ:†rÙ:jXdefrÚ:†rÛ:jsjÆrÜ:jtXx_ptrrÝ:†rÞ:jsX
    rß:†rà:jX	pointerofrá:†râ:j©j܆rã:hõX@xrä:†rå:j©jà†ræ:jsX
  rç:†rè:jXendré:†rê:jsj»†rë:jXendrì:†rí:jsX

rî:†rï:hŒXpointrð:†rñ:jsjÆrò:htjφró:jsjÆrô:hŒXPointrõ:†rö:htj؆r÷:hŒXnewrø:†rù:jsjÆrú:jŸj&†rû:j©jÆrü:jsjÆrý:jŸjF†rþ:jsX

rÿ:†r;hŒXptrr;†r;jsjÆr;htjφr;jsjÆr;hŒXpointr;†r;htj؆r;hŒXx_ptrr	;†r
;jsj»†r;hŒXptrr;†r
;htj؆r;hŒXvaluer;†r;jsjÆr;htjφr;jsjÆr;jŸX10r;†r;jsX

r;†r;hŒXpointr;†r;htj؆r;hŒjô†r;jsjÆr;hX#=> 10r;†r;jsX


r;†r ;jXdefr!;†r";jsjÆr#;jtXaddr$;†r%;j©j܆r&;hŒjô†r';jsjÆr(;j©j†r);jsjÆr*;jEXNumberr+;†r,;j©jÆr-;jsjÆr.;hŒj’
†r/;jsjÆr0;j©j†r1;jsjÆr2;jEXNumberr3;†r4;j©jà†r5;jsX
  r6;†r7;hŒjô†r8;jsjÆr9;htj~
†r:;jsjÆr;;hŒj’
†r<;jsj»†r=;jXendr>;†r?;jsX

r@;†rA;hX# OkrB;†rC;jsj»†rD;hŒXaddrE;†rF;jsjÆrG;jŸj&†rH;j©jÆrI;jsjÆrJ;jŸjF†rK;jsjÆrL;hX# OkrM;†rN;jsX

rO;†rP;hX8# Error: no overload matches 'add' with types Bool, BoolrQ;†rR;jsj»†rS;hŒXaddrT;†rU;jsjÆrV;jDXtruerW;†rX;j©jÆrY;jsjÆrZ;jDXfalser[;†r\;jsX


r];†r^;jXdefr_;†r`;jsjÆra;jtXaddrb;†rc;j©j܆rd;hŒjô†re;j©jÆrf;jsjÆrg;hŒj’
†rh;j©jà†ri;jsX
  rj;†rk;hŒjô†rl;jsjÆrm;htj~
†rn;jsjÆro;hŒj’
†rp;jsj»†rq;jXendrr;†rs;jsX

rt;†ru;hŒXaddrv;†rw;jsjÆrx;jDXtruery;†rz;j©jÆr{;jsjÆr|;jDXfalser};†r~;jsX


r;†r€;hX0# A class that has a + method but isn't a Numberr;†r‚;jsj»†rƒ;jXclassr„;†r…;jsjÆr†;h¹XSixr‡;†rˆ;jsX
  r‰;†rŠ;jXdefr‹;†rŒ;jsjÆr;jtj~
†rŽ;j©j܆r;hŒXotherr;†r‘;j©jà†r’;jsX
    r“;†r”;jŸX6r•;†r–;jsjÆr—;htj~
†r˜;jsjÆr™;hŒXotherrš;†r›;jsX
  rœ;†r;jXendrž;†rŸ;jsj»†r ;jXendr¡;†r¢;jsX

r£;†r¤;hX&# add method without type restrictionsr¥;†r¦;jsj»†r§;jXdefr¨;†r©;jsjÆrª;jtXaddr«;†r¬;j©j܆r­;hŒjô†r®;j©jÆr¯;jsjÆr°;hŒj’
†r±;j©jà†r²;jsX
  r³;†r´;hŒjô†rµ;jsjÆr¶;htj~
†r·;jsjÆr¸;hŒj’
†r¹;jsj»†rº;jXendr»;†r¼;jsX

r½;†r¾;hX# OKr¿;†rÀ;jsj»†rÁ;hŒXaddrÂ;†rÃ;jsjÆrÄ;hŒXSixrÅ;†rÆ;htj؆rÇ;hŒXnewrÈ;†rÉ;j©jÆrÊ;jsjÆrË;jŸX10rÌ;†rÍ;jsX

rÎ;†rÏ;hX## add method with type restrictionsrÐ;†rÑ;jsj»†rÒ;jXdefrÓ;†rÔ;jsjÆrÕ;jtXrestricted_addrÖ;†r×;j©j܆rØ;hŒjô†rÙ;jsjÆrÚ;j©j†rÛ;jsjÆrÜ;jEXNumberrÝ;†rÞ;j©jÆrß;jsjÆrà;hŒj’
†rá;jsjÆrâ;j©j†rã;jsjÆrä;jEXNumberrå;†ræ;j©jà†rç;jsX
  rè;†ré;hŒjô†rê;jsjÆrë;htj~
†rì;jsjÆrí;hŒj’
†rî;jsj»†rï;jXendrð;†rñ;jsX

rò;†ró;hXC# Error: no overload matches 'restricted_add' with types Six, Int32rô;†rõ;jsj»†rö;hŒXrestricted_addr÷;†rø;jsjÆrù;hŒXSixrú;†rû;htj؆rü;hŒXnewrý;†rþ;j©jÆrÿ;jsjÆr<jŸX10r<†r<jsX


r<†r<jXclassr<†r<jsjÆr<h¹XPersonr<†r	<jsX
  r
<†r<jXdefr<†r
<jsjÆr<jtX==r<†r<j©j܆r<hŒXotherr<†r<jsjÆr<j©j†r<jsjÆr<jRXselfr<†r<j©jà†r<jsX
    r<†r<hŒXotherr<†r<htj؆r<hŒXnamer<†r <jsjÆr!<htX==r"<†r#<jsjÆr$<hŒXnamer%<†r&<jsX
  r'<†r(<jXendr)<†r*<jsX

  r+<†r,<jXdefr-<†r.<jsjÆr/<jtX==r0<†r1<j©j܆r2<hŒXotherr3<†r4<j©jà†r5<jsX
    r6<†r7<jDXfalser8<†r9<jsX
  r:<†r;<jXendr<<†r=<jsj»†r><jXendr?<†r@<jsX

rA<†rB<hŒXjohnrC<†rD<jsjÆrE<htjφrF<jsjÆrG<hŒXPersonrH<†rI<htj؆rJ<hŒXnewrK<†rL<jsjÆrM<jHjņrN<jHXJohnrO<†rP<jHjņrQ<jsj»†rR<hŒXanother_johnrS<†rT<jsjÆrU<htjφrV<jsjÆrW<hŒXPersonrX<†rY<htj؆rZ<hŒXnewr[<†r\<jsjÆr]<jHjņr^<jHXJohnr_<†r`<jHjņra<jsj»†rb<hŒXpeterrc<†rd<jsjÆre<htjφrf<jsjÆrg<hŒXPersonrh<†ri<htj؆rj<hŒXnewrk<†rl<jsjÆrm<jHjņrn<jHXPeterro<†rp<jHjņrq<jsX

rr<†rs<hŒXjohnrt<†ru<jsjÆrv<htX==rw<†rx<jsjÆry<hŒXanother_johnrz<†r{<jsjÆr|<hX#=> truer}<†r~<jsj»†r<hŒXjohnr€<†r<jsjÆr‚<htX==rƒ<†r„<jsjÆr…<hŒXpeterr†<†r‡<jsjÆrˆ<hX#=> false (names differ)r‰<†rŠ<jsj»†r‹<hŒXjohnrŒ<†r<jsjÆrŽ<htX==r<†r<jsjÆr‘<jŸj&†r’<jsjÆr“<hX%#=> false (because 1 is not a Person)r”<†r•<jsX


r–<†r—<jXclassr˜<†r™<jsjÆrš<h¹XPersonr›<†rœ<jsX
  r<†rž<jXdefrŸ<†r <jsjÆr¡<h¹Xselfr¢<†r£<htj؆r¤<jtXcomparer¥<†r¦<j©j܆r§<hŒXp1r¨<†r©<jsjÆrª<j©j†r«<jsjÆr¬<jRXselfr­<†r®<j©jÆr¯<jsjÆr°<hŒXp2r±<†r²<jsjÆr³<j©j†r´<jsjÆrµ<jRXselfr¶<†r·<j©jà†r¸<jsX
    r¹<†rº<hŒXp1r»<†r¼<htj؆r½<hŒXnamer¾<†r¿<jsjÆrÀ<htX==rÁ<†rÂ<jsjÆrÃ<hŒXp2rÄ<†rÅ<htj؆rÆ<hŒXnamerÇ<†rÈ<jsX
  rÉ<†rÊ<jXendrË<†rÌ<jsj»†rÍ<e(jXendrÎ<†rÏ<jsX

rÐ<†rÑ<hŒXjohnrÒ<†rÓ<jsjÆrÔ<htjφrÕ<jsjÆrÖ<hŒXPersonr×<†rØ<htj؆rÙ<hŒXnewrÚ<†rÛ<jsjÆrÜ<jHjņrÝ<jHXJohnrÞ<†rß<jHjņrà<jsj»†rá<hŒXpeterrâ<†rã<jsjÆrä<htjφrå<jsjÆræ<hŒXPersonrç<†rè<htj؆ré<hŒXnewrê<†rë<jsjÆrì<jHjņrí<jHXPeterrî<†rï<jHjņrð<jsX

rñ<†rò<hŒXPersonró<†rô<htj؆rõ<hŒXcomparerö<†r÷<j©j܆rø<hŒXjohnrù<†rú<j©jÆrû<jsjÆrü<hŒXpeterrý<†rþ<j©jà†rÿ<jsjÆr=hX# OKr=†r=jsX


r=†r=jXdefr=†r=jsjÆr=jtXfoor=†r	=j©j܆r
=hŒjô†r=jsjÆr=j©j†r
=jsjÆr=jEXInt32r=†r=j©jà†r=jsj»†r=jXendr=†r=jsX

r=†r=hŒXfoor=†r=jsjÆr=jŸj&†r=jsX       r=†r=hX# OKr=†r=jsj»†r=hŒXfoor =†r!=jsjÆr"=jHjņr#=jHXhellor$=†r%=jHjņr&=jsjÆr'=hX# Errorr(=†r)=jsX


r*=†r+=jXdefr,=†r-=jsjÆr.=jtXfoor/=†r0=j©j܆r1=hŒjô†r2=jsjÆr3=j©j†r4=jsjÆr5=jEXInt32r6=†r7=htj؆r8=hŒXclassr9=†r:=j©jà†r;=jsj»†r<=jXendr==†r>=jsX

r?=†r@=hŒXfoorA=†rB=jsjÆrC=jEXInt32rD=†rE=jsX  rF=†rG=hX# OKrH=†rI=jsj»†rJ=hŒXfoorK=†rL=jsjÆrM=jEXStringrN=†rO=jsjÆrP=hX# ErrorrQ=†rR=jsX


rS=†rT=jXdefrU=†rV=jsjÆrW=jtXfoorX=†rY=j©j܆rZ=hŒjô†r[=jsjÆr\=j©j†r]=jsjÆr^=jEXInt32r_=†r`=htj؆ra=hŒXclassrb=†rc=j©jà†rd=jsX
  re=†rf=jEXputsrg=†rh=jsjÆri=jHjņrj=jHX	Got Int32rk=†rl=jHjņrm=jsj»†rn=jXendro=†rp=jsX

rq=†rr=jXdefrs=†rt=jsjÆru=jtXfoorv=†rw=j©j܆rx=hŒjô†ry=jsjÆrz=j©j†r{=jsjÆr|=jEXStringr}=†r~=htj؆r=hŒXclassr€=†r=j©jà†r‚=jsX
  rƒ=†r„=jEXputsr…=†r†=jsjÆr‡=jHjņrˆ=jHX
Got Stringr‰=†rŠ=jHjņr‹=jsj»†rŒ=jXendr=†rŽ=jsX

r=†r=hŒXfoor‘=†r’=jsjÆr“=jEXInt32r”=†r•=jsX  r–=†r—=hX# prints "Got Int32"r˜=†r™=jsj»†rš=hŒXfoor›=†rœ=jsjÆr=jEXStringrž=†rŸ=jsjÆr =hX# prints "Got String"r¡=†r¢=jsX


r£=†r¤=jXdefr¥=†r¦=jsjÆr§=jtXfoor¨=†r©=j©j܆rª=htj·†r«=hŒXargsr¬=†r­=jsjÆr®=j©j†r¯=jsjÆr°=jEXInt32r±=†r²=j©jà†r³=jsj»†r´=jXendrµ=†r¶=jsX

r·=†r¸=jXdefr¹=†rº=jsjÆr»=jtXfoor¼=†r½=j©j܆r¾=htj·†r¿=hŒXargsrÀ=†rÁ=jsjÆrÂ=j©j†rÃ=jsjÆrÄ=jEXStringrÅ=†rÆ=j©jà†rÇ=jsj»†rÈ=jXendrÉ=†rÊ=jsX

rË=†rÌ=hŒXfoorÍ=†rÎ=jsjÆrÏ=jŸj&†rÐ=j©jÆrÑ=jsjÆrÒ=jŸjF†rÓ=j©jÆrÔ=jsjÆrÕ=jŸjÁ†rÖ=jsX       r×=†rØ=hX# OK, invokes first overloadrÙ=†rÚ=jsj»†rÛ=hŒXfoorÜ=†rÝ=jsjÆrÞ=jHjņrß=jHjY†rà=jHjņrá=j©jÆrâ=jsjÆrã=jHjņrä=jHj
†rå=jHjņræ=j©jÆrç=jsjÆrè=jHjņré=jHj݆rê=jHjņrë=jsjÆrì=hX# OK, invokes second overloadrí=†rî=jsj»†rï=hŒXfoorð=†rñ=jsjÆrò=jŸj&†ró=j©jÆrô=jsjÆrõ=jŸjF†rö=j©jÆr÷=jsjÆrø=jHjņrù=jHXhellorú=†rû=jHjņrü=jsjÆrý=hX# Errorrþ=†rÿ=jsj»†r>hŒXfoor>†r>j©j܆r>j©jà†r>jsX
             r>†r>hX# Errorr>†r>jsX


r	>†r
>jXdefr>†r>jsjÆr
>jtXfoor>†r>jsX
  r>†r>hX# This is the empty-tuple caser>†r>jsj»†r>jXendr>†r>jsX


r>†r>jXdefr>†r>jsjÆr>jtXfoor>†r>j©j܆r>hŒjô†r>jsjÆr >j©j†r!>jsjÆr">hŒj†r#>j©jà†r$>jsX
  r%>†r&>hŒj†r'>jsj»†r(>jXendr)>†r*>jsX

r+>†r,>hŒXfoor->†r.>j©j܆r/>jŸj&†r0>j©jà†r1>jsX       r2>†r3>hX	#=> Int32r4>†r5>jsj»†r6>hŒXfoor7>†r8>j©j܆r9>jHjņr:>jHXhellor;>†r<>jHjņr=>j©jà†r>>jsjÆr?>hX
#=> Stringr@>†rA>jsX


rB>†rC>jXdefrD>†rE>jsjÆrF>jtXfoorG>†rH>j©j܆rI>hŒjô†rJ>jsjÆrK>j©j†rL>jsjÆrM>jEXArrayrN>†rO>j©j܆rP>hŒj†rQ>j©jà†rR>j©jà†rS>jsX
  rT>†rU>hŒj†rV>jsj»†rW>jXendrX>†rY>jsX

rZ>†r[>hŒXfoor\>†r]>j©j܆r^>htj¿†r_>jŸj&†r`>j©jÆra>jsjÆrb>jŸjF†rc>htj̆rd>j©jà†re>jsX   rf>†rg>hX	#=> Int32rh>†ri>jsj»†rj>hŒXfoork>†rl>j©j܆rm>htj¿†rn>jŸj&†ro>j©jÆrp>jsjÆrq>jHjņrr>jHjY†rs>jHjņrt>htj̆ru>j©jà†rv>jsjÆrw>hX#=> (Int32 | String)rx>†ry>jsX


rz>†r{>jXdefr|>†r}>jsjÆr~>jtXfoor>†r€>j©j܆r>hŒjô†r‚>jsjÆrƒ>j©j†r„>jsjÆr…>hŒj†r†>htj؆r‡>hŒXclassrˆ>†r‰>j©jà†rŠ>jsX
  r‹>†rŒ>jEXArrayr>†rŽ>j©j܆r>hŒj†r>j©jà†r‘>jsj»†r’>jXendr“>†r”>jsX

r•>†r–>hŒXfoor—>†r˜>j©j܆r™>jEXInt32rš>†r›>j©jà†rœ>jsX  r>†rž>hX#=> Array(Int32)rŸ>†r >jsj»†r¡>hŒXfoor¢>†r£>j©j܆r¤>jEXStringr¥>†r¦>j©jà†r§>jsjÆr¨>hX#=> Array(String)r©>†rª>jsX


r«>†r¬>jXclassr­>†r®>jsjÆr¯>h¹XPersonr°>†r±>jsX
  r²>†r³>hX# Increases age by oner´>†rµ>jsX
  r¶>†r·>jXdefr¸>†r¹>jsjÆrº>jtXbecome_olderr»>†r¼>jsX
    r½>†r¾>hõX@ager¿>†rÀ>jsjÆrÁ>htX+=rÂ>†rÃ>jsjÆrÄ>jŸj&†rÅ>jsX
  rÆ>†rÇ>jXendrÈ>†rÉ>jsX

  rÊ>†rË>hX,# Increases age by the given number of yearsrÌ>†rÍ>jsX
  rÎ>†rÏ>jXdefrÐ>†rÑ>jsjÆrÒ>jtXbecome_olderrÓ>†rÔ>j©j܆rÕ>hŒXyearsrÖ>†r×>jsjÆrØ>j©j†rÙ>jsjÆrÚ>jEXInt32rÛ>†rÜ>j©jà†rÝ>jsX
    rÞ>†rß>hõX@agerà>†rá>jsjÆrâ>htX+=rã>†rä>jsjÆrå>hŒXyearsræ>†rç>jsX
  rè>†ré>jXendrê>†rë>jsX

  rì>†rí>hX9# Increases age by the given number of years, as a Stringrî>†rï>jsX
  rð>†rñ>jXdefrò>†ró>jsjÆrô>jtXbecome_olderrõ>†rö>j©j܆r÷>hŒXyearsrø>†rù>jsjÆrú>j©j†rû>jsjÆrü>jEXStringrý>†rþ>j©jà†rÿ>jsX
    r?†r?hõX@ager?†r?jsjÆr?htX+=r?†r?jsjÆr?hŒXyearsr?†r	?htj؆r
?hŒXto_ir?†r?jsX
  r
?†r?jXendr?†r?jsX

  r?†r?hX5# Yields the current age of this person and increasesr?†r?jsX
  r?†r?hX,# its age by the value returned by the blockr?†r?jsX
  r?†r?jXdefr?†r?jsjÆr?jtXbecome_olderr?†r?jsX
    r ?†r!?hõX@ager"?†r#?jsjÆr$?htX+=r%?†r&?jsjÆr'?jXyieldr(?†r)?jsjÆr*?hõX@ager+?†r,?jsX
  r-?†r.?jXendr/?†r0?jsj»†r1?jXendr2?†r3?jsX

r4?†r5?hŒXpersonr6?†r7?jsjÆr8?htjφr9?jsjÆr:?hŒXPersonr;?†r<?htj؆r=?hŒXnewr>?†r??jsjÆr@?jHjņrA?jHXJohnrB?†rC?jHjņrD?jsX

rE?†rF?hŒXpersonrG?†rH?htj؆rI?hŒXbecome_olderrJ?†rK?jsj»†rL?hŒXpersonrM?†rN?htj؆rO?hŒXagerP?†rQ?jsjÆrR?hX#=> 1rS?†rT?jsX

rU?†rV?hŒXpersonrW?†rX?htj؆rY?hŒXbecome_olderrZ?†r[?jsjÆr\?jŸj8†r]?jsj»†r^?hŒXpersonr_?†r`?htj؆ra?hŒXagerb?†rc?jsjÆrd?hX#=> 6re?†rf?jsX

rg?†rh?hŒXpersonri?†rj?htj؆rk?hŒXbecome_olderrl?†rm?jsjÆrn?jHjņro?jHX12rp?†rq?jHjņrr?jsj»†rs?hŒXpersonrt?†ru?htj؆rv?hŒXagerw?†rx?jsjÆry?hX#=> 18rz?†r{?jsX

r|?†r}?hŒXpersonr~?†r?htj؆r€?hŒXbecome_olderr?†r‚?jsjÆrƒ?jXdor„?†r…?jsjÆr†?htjæ†r‡?hŒXcurrent_agerˆ?†r‰?htjæ†rŠ?jsX
  r‹?†rŒ?hŒXcurrent_ager?†rŽ?jsjÆr?htjä†r?jsjÆr‘?jŸX20r’?†r“?jsjÆr”?htj–†r•?jsjÆr–?jŸX10r—?†r˜?jsjÆr™?j©j†rš?jsjÆr›?jŸX30rœ?†r?jsj»†rž?jXendrŸ?†r ?jsj»†r¡?hŒXpersonr¢?†r£?htj؆r¤?hŒXager¥?†r¦?jsjÆr§?hX#=> 28r¨?†r©?jsX


rª?†r«?hŒjY†r¬?jsjÆr­?htjφr®?jsjÆr¯?jŸj&†r°?jsj»†r±?hŒjY†r²?htj؆r³?hŒXis_a?r´?†rµ?j©j܆r¶?jEXInt32r·?†r¸?j©jà†r¹?jsX
          rº?†r»?hX#=> truer¼?†r½?jsj»†r¾?hŒjY†r¿?htj؆rÀ?hŒXis_a?rÁ?†rÂ?j©j܆rÃ?jEXStringrÄ?†rÅ?j©jà†rÆ?jsX	         rÇ?†rÈ?hX	#=> falserÉ?†rÊ?jsj»†rË?hŒjY†rÌ?htj؆rÍ?hŒXis_a?rÎ?†rÏ?j©j܆rÐ?jEXNumberrÑ?†rÒ?j©jà†rÓ?jsX	         rÔ?†rÕ?hX#=> truerÖ?†r×?jsj»†rØ?hŒjY†rÙ?htj؆rÚ?hŒXis_a?rÛ?†rÜ?j©j܆rÝ?jEXInt32rÞ?†rß?jsjÆrà?htjæ†rá?jsjÆrâ?jEXStringrã?†rä?j©jà†rå?jsjÆræ?hX#=> truerç?†rè?jsX


ré?†rê?hX# One for each threadrë?†rì?jsj»†rí?htX@[rî?†rï?h±XThreadLocalrð?†rñ?htj̆rò?jsj»†ró?híX$valuesrô?†rõ?jsjÆrö?htjφr÷?jsjÆrø?htj¿†rù?htj̆rú?jsjÆrû?jXofrü?†rý?jsjÆrþ?jEXInt32rÿ?†r@jsX


r@†r@htX@[r@†r@h±XAlwaysInliner@†r@htj̆r@jsj»†r@jXdefr	@†r
@jsjÆr@jtXfoor@†r
@jsX
  r@†r@jŸj&†r@jsj»†r@jXendr@†r@jsX


r@†r@htX@[r@†r@h±XNoInliner@†r@htj̆r@jsj»†r@jXdefr@†r@jsjÆr@jtXfoor@†r @jsX
  r!@†r"@jŸj&†r#@jsj»†r$@jXendr%@†r&@jsX


r'@†r(@jXlibr)@†r*@jsjÆr+@jXLibFoor,@†r-@jsX
  r.@†r/@htX@[r0@†r1@h±XCallConventionr2@†r3@j©j܆r4@jHjņr5@jHXX86_StdCallr6@†r7@jHjņr8@j©jà†r9@htj̆r:@jsX
  r;@†r<@jXfunr=@†r>@jsjÆr?@jtXfoor@@†rA@jsjÆrB@j©j†rC@jsjÆrD@jEXInt32rE@†rF@jsj»†rG@jXendrH@†rI@jsX


rJ@†rK@jXdefrL@†rM@jsjÆrN@jtXsumrO@†rP@j©j܆rQ@htj·†rR@hŒXelementsrS@†rT@j©jà†rU@jsX
  rV@†rW@hŒXtotalrX@†rY@jsjÆrZ@htjφr[@jsjÆr\@jŸj܆r]@jsX
  r^@†r_@hŒXelementsr`@†ra@htj؆rb@hŒXeachrc@†rd@jsjÆre@jXdorf@†rg@jsjÆrh@htjæ†ri@hŒXvaluerj@†rk@htjæ†rl@jsX
    rm@†rn@hŒXtotalro@†rp@jsjÆrq@htX+=rr@†rs@jsjÆrt@hŒXvalueru@†rv@jsX
  rw@†rx@jXendry@†rz@jsX
  r{@†r|@hŒXtotalr}@†r~@jsj»†r@jXendr€@†r@jsX

r‚@†rƒ@hX1# elements is Tuple(Int32, Int32, Int32, Float64)r„@†r…@jsj»†r†@hŒXsumr‡@†rˆ@jsjÆr‰@jŸj&†rŠ@j©jÆr‹@jsjÆrŒ@jŸjF†r@j©jÆrŽ@jsjÆr@jŸjÁ†r@j©jÆr‘@jsjÆr’@jhX4.5r“@†r”@jsX


r•@†r–@jXifr—@†r˜@jsjÆr™@hŒjY†rš@htj؆r›@hŒXresponds_to?rœ@†r@j©j܆rž@jÝX:absrŸ@†r @j©jà†r¡@jsX
  r¢@†r£@hXG# here a's type will be reduced to those responding to the 'abs' methodr¤@†r¥@jsj»†r¦@jXendr§@†r¨@jsX


r©@†rª@hŒjY†r«@jsjÆr¬@htjφr­@jsjÆr®@hŒXsome_conditionr¯@†r°@jsjÆr±@j©j–†r²@jsjÆr³@jŸj&†r´@jsjÆrµ@j©j†r¶@jsjÆr·@jHjņr¸@jHXhellor¹@†rº@jHjņr»@jsj»†r¼@hX# a : Int32 | Stringr½@†r¾@jsX

r¿@†rÀ@jXifrÁ@†rÂ@jsjÆrÃ@hŒjY†rÄ@htj؆rÅ@hŒXresponds_to?rÆ@†rÇ@j©j܆rÈ@jÝX:absrÉ@†rÊ@j©jà†rË@jsX
  rÌ@†rÍ@hXE# here a will be Int32, since Int32#abs exists but String#abs doesn'trÎ@†rÏ@jsj»†rÐ@jXelserÑ@†rÒ@jsX
  rÓ@†rÔ@hX# here a will be StringrÕ@†rÖ@jsj»†r×@jXendrØ@†rÙ@jsX


rÚ@†rÛ@jXifrÜ@†rÝ@jsjÆrÞ@j©j܆rß@hŒjY†rà@jsjÆrá@htjφrâ@jsjÆrã@hõX@arä@†rå@j©jà†ræ@htj؆rç@hŒXresponds_to?rè@†ré@j©j܆rê@jÝX:absrë@†rì@j©jà†rí@jsX
  rî@†rï@hX*# here a is guaranteed to respond to `abs`rð@†rñ@jsj»†rò@jXendró@†rô@jsX


rõ@†rö@jXdefr÷@†rø@jsjÆrù@jtXcapturerú@†rû@j©j܆rü@htjÀ†rý@hŒXblockrþ@†rÿ@j©jà†rAjsX
  rA†rAhŒXblockrA†rAjsj»†rAjXendrA†rAjsX

rA†r	AjXdefr
A†rAjsjÆrAjtXinvoker
A†rAj©j܆rAhtjÀ†rAhŒXblockrA†rAj©jà†rAjsX
  rA†rAhŒXblockrA†rAhtj؆rAhŒXcallrA†rAjsj»†rAjXendrA†rAjsX

rA†rAhŒXprocr A†r!AjsjÆr"Ahtjφr#AjsjÆr$AhŒXcapturer%A†r&AjsjÆr'Aj©jB†r(AjsjÆr)AjEXputsr*A†r+AjsjÆr,AjHjņr-AjHXHellor.A†r/AjHjņr0AjsjÆr1Aj©j†r2Ajsj»†r3AhŒXinvoker4A†r5Aj©j܆r6AhtjÀ†r7AhŒXprocr8A†r9Aj©jà†r:AjsjÆr;AhX# prints "Hello"r<A†r=AjsX




r>A†r?AjXdefr@A†rAAjsjÆrBAjtXcapturerCA†rDAj©j܆rEAhtjÀ†rFAhŒXblockrGA†rHAj©jà†rIAjsX
  rJA†rKAhŒXblockrLA†rMAjsj»†rNAjXendrOA†rPAjsX

rQA†rRAjXdefrSA†rTAjsjÆrUAjtXtwicerVA†rWAjsX
  rXA†rYAjXyieldrZA†r[AjsX
  r\A†r]AjXyieldr^A†r_Ajsj»†r`AjXendraA†rbAjsX

rcA†rdAhŒXprocreA†rfAjsjÆrgAhtjφrhAjsjÆriAhŒXcapturerjA†rkAjsjÆrlAj©jB†rmAjsjÆrnAjEXputsroA†rpAjsjÆrqAjHjņrrAjHXHellorsA†rtAjHjņruAjsjÆrvAj©j†rwAjsj»†rxAhŒXtwiceryA†rzAjsjÆr{AhtjÀ†r|AhŒXprocr}A†r~AjsX


rA†r€AhŒXtwicerA†r‚AjsjÆrƒAhtjÀ†r„Ahtjð†r…AhtjL†r†Aj©jB†r‡AjsjÆrˆAjEXputsr‰A†rŠAjsjÆr‹AjHjņrŒAjHXHellorA†rŽAjHjņrAjsjÆrAj©j†r‘AjsX


r’A†r“AjXdefr”A†r•AjsjÆr–AjtX	say_hellor—A†r˜AjsX
  r™A†ršAjEXputsr›A†rœAjsjÆrAjHjņržAjHXHellorŸA†r AjHjņr¡Ajsj»†r¢AjXendr£A†r¤AjsX

r¥A†r¦AhŒXtwicer§A†r¨AjsjÆr©AhtjÀ†rªAhtjð†r«AhtjL†r¬AhŒX	say_hellor­A†r®AjsX


r¯A†r°AjXdefr±A†r²AjsjÆr³AjtXfoor´A†rµAjsX
  r¶A†r·AjXyieldr¸A†r¹AjsjÆrºAjŸj&†r»Ajsj»†r¼AjXendr½A†r¾AjsX

r¿A†rÀAjXdefrÁA†rÂAjsjÆrÃAjtXwrap_foorÄA†rÅAjsX
  rÆA†rÇAjEXputsrÈA†rÉAjsjÆrÊAjHjņrËAjHX
Before foorÌA†rÍAjHjņrÎAjsX
  rÏA†rÐAhŒXfoorÑA†rÒAjsjÆrÓAjXdorÔA†rÕAjsjÆrÖAhtjæ†r×AhŒjô†rØAhtjæ†rÙAjsX
    rÚA†rÛAjXyieldrÜA†rÝAjsjÆrÞAhŒjô†rßAjsX
  ràA†ráAjXendrâA†rãAjsX
  räA†råAjEXputsræA†rçAjsjÆrèAjHjņréAjHX	After foorêA†rëAjHjņrìAjsj»†ríAjXendrîA†rïAjsX

rðA†rñAhŒXwrap_fooròA†róAjsjÆrôAjXdorõA†röAjsjÆr÷Ahtjæ†røAhŒj׆rùAhtjæ†rúAjsX
  rûA†rüAjEXputsrýA†rþAjsjÆrÿAhŒj׆rBjsj»†rBjXendrB†rBjsX


rB†rBjXdefrB†rBjsjÆrBjtXfoor	B†r
BjsX
  rB†rBjXyieldr
B†rBjsjÆrBjŸj&†rBjsj»†rBjXendrB†rBjsX

rB†rBjXdefrB†rBjsjÆrBjtXwrap_foorB†rBj©j܆rBhtjÀ†rBhŒXblockrB†rBjsjÆrBj©j†r BjsjÆr!BjEXInt32r"B†r#BjsjÆr$Bhtjð†r%BhtjL†r&BjsjÆr'BhŒj	†r(Bj©jà†r)BjsX
  r*B†r+BjEXputsr,B†r-BjsjÆr.BjHjņr/BjHX
Before foor0B†r1BjHjņr2BjsX
  r3B†r4BhŒXfoor5B†r6Bj©j܆r7BhtjÀ†r8BhŒXblockr9B†r:Bj©jà†r;BjsX
  r<B†r=BjEXputsr>B†r?BjsjÆr@BjHjņrABjHX	After foorBB†rCBjHjņrDBjsj»†rEBjXendrFB†rGBjsX

rHB†rIBhŒXwrap_foorJB†rKBjsjÆrLBjXdorMB†rNBjsjÆrOBhtjæ†rPBhŒj׆rQBhtjæ†rRBjsX
  rSB†rTBjEXputsrUB†rVBjsjÆrWBhŒj׆rXBjsj»†rYBjXendrZB†r[BjsX


r\B†r]BhŒXfoo_forwardr^B†r_BjsjÆr`BjXdoraB†rbBjsjÆrcBhtjæ†rdBhŒj׆reBhtjæ†rfBjsX
  rgB†rhBjXbreakriB†rjBjsjÆrkBhX# errorrlB†rmBjsj»†rnBjXendroB†rpBjsX


rqB†rrBhŒjY†rsBjsjÆrtBhtjφruBjsjÆrvBjŸjF†rwBjsj»†rxBjXwhileryB†rzBjsjÆr{Bj©j܆r|BhŒjY†r}BjsjÆr~Be(htX+=rB†r€BjsjÆrBjŸj&†r‚Bj©jà†rƒBjsjÆr„Bhtjä†r…BjsjÆr†BjŸX20r‡B†rˆBjsX
  r‰B†rŠBjXifr‹B†rŒBjsjÆrBhŒjY†rŽBjsjÆrBhtX==rB†r‘BjsjÆr’BjŸX10r“B†r”BjsX
    r•B†r–BhX# goes to 'puts a'r—B†r˜BjsX
    r™B†ršBjXbreakr›B†rœBjsX
  rB†ržBjXendrŸB†r Bjsj»†r¡BjXendr¢B†r£Bjsj»†r¤BjEXputsr¥B†r¦BjsjÆr§BhŒjY†r¨BjsjÆr©BhX#=> 10rªB†r«BjsX


r¬B†r­BjXclassr®B†r¯BjsjÆr°Bh¹XPersonr±B†r²BjsX
  r³B†r´BjXprivaterµB†r¶BjsjÆr·BjXdefr¸B†r¹BjsjÆrºBjtXsayr»B†r¼Bj©j܆r½BhŒXmessager¾B†r¿Bj©jà†rÀBjsX
    rÁB†rÂBjEXputsrÃB†rÄBjsjÆrÅBhŒXmessagerÆB†rÇBjsX
  rÈB†rÉBjXendrÊB†rËBjsX

  rÌB†rÍBjXdefrÎB†rÏBjsjÆrÐBjtX	say_hellorÑB†rÒBjsX
    rÓB†rÔBhŒXsayrÕB†rÖBjsjÆr×BjHjņrØBjHXhellorÙB†rÚBjHjņrÛBjsjÆrÜBhX# OK, no receiverrÝB†rÞBjsX
    rßB†ràBjRXselfráB†râBhtj؆rãBhŒXsayräB†råBjsjÆræBjHjņrçBjHXhellorèB†réBjHjņrêBjsjÆrëBhX# Error, self is a receiverrìB†ríBjsX

    rîB†rïBhŒXotherrðB†rñBjsjÆròBhtjφróBjsjÆrôBhŒXPersonrõB†röBhtj؆r÷BhŒXnewrøB†rùBjsjÆrúBjHjņrûBjHXOtherrüB†rýBjHjņrþBjsX
    rÿB†rChŒXotherrC†rChtj؆rChŒXsayrC†rCjsjÆrCjHjņrCjHXhellorC†r	CjHjņr
CjsjÆrChX# Error, other is a receiverrC†r
CjsX
  rC†rCjXendrC†rCjsj»†rCjXendrC†rCjsX


rC†rCjXclassrC†rCjsjÆrCh¹XEmployeerC†rCjsjÆrChtjä†rCjsjÆrChŒXPersonrC†r CjsX
  r!C†r"CjXdefr#C†r$CjsjÆr%CjtXsay_byer&C†r'CjsX
    r(C†r)ChŒXsayr*C†r+CjsjÆr,CjHjņr-CjHXbyer.C†r/CjHjņr0CjsjÆr1ChX# OKr2C†r3CjsX
  r4C†r5CjXendr6C†r7Cjsj»†r8CjXendr9C†r:CjsX


r;C†r<CjXmoduler=C†r>CjsjÆr?CjX	Namespacer@C†rACjsX
  rBC†rCCjXclassrDC†rECjsjÆrFCh¹XFoorGC†rHCjsX
    rIC†rJCjX	protectedrKC†rLCjsjÆrMCjXdefrNC†rOCjsjÆrPCjtXfoorQC†rRCjsX
      rSC†rTCjEXputsrUC†rVCjsjÆrWCjHjņrXCjHXHellorYC†rZCjHjņr[CjsX
    r\C†r]CjXendr^C†r_CjsX
  r`C†raCjXendrbC†rcCjsX

  rdC†reCjXclassrfC†rgCjsjÆrhCh¹XBarriC†rjCjsX
    rkC†rlCjXdefrmC†rnCjsjÆroCjtXbarrpC†rqCjsX
      rrC†rsChX0# Works, because Foo and Bar are under NamespacertC†ruCjsX
      rvC†rwChŒXFoorxC†ryChtj؆rzChŒXnewr{C†r|Chtj؆r}ChŒXfoor~C†rCjsX
    r€C†rCjXendr‚C†rƒCjsX
  r„C†r…CjXendr†C†r‡Cjsj»†rˆCjXendr‰C†rŠCjsX

r‹C†rŒChŒX	NamespacerC†rŽChtX::rC†rChŒXBarr‘C†r’Chtj؆r“ChŒXnewr”C†r•Chtj؆r–ChŒXbarr—C†r˜CjsX


r™C†ršCjXclassr›C†rœCjsjÆrCh¹XPersonržC†rŸCjsX
  r C†r¡CjX	protectedr¢C†r£CjsjÆr¤CjXdefr¥C†r¦CjsjÆr§Ch¹Xselfr¨C†r©Chtj؆rªCjtXsayr«C†r¬Cj©j܆r­ChŒXmessager®C†r¯Cj©jà†r°CjsX
    r±C†r²CjEXputsr³C†r´CjsjÆrµChŒXmessager¶C†r·CjsX
  r¸C†r¹CjXendrºC†r»CjsX

  r¼C†r½CjXdefr¾C†r¿CjsjÆrÀCjtX	say_hellorÁC†rÂCjsX
    rÃC†rÄChŒXPersonrÅC†rÆChtj؆rÇChŒXsayrÈC†rÉCjsjÆrÊCjHjņrËCjHXhellorÌC†rÍCjHjņrÎCjsX
  rÏC†rÐCjXendrÑC†rÒCjsj»†rÓCjXendrÔC†rÕCjsX


rÖC†r×ChŒXbufferrØC†rÙCjsjÆrÚChtjφrÛCjsjÆrÜCjRX
uninitializedrÝC†rÞCjsjÆrßCjEXUInt8ràC†ráChtj¿†râCjŸX256rãC†räChtj̆råCjsj»†ræCe.