· 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 will be awarded a medal for disregarding safety in saving someone.


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.0273 sec