· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Io Language/Tutorial

IoLanguage/Tutorial


¼Ò°³


  • ȨÆäÀÌÁö : http://www.iolanguage.com/

  • ÃÖ¼ÒÇÑÀÇ ¾ð¾î¸¦ ÁöÇâÇÏ¿© ¿ì¾Æ¾Æ°í ´Ü¼øÇÑ ¹®¹ýÀÌ Æ¯Â¡ÀÌ´Ù.
    • PureObjectOriented : ¸ðµç°ÍÀÌ Á¤¸»·Î °´Ã¼ÀÌ´Ù.
    • PrototypeBased : JavaLanguage, SmalltalkLanguage µîÀÇ °´Ã¼ÁöÇâ¾ð¾îµé°ú ´Þ¸® Ŭ·¡½º¿Í °´Ã¼ÀÇ ±¸ºÐÀÌ µû·Î ¾ø´Ù.
    • ¿ÀǼҽº(BsdLicense), Ç¥ÁØC·Î ÀÛ¼ºµÇ¾î¼­ À̽ļºÀÌ ÁÁ°í ÀÛÀº Å©±â·Î ´Ù¸¥ ½ºÅ©¸³ÆÃ ¾ð¾îµé°ú ºñ±³ÇÒ¸¸ÇÑ ½ÇÇà¼Óµµ.
    • Reflective : ÇÁ·Î±×·¥ÀÇ ¸ðµç »óŰ¡ ½ÇÇà½Ã°£¿¡ ÇÁ·Î±×·¥¿¡ ÀÇÇØ¼­ Æò°¡, ¼öÁ¤ÀÌ ÀÌ·ç¾îÁú ¼ö ÀÖ´Ù.
    • ´Ü¼øÇÑ ¹®¹ý : IoLanguage¿¡´Â ¿¹¾à¾î³ª Ű¿öµå°¡ ¾ø´Ù. ¸ðµÎ °´Ã¼¿Í ¸Þ½ÃÁöÀü´Þ·Î ÀÌ·ç¾îÁ® ÀÖ´Ù.



½ÃÀÛÇϱâ


¼³Ä¡

  • http://www.iolanguage.com/downloads/

    IoLanguageÀ» »ç¿ëÇϱâ À§Çؼ­ ±âÁ¸¿¡ ÀÌ¹Ì ÄÄÆÄÀϵǾî ÀÖ´Â PrecompiledBinaryÀ» »ç¿ëÇϰųª ¾Æ´Ï¸é ¼Ò½º¸¦ ¹Þ¾Æ¼­ Á÷Á¢ ÄÄÆÄÀÏÇÕ´Ï´Ù. ÄÄÆÄÀÏÇϱâ À§Çؼ­´Â °¢°¢ÀÇ È¯°æ¸¶´Ù ÇÊ¿äÇÑ ÇÁ·Î±×·¥°ú ÄÄÆÄÀÏÀýÂ÷°¡ ´Ù¸¦ ¼ö ÀÖ½À´Ï´Ù. ¿©±â¼­´Â ÀϹÝÀûÀÎ ¸®´ª½º ȯ°æ¿¡¼­ ÄÄÆÄÀÏ ÇÏ´Â °ÍÀ» ±âÁØÀ¸·Î ¼³¸íÇϰڽÀ´Ï´Ù. ¶ÇÇÑ IoLanguage¿¡´Â ¿©·¯°¡Áö ¹ÙÀεùÀÌ ÀÖ°í Á¶±Ý¾¿ ´Ù¸¥ ¶óÀ̺귯¸®µéÀÌ Á¦°øµÇÁö¸¸ ¿©±â¼­´Â ¿ÀÁ÷ ±âº»ÀûÀÎ »ç¿ë°ú ¾ð¾îÀÇ ±âº»¿¡¸¸ ÁýÁßÇϵµ·Ï ÇϰڽÀ´Ï´Ù.

  • ¼Ò½º ´Ù¿î·Îµå :
    DarcsVersionControlÀ» »ç¿ëÇÏ¿© ¼Ò½º¸¦ °¡Á®¿Íµµ µÇÁö¸¸ ±×³É ¾ÐÃàµÈ ¹öÁ¯ÀÇ ¼Ò½º¸¦ °¡Á®´Ù ¾ÐÃàÀ» DZ´Ï´Ù.
  •    > wget http://io.urbanape.com/release/Io-2007-02-19.tar.gz
      


  • ¾ÐÃàÇ®°í ÄÄÆÄÀÏÇϱâ :
      > tar xvfz Io-2007-02-19.tar.gz
      ...
      > cd Io-2007-02-19
      > make
      ...
      
    ÄÄÆÄÀÏÀÌ ¿ÏÀüÈ÷ ¼º°øÇÏÁö ¾ÊÀ»¼öµµ ÀÖ½À´Ï´Ù. IoLanguage¿¡ Æ÷ÇÔµÈ ¿©·¯°¡Áö ApiBindingÀÌ Àִµ¥ ÀÌ ¹ÙÀεùµéÀ» ¸ðµÎ ÄÄÆÄÀÏÇÏÁö ¸øÇÏ°í ½Ã½ºÅÛ ¼³Á¤¿¡ µû¶ó¼­ ½ÇÆÐÇÏ´Â °æ¿ìµµ ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ ±âÁ¸ ÀÎÅÍÇÁ¸®Å͸¸À» ÄÄÆÄÀÏ ¿Ï·áÇß´Ù¸é ÀÌ ¹®¼­¸¦ µû¶ó¼­ IoLanguageÀ» ¸Àº¸½Ç ¼ö ÀÖÀ¸¹Ç·Î °è¼Ó ÁøÇàÇÕ´Ï´Ù. ;-)

  • ½ÇÇàÇϱâ : À§ °úÁ¤ÀÌ ¼º°øÇß´Ù¸é _build/{binaries,dll,lib}µî¿¡ ½ÇÇàÈ­ÀÏ, ´Ù¸¥ ÇÁ·Î±×·¥¿¡ ³»ÀåÇϱâ À§ÇÑ ¶óÀ̺귯¸®, SharedObjectµîÀÌ »ý¼ºµÇ¾î ÀÖÀ»°ÍÀÔ´Ï´Ù.
      > ./_build/binaries/io_static
      
  • À§Ã³·³ ½©¿¡¼­ ½ÇÇàÇÏ¿´À»¶§ Io>¿Í °°Àº ÇÁ·ÒÇÁÆ®°¡ ¶á´Ù¸é ÀÎÅÍÇÁ¸®Å͸¦ ½ÇÇà½Ã۴µ¥ ¼º°øÇÑ °ÍÀÔ´Ï´Ù.

HelloWorld!


  • ù¹øÂ° ÇÁ·Î±×·¥ : ÀÎÅÍÇÁ¸®ÅÍÀÇ ÇÁ·ÒÇÁÆ®¿¡¼­ ´ÙÀ½À» ÀÔ·ÂÇÏ°í ¿£Å͸¦ Ãĺ¸¼¼¿ä.
      1 to(5) foreach(n, (n .. ": Hello, World!") println)
      
  • È­¸é¿¡ ´Ù¼¸ÁÙÀÇ ¹®±¸°¡ ÂïÇû³ª¿ä?

    • ù¹øÂ° ÇÁ·Î±×·¥ÀÇ ºÐ¼® : Á¤¸» º¸Àß°Í ¾øÀÌ ´Ü¼øÇÑ ÇÁ·Î±×·¥ÀÌÁö¸¸ À§ÀÇ ÇÑÁÙÀÇ Äڵ带 ¶â¾îº¸¸é¼­ IoLanguageÀÇ ¹®¹ý°ú Ư¡À» ¾Ë¾Æº¸µµ·Ï ÇϰڽÀ´Ï´Ù. Äڵ尡 ³ªÅ¸³­ ¼ø¼­°¡ ¾Æ´Ï¶ó °¢°¢ÀÇ ±â´ÉÇÏ´Â ºÎºÐÀ» ³ª´²¼­ ¼³¸íÇϵµ·Ï ÇϰڽÀ´Ï´Ù. (±×·¯¹Ç·Î ÄÚµåÀÇ ¼ø¼­¶ûÀº Á¶±Ý ´Ù¸¦ ¼ö ÀÖ½À´Ï´Ù.)

      À§ ÄÚµå´Â ÇÑÁٷΠǥÇöÇßÁö¸¸, Å©°Ô ³×ºÎºÐÀ¸·Î ³ª´­ ¼ö ÀÖ½À´Ï´Ù.

    • 1 to(5) : IoLanguage¿¡¼­´Â ¸ðµç°ÍÀÌ °´Ã¼·Î Ãë±ÞµË´Ï´Ù. ´Ù¸¥ ¾ð¾î¿¡¼­Ã³·³ PrimitiveType °°Àº °ÍÀÌ ÇÊ¿ä¾øÀÌ ¼ýÀÚ ¶ÇÇÑ ´Ù¸¥ °´Ã¼¿Í ¸¶Âù°¡Áö·Î ±×¿¡ °ü·ÃµÈ ¸Þ¼­µå¸¦ È£ÃâÇÏ´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù. ¸Þ¼­µå È£ÃâÀº ´ÙÀ½°ú °°Àº Çü½ÄÀ¸·Î ÇÕ´Ï´Ù.
          aObject someMethod
         
    • À§ÀÇ ¿¹Á¦´Â ÀÎÀÚ°¡ ¾ø´Â ¸Þ¼­µå UnaryMethodÀÎ °æ¿ì¿¡ ÇØ´çÇϰí, ÀÎÀÚ°¡ ÀÖ´Â °æ¿ì¿¡´Â ´ÙÀ½Ã³·³ ¸Þ¼­µå À̸§ µÚ¿¡ °ýÈ£·Î ÀÎÀÚµéÀ» ¹­°í ½°Ç¥·Î ¼­·Î ±¸ºÐÇØÁÝ´Ï´Ù.
          aObject otherMethod(arg1, arg2, arg)
         
      À̸¦ ÀÀ¿ëÇØ º¸°Ú½À´Ï´Ù. IoLanguage¿¡¼­µµ 42À̳ª 3.14 °°Àº ´Ù¸¥ ¾ð¾î¿¡¼­ ÈçÈ÷ ºÁ¿Â Á¤¼ö, ½Ç¼ö Ç¥ÇöÀ» ¶È°°ÀÌ ÀÌ¿ëÇÏ¿© ¼ýÀÚ¸¦ Ç¥ÇöÇÕ´Ï´Ù. ¶ÇÇÑ Á¤¼öÀÌ°Ç ½Ç¼öÀÌ°Ç °£¿¡ µÑ ´Ù °°Àº Number °´Ã¼¸¦ ºÎ¸ð·Î ÇÕ´Ï´Ù. ÀÌ Number °´Ã¼·ÎºÎÅÍ ³ª¿Â °´Ã¼À̱⠶§¹®¿¡ 42Àº Number°´Ã¼°¡ Á¦°øÇÏ´Â ¸Þ¼­µå¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î¼­ ´ÙÀ½Ã³·³ Number°´Ã¼ÀÇ ¸Þ¼­µåµéÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
        Io> 42 factorial
        ...
        Io> 255 asHex
        ...
        Io> 2 pow(3)
        ...
        Io> 2 ** 3
        ...
        Io> 2 **(3)
        
    factorial¿Í asHexÀº ´Ü¼øÇÕ´Ï´Ù. ¾Æ¹«·± ÀÎÀÚ¾øÀÌ ±× ¼ýÀÚÀ» ÀÎÀÚ·ÎÇØ¼­ °á°ú¸¦ ¸¸µé¾îÁÝ´Ï´Ù. ÇÏÁö¸¸ pow(n)Àº ÀÎÀÚ¸¦ ÇÊ¿ä·Î ÇÕ´Ï´Ù. ÀÌ °æ¿ì¿¡´Â À§¿¡¼­ º¸´Â °Íó·³ °ýÈ£·Î ±× ÀÎÀÚ¸¦ ¹­¾îÁÝ´Ï´Ù. ¿©±â¿¡ ÇѰ¡Áö ¿¹¿Ü°¡ Àִµ¥ ÀϹÝÀûÀ¸·Î »ê¼ú¿¬»êÀÚ·Î ¾²ÀÌ´Â ¿¬»êÀÚÀÇ °æ¿ì¿¡´Â ÀÌ·¸°Ô °ýÈ£¸¦ Ä¡Áö ¾Ê¾Æµµ ÀÌ ¸Þ¼­µå¸¦ ½ÇÇàÇÏ´Â ¸Þ½ÃÁö¸¦ º¸³»´Â °ÍÀ¸·Î ÀÌÇØÇÕ´Ï´Ù. 2 ** 3Àº 2 **(3)ÀÇ SyntaticSugarÀÔ´Ï´Ù. (ÀÌ·¸°ÔÇØ¼­ ´Ù¸¥ ¾ð¾î°¡ Á¦°øÇÏ´Â °Íó·³ »ê¼ú¿¬»êÀÚ¸¦ ÀÌ¿ëÇÒ ¼ö ÀÖÀ¸¸é¼­ ¿¬»êÀÚ¸¦ ÀçÁ¤ÀÇÇϰųª ¸Þ¼­µå¸¸À¸·Î À̸¦ ±¸ÇöÇÕ´Ï´Ù.) ¶ÇÇÑ À̸¦ ¸Þ½ÃÁöÀü´Þ·Î ±¸ÇöÇÑ ´Ù¸¥ ¾ð¾îÀÎ SmalltalkLanguage¿Í´Â ´Ù¸£°Ô ¿¬»êÀÚÀÇ ¿ì¼±¼øÀ§¸¦ °®½À´Ï´Ù.
      Io> 4+5*2
      ==> 14
      
    ¿¬»êÀÚÀÇ Æò°¡¼ø¼­¸¦ ¹Ù²Ù°íÀÚ ÇÑ´Ù¸é °ýÈ£¸¦ ÀÌ¿ëÇØ¼­ °¨½ÎÁÖ¸é °ýÈ£ºÎÅÍ Æò°¡ÇÕ´Ï´Ù.
      Io> (4+5)*2
      ==> 18
      
    ¸Þ½ÃÁöÀü´Þ°ú PrototypeBasedLanguageÀÇ Æ¯Â¡¿¡ ´ëÇØ¼­ ´õ ¼³¸íÇÒ °ÍÀÌ ³²¾ÆÀÖÁö¸¸ ÀÌ ¹®¼­ÀÇ ³ªÁßÀ¸·Î ¹Ì·ç°í ¿ì¼±Àº ¿ì¸®ÀÇ ÂªÀº ÄÚµå·Î µ¹¾Æ°¡¼­ ¼³¸íÀ» °è¼ÓÇϰڽÀ´Ï´Ù. ¾Æ±î ¼³¸íÇÏ·Á´ø ÄÚµåÁ¶°¢Àº ºÐ¸íÈ÷ 1¿¡ ´ëÇØ¼­ ±× ¸Þ¼­µå to(n)À» ½ÇÇàÇϴµ¥ ÀÎÀڷμ­ 5À» ³Ñ°ÜÁÖ´Â ÄÚµåÀÔ´Ï´Ù. ´ÙÀ½Ã³·³ 1 to(5)À» ÀÎÅÍÇÁ¸®ÅÍ¿¡ ÀÔ·ÂÇÏ¸é ±× °á°ú¸¦ º¸¿©ÁÝ´Ï´Ù.
      Io> 1 to(5)
      ==>  Range_0x8699b90:
      
    À̴ ǥÇö½ÄÀÇ °á°ú°¡ Range°´Ã¼ÀÇ ÀÚ½ÄÀÓÀ» ¸»ÇØÁÝ´Ï´Ù. Range°´Ã¼´Â ¼ýÀÚÀÇ ¹üÀ§¸¦ ³ªÅ¸³»´Âµ¥ »ç¿ëÇÕ´Ï´Ù. ½ÇÁ¦·Î ¸®½ºÆ®³ª ¹è¿­°ú °°Àº ÀÚ·áÇüó·³ ±× óÀ½°ú ³¡±îÁöÀÇ ¸ðµç ¿ä¼Ò¸¦ °®´Â ÀÚ·áÇüÀÌ ¾Æ´Ï¶ó óÀ½°ª°ú ³¡°ª, ±×¸®°í óÀ½°ªÀÌ ³¡°ªÀÌ µÇ±â À§ÇÑ ´Ü°è°ª¸¸À» °®´Â ÀڷᱸÁ¶ÀÔ´Ï´Ù. °£´ÜÇÏ°Ô ¸»Çؼ­ Range°´Ã¼¸¦ ÀÌ¿ëÇØ¼­ 1¿¡¼­ 5±îÁöÀÇ °¢ ´Ü°è°ªµéÀ» ³ª¿­ÇÒ ¼ö ÀÖ½À´Ï´Ù.

  • n .. ": Hello, World!" : ÀÌ ºÎºÐÀº ¹®ÀÚ¿­¿¡ °üÇÑ ºÎºÐÀÔ´Ï´Ù. ´Ù¸¥ ¾ð¾îµéó·³ IoLanguage ¶ÇÇÑ ¹®ÀÚ¿­À» ½Öµû¿ÈÇ¥¸¦ ÀÌ¿ëÇÏ¿© Ç¥ÇöÇÕ´Ï´Ù. ¶ÇÇÑ ¿©·¯ÁÙ¿¡ °ÉÄ£ ¹®ÀÚ¿­À» Ç¥ÇöÇϰíÀÚ ÇÑ´Ù¸é ½Öµû¿ÈÇ¥ 3°³¸¦ ¿¬À̾ »ç¿ëÇÏ¸é µË´Ï´Ù.(¹ì´Ù¸®·Î ÷¾ðÇϸé IoLanguageÀº ÇöÀç Utf8¸¸À» Áö¿øÇÕ´Ï´Ù. ±×·¯¹Ç·Î ÇѱÛÀ» Æ÷ÇÔÇÑ ÇÁ·Î±×·¥À» ÀÛ¼ºÇϰíÀÚ ÇÑ´Ù¸é ¹Ýµå½Ã ÇÁ·Î±×·¥À» Utf8Çü½ÄÀ¸·Î ÀúÀåÇÏ¿©¾ß ÇÕ´Ï´Ù.)
      Io> "foobar"
      ==> foobar
      Io> """this is
      "-> multiline
      "-> string."""
      ==> this is
      multiline
      string.
      
    ´Ù½Ã ¿ø·¡ÀÇ ºÎºÐÀ¸·Î µ¹¾Æ¿Í¼­ nÀ̶ó´Â º¯¼ö¿Í ": Hello..."¶ó´Â ¹®ÀÚ¿­À» ¼­·Î À̾îÁÖ´Â ¿¬»êÀÚ´Â ..À̶ó´Â°Ô ÀÌ ÄÚµåÀÇ ¼³¸íÀÔ´Ï´Ù. (»ç½Ç .. ¸Þ¼­µå´Â StringÀÌ ¾Æ´Ï¶ó Object¿¡¼­ ±¸ÇöÇϰí À־ StringÀÌ ¾Æ´Ñ ´Ù¸¥ °´Ã¼°¡ ¸ÕÀú ¾Õ¿¡¿À´Â °æ¿ì¿¡µµ ¹®ÀÚ¿­·Î ºÙÀ̴µ¥ ºÒÆíÇÏÁö ¾Êµµ·Ï Çϰí ÀÖ½À´Ï´Ù.) ÇѸ¶µð·Î ÀÌ ºÎºÐÀº Ãâ·ÂÇÒ ¹®ÀÚ¿­À» »ý¼ºÇÏ´Â ºÎºÐÀÔ´Ï´Ù. nÀº ¿Ö nÀÎÁö´Â ¹Ì·ï±â·Î ÇսôÙ.

  • (n .. ": Hello, World!") println : ÀÌ Ç¥Çö½ÄÀº °ýÈ£¾ÈÀÇ ºÎºÐÀº ÀÌ¹Ì ¼³¸íÇÑ ºÎºÐÀ̹ǷΠ»ý·«ÇÏ°í º»´Ù¸é...
       "..." println
       
    ...À̶õ ÄÚµå¿Í °°½À´Ï´Ù. °ýÈ£¾ÈÀÇ ºÎºÐÀº ¹®ÀÚ¿­ÀÌ µÇ´Â ºÎºÐÀÌ°í ±× ¹®ÀÚ¿­¿¡ ´ëÇØ¼­ printlnÀ̶õ ¸Þ½ÃÁö¸¦ º¸³»¼­ À̸¦ È­¸é¿¡ Ãâ·ÂÇÕ´Ï´Ù. IoLanguage¿¡¼­´Â ¸ðµç Ç¥Çö½ÄÀÌ °á°ú°ªÀ» µÇµ¹¸³´Ï´Ù. ¹®ÀÚ¿­À̳ª Á¤¼ö, ½Ç¼ö¿Í °°Àº »ó¼öÇ¥ÇöÀº ±× °ª ÀÚü°¡ µÇµ¹¸² °ªÀÌ°í ¸Þ½ÃÁöÀü´ÞÀº ±× ¸Þ¼­µåÀÇ µÇµ¹¸²°ª, ȤÀº ¸¶Áö¸·À¸·Î ±× ¸Þ¼­µå ¾È¿¡¼­ Æò°¡µÈ °ªÀÌ ±× ¸Þ½ÃÁöÈ£ÃâÀÇ °á°ú°ªÀÔ´Ï´Ù. ¸ðµç °ÍµéÀº °´Ã¼À̹ǷΠ°è¼ÓÇØ¼­ ±× µÇµ¹¸²°ª¿¡ ´ëÇØ¼­ Àû´çÇÑ ¸Þ½ÃÁö¸¦ Àü´ÞÇØ¼­ ¿øÇÏ´Â °á°ú¸¦ À̲ø¾î ³¾ ¼ö ÀÖ½À´Ï´Ù.
  •   48879 asHex
      
    À§ÀÇ ÄÚµå´Â 48879¿¡ ÇØ´çÇÏ´Â 16Áø¼ö¸¦ ¹®ÀÚ¿­·Î µÇµ¹·ÁÁÝ´Ï´Ù. ÇÏÁö¸¸ ¾à°£ º¯´öÀ» ºÎ·Á¼­ ÀÌ 16Áø¼ö¸¦ ´ë¹®ÀڷΠǥÇöÇϰíÀÚ ÇÑ´Ù¸é String°´Ã¼ÀÇ asUppercase ¸Þ¼­µå¸¦ »ç¿ëÇØ¼­ À̸¦ º¯È¯ÇÒ ¼ö ÀÖ½À´Ï´Ù.
      48879 asHex asUppercase
      
    ÀÌ´Â °á°ú°ª¿¡ ´ëÇØ¼­ ¿¬µ¿ÇÏ¿© »õ·Î¿î °á°ú¸¦ ¸¸µå´Â ¹æ¹ýÀ¸·Î IoLanguage¿¡¼­ ÈçÇÏ°Ô »ç¿ëµË´Ï´Ù. (´Ù¸¥ ¾ð¾î¿¡ Àͼ÷ÇÑ ºÐµéÀº ÇϳªÀÇ Æò°¡½ÄÀ» ÇÑ º¯¼ö¿¡ ³Ö°í, ´Ù½Ã ±× º¯¼ö¸¦ º¯È¯´Â ÀÏÀÌ ÈçÇÕ´Ï´Ù.)

  • 1 to(5) foreach(n, ...) : ÀÌ ºÎºÐ ¶ÇÇÑ IoLanguageÀÇ Æ¯Â¡À» Àß º¸¿©Áִ ǥÇö½ÄÀÔ´Ï´Ù. IoLanguage¿¡´Â Ű¿öµå³ª ¿¹¾à¾î°¡ ¾ø°í ±×·¯¹Ç·Î °íÁ¤µÈ Á¦¾î±¸Á¶ ¶ÇÇÑ ¾ø½À´Ï´Ù. ´ë½Å¿¡ ÀÌ·¸°Ô °´Ã¼ ´ëÇÑ ¸Þ¼­µå·Î¼­ ÄÚµåºí·°À» ³Ñ°ÜÁ༭ ·çÇÁ³ª Á¦¾î±¸Á¶¸¦ ±¸ÇöÇÕ´Ï´Ù. ¿©±â¿¡¼­´Â Range °´Ã¼ÀÇ foreach¸Þ¼­µå¸¦ ÀÌ¿ëÇÕ´Ï´Ù. ÀÌ ¸Þ¼­µå´Â 2°³ÀÇ ÀÎÀÚ¸¦ ÇÊ¿ä·Î Çϴµ¥ ù¹øÂ° ÀÎÀÚ´Â °¢ ´Ü°è°ªÀ» ¹ÙÀεùÇØÁÙ º¯¼öÀÇ À̸§(¿©±â¼­´Â n)°ú µÎ¹øÂ°´Â ·çÇÁÀÇ °¢ ´Ü°èº°·Î ½ÇÇàÇÒ ÄÚµåºí·°ÀÔ´Ï´Ù. Áï, ´Ù½Ã ¸»Çؼ­ 1¿¡¼­ºÎÅÍ 5±îÁö 1¾¿ Áõ°¡Çϸ鼭 1, 2, 3, 4, 5¿¡ ´ëÇØ¼­ Â÷·Ê´ë·Î nÀ» ¼³Á¤ÇÏ°í µÎ¹øÂ° ÀÎÀÚ¸¦ ½ÇÇàÇÏ´Â °ÍÀÔ´Ï´Ù.
    À̸¦ ¼ÕÀ¸·Î Ç®¾îº¸¸é ´ÙÀ½°ú °°½À´Ï´Ù.
       n := 1; (n .. ": Hello, World!")
       n := 2; (n .. ": Hello, World!")
       ...±ÍÂú¾Æ¼­±×¸¸»ý·«...
       n := 5; (n .. ": Hello, World!")
       
  • IoLanguage¿¡¼­´Â ÇÁ·Î±×·¥ÀÇ ÄÚµå ¶ÇÇÑ °´Ã¼·Î¼­ Ãë±ÞµÉ ¼ö ÀÖ½À´Ï´Ù. (CommonLisp³ª LispLanguage¿¡¼­ÀÇ ¸ÅÅ©·Î¸¦ ÅëÇÑ ¹®¹ýÀûÀÎ Ãß»óÈ­, ´Ù¸¥ ¿©Å¸ ¾ð¾îµé¿¡¼­ ¸»ÇÏ´Â AnonymousFunction °°Àº °ÍµéÀ» ±«»óÇÑ ¸ÅÅ©·Î¸¦ ÀÛ¼ºÇÏ¸ç ±«·Î¿öÇϰųª ÇÒ ÇÊ¿ä¾øÀÌ °£´ÜÇÏ°Ô ÀÌ¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.) À§ ¿¹Á¦¿¡¼­ ;Àº ¿©·¯Ç¥Çö½ÄÀ» ÇÑÁÙ¿¡ ÀûÀ» ¼ö ÀÖµµ·Ï Ç¥Çö½ÄÀ» ¼­·Î ³ª´²ÁÖ´Â ¿ªÈ°À» ÇÕ´Ï´Ù.


»ç¿ë»óÀÇ ÆÁ


  • IoLanguage·Î ÀÏÀÏÀÌ InteractiveMode¿¡¼­ ÀÔ·ÂÇÏ±â ½È´Ù¸é ÆíÁý±â·Î È®ÀåÀÚ°¡ .ioÀÎ ÆÄÀÏ·Î ÀúÀåÇÏ°í¼­ io ÀÎÅÍÇÁ¸®ÅÍ¿¡ ÀÎÀÚ·Î ³Ñ°ÜÁ༭ ½ÇÇàÇÏ¸é ½ºÅ©¸³Æ®Ã³·³ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¾Æ´Ï¸é #!/home/ageldama/my/bin/ioó·³ ÆÄÀÏÀÇ ¸Ç ¾ÕÁÙ¿¡ ÀÎÅÍÇÁ¸®Å͸¦ ¼³Ä¡ÇÑ °æ·Î¸¦ ÁöÁ¤ÇØÁÖ°í ½ÇÇà±ÇÇÑÀ» ÁÖ¸é ´Ù¸¥ ½ºÅ©¸³Æ®Ã³·³ µ¿ÀÏÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.
    Ưº°ÇÑ EntryPoint °°Àº °ÍÀÌ ¾øÀÌ IoScriptÀº ùÁÙºÎÅÍ ±×³É ¼ø¼­´ë·Î Æò°¡µË´Ï´Ù.

  • º¯¼ö³ª ¹ÙÀεù °°Àº °³³äÀ» À§Çؼ­ Æò°¡¹®¸Æ(EvaluationContext)°¡ ÀÖ½À´Ï´Ù. ÀÌ´Â ¾î¶² Äڵ带 ½ÇÇàÇÒ ¶§ ±× ¹®¸ÆÀÌ ¾îµð¿¡ ¼ÓÇÏ´ÂÁö¸¦ ³ªÅ¸³À´Ï´Ù. ÀÌ¿¡ ´ëÇØ¼­ ÀÚ¼¼ÇϰԴ ÀÌÈÄ¿¡ ¼³¸íÇϵµ·Ï ÇϰڽÀ´Ï´Ù. ´ë½Å¿¡ ±âº»ÀûÀ¸·Î ¼ö½ÅÀÚ(Receiver)À» ÁöÁ¤ÇÏÁö ¾Ê°í¼­ ¸Þ¼­µå¸¦ È£ÃâÇÏ¸é ±× ÇØ´ç Æò°¡¹®¸ÆÀ» »ç¿ëÇÕ´Ï´Ù. ÀÌ Æò°¡¹®¸ÆÀº thisContext·Î ÂüÁ¶ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ ÀÎÅÍÇÁ¸®Å͸¦ ½ÇÇàÇϸé ÀÌ ±âº» Æò°¡¹®¸ÆÀº Lobby¶ó°í ºÎ¸¨´Ï´Ù.
       Io> println
       ...
       Io> thisContext println
       ...
      
    ÀÎÅÍÇÁ¸®ÅÍ¿¡¼­ À̸¦ ½ÇÇàÇÏ¸é µÎ°¡Áö ¹®Àå ¸ðµÎ °°Àº °á°ú¸¦ Ãâ·ÂÇÒ°ÍÀÔ´Ï´Ù.

  • ¸ðµç °´Ã¼´Â Object°´Ã¼¿Í °ü·ÃÀÌ ÀÖ½À´Ï´Ù. ¶ÇÇÑ Object°´Ã¼´Â °´Ã¼¿¡ ´ëÇÑ ±âº»ÀûÀÎ ¸Þ¼­µåµéÀ» Æ÷ÇÔÇÕ´Ï´Ù. ¾î¶² °´Ã¼¿¡ ´ëÇØ¼­ ½½·Ô(slot)ÀÇ ¸ñ·ÏÀ» ¾ò°í ½ÍÀ¸¸é ´ÙÀ½Ã³·³ ÇÕ´Ï´Ù. (½½·ÔÀÌ ¹«¾ùÀÎÁö´Â ÀÌÈÄ¿¡ ¼³¸íÇϰڽÀ´Ï´Ù.)
      Io> String slotNames
      ...
      
    ÀÌ·¸°Ô ¾î¶² °´Ã¼ÀÇ ½½·ÔÀ» ¾Ë ¼ö ÀÖ´Ù¸é ±× °´Ã¼°¡ ¾î¶² ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´ÂÁö ´ë·«ÀûÀ¸·Î ÆÄ¾ÇÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ ´ÙÀ½°ú °°Àº °æ¿ìµµ ÀÖ½À´Ï´Ù.
      Io> "foobar" slotNames
      ==> list()
      
    ºÐ¸íÈ÷ ¹®ÀÚ¿­¿¡ ´ëÇØ¼­ ´Ù¸¥ ¸Þ½ÃÁö¸¦ º¸³¾ ¼ö ÀÖÀ½¿¡µµ ±× ½½·ÔÀÌ ¾ø´Â°Íó·³ º¸ÀÔ´Ï´Ù. ÇÏÁö¸¸ À̰ÍÀº À߸øµÈ °ÍÀÌ ¾Æ´Õ´Ï´Ù. "foobar"Àº StringÀ¸·ÎºÎÅÍ º¹Á¦µÈ °´Ã¼À̰í ÀÌ´Â StringÀÌ ÀÌÇØÇÏ´Â ¸Þ½ÃÁö¸¦ "foobar"¿¡ º¸³»µµ ¾Æ¹«·± ¹®Á¦°¡ ¾øÀ¸¸ç ½ÇÁ¦·Î "foobar"°¡ ¼ö½ÅÇÏ´Â ¸Þ½ÃÁö´Â Ưº°ÇÑ °æ¿ì°¡ ¾Æ´Ï¸é String¿¡°Ô ±×´ë·Î Àü´ÞµÇ±â ¶§¹®ÀÔ´Ï´Ù. À̰ÍÀ» ÀÚ¼¼ÇÏ°Ô ÀÌÇØÇϱâ À§Çؼ­´Â ÀÌÈÄ¿¡ ¼³¸íÇÏ´Â Protos¿¡ ´ëÇÑ ºÎºÐÀ» Âü°íÇϽñ⠹ٶø´Ï´Ù. Áö±ÝÀ¸·Î¼­´Â ÀÌ·¯ÇÑ »ó¼ö³ª ÆÄ»ý°´Ã¼µéÀº ±× ¿ø·¡ÀÇ °´Ã¼¸¦ ¾Ë°í ±× ¿ø·¡ °´Ã¼ÀÇ ½½·Ô¸ñ·ÏÀ» ±¸Çؼ­ À̸¦ ÇÒ ¼ö ÀÖ´Ù°í ÀÌÇØÇÏ´Â °ÍÀÌ ÆíÇÕ´Ï´Ù.
    ¾î¶² °´Ã¼°¡ ¼ÓÇÑ Å¸ÀÔÀ» ¾Ë·Á°í ÇÑ´Ù¸é...
      Io> "foobar" type
      ==> Sequence
      Io> Sequence slotNames
      ...
      


  • ½ºÅ©¸³Æ®¿¡¼­ ´Ù¸¥ ½ºÅ©¸³Æ®¸¦ ½ÇÇàÇÏ·Á°í ÇÑ´Ù¸é anObj doFile(filename)À» »ç¿ëÇØº¸¼¼¿ä. ¹®ÀÚ¿­ÀÎ °æ¿ì¿¡µµ anObj doString(s)ó·³ ÇÏ¸é µË´Ï´Ù. anObjÀº Æò°¡¹®¸Æ(EvaluationContext)ÀÌ µÇ¹Ç·Î »ý·«Çϸé Àü¿ª¹®¸ÆÀÎ Lobby·Î¼­ Æò°¡ÇÕ´Ï´Ù. Lobby °´Ã¼´Â ÇÁ·Î±×·¥ ½ÇÇà¿¡ °ü·ÃµÈ ÀÎÀÚ³ª ½ÇÇà°æ·Îµî¿¡ ´ëÇÑ Ã³¸®¸¦ µµ¿ÍÁÝ´Ï´Ù.



¹®¹ý


º¸Åë ´Ù¸¥ ¾ð¾î¿¡¼­ ¹®¹ý¿¡ ´ëÇÑ ºÎºÐÀº Ç×»ó ÀÌ·± ¹®¼­ÀÇ µÞÂÊ¿¡ ºÎ·ÏÀ¸·Î À§Ä¡ÇÏÁö¸¸ ¹Ý´ë·Î ±× ÆäÀÌÁö¼ö´Â ¾öû³ª°Ô ¸¹½À´Ï´Ù. ÇÏÁö¸¸ IoLanguage¿¡¼­´Â ±×·± Ä¿´Ù¶þ°í º¹ÀâÇÑ ¹®¹ýÀÌ ¾ø½À´Ï´Ù. ´ë½Å¿¡ ÀÌ ºÎºÐÀÌ °¡Àå ¾Õ¿¡ À§Ä¡ÇÏ´Â ÀÌÀ¯´Â ¸î°¡Áö ´Ü¼øÇÏ°í ¿ÏÀüÇÑ ¹®¹ý±ÔÄ¢À» ÀÌÇØÇÑ´Ù¸é ÀÌÈÄ¿¡ ³ª¿À´Â ¸ðµç ºÎºÐµéÀÌ ÀÌ ´Ü¼øÇÑ ¹®¹ý¿¡ ±âÃÊÇÑ °ÍÀ̶ó´Â Á¡ÀÌ ¸íÈ®Çϱ⠶§¹®ÀÔ´Ï´Ù.

¸Þ½ÃÁö Àü´Þ

»ç½Ç ¹®¹ýÀ» ³ª¿­ÇÏ·Á°í ÇØµµ Èûµç°Ô ¹®¹ýÀ̶ó°í ºÎ¸¦¸¸ÇÑ°Ô ¾ø½À´Ï´Ù. IoLanguage¿¡´Â ¿ÀÁ÷ ¸Þ½ÃÁöÀü´Þ¸¸ÀÌ ÀÖ½À´Ï´Ù. ³ª¸ÓÁö´Â »ó¼ö¸¦ Ç¥ÇöÇϰí, ÁÖ¼®À» Ç¥½ÃÇÏ´Â Á¤µµÀÔ´Ï´Ù. ¸Þ½ÃÁö Àü´ÞÀ» °£·«ÇÏ°Ô Ç¥ÇöÇØº¸¸é ´ÙÀ½°ú °°½À´Ï´Ù.
  • ¸Þ½ÃÁö À̸§ : Ç×»ó ¸Þ½ÃÁö À̸§Àº ¹Ýµå½Ã Àû¾îÁà¾ß ÇÕ´Ï´Ù. (Çʼö)
  • ´ë»ó °´Ã¼ : ¸Þ½ÃÁö¸¦ ¹ÞÀ» °´Ã¼¸¦ ¸Þ½ÃÁö À̸§ ¾Õ¿¡ Àû¾îÁÝ´Ï´Ù. ¼±ÅÃÀûÀ¸·Î ÀÌ °´Ã¼¸¦ ÁöÁ¤ÇÏÁö ¾ÊÀ¸¸é self³ª thisContext °°Àº Ưº°ÇÑ Àǹ̸¦ °®´Â °´Ã¼°¡ ¼ö½ÅÇÕ´Ï´Ù.
  • ÀÎÀÚ : ¼±ÅÃÀûÀÔ´Ï´Ù. ´ë½Å ¸Þ¼­µå°¡ ÇÊ¿ä·Î Çϴ¸¸Å­ ÀÎÀÚ¸¦ ÁöÁ¤ÇØ¾ß ÇÕ´Ï´Ù. ÀÎÀÚ°¡ Çϳªº¸´Ù ¸¹À» °æ¿ì¿¡´Â ÀÎÀÚµé ³¢¸® ½°Ç¥(,)·Î ºÐ¸®¸¦ Çϰí ÀÎÀÚÀÇ ¸ñ·ÏÀ» °ýÈ£·Î °¨½ÎÁÝ´Ï´Ù. ¾î¶°ÇÑ ÀÎÀÚµµ ¾ø´Â °æ¿ì¿¡´Â JavaLanguage, PythonLanguage¿¡¼­Ã³·³ ºó °ýÈ£¸¦ ¾²´Â °ÍÀÌ ¾Æ´Ï¶ó °ýÈ£ ºÎºÐÀ» »ý·«ÇÕ´Ï´Ù. ¶ÇÇÑ Æ¯º°ÇÑ ¸Þ¼­µå À̸§ÀÎ °æ¿ì, ´Ù½Ã¸»ÇØ ¿¬»êÀÚÀÎ °æ¿ì¿¡´Â °ýÈ£¸¦ »ý·«Çϰí ÀÎÀÚ¸¸À» Àû¾îÁÙ ¼ö ÀÖ½À´Ï´Ù.
´ÙÀ½Àº À§ÀÇ ±ÔÄ¢À» Àû¿ëÇÑ ¸î°¡Áö ¿¹ÀÔ´Ï´Ù.
 Io> Dog bark
 Io> Person say("hello")
 Io> list(1, 2, 3)
 


¶ÇÇÑ ÀÌ·¸°Ô ¸Þ½ÃÁö¿¡ ³Ñ°ÜÁÖ´Â ¸ðµç ÀÎÀÚµéÀº ¾ðÁ¦³ª ¼ö½ÅÀÚ¿¡°Ô ³Ñ°ÜÁ®¼­ ÇÊ¿äÇÑ ¶§¿¡¸¸ Æò°¡°¡ ÀÌ·ç¾îÁý´Ï´Ù. LispLanguage¿¡¼­ ¸»ÇÏ´Â SpecialFormÀ̳ª ±×·±°ÍÀÌ ÇÊ¿ä¾øÀÌ ´Ü¼øÇÏ°Ô ¸Þ¼­µå¸¦ ÅëÇØ¼­ Á¦¾î±¸¹®À» Ç¥ÇöÇÒ ¼ö ÀÖÀ½À» ÀǹÌÇϸç, ´Ù¸¥ ¾ð¾î¿¡¼­ ¸»ÇÏ´Â LazyEvaluation°ú ºñ½ÁÇÕ´Ï´Ù. ¸¸¾à ÀÎÀÚ¸¦ ÀÌ·¸°Ô Æò°¡ÇÏÁö ¾Ê°í, EagerEvaluationÀ¸·Î¼­ JavaLanguage³ª PythonLanguageó·³ ÀÎÀÚ¸¦ Æò°¡ÇÑ´Ù¸é ´ÙÀ½ÀÇ ¿¹Á¦´Â ÀÛµ¿ÇÏÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù.
 Io> 1 to(10) select(n, (n % 2)==0)
    °´Ã¼ ¸Þ½ÃÁö ¸Þ¼­µå
 
ÀÌ ÄÚµå´Â 1¿¡¼­ 10±îÁöÀÇ ¸ðµç ¦¼ö¸¦ ±¸ÇÕ´Ï´Ù. ÇÏÁö¸¸ ´Ù¸¥ ¾ð¾îÀÇ Æò°¡±ÔÄ¢À» Àû¿ëÇÑ´Ù¸é selectÀÇ ÀÎÀÚÀÎ n°ú "(n%2)==0"Àº °¢°¢ Æò°¡ÇÏ·Á°í ÇØ¼­ Àý´ë ÀÛµ¿ÇÏÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù.

ÁÖ¼®

ÇÁ·Î±×·¥À» ÀÛ¼ºÇϸ鼭 Áß°£Áß°£ ÁÖ¼®À» ´Þ°í ½Í´Ù¸é ´ÙÀ½ ¼¼°¡Áö ½ºÅ¸ÀÏ ¸ðµÎ°¡ Çã¿ëµË´Ï´Ù.
 /* C-style
    multiline
  */
 // C++ style
 # Shell-style
 


¹®ÀÚ¿­

´ÙÀ½°ú °°ÀÌ 2°¡Áö ½ºÅ¸ÀÏÀÇ ¹®ÀÚ¿­ Ç¥ÇöÀ» Áö¿øÇÕ´Ï´Ù.
 Io> "foobar"
 Io> """multiple lines"""
 
"""À¸·Î °¨½Ñ ¹®ÀÚ¿­Àº ¿©·¯ÁÙ¿¡ °ÉÃļ­ Àû°Å³ª ±×¾È¿¡ ´Ù¸¥ ¹®ÀÚ¿­À» Ç¥ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ Cµî¿¡¼­ Áö¿øÇÏ´Â ¹é½½·¡½¬¸¦ ÀÌ¿ëÇÑ EscapeCharacterÀÇ Ç¥Çöµµ °¡´ÉÇÕ´Ï´Ù.

¼ýÀÚ

Á¤¼ö, ½Ç¼ö, exponentÇ¥±â¹ý, 16Áø¼öÇ¥±âµîÀ» Áö¿øÇÕ´Ï´Ù.
 123
 123.456
 0.456
 .456
 123e-4
 123e4
 123.456e-7
 123.456e2
 0x0
 0x0F
 0XeE
 



½½·Ô? ¸Þ¼­µå? ¸Þ½ÃÁö?

Á¶±Ý ¶á±Ý ¾øÁö¸¸, °£´ÜÇÏ°Ô ¸î°¡Áö °³³äÀ» ¼Ò°³ÇØ µå¸®°í ½Í½À´Ï´Ù. ¾Ë°í ÀÖ´Â °ÍÀÌ´õ¶óµµ Ȥ½Ã³ª Á¦°¡ ¸»ÇϰíÀÚ ÇÏ´Â °Í°ú ´Ù¸¦ ¼ö ÀÖÀ¸¹Ç·Î Àо¸ç È®ÀÎÇØÁֽñ⠹ٶø´Ï´Ù.
  • ½½·Ô(slot) : °´Ã¼ÀÇ µ¥ÀÌÅÍ¿Í ¸Þ¼­µå¸¦ À̸§À¸·Î¼­ ÂüÁ¶Çϱâ À§ÇÑ ¹æ¹ý. À̸§±×´ë·Î °´Ã¼´Â ½½·ÔÀÇ ¸ñ·ÏÀ» °®°í, °¢°¢ÀÇ ½½·ÔÀº ÇϳªÀÇ ´Ù¸¥ °´Ã¼¿¡ ´ëÇÑ ÂüÁ¶ÀÔ´Ï´Ù. ÀÌ ÂüÁ¶´Â ¸Þ¼­µå°´Ã¼À̰ųª ±×¹Û¿¡ ´Ù¸¥ °´Ã¼ÀÇ ¼Ó¼ºÀ¸·Î¼­ »ç¿ëµÇ´Â °´Ã¼ÀÏ ¼ö ÀÖ½À´Ï´Ù.
  • ¸Þ¼­µå(method) : °´Ã¼ÁöÇâ¿¡¼­ ÇÔ¼ö(function)°ú À¯»çÇÑ ÄÚµåÀÇ ´ÜÀ§¸¦ ³ªÅ¸³»´Â ¸»·Î¼­, ¸Þ¼­µå¶ó°í ÇÏ´Â °ÍÀº ÁÖ·Î ¾î¶² °´Ã¼¿Í ¿¬°üµÇ¾î¼­ ¿¬°üµÈ °´Ã¼¿¡ ´ëÇÑ ÀÛ¾÷À» ÇÏ´Â ·çƾÀ» ¸»ÇÕ´Ï´Ù.
  • ¸Þ½ÃÁö(message) : °´Ã¼ÁöÇâ¿¡¼­ ¸Þ½ÃÁö´Â °´Ã¼µé°£ÀÇ Åë½Å¹æ¹ýÀ» ¸»ÇÕ´Ï´Ù. °´Ã¼µéÀº ¼­·Î ¸Þ½ÃÁö¸¦ ÁÖ°í ¹Þ°í, ¸Þ½ÃÁöÀÇ ÀÀ´äÀ» ¹ÞÀ½À¸·Î¼­ FunctionalProgramming°ú °°Àº ÆÐ·¯´ÙÀÓ¿¡¼­ ÇÁ·Î±×·¥ÀÇ ¸ðµç ºÎºÐµéÀÌ ÇÔ¼öÀÎ °Íó·³ °´Ã¼ÁöÇâ¿¡¼­´Â ÇÁ·Î±×·¥ÀÇ ¸ðµç ±¸¼º¿ä¼ÒµéÀÌ °´Ã¼À̸ç ÀÌ °´Ã¼µéÀº ¼­·Î ¸Þ½ÃÁö¸¦ ÁÖ°í ¹ÞÀ½À¸·Î¼­ ÇÁ·Î±×·¥À» ÀÌ·ì´Ï´Ù.

    Á¤¸®Çغ¸¸é, IoLanguage¿¡¼­ ¾î¶² °´Ã¼ "anObj"¿¡ ¾î¶² ¸Þ¼­µå "someMeth"À» ½ÇÇà½ÃŰ´Â ÀÛ¾÷Àº "anObj"¿¡ "someMeth"¶ó´Â ¸Þ½ÃÁö¿Í ±×¿¡ ÇÊ¿äÇÑ ÀÎÀÚµéÀ» Àü´ÞÇϰí À̸¦ ±â¹ÝÀ¸·Î "anObj"ÀÇ ½½·Ô¸ñ·Ï¿¡¼­ "someMeth"¿¡ ÇØ´çÇÏ´Â °´Ã¼¸¦ ¾ò¾î¼­ ÀÌ¿¡ ÀÎÀÚ¸¦ ³Ñ°ÜÁÖ°í ½ÇÇàÇÕ´Ï´Ù. ¿Ö C++Language¿¡¼­Ã³·³ Á÷Á¢ vtableÀ» °®°í ÀÖ´Ù°¡ À̸¦ ÀÌ¿ëÇØ¼­ ÇÔ¼öÆ÷ÀÎÅ͸¦ ã¾Æ Á¡ÇÁÇÏÁö ¾Ê´À³Ä°í ÇÑ´Ù¸é ÀÌ·¸°Ô ¸Þ½ÃÁö¸¦ Àü´ÞÇÏ´Â ¹æ¹ýÀÌ ÈξÀ À¯¿¬Çϱ⠶§¹®À̶ó°í ¹Û¿¡ ¸»¾¸µå¸±¼ö¹Û¿¡ ¾ø½À´Ï´Ù. ½ÇÇà½Ã°£¿¡ ¾î¶² °´Ã¼¿¡ »õ·Î¿î ½½·ÔÀ» Ãß°¡Çϰųª ÀÌÈÄ¿¡ ¼³¸íÇÒ Protos¿¡ º¯°æÀ» ÇØ¼­ ±âÁ¸ °´Ã¼µéÀÇ Çൿ¾ç½ÄÀ» ¹Ù²Ù´Â °ÍÀÌ ¾ó¸¶µçÁö °¡´ÉÇϰí Å©°Ô ¾ð¾î±¸ÇöÀ» È®ÀåÇϰųª Á÷±³¼ºÀÌ ¶³¾îÁö´Â ¹æ¹ýÀ¸·Î ¾ð¾îÀÇ ³»ºÎ±¸ÇöÀ» ÆÄ°íµé°Å³ª ±«»óÇÑ ¹æ¹ýÀ» »ç¿ëÇÏÁö ¾Ê°í ÀÌ·¯ÇÑ °ÍÀ» ¾ó¸¶µçÁö ±¸ÇöÇÒ ¼ö Àֱ⠶§¹®ÀÔ´Ï´Ù. ÀÌ ¹®¼­¿¡¼­ ¼³¸íÇÒ IoLanguageÀÇ °´Ã¼½Ã½ºÅÛÀ̳ª ±×¹Û¿¡ ´Ù¸¥ ºÎºÐµéÀ» ´õ Àо½Å´Ù¸é ¿Ö ¸Þ½ÃÁöÀü´ÞÀÌ À¯¿ëÇÑÁö¸¦ ÀÌÇØÇϽǰ̴ϴÙ.


¿¬»êÀÚ

IoLanguage¿¡¼­ ¿¬»êÀÚ¶ó´Â ¸»Àº »ç½Ç ¼ýÀÚ¿Í ¿µ¹®ÀÚ·Î ÀÌ·ç¾îÁöÁö ¾ÊÀº À̸§À» °®´Â ¸Þ¼­µå¸¦ ¸»ÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ¸Þ¼­µåµéÀº ÀÎÀÚ°¡ ÀÖ´õ¶óµµ °ýÈ£¸¦ »ý·«ÇÏ°í¼­ È£ÃâÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ or, and, return µîÀÇ ¹Ì¸® ÁöÁ¤µÈ ¿µ¾î´Ü¾îµé ¶ÇÇÑ ¿¬»êÀڷμ­ Ãë±ÞÇÕ´Ï´Ù. À̵éÀº ¸ðµÎ ¿¹¿ÜÀûÀÎ ±ÔÄ¢ÀÌÁö¸¸ »ç¿ë»óÀÇ ÆíÀǸ¦ À§Çؼ­ Á¦°øÇϴ°͵éÀÔ´Ï´Ù.
 Io> 3 + 4
 ==> 7
 Io> 3 type
 ==> Number
 Io> Number slotNames
 ==> list(..., "+", ...)
 


´ëÀÔ¿¬»êÀÚ

´Ù¸¥ ¾ð¾î¿¡¼­´Â º¯¼ö¸¦ À§ÇÑ À̸§°ø°£ÀÌ ÀÖ½À´Ï´Ù. IoLanguage¿¡¼­´Â ¸ðµç °ÍÀÌ °´Ã¼·Î Ç¥ÇöµÇ¹Ç·Î À̸§°ø°£ ¶ÇÇÑ ¾î¶² °´Ã¼·Î Ç¥ÇöµÉ Çʿ䰡 ÀÖ½À´Ï´Ù. ±×·¡¼­ Àü¿ªº¯¼ö¿Í °°Àº °ÍÀ» À§ÇÑ À̸§°ø°£À» À§Çؼ­ Lobby°´Ã¼¸¦ Á¦°øÇÕ´Ï´Ù. ¾î·µç ÀÌ·¯ÇÑ ÇöÀç¶ó´Â ½ÃÁ¡¿¡¼­ ¹ÙÀεùµÈ º¯¼öµéÀ» À§ÇÑ °ø°£ÀÌ ÇÊ¿äÇÕ´Ï´Ù. (ÀÌÈÄ¿¡ ¼³¸íÇÒ Æò°¡¹®¸Æ(EvaluationContext)¿¡¼­ ÀÌ·¯ÇÑ °Í¿¡ ´ëÇØ¼­ ³íÀÇÇϰڽÀ´Ï´Ù.) À̸¦ À§Çؼ­ »õ·Î¿î ¹æ¹ýÀ» Ãß°¡ÇÏÁö ¾Ê°í ´Ü¼øÈ÷ Lobby °´Ã¼¿¡ ½½·ÔÀ» Ãß°¡ÇÏ°í ±× ½½·ÔÀ» ÅëÇØ¼­ º¯¼ö¸¦ ±¸ÇöÇÕ´Ï´Ù. ´ÙÀ½ÀÇ ÄÚµå´Â ÇöÀç Æò°¡¹®¸Æ¿¡ a¶ó´Â À̸§ÀÇ ½½·ÔÀ» ¸¸µé°í 1¿¡ ÇØ´çÇÏ´Â °´Ã¼ÀÇ ÂüÁ¶¸¦ ´ëÀÔÇÕ´Ï´Ù.
 Io> a := 1
 Io> a
 ==> 1
 
´Ü¼øÈ÷ À̸§-°ªÀÇ °ü°èÀ̱⠶§¹®¿¡ DynamicTypingÀÌ °¡´ÉÇÕ´Ï´Ù.
 Io> a := 1
 Io> a := "foobar"
 
IoLanguage¿¡¼­ ´ëÀÔ¿¬»êÀÚ´Â :=¿Í =°¡ ÀÖ½À´Ï´Ù. ÀüÀÚÀÇ °æ¿ì´Â ÀÌ¹Ì ½½·ÔÀÌ ÀÖÀ¸¸é ±âÁ¸ ½½·ÔÀ» ´ëüÇϰí, ½½·ÔÀÌ ¾øÀ¸¸é ½½·ÔÀ» »ý¼ºÇÕ´Ï´Ù. ÇÏÁö¸¸ ÈÄÀÚ´Â ½½·ÔÀÌ ¾øÀ¸¸é ¿¹¿Ü¸¦ ´øÁö°í ½½·ÔÀÌ ÀÖÀ»¶§¸¸ ½½·ÔÀ» ´ëüÇÕ´Ï´Ù.


true, false, and nil

Áø¸®°ªÀ» ³ªÅ¸³»´Â µÎ°¡Áö °ªÀÌ ÀÖ½À´Ï´Ù. Çϳª´Â ÂüÀ» ³ªÅ¸³»´Â true¿Í °ÅÁþ°ªÀ» ³ªÅ¸³»´Â falseÀÔ´Ï´Ù. À̵éÀº ±× ÀÚü·Î¼­ Áø¸®°ªÀ» ³ªÅ¸³À´Ï´Ù. ¶ÇÇÑ ³í¸®¿¬»êÀ» ¼öÇàÇÏ´Â ¸Þ¼­µåÀÇ °á°ú´Â Ç×»ó ÀÌ µÑ Áß ÇϳªÀÔ´Ï´Ù.
 Io> (3 < 4) type
 ==> true
 
À̵éÀº ±× ÀÚü·Î¼­´Â º° ±â´ÉÀÌ ¾øÁö¸¸ À̵é ÀÚü·Î¼­µµ °´Ã¼À̱⠶§¹®¿¡ BooleanArithmeticÀ̳ª SmalltalkLanguage ½ºÅ¸ÀÏÀÇ Á¦¾î±¸Á¶¸¦ ¸¸µé°í ½ÍÀ» ¶§ À¯¿ëÇÕ´Ï´Ù.
 (balance >= amount) ifTrue("ok" println) ifFalse("not enough mineral!" println)
 


¶ÇÇÑ ´Ù¸¥ ¾ð¾î¿¡¼­ nullÀÇ ¿ªÈ°À» ÇÏ´Â nilÀÌ ÀÖ½À´Ï´Ù. ¾î¶°ÇÑ º¯¼ö(½½·Ô)°¡ ¾Æ¹«°Íµµ ÂüÁ¶ÇÏÁö ¾Ê°íÀÚ ÇÒ ¶§ À̸¦ »ç¿ëÇÕ´Ï´Ù.
 Io> a := nil
 Io> a ifNil("void..." println)
 


°´Ã¼


IoLanguageÀÇ Æ¯Â¡ÀûÀÎ °³³äµéÀº ´Ù¸¥ ¾ð¾î¿¡¼­ ãÀ» ¼ö ÀÖ´Â º¹ÀâÇÏ°í ¾î·Á¿ü´ø °³³äµéÀ» Àß ÅëÇÕÇϰí ÀÖ½À´Ï´Ù.

concept unifies
ÇÁ·ÎÅäŸÀÔ(prototypes) °´Ã¼, Ŭ·¡½º, À̸§°ø°£(namespace),
Áö¿ªº¯¼ö(locals), ÇÔ¼ö
¸Þ½ÃÁö(messages) ¿¬»êÀÚ(operators), È£Ãâ(calls), ´ëÀÔ(assignment),
º¯¼öÁ¢±Ù(variable accesses)
blocks with ¸Þ¼­µå, Ŭ·ÎÁ®(closures), ÇÔ¼ö
assignable scope

ÇÁ·ÎÅäŸÀÔ

IoLanguage¿¡¼­´Â ÄÚµåºí·°ÀÇ Áö¿ªº¯¼ö¸¦ À§ÇÑ ÀúÀå°ø°£, À̸§°ø°£±îÁö Æ÷ÇÔÇÏ¿© ¸ðµç °ÍÀÌ °´Ã¼·Î Ç¥ÇöÇÕ´Ï´Ù. ±×¸®°í ´ëÀÔÀ» Æ÷ÇÔÇÑ ¸ðµç ÇàÀ§±îÁö ¸Þ½ÃÁö·Î Ç¥ÇöÇÕ´Ï´Ù. °´Ã¼´Â ½½·ÔÀ̶ó°í ºÒ¸®´Â 'Ű/°ª'½ÖÀÇ ¸ñ·Ï°ú ³»ºÎÀûÀ¸·Î °´Ã¼°¡ »ó¼Ó ¹ÞÀº °´Ã¼ÀÇ ¸ñ·ÏÀ» ÀúÀåÇÏ´Â protos¶ó ºÒ¸®´Â ¸ñ·ÏÀ¸·Î ÀÌ·ç¾îÁ® ÀÖ½À´Ï´Ù. ½½·ÔÀÇ Å°´Â ½Éº¼(symbol, À¯ÀÏÇÏ¸ç ºÒº¯ÀûÀÎ ½ÃÄö½º)ÀÌ¸ç °ªÀº ¸ðµç ÇüÅÂÀÇ °´Ã¼ÀÏ ¼ö ÀÖ½À´Ï´Ù. ageldama : ±âÁ¸ ClassBased °´Ã¼ÁöÇâ¾ð¾îµé¿¡ Àͼ÷ÇÑ »ç¶÷µé¿¡°Ô´Â ÀÌ»óÇØ º¸À̰ųª ºñÈ¿À²ÀûÀ̶ó°í »ý°¢ÇÒ¼öµµ ÀÖ½À´Ï´Ù. óÀ½À¸·Î "°´Ã¼¸¦ ¸¸µé±â À§Çؼ­´Â Ŭ·¡½º¸¦ ¿ì¼± ¸¸µé¾î¾ß ÇÑ´Ù"¶ó´Â ±âÁ¸»ó½Ä¿¡¼­ ¸¹ÀÌ ¹þ¾î³ª°í, "¾î°¼­ XXó·³ ±×³É Ŭ·¡½º¸¦ ¸¸µé¾î¼­ ÀνºÅϽº¸¦ ¸¸µé¸é ¾ÈµÇ´Â°¡?"¶ó´Â ¹°À½ÀÌ µÚµû¸¦°ÍÀÔ´Ï´Ù. ±âÁ¸ÀÇ °´Ã¼¸¦ ¸¸µå´Âµ¥ À־ Ŭ·¡½º¿Í °´Ã¼¿ÍÀÇ °¸À» ÁÙÀ̰í, Ŭ·¡½º¸¦ ¸¸µéµíÀÌ ¿øÇü °´Ã¼¸¦ ¸¸µé°í ±×°ÍÀ» º¹Á¦Çؼ­ »ç¿ëÇÏ¸é µË´Ï´Ù. ±×·¯ÇÑ ¾ð¾îµéÀÌ Á¦°øÇÏ´Â »ó¼ÓÀÇ °³³äº¸´Ù ÈξÀ À¯¿¬ÇÑ ¹æ¹ýÀ¸·Î »ó¼Ó°ú °°Àº È¿°ú¸¦ Á¦°øÇÏ´Â °ÍÀÌ protos ¸ñ·ÏÀÔ´Ï´Ù. ÀÌ´Â ÀÌÈÄ¿¡ ¼³¸íÇÒ ¸Þ½ÃÁöÀü´Þ°ú ÇÔ²² Á¶ÇÕÇÏ¿© °£´ÜÇϸ鼭µµ °­·ÂÇÑ °´Ã¼¸ðµ¨À» Á¦°øÇÕ´Ï´Ù.

clone¿Í init

»õ·Î¿î °´Ã¼´Â ±âÁ¸ °´Ã¼¸¦ º¹Á¦(cloning)ÇØ¼­ ¸¸µé¾î³À´Ï´Ù. cloneÀº »õ·Î¿î °´Ã¼ÀÇ protos ¸ñ·Ï¿¡ ºÎ¸ð °´Ã¼¸¦ Æ÷ÇÔÇÑ »õ·Î¿î ºó °´Ã¼¸¦ ¸¸µé¾î³À´Ï´Ù. »õ·Î¿î ÀνºÅϽº(instance)ÀÇ init ½½·ÔÀº »õ·Î¿î °´Ã¼¸¦ ÃʱâÈ­Çϱâ À§Çؼ­ Ȱ¼ºÈ­µÉ °ÍÀÔ´Ï´Ù. NewtonScript¿¡¼­Ã³·³ IoLanguage¿¡¼­ ½½·ÔÀº ´ëÀÔ°ú ÇÔ²² ¸¸µé¾îÁý´Ï´Ù.(CreateOnWrite)
 me := Person clone
 
ÀνºÅϽº¿¡ º¯¼ö³ª ¸Þ¼­µå¸¦ Ãß°¡ÇÏ·Á¸é °£´ÜÈ÷ ±×³É ´ëÀÔÇÏ¸é µË´Ï´Ù.:
 myDog name := "rover"
 myDog sit := method("I'm sitting" println)
 
°´Ã¼¸¦ º¹Á¦ÇÏ¸é »õ·Î¿î °´Ã¼ÀÇ init ½½·ÔÀÌ °´Ã¼¸¦ ÃʱâÈ­Çϱâ À§Çؼ­ Ȱ¼ºÈ­µË´Ï´Ù.

»ó¼Ó

°´Ã¼°¡ ÀûÀýÇÑ ½½·ÔÀ» ã´Â ¸Þ½ÃÁö¸¦ ¹Þ¾ÒÀ»¶§, ¼ö½Å°´Ã¼ Àڽſ¡°Ô´Â ÀÏÄ¡ÇÏ´Â °ÍÀÌ ¾øÀ» °æ¿ì¿¡´Â protos¸ñ·ÏÀÇ °´Ã¼µé¿¡ ´ëÇØ¼­ ±íÀ̿켱°Ë»öÀ» Àç±ÍÀûÀ¸·Î ¼öÇàÇÕ´Ï´Ù. ´Ù½Ã ¸»Çؼ­ °´Ã¼°¡ ¾î¶°ÇÑ ¸Þ¼­µå³ª ½½·ÔÀ» °®°í ÀÖÁö ¾Ê´õ¶óµµ ±× °´Ã¼ÀÇ ¿øº»°´Ã¼³ª protos ¸ñ·Ï¿¡ Ãß°¡ÇÑ °´Ã¼°¡ ±×·¯ÇÑ °ÍÀ» °®°í ÀÖ´Ù¸é ¸¶Ä¡ ¸Þ½ÃÁö¸¦ ¼ö½ÅÇÑ °´Ã¼°¡ À̸¦ »ó¼Ó ¹Þ´Â °Íó·³ ó¸®ÇÕ´Ï´Ù. ¶Ç´Â °´Ã¼ Àڽſ¡°Ô ÀÏÄ¡ÇÏ´Â ½½·ÔÀÌ ÀÖ´Ù¸é, ¶ÇÇÑ ±× ½½·ÔÀÇ °´Ã¼°¡ BlockÀ̳ª CFunctionŸÀÔ¿¡ ¼ÓÇϴ Ȱ¼º(activatable, ½ÇÇà)°¡´ÉÇÑ °´Ã¼¶ó¸é À̸¦ Ȱ¼ºÈ­ÇÕ´Ï´Ù. ȤÀº ´Ù¸¥ ŸÀÔÀ̶ó¸é ´Ü¼øÈ÷ ±× °´Ã¼¸¦ µÇµ¹¸³´Ï´Ù. IoLanguage¿¡´Â Àü¿ªº¯¼ö°¡ ¾øÀ¸¸ç, À̸§°ø°£¿¡¼­ ÃÖ»óÀ§ÀÇ °´Ã¼¸¦ Lobby¶ó°í ºÎ¸¨´Ï´Ù.(À̸¦ Àü¿ªÀ̸§°ø°£À¸·Î ÀÌ¿ëÇÕ´Ï´Ù.) Ŭ·¡½º°¡ ¾ø±â ¶§¹®¿¡ ¼­ºêŬ·¡½º(subclass)¿Í ÀνºÅϽº°£ÀÇ ¾î¶°ÇÑ Â÷À̵µ ¾ø½À´Ï´Ù. ´ÙÀ½Àº »õ·Î¿î ¼­ºêŬ·¡½º¸¦ ¸¸µå´Â ÄÚµåÀÔ´Ï´Ù.:
 Io> Dog := Object clone
 ...
 
À§ÀÇ ÄÚµå´Â LobbyÀÇ "Dog"¶ó´Â ½½·ÔÀ» Object°´Ã¼ÀÇ º¹Á¦·Î ¼³Á¤ÇÕ´Ï´Ù. ÀÌ·¸°Ô¸¸ ÇÑ´Ù¸é Dog°´Ã¼ÀÇ protos ¸ñ·Ï¿¡´Â ¿ÀÁ÷ Object°´Ã¼¸¸ÀÌ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. DogÀº ÀÌÁ¦ ¼ø¼öÇÏ°Ô ObjectÀÇ ¼­ºêŬ·¡½ºÀÔ´Ï´Ù. ÀνºÅϽºº¯¼ö¿Í ¸Þ¼­µåµéÀº protos¸ñ·ÏÀÇ °´Ã¼µé·ÎºÎÅÍ »ó¼ÓÀ» ¹Þ½À´Ï´Ù. ½½·ÔÀ» ¼³Á¤Çϸé protos¿¡ ¼ÓÇÑ °´Ã¼¸¦ ¼öÁ¤ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ´ë»ó °´Ã¼¸¸À» ¼öÁ¤ÇÕ´Ï´Ù.
 Io> Dog color := "red"
 Io> Dog
 ==> Object_0x4a7c0:
  color := "red"
  ...
 


´ÙÁß»ó¼Ó

protos ¸ñ·Ï¿¡ ¾ó¸¶µçÁö ´Ù¸¥ °´Ã¼¸¦ Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù. À̸¦ ÅëÇØ¼­ ´Ù¸¥ °´Ã¼µéÀ» ºÎ¸ðó·³ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¸°Ô ÇÏ´õ¶óµµ ¸Þ½ÃÁö¿¡ ÀÀ´äÇϱâ À§Çؼ­ ½½·ÔÀ» °Ë»öÇÒ ¶§ ±íÀ̿켱°Ë»öÀ» ProtoChain¿¡ ´ëÇØ¼­ ¼öÇàÇÕ´Ï´Ù.


¸Þ¼­µå

¸Þ¼­µå(method)Àº È£Ãâ½Ã¿¡ °¢±â ´Ù¸¥ Áö¿ªÀ̸§°ø°£À» À§ÇÑ °´Ã¼¸¦ ¸¸µé°í ¸Þ½ÃÁöÀÇ ¼ö½Å°´Ã¼¸¦ ÂüÁ¶ÇÏ´Â self ½½·ÔÀ» ÀÌ¿¡ ÇÒ´çÇÏ´Â À͸íÇÔ¼ö(AnonymousFunction)ÀÔ´Ï´Ù. ObjectÀÇ method()¸Þ¼­µå¸¦ »ç¿ëÇØ »õ·Î¿î ¸Þ¼­µå¸¦ ¸¸µé ¼ö ÀÖ½À´Ï´Ù.:
 method((2+2) print)
 
°´Ã¼¿Í ¿¬°üµÈ ¸Þ¼­µå¸¦ ¸¸µé·Á¸é ´Ü¼øÈ÷ ¸Þ¼­µå °´Ã¼¸¦ °´Ã¼ÀÇ ½½·Ô¿¡ ¹èÁ¤ÇÏ¸é µË´Ï´Ù.:
 Dog := Object clone
 Dog bark := method("woof!" print)
 
À§ÀÇ ÄÚµå´Â »õ·Î¿î ¼­ºêŬ·¡½º¸¦ ¸¸µé°í »õ·Î¿î Ŭ·¡½ºÀÇ "bark" ½½·Ô¿¡ "woof!"À» Ãâ·ÂÇÏ´Â ¸Þ¼­µå¸¦ ´ëÀÔÇÑ °ÍÀÔ´Ï´Ù. À̸¦ »ç¿ëÇÏ·Á¸é ´ÙÀ½Ã³·³ ÇÏ¸é µË´Ï´Ù.:
 Io> Dog bark
 ...
 Io> poochi = Dog clone
 Io> poochi bark
 ...
 
¸Þ¼­µåÀÇ ±âº» µÇµ¹¸²°ªÀº ¸Ç ¸¶Áö¸·À¸·Î Æò°¡ÇÑ Ç¥Çö½ÄÀÇ °á°ú°ªÀÔ´Ï´Ù.

ÀÎÀÚ

¸Þ¼­µå°¡ ÀÎÀÚ¸¦ ³Ñ°Ü¹Þµµ·Ï Á¤ÀÇÇÏ·Á¸é ´ÙÀ½Ã³·³ ÇÕ´Ï´Ù.:
 add := method(a, b, a + b)
 
ÀϹÝÀûÀÎ Çü½ÄÀº ´ÙÀ½°ú °°½À´Ï´Ù.:
 method(<arg name 0>, <arg name 1>, ..., <do message>)
 
¸Ç ¸¶Áö¸·ÀÇ ÀÎÀÚ´Â ¼±ÅÃÀûÀ¸·Î ¸Þ¼­µå¿¡ ³Ñ°ÜÁÙ ÄÚµåºí·° °´Ã¼¸¦ À§ÇÑ ÀÎÀÚÀÏ ¼ö ÀÖ½À´Ï´Ù.

ºí·°

ºí·°(blocks)Àº ¸Þ¼­µå¿Í À¯»çÇÏÁö¸¸, LexicallyScopedÀÌ¸ç ±× ÇØ´ç½½·Ô¿¡ Á¢±ÙÇÒ ¶§ ÀÚµ¿ÀûÀ¸·Î Ȱ¼ºÈ­µÇÁö ¾Ê´Â´Ù´Â Á¡¿¡¼­ ´Ù¸¨´Ï´Ù.(Ȱ¼ºÈ­Çϱâ À§Çؼ­´Â call¸Þ¼­µå¸¦ »ç¿ëÇÕ´Ï´Ù.) LexicallyScoped¶õ °ÍÀº ºí·°ÀÌ ½ÇÇàµÉ ¶§ ½½·Ô¿¡ ´ëÇÑ °Ë»öÀÌ ºí·ÏÀÌ »ý¼ºµÈ ¹®¸Æ¿¡¼­ °è¼ÓµÈ´Ù´Â °ÍÀÌÁö ºí·°ÀÌ ½ÇÇàµÇ´Â ¹®¸Æ¿¡¼­ °è¼ÓµÈ´Ù´Â °ÍÀÌ ¾Æ´Ï¶ó´Â ¶æÀÔ´Ï´Ù. ºí·°Àº ObjectÀÇ block() ¸Þ¼­µå¸¦ »ç¿ëÇØ¼­ ¸¸µì´Ï´Ù.:
 b := block(a, a*2)
 b call(1)
 
´Ù½Ã LexicallyScoped¿¡ ´ëÇØ¼­ ¼³¸íÇÏ¸é ´ÙÀ½°ú °°½À´Ï´Ù.:
 m := 2
 b := block(a, a*m)

 Foo := Object clone
 Foo m := 3
 Foo b := b

 Foo b call(1) println
 
À§ÀÇ Äڵ忡¼­ Foo°´Ã¼´Â m½½·ÔÀ» °®°í ÀÖÁö¸¸ ÀÌ ½½·ÔÀ» »ç¿ëÇÏÁö ¾Ê°í ºí·°ÀÌ ¸¸µé¾îÁø À̸§°ø°£ÀÇ m ½½·ÔÀ» »ç¿ëÇÏ´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ´ÙÀ½Àº ¸Þ¼­µå¸¦ ÀÌ¿ëÇØ¼­ À̸¦ ±¸ÇöÇÏ¿´½À´Ï´Ù. ÂüÁ¶ÇÏ´Â ´ë»óÀÌ ÀüÇô ´Ù¸¨´Ï´Ù.:
 v := 2

 Foo := Object clone
 Foo v := 3
 Foo m := method(n, n * v)

 Foo m(1) println
 


Blocks vs. Methods

ÃæºÐÈ÷ È¥¶õÀÇ ¿©Áö°¡ Àֱ⠶§¹®¿¡ ºí·°°ú ¸Þ¼­µåÀÇ ¼¼ºÎÀûÀÎ »çÇ׿¡ ´ëÇØ¼­ ¼³¸íÇÏ°í ³Ñ¾î°¡µµ·Ï ÇϰڽÀ´Ï´Ù. ¸Þ¼­µå¿Í ºí·°Àº µÑ ´Ù Ȱ¼ºÈ­µÉ ¶§¿¡ °¢°¢ÀÇ Áö¿ªº¯¼ö¸¦ ÀúÀåÇϱâ À§ÇÑ °´Ã¼¸¦ »ý¼ºÇÕ´Ï´Ù. µÑÀÇ Â÷ÀÌÁ¡Àº Áö¿ª°ø°£¿¡ ¼³Á¤µÇ´Â "protos"¿Í "self"½½·Ô¿¡ ÀÖ½À´Ï´Ù. ¸Þ¼­µå¿¡¼­´Â ÀÌ ½½·ÔµéÀÌ ¸Þ½ÃÁöÀÇ ´ë»ó°´Ã¼(¼ö½Å°´Ã¼)·Î ¼³Á¤µË´Ï´Ù. ºí·°¿¡¼­´Â À̵éÀÌ ºí·°ÀÌ Ã³À½ »ý¼ºµÈ Áö¿ª°ø°£°´Ã¼¸¦ ÂüÁ¶Çϵµ·Ï ¼³Á¤ÀÌ µË´Ï´Ù. ±×·¯¹Ç·Î ºí·°¿¡¼­ ½½·Ô ã±â°¡ ½ÇÆÐÇÏ¸é ºí·°ÀÌ »ý¼ºµÈ À̸§°ø°£¿¡ ´ëÇØ¼­ °Ë»öÀ» °è¼ÓÇÕ´Ï´Ù. ¸Þ¼­µå¿¡ À־´Â À̰ÍÀÌ ¸Þ¼­µå°¡ »ý¼ºµÈ À̸§°ø°£ÀÌ ¾Æ´Ï¶ó ¸Þ¼­µå°¡ Æ÷ÇÔµÈ °´Ã¼¿¡ ´ëÇØ¼­ °è¼ÓÇØ¼­ °Ë»öÀ» ÁøÇàÇÕ´Ï´Ù.

call, self ½½·Ô
"locals" °´Ã¼°¡ »ý¼ºµÇ¸é ÀÌ °´Ã¼ÀÇ "self" ½½·ÔÀÌ ¼³Á¤µË´Ï´Ù.(¸Þ¼­µåÀÇ °æ¿ì¿¡´Â ¸Þ½ÃÁöÀÇ ¼ö½ÅÀÚ, ºí·°ÀÇ °æ¿ì¿¡´Â »ý¼ºµÈ ¹®¸ÆÀ¸·Î) ±×¸®°í "call" ½½·ÔÀº ´ÙÀ½ÀÇ ½½·ÔµéÀ» Æ÷ÇÔÇÏ´Â °´Ã¼·Î ¼³Á¤À̵˴ϴÙ.
slot references
sender locals object of caller
message message used to call this method/block
activated this activated method/block
slotContext context in which slot was found
target current object

°¡º¯±æÀÌÀÎÀÚ

"call message" ½½·ÔÀº Æò°¡µÇÁö ¾ÊÀº ÀÎÀÚµéÀ» Á¢±ÙÇϱâ À§ÇØ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¾î, IoLanguage¿¡¼­ if()ÀÇ ±¸ÇöÀ» º¸¸é:
 myif := method(
    (call sender doMessage(call message argAt(0))) ifTrue(
     call sender doMessage(call message argAt(1))) ifFalse(
     call sender doMessage(call message argAt(2))))
 myif(foo == bar, write("true\n"), write("false\n"))
 
doMessage()¸Þ¼­µå´Â ¼ö½ÅÀÚÀÇ ¹®¸Æ¿¡¼­ ÀÎÀÚ¸¦ Æò°¡ÇÕ´Ï´Ù. À̸¦ ª°Ô Ç¥ÇöÇϸé call°´Ã¼ÀÇ evalArgAt()¸Þ¼­µå¸¦ ÀÌ¿ëÇÏ¸é µË´Ï´Ù.:
 myif := method(
    call evalArgAt(0) ifTrue(
    call evalArgAt(1)) ifFalse(
    call evalArgAt(2)))
 myif(foo == bar, write("true\n"), write("false\n"))
 


forward

¸¸ÀÏ °´Ã¼°¡ ¾î¶² ¸Þ½ÃÁö¿¡ ´ëÇØ¼­ ÀÀ´äÇÒ ¼ö ¾øÀ»¶§´Â "forward" ¸Þ¼­µå°¡ ÀÖ´Ù¸é À̸¦ È£ÃâÇÕ´Ï´Ù. ´ÙÀ½Àº ½½·Ô¿¡ ´ëÇÑ °Ë»öÀÌ ½ÇÆÐÇßÀ»¶§ ÀÌ ¸Þ½ÃÁö¿¡ ´ëÇÑ Á¤º¸¸¦ Ãâ·ÂÇÏ´Â ¿¹ÀÔ´Ï´Ù.:
 MyObject forward := method(
    write("sender = ", call sender, "\n")
    write("message name = ", call message name, "\n")
    args := call message argsEvaluatedIn(call sender)
    args foreach(i, v, write("arg", i, " = ", v, "\n") ))
 


resend

"self"ÀÇ ¹®¸Æ¿¡¼­ ÇöÀçÀÇ ¸Þ½ÃÁö¸¦ ¼ö½ÅÀÚÀÇ "proto"·Î ´Ù½Ã º¸³»·Á¸é:
 A := Object clone
 A m := method("in A" println)
 B := A clone
 B m := method("in B" println; resend)
 B m
 
ÀÌ´Â °°Àº ¸Þ½ÃÁö¸¦ ÀçÀü´ÞÇϰíÀÚ ÇÒ ¶§ »ç¿ëÇϸç, ´Ù¸¥ ¸Þ½ÃÁö¸¦ Àü´ÞÇϰíÀÚ ÇÒ¶§¿¡´Â "super" ½½·ÔÀ» ÀÌ¿ëÇÕ´Ï´Ù.

super

°´Ã¼ÀÇ "proto"¿¡ ´ëÇØ¼­ ¸Þ½ÃÁö¸¦ Á÷Á¢ º¸³»°í ½ÍÀ»¶§¿¡´Â "super"À» ÀÌ¿ëÇÕ´Ï´Ù.:
{{{
 Dog := Object clone
 Dog bark := method("woof!" println)

 fido := Dog clone
 fido bark := method("ruf!" println; super(bark))

=== Introspection ===
 ´ÙÀ½ ¸Þ¼­µåµéÀ» ÀÌ¿ëÇØ¼­ ¸ðµç °´Ã¼µé¿¡ ´ëÇØ introspect ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ ½ÇÇà½Ã°£¿¡ °´Ã¼ÀÇ ¸ðµç ¼Ó¼ºÀ» ¼öÁ¤ÇÒ¼öµµ ÀÖ½À´Ï´Ù.

==== slotNames ====
 "slotNames" ¸Þ¼­µå´Â °´Ã¼ÀÇ ¸ðµç ½½·ÔÀÇ À̸§¸ñ·ÏÀ» µÇµ¹¸³´Ï´Ù.:
 {{{
 Io> Dog slotNames
 ==> list("bark")
 }}}

==== protos ====
 "protos" ¸Þ¼­µå´Â °´Ã¼°¡ »ó¼ÓÇÏ´Â °´Ã¼µéÀÇ ¸ñ·ÏÀ» µÇµ¹¸³´Ï´Ù.:
 {{{
 Io> Dog protos
 ==> list("Object")
 }}}

==== getSlot ====
 "getSlot" ¸Þ¼­µå´Â °´Ã¼ÀÇ ½½·ÔÀ» Ȱ¼ºÈ­ÇÏÁö ¾Ê°í¼­ ½½·ÔÀÇ °ªÀ» Á¢±ÙÇÏ·Á°í ÇÒ ¶§ »ç¿ëÇÕ´Ï´Ù.:
 {{{
 myMethod := Dog getSlot("bark")
 }}}
 À§ Äڵ忡¼­ "locals"ÀÇ "myMethod" ½½·ÔÀ» "bark"¸Þ¼­µå·Î ¼³Á¤Çß½À´Ï´Ù.(À̶§ "bark"¸Þ¼­µå¸¦ Ȱ¼ºÈ­ÇÏÁö ¾Ê¾ÒÀ½À» ¸í½ÉÇϼ¼¿ä.)
 {{{
 otherObject newMethod := getSlot("myMethod")
 }}}
 ÀÌ·¸°Ô ÇÑ´Ù¸é "getSlot"ÀÇ ´ë»óÀº "locals" °´Ã¼À̰í, ÀÌ·¸°Ô "myMethod" ½½·ÔÀ» Ȱ¼ºÈ­ÇÏÁö ¾Ê°í ¾ò¾î¼­ ±× °´Ã¼¸¦ ´Ù¸¥ °´Ã¼ÀÇ ½½·Ô¿¡ ´ëÀÔÇÏ¿© ¸Þ¼­µå¸¸À» º¹»çÇÒ ¼ö ÀÖ½À´Ï´Ù.

==== code ====
 ¸Þ¼­µåÀÇ ÀÎÀÚµé°ú Ç¥Çö½ÄÀº introspection¿¡ ´ëÇØ °³¹æµÇ¾î ÀÖ½À´Ï´Ù. "code" ¸Þ¼­µå´Â ¸Þ¼­µåÀÇ ¼Ò½ºÄڵ带 ¹®ÀÚ¿­·Î µÇµ¹·ÁÁÝ´Ï´Ù.:
 {{{
 Io> method(a, a*2) code
 ==> "method(a,a*(2))"
 }}}

----

== Á¦¾î±¸Á¶ ==

=== true, false, nil ===
 IoLanguageÀº true, false, nil¿¡ ´ëÇØ¼­ ¹Ì¸® Á¤ÀÇµÈ singletonÀ» Á¦°øÇÕ´Ï´Ù. "true", "false"Àº °¢°¢ ºÒ¸®¾ðÁø¸®°ªÀ» ³ªÅ¸³»¸ç "nil"Àº ÀϹÝÀûÀ¸·Î ¼³Á¤µÇÁö¾ÊÀ½(unset)À̳ª °¡¿ëÇÏÁö¾ÊÀº°ª(unavailable value)À» ³ªÅ¸³À´Ï´Ù.
 ¶ÇÇÑ ÀÌ·¯ÇÑ °ªµéÀº Ç¥½ÄÀ¸·Î¼­ÀÇ ±â´É À̿ܿ¡µµ °´Ã¼·Î¼­ ±×µé°ú ¿¬°üµÇ¾î Á¶°Ç½Ä°ú °°Àº Á¦¾î±¸Á¶¸¦ ¸¸µé ¼ö ÀÖµµ·Ï ÇØÁÝ´Ï´Ù. (SmalltalkLanguage ½ºÅ¸ÀÏÀÇ Á¦¾î±¸¹®...)

=== ºñ±³ ===
 Ç¥Áغñ±³¿¬»ê(`==`, `!=`, `>=`, `<=`, `>`, `<`)Àº true ȤÀº falseÀ» µÇµ¹¸³´Ï´Ù.
 {{{
 Io> 1 < 2
 ==> true
 }}}

=== Á¶°Ç½Ä ===
==== if ====
 "Lobby"Àº Á¶°Ç½Ä°ú ·çÇÁ¸¦ À§ÇÑ ¸Þ¼­µåµéÀ» Æ÷ÇÔÇϰí ÀÖ½À´Ï´Ù. Á¶°Ç½ÄÀº ´ÙÀ½°ú °°½À´Ï´Ù.:
 {{{
 if(<Á¶°Ç½Ä>, <then-¸Þ½ÃÁö>, <else-¸Þ½ÃÁö>)
 }}}
 ¿¹¸¦ µé¾î:
 {{{
 if(a == 10, "a is 10" println)
 }}}
 "else"ÀÎÀÚ´Â ¼±ÅÃÀûÀÔ´Ï´Ù. Á¶°Ç½ÄÀÌ "false"³ª "nil"·Î¼­ Æò°¡µÇ¸é ÀÌ´Â ÂüÀÌ ¾Æ´Ñ, °ÅÁþÀ¸·Î ÆÇ´ÜÇÕ´Ï´Ù. ¶ÇÇÑ Æò°¡µÈ ¸Þ½ÃÁöÀÇ °á°ú¸¦ µÇµ¹¸®¹Ç·Î ´ÙÀ½Àº:
 {{{
 if(y < 10, x := y, x := 0)
 }}}
 ´ÙÀ½°ú °°½À´Ï´Ù.:
 {{{
 x := if(y < 10, y, 0)
 }}}
 Á¶°ÇÁ¦¾î´Â ´ÙÀ½°ú °°ÀÌ ¾µ¼öµµ ÀÖ½À´Ï´Ù.(¼º´ÉÀº ´õ ¶³¾îÁöÁö¸¸):
 {{{
 if(y < 10) then(x := y) else(x := 2)
 ...
 if(y < 10) then(x := y) elseif(y==11) then(x := 0) else(x := 2)
 }}}
 ¶ÇÇÑ SmalltalkLanguage ½ºÅ¸ÀÏÀÇ "ifTrue", "ifFalse", "ifNil", "ifNonNil" ¸Þ¼­µåµµ ÀÖ½À´Ï´Ù.:
 {{{
 (y < 10) ifTrue(x := y) ifFalse(x := 2)
 }}}
 À§¿¡¼­ Á¶°Ç½ÄÀº ¹Ýµå½Ã °ýÈ£·Î µÑ·¯ÃÄ¾ß ÇÕ´Ï´Ù. ;-)

=== ·çÇÁ ===
==== loop ====
 "loop" ¸Þ¼­µå´Â '''¹«ÇÑ·çÇÁ'''¸¦ ±¸¼ºÇϴµ¥ »ç¿ëÇÕ´Ï´Ù.:
 {{{
 loop("foo" println)
 }}}

==== while ====
 Á¶°ÇÁ¦¾îó·³ ·çÇÁµé ¶ÇÇÑ ¸Þ½ÃÁöÀÔ´Ï´Ù. "while()"Àº ´ÙÀ½ÀÇ ÀÎÀÚµéÀ» ¿ä±¸ÇÕ´Ï´Ù.:
 {{{
 while(<Á¶°Ç½Ä>, <do-¸Þ½ÃÁö>)
 }}}
 ¿¹¸¦ µé¾î:
 {{{
 a := 1
 while(a < 10,
  a print
  a = a + 1)
 }}}

==== for ====
 "for"Àº 4°³ÀÇ ÀÎÀÚ¸¦ ÇÊ¿ä·Î ÇÕ´Ï´Ù.:
 {{{
 for(<counter>, <start>, <end>, <do-message>)
 }}}
 "start", "end" ¸Þ½ÃÁö´Â ¿ÀÁ÷ ·çÇÁ°¡ ½ÃÀ۵ɶ§ Çѹø¸¸ Æò°¡µË´Ï´Ù.:
 {{{
 for(a, 0, 10, a println)
 }}}
 ¿ª¼øÀ¸·Î ·çÇÁ¸¦ µ¹¸®·Á¸é ±×³É "start", "end"ÀÇ À§Ä¡¸¦ ¹Ù²ãÁÖ¸é µË´Ï´Ù.:
 {{{
 for(a, 10, 0, a println)
 }}}
 '''ÁÖÀÇ''': "start", "end"Àº ¸ðµÎ ·çÇÁ¿¡ Æ÷ÇÔÀÌ µË´Ï´Ù. ´Ù½Ã ¸»Çؼ­ ´Ù¸¥ ¾ð¾î¿¡¼­ ·çÇÁ¸¦ ±¸¼ºÇϵíÀÌ 0¿¡¼­ 10±îÁö ·çÇÁ¸¦ µ¹¸°´Ù¸é ½ÇÁ¦·Î 11¹ø ·çÇÁ¸¦ ½ÇÇàÇÒ°ÍÀÔ´Ï´Ù.

==== repeat ====
 "Number"ÀÇ "repeat" ¸Þ¼­µå´Â ±× ¼ýÀÚ¸¸Å­ ¹Ýº¹Çؼ­ ·çÇÁ¸¦ ½ÇÇàÇϰíÀÚ ÇÒ ¶§ À¯¿ëÇÕ´Ï´Ù.("counter"Àº Á¦°øÀÌ ¾ÈµË´Ï´Ù.):
 {{{
 3 repeat("foo" println)
 }}}

==== break, continue ====
 È帧Á¦¾îÀÛ¾÷À» Áß´Ü("break")Çϰųª ´ÙÀ½À¸·Î ¶Ù¾î³Ñ±â("continue") ÇÒ ¼ö ÀÖ½À´Ï´Ù.:
 {{{
 for(i, 1, 10,
  if(i==3, continue)
  if(i==7, break)
  i print)
 }}}
 °á°ú´Â...:
 {{{
 12456
 }}}

==== return ====
 "return" ¸Þ¼­µå¸¦ »ç¿ëÇØ¼­ ºí·°ÀÇ ¾î¶² ºÎºÐ¿¡¼­µµ ¹Ù·Î °ªÀ» µÇµ¹¸®¸ç ½ÇÇàÀ» µÇµ¹¸± ¼ö ÀÖ½À´Ï´Ù.:
 {{{
 Io> test := method(123 print; return "abc"; 456 print)
 Io> test
 123
 ==> "abc"
 }}}

=== Importing ===
 "Importer" ÇÁ·ÎÅä´Â IoLanguageÀÇ ³»Àå AutoImporter±â´ÉÀ» ±¸ÇöÇÕ´Ï´Ù. °¢°¢ÀÇ ÇÁ·ÎÅäµéÀ» ÆÄÀÏ¿¡ ³Ö°í, ÆÄÀÏÀ̸§Àº ÇÁ·ÎÅä¿Í °°Àº À̸§ÀÇ ".io"È®ÀåÀÚ·Î ÀúÀåÇϸé, "Importer"°¡ ÀÚµ¿À¸·Î ÇØ´ç ÇÁ·ÎÅä°¡ ÇÊ¿äÇÒ¶§¿¡ ÆÄÀÏÀ» ·ÎµùÇÒ °ÍÀÔ´Ï´Ù. ImpoterÀÇ ±âº»°Ë»ö°æ·Î´Â ÇöÀç ÀÛ¾÷µð·ºÅ丮À̸ç, "appendSearchPath()" ¸Þ¼­µå¸¦ ÀÌ¿ëÇÏ¿© Ãß°¡ÇÒ ¼ö ÀÖ½À´Ï´Ù.

----

== µ¿½Ã¼º ==

=== Coroutine ===
 IoLanguageÀº ¼±Á¡ÀûÀÎ OS¼öÁØ ½º·¹µå(preemptive OS level threads) ´ë½Å¿¡ CoRoutine(user-level cooperative threads)À» »ç¿ëÇÕ´Ï´Ù. ÀÌ´Â NativeThreadÀ» ÀÌ¿ëÇÔ¿¡ À־ Ãß°¡ÀûÀÎ ºñ¿ë(¸Þ¸ð¸®, ½Ã½ºÅÛÄÝ, locking, ij½³¹®Á¦...)µîÀ» ¾ø¾Ö°í ¼ö¸¹Àº Ȱ¼º½º·¹µå¿¡ ´ëÇØ¼­ °í¼öÁØÀÇ µ¿½Ã¼º(concurrency)À» °¡´ÉÇÏ°Ô ÇÕ´Ï´Ù.

=== Scheduler ===
 "Scheduler" °´Ã¼´Â "yielding"ÁßÀÎ CoRoutineÀ» °è¼ÓÇϵµ·Ï Çϴ°Ϳ¡ Ã¥ÀÓÀÌ ÀÖ½À´Ï´Ù. ÇöÀçÀÇ ½ºÄÉÁ층½Ã½ºÅÛÀº ´Ü¼øÈ÷ ¿ì¼±¼øÀ§ ¾ø´Â FirstInFirstOut Á¤Ã¥À» »ç¿ëÇÕ´Ï´Ù.

=== Actors ===
 "actor"Àº ½º·¹µå¸¦ °®´Â °´Ã¼¸¦ ¸»ÇÕ´Ï´Ù.(ÀÌ °æ¿ì¿¡´Â coroutine) ÀÌ´Â ºñµ¿±â¸Þ½ÃÁö(asynchronous message)µéÀ» À§ÇÑ Å¥(queue)¸¦ °ü¸®ÇÕ´Ï´Ù. IoLanguageÀÇ ¸ðµç °´Ã¼´Â "@"À̳ª "@@"À» ¸Þ½ÃÁö À̸§ ¾Õ¿¡ ºÙ¿©¼­ ºñµ¿±â¸Þ½ÃÁö·Î¼­ º¸³¾ ¼ö ÀÖ½À´Ï´Ù.("@"ÀÇ "a"À» "asynchronous"·Î »ý°¢Çغ¸¼¼¿ä)
 {{{
 result := self foo // synchronous
 futureResult := self @foo // async. Áï½Ã ¸®ÅÏÇÏÁö¸¸ ¸®ÅϰªÀÇ Å¸ÀÔÀº Future
 self @@foo // async. Áï½Ã nilÀ» ¸®ÅÏ.
 }}}
 °´Ã¼°¡ ºñµ¿±â¸Þ½ÃÁö¸¦ ¹ÞÀ¸¸é °¢°¢ÀÇ Å¥¿¡ ¸Þ½ÃÁö¸¦ ³Ö½À´Ï´Ù. ¸¸ÀÏ Å¥¿¡ ¸Þ½ÃÁö°¡ Çϳªµµ ¾ø¾ú´Ù¸é ¹Ù·Î ¸Þ½ÃÁö¸¦ ó¸®ÇÕ´Ï´Ù. Å¥¿¡ ³ÖÀº ¸Þ½ÃÁö´Â FirstInFirstOut ¼ø¼­¿¡ ÀÇÇØ¼­ Â÷·Ê´ë·Î 󸮵˴ϴÙ. Á¦¾î±ÇÀ» ´Ù¸¥ CoRoutineÀ¸·Î ³Ñ±â·Á¸é "yield"À» »ç¿ëÇÕ´Ï´Ù.:
 {{{
 obj1 := Object clone
 obj1 test := method(for(n, 1, 3, n print; yield))
 obj2 := obj1 clone
 obj1 @@test; obj2 @@test
 while(Scheduler activeActorCount > 1, yield)
 }}}
 Ãâ·ÂÀº "112233"ÀÌ µË´Ï´Ù. ´ÙÀ½Àº Á» ´õ ½ÇÁ¦ÀûÀÎ ¿¹Á¦ÀÔ´Ï´Ù.:
 {{{
 HttpServer handleRequest := method(aSocket,
  HttpRequestHandler clone @@handleRequest(aSocket))
 }}}

=== yield ===
 °´Ã¼´Â ´Ù¸¥ °´Ã¼¿Í ºñµ¿±â¸Þ½ÃÁö¸¦ ó¸®Çϱâ À§ÇØ ÀÚµ¿ÀûÀ¸·Î "yield"ÇÕ´Ï´Ù. "yield"¸Þ¼­µå´Â ¿ÀÁ÷ ºñµ¿±â¸Þ½ÃÁöÀÇ ½ÇÇà µµÁß¿¡¸¸ È£ÃâÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.

=== ÀϽÃÁ¤Áö, °è¼Ó ===
 °´Ã¼¸¦ ÀϽÃÁ¤Áö(pause) Çß´Ù°¡ ´Ù½Ã °è¼Ó(resume) ÇÒ ¼ö ÀÖ½À´Ï´Ù. "Object" primitiveÀÇ µ¿½Ã¼º(concurrency)°ü·Ã ¸Þ¼­µåµéÀ» »ìÆìº¸¼¼¿ä. :-<

=== Future ===
 IoLanguageÀÇ "futures"Àº Åõ¸íÇÕ´Ï´Ù. ÀÌ´Â °á°ú°¡ ÁغñµÇ¸é °á°ú°ªÀ¸·Î ¹Ù²ò´Ï´Ù. ¸¸ÀÏ ¸Þ½ÃÁö°¡ "future"¿¡ ´ëÇØ¼­ º¸³»Áö¸¸(2°³ÀÇ ¸Þ¼­µå¸¦ ±¸ÇöÇϰí ÀÖ½À´Ï´Ù), ¸Þ½ÃÁö¸¦ 󸮰¡ ³¡³ª°í °á°ú°¡ ³ª¿Ã¶§±îÁö ±â´Ù¸³´Ï´Ù. Åõ¸íÇÑ "future"Àº ÇÁ·Î±×·¥ÀÇ ºí·Ï(blocking)µÈ »óŸ¦ ÃÖ¼ÒÈ­ÇØÁÖ¸ç, ÇÁ·Î±×·¡¸Ó¸¦ µ¿±âÈ­ÀÇ ¼¼ºÎÀûÀÎ ºÎºÐÀ¸·ÎºÎÅÍ ÀÚÀ¯·Ó°Ô ÇØÁÖ´Â °­·ÂÇÔÀ» Á¦°øÇÕ´Ï´Ù.

=== AutoDeadlockDetection ===
 "future"À» »ç¿ëÇϴµ¥ ¶Ç ´Ù¸¥ ÀåÁ¡Àº "future"°¡ "wait"ÇÒ Çʿ䰡 ÀÖÀ»¶§, °á°ú°¡ ±³Âø(deadlock)À¸·Î À̲øÁö ¾Æ´ÒÁö¸¦ °Ë»çÇÒ ¼ö ÀÖ´Ù´Â °ÍÀ̸ç, À̸¦ ÅëÇØ¼­ ±³Âø»óŸ¦ ¿¹¹æÇÏ°í ¿¹¿Ü¸¦ ¹ß»ý½Ãŵ´Ï´Ù. ÀÌ´Â °ü·ÃµÈ "future"µé¿¡ ´ëÇØ¼­ ¼øÈ¸ÇÔÀ¸·Î¼­ ±¸ÇöµË´Ï´Ù.

=== @, @@ ¿¬»êÀÚ ===
 "@", "@@"À» ÀϹÝÀûÀÎ ¸Þ½ÃÁöÀÇ ¾Õ¿¡ ºÙ¿©ÁÖ¸é À̸¦ ¿¬»êÀڷμ­ ÀÛ¿ëÇÕ´Ï´Ù.:
 {{{
 self @test
 }}}
 ...Àº ÆÄ½ÌµÇ¸é ´ÙÀ½°ú °°½À´Ï´Ù.:
 {{{
 self @(test)
 }}}
----

== ¿¹¿Ü ==

=== raise ===
 ¿¹¿Ü¸¦ ´øÁö·Á¸é "raise()"À» "exception" ÇÁ·ÎÅä¿¡ ´ëÇØ¼­ È£ÃâÇÏ¸é µË´Ï´Ù.:
 {{{
 exceptionProto raise(<description>)
 }}}
 "Exception" ÇÁ·ÎÅäÀÇ ÀÚ½ÄÀ¸·Î¼­ ¹Ì¸® Á¤ÀÇµÈ 3°³ÀÇ ÇÁ·ÎÅä°¡ ÀÖ½À´Ï´Ù.: "Error", "Warning", "Notification":
 {{{
 Exception raise("generic foo exception")
 Warning raise("No defaults found, creating them")
 Error raise("Not enough memory")
 }}}

=== try, catch ===
 ¿¹¿Ü¸¦ Àâ±â À§Çؼ­´Â "Object" ÇÁ·ÎÅäÀÇ "try()"¸Þ¼­µå¸¦ »ç¿ëÇÕ´Ï´Ù. "try()"Àº ±× ¾È¿¡¼­ ÀϾ ¿¹¿Ü¸¦ Àâ¾Æ¼­ ¿¹¿Ü¸¦ µÇµ¹¸®°Å³ª ¿¹¿Ü°¡ ¾ø¾ú´Ù¸é "nil"À» µÇµ¹¸³´Ï´Ù.:
 {{{
 e := try(<doMessage>)
 }}}
 ÀÌ·¸°Ô ÀâÀº ¿¹¿Ü¸¦ ó¸®ÇÏ·Á¸é "Exception"ÀÇ "catch()"¸Þ¼­µå¸¦ »ç¿ëÇÕ´Ï´Ù.:
 {{{
 e := try(
  //...
 )
 e catch(Exception, (e coroutine backtraceString) println)
 }}}
 "catch"ÀÇ Ã¹¹øÂ° ÀÎÀÚ´Â ÀâÀ» ¿¹¿ÜÀÇ Å¸ÀÔÀ» ³ªÅ¸³»°í, µÎ¹øÂ°´Â ±×¿¡ ´ëÇÑ Ã³¸®ºí·°ÀÔ´Ï´Ù. ¸¸ÀÏ "catch()"¿¡ ÀÏÄ¡ÇÏ´Â °ÍÀÌ Çϳªµµ ¾ø´Ù¸é ¿¹¿Ü¸¦ µÇµ¹¸®°í, ÀÖ¾ú´Ù¸é "nil"À» µÇµ¹¸³´Ï´Ù.

=== pass ===
 "try()"¿¡ ÀÇÇØ¼­ ÀâÀº ¿¹¿Ü¸¦ ´Ù½Ã ´øÁö±â À§Çؼ­´Â "pass" ¸Þ¼­µå¸¦ »ç¿ëÇÕ´Ï´Ù. ÀÌ ¸Þ¼­µå´Â ±× »óÀ§ÀÇ "try()"¿¡°Ô ¿¹¿Ü¸¦ Àü´ÞÇϰíÀÚ ÇÒ ¶§ À¯¿ëÇÕ´Ï´Ù. ÀϹÝÀûÀ¸·Î ÀûÀýÇÏ°Ô Ã³¸®ÇÏÁö ¸øÇÑ ¿¹¿Ü°¡ ÀÖÀ»¶§ À̸¦ ÀÌ¿ëÇÏ¿© ¿¹¿Ü¸¦ »óÀ§ Çڵ鷯¿¡°Ô Àü´ÞÇϰíÀÚ ÇÒ ¶§¿¡ »ç¿ëÇÕ´Ï´Ù.
 {{{
 e := try(
  // ...
 )
 e catch(Error, 
  // ...
 ) catch(Exception,
  // ...
 ) pass
 }}}

=== »ç¿ëÀÚÁ¤ÀÇ ¿¹¿Ü ===
 ´Ü¼øÈ÷ "Exception" ÇÁ·ÎÅ並 º¹Á¦ÇÏ¿© ÀڽŸ¸ÀÇ ¿¹¿Ü¸¦ ¸¸µé ¼ö ÀÖ½À´Ï´Ù.:
 {{{
 MyErrorType := Error clone
 }}}

=== NilMagic ===
 »ç½Ç ¿¹¿Ü¸¦ À§ÀÇ ¿¹Á¦¿Í °°ÀÌ ¿¬µ¿Çؼ­ »ç¿ëÇϴµ¥ Á¶±Ý ºÒ¾ÈÇÑ »ç¶÷µµ ÀÖÀ»°ÍÀÔ´Ï´Ù. ¿¹¿Ü°¡ ÇÕ´çÇÏ°Ô Ã³¸®µÇ¾ú´Ù¸é "catch"¸Þ¼­µå´Â "nil"À» µÇµ¹¸± °ÍÀ̰í, ±×·¸´Ù¸é "nil"¿¡ ´ëÇØ¼­ "pass"³ª ´Ù¸¥ "catch" ¸Þ½ÃÁö¸¦ º¸³»´Â °ÍÀÌ µÇ¹Ç·Î JavaLanguageµî¿¡ Àͼ÷ÇÑ ºÐµéÀº »ó´çÈ÷ ºÒ¾ÈÇØ ÇÏ½Ç °Í °°½À´Ï´Ù. ÇÏÁö¸¸ "nil slotNames"¿Í °°ÀÌ "nil" ÇÁ·ÎÅ並 ã¾Æº¸¸é ´ÙÇàÈ÷ ÀÌ·¯ÇÑ ¸Þ¼­µåµéÀ» ±¸ÇöÇϰí ÀÖ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù.(´ç¿¬È÷ ³»ºÎ ±¸ÇöÀº ¾Æ¹«°Íµµ ÇÏÁö ¾Ê´Â °ÍÀ̰ÚÁö¿ä.) ¶ÇÇÑ ÀÌÈÄ¿¡ ÀÌ·±½ÄÀ¸·Î "nil"À» ÀÌ¿ëÇϰíÀÚ ÇÏ´Â °æ¿ì¿¡´Â ÀÌ·± 󸮸¦ ÇÏ´Â ÇÁ·ÎÅ並 Çϳª ¸¸µé°í¼­ "nil" ÇÁ·ÎÅäÀÇ "protos"¸ñ·Ï¿¡ ±× °´Ã¼¸¦ Ãß°¡Çϸé "nil"·Îµµ ±×·¯ÇÑ ÇൿÀ» Àß Ã³¸®Çϵµ·Ï ÇÁ·Î±×·¥À» ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·±°Ô PrototypeBasedÀÇ °­·ÂÇÔÀÌ ¾Æ´Ò±î¿ä... ^^;
----

== Primitives ==
 "Primitive"("¿ø¼Ò"¶ó°í ¸»ÇϰڽÀ´Ï´Ù.)Àº ÀϹÝÀûÀ¸·Î C¾ð¾î·Î ±¸ÇöÇÏ¿© IoLanguage¿¡ ³»ÀåµÇ¾î ÀÖ´Â ±âº»ÀûÀÎ °´Ã¼µéÀ» ¸»ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î "Number"¿ø¼Ò´Â ¹èÁ¤µµ½Ç¼ö(double precision floating point number)¸¦ ±× ³»ºÎÀÇ ¼ûÀº ÀÚ·á·Î¼­ Æ÷ÇÔÇϸç, ÀÌ¿¡ ´ëÇÑ ¸Þ¼­µåµéÀº »ç½Ç C¾ð¾î·Î ±¸ÇöµÈ ÇÔ¼öÀÔ´Ï´Ù. ¸ðµç IoLanguageÀÇ ¿ø¼ÒµéÀº "Object" ÇÁ·ÎÅä·ÎºÎÅÍ ÆÄ»ýµÇ¾úÀ¸¸ç º¯Çü°¡´É(mutable)ÇÕ´Ï´Ù. ÀÌ´Â ¿ø¼ÒÀÇ ¸Þ¼­µåµµ º¯°æÇÒ ¼ö ÀÖÀ½À» ÀǹÌÇÕ´Ï´Ù. ·¹ÆÛ·±½º ¹®¼­µéÀº ¿ø¼Òµé¿¡ ´ëÇÑ ´õ ¸¹Àº Á¤º¸¸¦ Æ÷ÇÔÇϰí ÀÖ½À´Ï´Ù.
 ÀÌ ¹®¼­´Â ·¹ÆÛ·±½º ¹®¼­´Â ¾Æ´ÏÁö¸¸, IoLanguageÀ» ÀÌ¿ëÇϴµ¥ À־ ±âº»ÀûÀ¸·Î »ç¿ëÇÏ´Â ¿ø¼Òµé°ú ¹ÙÀεù(binding)µé¿¡ ´ëÇØ¼­ ¼³¸íÇÏ¸ç ¾î¶°ÇÑ °ÍµéÀÌ Á¦°øµÇ´ÂÁö¸¦ ¾Ë·Áµå¸±°ÍÀÔ´Ï´Ù.
 ¹«¾ùº¸´Ù ÀÌ ¹®¼­¿¡¼­ Á¦°øÇÏ´Â °ÍµéÀº ¸»±×´ë·Î ÀÔ¹®¿¡ °üÇÑ ¸Àº¸±â ¼öÁØÀÇ °ÍµéÀÌ¸ç ´õ À¯¿ëÇÏ°í ¸¹Àº ±â´ÉµéÀÌ IoLanguage¿¡´Â Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. :-)

=== Object ===

=== "?" ¿¬»êÀÚ ===
 Á¾Á¾ ¾î¶² °´Ã¼¿¡ ¸Þ¼­µå°¡ Á¸ÀçÇÏ´ÂÁö °Ë»çÇϰí ÀÖÀ»¶§¿¡¸¸ À̸¦ È£ÃâÇØ¾ß¸¸ ÇÒ ¶§°¡ ÀÖ½À´Ï´Ù. ÀÌ·² ¶§¿¡ ¿¹¿Ü¸¦ ÀÏÀ¸Å°Áö ¾ÊÀ¸·Á¸é ´ÙÀ½Ã³·³ ÇØ¾ßÇÒ°ÍÀÔ´Ï´Ù.:
 {{{
 if(obj getSlot("foo"), obj foo)
 }}}
 À̸¦ ª°Ô ÁÙÀÌ¸é ¸Þ½ÃÁö ¾Õ¿¡ "?"À» ºÙÀÌ¸é °°Àº È¿°ú¸¦ ³¾ ¼ö ÀÖ½À´Ï´Ù.:
 {{{
 obj ?foo
 }}}

=== List ===
 "List"Àº ÂüÁ¶µé·Î ÀÌ·ç¾îÁø ¹è¿­·Î¼­ Ç¥ÁØÀûÀÎ ¹è¿­Á¶ÀÛ°ú ³ª¿­À» À§ÇÑ ¸Þ¼­µåµéÀ» Æ÷ÇÔÇÕ´Ï´Ù.

 ºó ¸®½ºÆ®¸¦ ¸¸µé·Á¸é:
 {{{
 a := List clone
 }}}

 ¶Ç´Â ¹Ù·Î ¸î°³ÀÇ °´Ã¼µéÀ» Æ÷ÇÔÇÏ´Â ¸®½ºÆ®¸¦ ¸¸µé·Á¸é "list()" ¸Þ¼­µå¸¦ ÀÌ¿ëÇÕ´Ï´Ù.:
 {{{
 a := list(33, "a")
 }}}

 ÀÌ¿¡ °´Ã¼¸¦ Ãß°¡ÇÏ·Á¸é:
 {{{
 a append("b")
 ==> list(33, "a", "b")
 }}}

 ¸®½ºÆ®ÀÇ Å©±â¸¦ ±¸ÇÏ·Á¸é:
 {{{
 a size
 ==> 3
 }}}

 ¶Ç´Â ¾î¶² À§Ä¡ÀÇ ¿ä¼Ò¸¦ ±¸ÇϰíÀÚ ÇÑ´Ù¸é("List"ÀÇ »öÀÎÀº 0ºÎÅÍ ½ÃÀÛÇÕ´Ï´Ù.):
 {{{
 a at(1)
 ==> "a"
 }}}
 '''ÁÖÀÇ''': "List"ÀÇ »öÀÎÀº 0ºÎÅÍ ½ÃÀÛÇϰí Á¢±ÙÇÑ »öÀÎÀÌ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é "nil"À» µÇµ¹¸³´Ï´Ù.

 ƯÁ¤ À§Ä¡ÀÇ ¿ä¼Ò¸¦ ¼³Á¤ÇÏ·Á¸é:
 {{{
 a atPut(2, "foo")
 ==> list(33, "a", "foo")

 a atPut(6, "Fred")
 ==> Exception: index out of bounds
 }}}

 ƯÁ¤ ¿ä¼Ò¸¦ »èÁ¦ÇÏ·Á¸é:
 {{{
 a remove("foo")
 ==> list(33, "a", "b")
 }}}

 ƯÁ¤ À§Ä¡¿¡ ¿ä¼Ò¸¦ »ðÀÔÇÏ·Á¸é:
 {{{
 a atInsert(2, "foo")
 ==> list(33, "a", "foo", ...)
 }}}

==== foreach ====
 "foreach", "map", "select" ¸Þ¼­µå´Â 3°¡Áö ÇüÅ·Π»ç¿ëµË´Ï´Ù.
 {{{
 Io> a := list(65, 21, 122)
 }}}
 ù¹øÂ° ÇüÅ·μ­ ù¹øÂ° ÀÎÀÚ´Â "index variable", µÎ¹øÂ° ÀÎÀÚ´Â "value varaible", ¼¼¹øÂ°´Â °¢°¢ÀÇ °ª¿¡ ´ëÇØ¼­ Æò°¡ÇÒ ¹®ÀåÀÔ´Ï´Ù.:
 {{{
 Io> a foreach(i, v, write(i, ¡°:¡±, v, ¡°, ¡±))
 ==> 0:65, 1:21, 2:122,
 }}}
 µÎ¹øÂ° ÇüÅ´ "index argument"À» Á¦¿ÜÇÑ °æ¿ìÀÔ´Ï´Ù.:
 {{{
 Io> a foreach(v, v println)
 ==> 65
 21
 122
 }}}
 ¼¼¹øÂ° ÇüÅ´ ¸ðµç ÀÎÀÚ¸¦ Á¦¿ÜÇϰí Ç¥Çö½ÄÀ» °¢°¢ÀÇ °ª¿¡ ´ëÇØ¼­ º¸³»µµ·Ï ÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù.:
 {{{
 Io> a foreach(println)
 ==> 65
 21
 122
 }}}

==== map, select ====
 IoLanguageÀÇ "map", "select"("filter"¶ó°íµµ ´Ù¸¥ ¾ð¾î¿¡¼­ ¾Ë·ÁÁø) ¸Þ¼­µå´Â ´Ù¾çÇÑ Ç¥Çö½ÄÀ» map/select predicate·Î¼­ »ç¿ëÇÏ°Ô ÇØÁÝ´Ï´Ù.:
 {{{
 Io> numbers := list(1,2,3,4,5,6)
 Io> numbers select(isOdd)
 ==> list(1,3,5)
 Io> numbers select(x, x isOdd)
 ==> list(1,3,5)
 Io> numbers select(i, x, x isOdd)
 ==> list(1,3,5)
 Io> numbers map(x, x*2)
 ==> list(2,4,6,8,10,12)
 Io> numbers map(i, x, x+i)
 ==> list(1,3,5,7,9,11)
 Io> numbers map(*3)
 ==> list(3,6,9,12,15,18)
 }}}
 "map", "select" ¸Þ¼­µå´Â »õ·Î¿î ¸®½ºÆ®¸¦ µÇµ¹¸³´Ï´Ù. InPlaceÇü½ÄÀ¸·Î ÇöÀçÀÇ °´Ã¼¸¦ º¯°æÇÏ·Á¸é "selectInPlace()", "mapInPlace()"À» »ç¿ëÇϼ¼¿ä.

=== Sequence ===
 IoLanguage¿¡¼­ ºÒº¯ÀûÀÎ ½ÃÄö½º(ImmutableSequence)Àº "Symbol"À̶ó°í ºÒ¸®°í "Buffer"³ª "String"ó·³ °¡º¯ÀûÀÎ ½ÃÄö½º´Â "Sequence"¶ó°í ÇÕ´Ï´Ù. ¹®ÀÚ¿­Ç¥Çö½Ä(Literal Strings, ¼Ò½ºÄڵ忡¼­ ½Öµû¿ÈÇ¥·Î ¹­¿©Á®¼­ Ç¥ÇöÇÏ´Â)Àº "Symbol"ÀÔ´Ï´Ù. "Symbol"¿¡ ´ëÇØ¼­´Â º¯°æÀ» ¿äÇÏ´Â ÀÛ¾÷(MutableOperations)Àº Àû¿ëÇÒ ¼ö ¾øÀ¸¸ç, "asMutable" ¸Þ¼­µå¸¦ »ç¿ëÇÏ¿© º¹»çÇÑ ´ÙÀ½¿¡ À̸¦ Àû¿ëÇØ¾ßÇÕ´Ï´Ù.

==== °øÅëÀûÀÎ ¹®ÀÚ¿­ ÀÛ¾÷µé ====
 ¹®ÀÚ¿­ÀÇ ±æÀ̸¦ ¾ò±â:
 {{{
 "abc" size
 ==> 3
 }}}

 ¹®ÀÚ¿­ÀÌ ºÎºÐ¹®ÀÚ¿­À» Æ÷ÇÔÇϴ°¡?:
 {{{
 "apples" containsSeq("ppl")
 ==> true
 }}}

 NÀÇ À§Ä¡ÀÇ ¹®ÀÚ(¹ÙÀÌÆ®)À» ±¸Çϱâ:
 {{{
 "Kavi" at(1)
 ==> 97
 }}}

 ½½¶óÀ̽º(Slicing):
 {{{
 "Kirikuro" slice(0,2)
 ==> "Ki"
 "KiriKuro" slice(-2) # != slice(-2, 0)
 ==> "ro"
 "Kirikuro" slice(0, -2)
 ==> "Kiriku"
 }}}

 °ø¹éÁ¦°ÅÇϱâ(stripping whitespace):
 {{{
 " abc " asMutable strip
 ==> "abc"
 " abc " asMutable lstrip
 ==> "abc "
 " abc " asMutable rstrip
 ==> " abc"
 }}}

 ´ë¼Ò¹®ÀÚº¯È¯:
 {{{
 "Kavi" asUppercase
 ==> "KAVI"
 "Kavi" asLowercase
 ==> "kavi"
 }}}

 ¸®½ºÆ®·Î ºÐ¸®Çϱâ:
 {{{
 "the quick brown fox" split
 ==> list("the", "quick", "brown", "fox")
 }}}

 ´Ù¸¥ ¹®ÀÚ¸¦ ºÐ¸®ÀÚ·Î ÇØ¼­ ºÐ¸®Çϱâ:
 {{{
 "a few good men" split("e")
 ==> list("a f", "w good m","n")
 }}}

 ¼ýÀÚ·Î º¯È¯Çϱâ:
 {{{
 "13" asNumber
 ==> 13

 "a13" asNumber
 ==> nil
 }}}

 º¯¼öÆ÷ÇÔÇϱâ(interpolation):
 {{{
 name := "Fred"
 "My name is #{name}" interpolate
 ==> "My name is Fred"
 }}}
 "interpolate"Àº "#{}"¾ÈÀÇ ¾î¶°ÇÑ ÄÚµåµçÁö LocalContext¾È¿¡¼­ Æò°¡ÇÏ¿© °á°ú¸¦ µÇµ¹¸³´Ï´Ù. ÀÌ ÄÚµå´Â ·çÇÁ³ª ¾î¶°ÇÑ °ÍÀ̵ç "asString" ¸Þ½ÃÁö¿¡ ÀÀ´äÇÒ ¼ö ÀÖ´Â °ÍÀº ¹¹µçÁö ÇÒ ¼ö ÀÖ½À´Ï´Ù.

=== Range ===
 "range"Àº ½ÃÀÛÁ¡°ú ³¡Á¡À» Æ÷ÇÔÇÏ´Â ÀڷᱸÁ¶À̸ç, ½ÃÀÛÁ¡À¸·ÎºÎÅÍ ³¡Á¡±îÁö ¾î¶»°Ô À̵¿ÇÏ´ÂÁö¸¦ Æ÷ÇÔÇÕ´Ï´Ù. "Range"À» ÀÌ¿ëÇÏ¿© Ä¿´Ù¶õ ¸®½ºÆ®³ª ¼øÂ÷ÀûÀÎ µ¥ÀÌÅ͸¦ ¸¸µé¾î ¸®½ºÆ®³ª "for()"À» ´ëüÇÏ´Â °ÍÀ» ½±°ÔÇÕ´Ï´Ù.

==== "Range" ÇÁ·ÎÅäÄÝ ====
 ¾î¶² °´Ã¼ÀÌ°Ç "nextInSequence" ¸Þ¼­µå¸¦ ±¸ÇöÇϸé "Range"¿¡ Æ÷ÇÔÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¸Þ¼­µå´Â ÇϳªÀÇ ¼±ÅÃÀûÀÎ ÀÎÀÚ¸¦ ÃëÇÕ´Ï´Ù.(°´Ã¼µéÀÇ ¼ø¼­¿¡¼­ ¸î°³³ª ±×³É Áö³ªÄ¥ °ÍÀÎÁö¸¦ ÁöÁ¤ÇÏ´Â ¼ýÀÚÀÔ´Ï´Ù.) ¶ÇÇÑ Áö³ª°£ ´ÙÀ½ ´ÙÀ½ÀÇ °´Ã¼¸¦ µÇµ¹¸®¸é µË´Ï´Ù. ±âº»ÀûÀÎ "skip value"Àº 1ÀÔ´Ï´Ù. "skip value" 0Àº Á¤ÀǵÇÁö ¾Ê¾Ò½À´Ï´Ù.:
 {{{
 Number nextInSequence := method(skipVal,
  if(skipVal isNil, skipVal = 1)
  self + skipVal)
 }}}
 ÀÌ·¸°Ô "Number"¿¡ ÀÌ ¸Þ¼­µå¸¦ ³ÖÀ¸¸é(±âº»ÀûÀ¸·Î Æ÷ÇԵǾî ÀÖÁö¸¸), "Number"À» "Range"¿¡¼­ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù.:
 {{{
 1 to(5) foreach(v, v println)
 }}}
 ÀÌ»óÀÇ ÄÚµå´Â 1ºÎÅÍ 5±îÁö Ãâ·ÂÇÒ°ÍÀÔ´Ï´Ù.

=== File ===
 File°´Ã¼¸¦ »ý¼ºÇÏ´Â °Í¸¸À¸·Î´Â ÆÄÀϳ»¿ë¿¡ °ü·ÃµÈ ÀÛ¾÷À» ÇÏÁö ¾Ê°í, ÆÄÀϰü¸®(»èÁ¦¿Í °°Àº)À» ÇÒ ¼ö ÀÖÀ¸¸ç, ½ÇÁ¦·Î ÆÄÀÏÀÇ ³»¿ëÀ» Àаųª ¾²·Á¸é "openForAppending", "openForReading", "openForUpdating"À» »ç¿ëÇÏ¿© ¿­¾î¾ß ÇÕ´Ï´Ù. ÆÄÀÏÀ» »èÁ¦ÇÏ·Á¸é "remove"¸Þ¼­µå¸¦ »ç¿ëÇÕ´Ï´Ù.
 {{{ 
 f := File with(¡°foo.txt)
 f remove
 f openForUpdating
 f write(¡°hello world!¡±)
 f close
 }}}

=== Directory ===
 µð·ºÅ丮 »ý¼ºÇϱâ:
 {{{ 
 dir := Directory with(¡°/Users/steve/¡±)
 }}}
 
 µð·ºÅ丮ÀÇ ¸ðµç ÆÄÀϵéÀÇ ¸ñ·Ï ±¸Çϱâ:
 {{{
 files := dir files
 ==> list(File_0x820c40, File_0x820c40, ...)
 }}}
 
 µð·ºÅ丮ÀÇ µð·ºÅ丮¸¦ Æ÷ÇÔÇÑ ÆÄÀϸñ·Ï ±¸Çϱâ:
 {{{ 
 items := Directory items
 ==> list(Directory_0x8446b0, File_0x820c40, ...)
 items at(4) name
 ==> DarkSide-0.0.1 # a directory name
 }}}
 
 Àý´ë°æ·Î·Î ¼³Á¤Çϰí À̸¦ »ç¿ëÇϱâ:
 {{{
 root := Directory clone setPath("c:/")
 ==> Directory_0x8637b8

 root fileNames
 ==> list("AUTOEXEC.BAT", "boot.ini", "CONFIG.SYS", ...)
 }}}

 Á¸ÀçÇÏ´ÂÁö¸¦ °Ë»çÇϱâ: 
 {{{
 Directory clone setPath("q:/") exists
 ==> false
 }}}
 
 ÇöÀçÀÛ¾÷µð·ºÅ丮 ±¸Çϱâ:
 {{{
 Directory currentWorkingDirectory
 ==> ¡°/cygdrive/c/lang/IoFull-Cygwin-2006-04-20¡±
 }}}

=== Date=== 

 »õ·Î¿î "Date"ÀνºÅϽº¸¦ ¸¸µé±â:
 {{{
 d := Date clone
 }}}
 
 ÇöÀç ½Ã°¢À¸·Î ¸ÂÃß±â:
 {{{
 d now
 }}}
 

 ÃÊ´ÜÀ§·Î ȯ»êÇϱâ:
 {{{
 Date now asNumber
 ==> 1147198509.417114

 Date now asNumber
 ==> 1147198512.33313
 }}}

 "Date"°´Ã¼ÀÇ ºÎºÐºÎºÐÀ» ¾ò±â:
 {{{ 
 d := Date now
 ==> 2006-05-09 21:53:03 EST

 d
 ==> 2006-05-09 21:53:03 EST

 d year
 ==> 2006

 d month
 ==> 5

 d day
 ==> 9

 d hour
 ==> 21

 d minute
 ==> 53

 d second
 ==> 3.747125
 }}}


 ¾î¶² Äڵ带 ½ÇÇàÇϴµ¥ °É¸° ½Ã°£ ±¸Çϱâ:
 {{{
 Date cpuSecondsToRun(100000 repeat(1+1))
 ==> 0.02
 }}}

=== Networking ===
 ¸ðµç IoLanguageÀÇ ³×Æ®¿öÅ· °ü·Ã °´Ã¼µéÀº ºñµ¿±âÀû ¼ÒÄÏ(AsynchronousSocket)ÀÇ ¾Æ·¡¿¡ ÀÖÁö¸¸, Àб⳪ ¾²±â¿Í °°Àº CoRoutineÀÌ È£ÃâµÇ¾î¾ß ÇÏ´Â ÀÛ¾÷µéÀº ÀÌ·¯ÇÑ ÀÛ¾÷ÀÌ ¿Ï·áµÉ ¶§±îÁö µ¿±âÀûÀ¸·Î ó¸®Çϰųª, ŸÀӾƿô(timeout)ÀÌ ¹ß»ýÇÕ´Ï´Ù.
 '''ÁÖÀÇ''': ´ÙÀ½À» ÀÌ¿ëÇϱâ À§Çؼ­ "Socket" addon°ú °°Àº addonÀ» ¸ÕÀú ÄÄÆÄÀÏÇÏ¿© Æ÷ÇÔÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù.
 
 URL °´Ã¼ ¸¸µé±â:
 {{{ 
 url := URL with("http://example.com/")
 }}}
 
 URLÀÇ ³»¿ë°¡Á®¿À±â:
 {{{
 data := url fetch  
 }}}
 
 URLÀÇ ³»¿ëÀ» ÆÄÀÏ·Î ¾²±â:
 {{{
 url streamTo(File with("out.txt"))
 }}}

 SimpleWhoisClient:
 {{{
 whois := method(host,
    socket := Socket clone setHostName("rs.internic.net") setPort(43)
    socket connect streamWrite(host, "\n")
    while(socket streamReadNextChunk, nil)
    return socket readBuffer)
 }}}

 MinimalWebServer:
 {{{
 WebRequest := Object clone do(
    handleSocket := method(aSocket,
        aSocket streamReadNextChunk
        request := aSocket readBuffer betweenSeq("GET ", " HTTP")
        f := File with(request)
        if(f exists, f streamTo(aSocket), aSocket streamWrite("not found"))
        aSocket close))

 WebServer := Server clone do(
    setPort(8000)
    handleSocket := method(aSocket,
        WebRequest clone @handleSocket(aSocket)))

 WebServer start
 }}}


=== XML ===
 XML ÆÄ¼­¸¦ »ç¿ëÇÏ¿© ÇØ´ç ÆäÀÌÁöÀÇ ¸µÅ©µéÀ» ¾ò±â:
 {{{ 
 xml := URL with("http://www.yahoo.com/") fetch asXML
 links := xml elementsWithName("a") map(attributes at("href"))
 }}}

----

== ³»ÀåÇϱâ ==
 ÀÌ ¼½¼Ç¿¡¼­´Â IoVmÀ» ´Ù¸¥ CÇÁ·Î±×·¥¿¡ ³»ÀåÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼­ °£·«ÇÏ°Ô ¼³¸íÇϰڽÀ´Ï´Ù.

=== ÄÚµù±Ô¾à ===
 IoLanguageÀÇ C¾ð¾î ÄÚµåµéÀº ±¸Á¶Ã¼¸¦ °´Ã¼·Î, ÇÔ¼öµéÀ» ¸Þ¼­µå·Î ÇÏ´Â °´Ã¼ÁöÇâÀûÀÎ ½ºÅ¸ÀÏ ±Ô¾àÀ» µû¶ó¼­ ÀÛ¼ºµÇ¾ú½À´Ï´Ù. ÀÌ·¯ÇÑ °Íµé°ú Ä£¼÷ÇØÁö´Â °ÍÀº ³»Àå APIµéÀ» ´õ ½±°Ô ÀÌÇØÇϴµ¥ À־ µµ¿òÀÌ µÉ °Í ÀÔ´Ï´Ù.

==== ±¸Á¶Ã¼ ====
 ¸â¹öÀÇ À̸§Àº ÀϹÝÀûÀÎ ¼Ò¹®ÀÚ·Î ½ÃÀÛÇÏ´Â ³«Å¸·Î Ç¥±âÇÕ´Ï´Ù.:
 {{{
 typedef struct {
  char *firstName;
  char *lastName;
  char *address;
 } Person;
 }}}

==== ÇÔ¼ö ====
 ÇÔ¼öÀ̸§Àº ±×µéÀÌ ¿¬°üµÈ ±¸Á¶Ã¼ÀÇ À̸§°ú ¹ØÁÙÀ» °¡¿îµ¥ µÎ°í¼­ ³ª¸ÓÁö ´Ü¾îµéÀ» ¹ØÁÙ·Î ÀÕ½À´Ï´Ù. ¶ÇÇÑ ¸ðµç ±¸Á¶Ã¼´Â ±×µé¿¡ ÇØ´çÇÏ´Â "new", "free" ÇÔ¼ö°¡ ÀÖ½À´Ï´Ù.:
 {{{
 List *List_new(void);
 void List_free(List *self);
 }}}
 "new"À» Á¦¿ÜÇÏ°í ¸ðµç ¸Þ¼­µåµéÀº ("°´Ã¼")¿¡ ´ëÇÑ ±¸Á¶Ã¼¸¦ ù¹øÂ° ÀÎÀڷμ­ ¹Þ´Âµ¥ À̸§À» "self"·Î ÇÕ´Ï´Ù. ¸Þ¼­µå À̸§Àº "keyword format"À¸·Î Áþ½À´Ï´Ù. ÀÌ´Â °¢°¢ÀÇ ÀÎÀÚ¿¡ ´ëÇØ¼­ ¸Þ¼­µå À̸§ ³¡¿¡ ¹ØÁÙÀ» ´Þ¾ÆÁÝ´Ï´Ù.:
 {{{
 int List_count(List *self); /* no argument */
 void List_add_(List *self, void *item); /* one argument */
 void Dictionary_key_value_(Dictionary *self, char *key, char *value); 
 }}}

==== ÆÄÀÏÀ̸§ ====
 °¢°¢ÀÇ ±¸Á¶Ã¼´Â ºÐ¸®µÈ .h, .c ÆÄÀÏ¿¡ ÀúÀåÇÕ´Ï´Ù. ÆÄÀÏÀÇ À̸§Àº ±¸Á¶Ã¼ÀÇ À̸§°ú µ¿ÀÏÇÏ°Ô Áþ½À´Ï´Ù. ÀÌ·¯ÇÑ ÆÄÀϵéÀº ¿¬°üµÈ ¸ðµç ÇÔ¼ö(¸Þ¼­µå)¸¦ Æ÷ÇÔÇÕ´Ï´Ù.

=== IoState ===
 "IoState"Àº IoVmÀÇ ÀνºÅϽº·Î »ý°¢ÇÒ ¼ö ÀÖ½À´Ï´Ù.

==== ¿©·¯°³ÀÇ »óŵé ====
 IoLanguageÀº MultiStateÇÕ´Ï´Ù. ÀÌ ¶æÀº Çѹø¿¡ ¿©·¯°³ÀÇ »óŰ¡ ÇϳªÀÇ ÇÁ·Î¼¼½º ¾È¿¡ Á¸ÀçÇÒ ¼ö ÀÖ´Ù´Â ¶æÀÔ´Ï´Ù. ÀÌ·¯ÇÑ ÀνºÅϽºµéÀº °¢±â °Ý¸®µÇ¾î ÀÖÀ¸¸ç ¾î¶°ÇÑ ¸Þ¸ð¸®µµ °øÀ¯ÇÏÁö ¾ÊÀ¸¹Ç·Î µ¿½Ã¿¡ ´Ù¸¥ ½º·¹µåµé·ÎºÎÅÍ ¾ÈÀüÇÏ°Ô Á¢±ÙÀÌ °¡´ÉÇÕ´Ï´Ù.(ÇϳªÀÇ ½º·¹µå°¡ ÇϳªÀÇ »óŸ¸À» Á¢±ÙÇØ¾ß°ÚÁö¸¸)

==== Creating a state ====
 °£´ÜÇÑ ¹®ÀÚ¿­À» Æò°¡ÇÏ´Â ÄÚµåÀÔ´Ï´Ù. »óŸ¦ ¸¸µé°í, ÃʱâÈ­Çϰí, Æò°¡ÇÑ ´ÙÀ½¿¡ ´Ù½Ã ÇØÁ¦ÇÕ´Ï´Ù.:
 {{{
 #include "IoState.h"

 int main(int argc, const char *argv[]) {
    IoState *self = IoState_new();
    IoState_init(self);
    IoState_doCString_(self, ¡°writeln(\¡±hello world!\¡±¡±);
    IoState_free(self);
    return 0;
 }
 }}}

=== Values ===
 µÇµ¹¸² °ªÀ» ¹Þ¾Æ¼­ À̸¦ ´Ù½Ã Ãâ·ÂÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÕ´Ï´Ù.:
 {{{ 
 IoObject *v = IoState_doCString_(self, someString);
 char *name = IoObject_name(v);
 printf(¡°return type is a ¡®%s¡¯, name);
 IoObject_print(v);
 }}}

==== Checking value types ====
 °£´ÜÇÑ Å¸ÀÔüũ¸¦ À§ÇÑ ¸ÅÅ©·Î°¡ ÀÖ½À´Ï´Ù.:
 {{{
 if (ISNUMBER(v)) {
    printf(¡°result is the number %f¡±, IoNumber_asFloat(v)); }
 else if(ISSEQ(v)) {
    printf(¡°result is the string %s¡±, IoSeq_asCString(v)); }
 else if(ISLIST(v)) {
    printf(¡°result is a list with %i elements¡±, IoList_rawSize(v)); }
 }}}
 '''ÁÖÀÇ''': µÇµ¹¸²°ªÀº ¾ðÁ¦³ª È®½ÇÇÑ Io °´Ã¼ÀÔ´Ï´Ù.(¸ðµç °ªÀÌ Io¾ÈÀÇ °´Ã¼À̵íÀÌ.) ÀÌ·¯ÇÑ °Íµé¿¡ ´ëÇØ¼­ C¾ð¾î ¼öÁØ¿¡¼­ ÀÛ¾÷ÇÒ ¼ö ÀÖ´Â ¸Þ¼­µåµé("IoList_rawSize()"¿Í °°Àº ÇÔ¼öµé)À» "./libs/iovm/source"ÀÇ Çì´õÆÄÀÏ¿¡¼­ ½±°Ô ãÀ» ¼ö ÀÖÀ» °Í ÀÔ´Ï´Ù.

----

##TODO: È®Àå?
----
CategoryLanguage

ID
Password
Join
You can do very well in speculation where land or anything to do with earth is concerned.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2008-10-10 16:18:13
Processing time 0.0263 sec