SlideShare una empresa de Scribd logo
1 de 10
Descargar para leer sin conexión
Runtime Aspect Weaving Through Metaprogramming

                                                    Jason Baker                         Wilson Hsieh
                                                     University of Utah, School of Computing
                                                   50 South Central Campus Drive, Room 3190
                                                        Salt Lake City, Utah 84112–9205
                                                           {jbaker,wilson}@cs.utah.edu


ABSTRACT                                                                            
Ð ×× ×¸ ÛÖ ÔÔ Ö× 
 Ò           ¬Ò Û Ø Ò 
Ð ×× 
Ð Ö Ø ÓÒ×
Ï ×
Ö         Ò ÜØ Ò× ÓÒ ØÓ Ø Â Ú Ð Ò Ù ¸ À Ò ¹ÏÖ Ô¸                                ÓÖ Ñ Ø Ó Ó ×º Ï Ú Ò × 

ÓÑÔÐ ×                   Ø ÖÓÙ wrap
Ø Ø ×ÙÔÔÓÖØ× Û Ú Ò ×Ô 
Ø× ÒØÓ 
Ó          Ø ÖÙÒØ Ñ º ×¹                             ×Ø Ø Ñ ÒØ׺ À Ò ¹ÏÖ Ô ÒØ Ö Ø × Ñ Ø Ó               Ú 
 ÒØÓ Ø
Ô 
Ø× Ò À Ò ¹ÏÖ Ô Ø         Ø   ÓÖÑ Ó Ñ Ø Ó ÛÖ ÔÔ Ö׸                               
ÓÑÔÓÒ ÒØ ÑÔÐ Ñ ÒØ Ø ÓÒ Ð Ò Ù ÑÓÖ Ø ØÐÝ Ø Ò Ð Ò¹
Û 
 ÐÐÓÛ ×Ô 
Ø 
Ó ØÓ          Ò× ÖØ   ÖÓÙÒ Ñ Ø Ó Ó ¹                                  Ù × ×Ù
 × ×Ô 
غ ÐØ ÓÙ Ø × ÒØ Ö Ø ÓÒ ÐÐÓÛ×
  ×Ð       Ú 
 Ò ×Ô 
غ À Ò ¹ÏÖ Ô Ó« Ö× × Ú Ö Ð Ú Ò¹                                 ×Ô 
Ø 
Ó ØÓ 
Ð ÒÐÝ × Ô Ö Ø ÖÓÑ ÓØ Ö 
Ó ¸ Ø Ó ×
Ø × ÓÚ Ö ×Ø Ø 
 ×Ô 
Ø Ð Ò Ù × ×Ù
 × ×Ô 
غ Ö×ظ                                    ÒÓØ Ö ÕÙ Ö × Ô Ö Ø ÓÒº ÁÒ 
ظ À Ò ¹ÏÖ Ô³× Ø Ø ÒØ Ö ¹
 ×Ô 
Ø× 
 Ò ÛÓÚ Ò ÒØÓ Ò ÖÝ Ð Ö Ö ×º Ë 
ÓÒ ¸ ÛÖ Ô¹                                   Ø ÓÒ Û Ø Â Ú ÐÐÓÛ× ÑÓÖ Ò × Ó Û Ú Ò ØÓ                 ÜÔÖ ×× º
Ô Ö Ò À Ò ¹ÏÖ Ô × ¬Ö×ع
Ð ×× Â Ú Ú ÐÙ ¸ Û 
 ÐÐÓÛ×                                   ÏÖ ÔÔ Ö× 
 Ò         ÛÓÚ Ò ÒØÓ 
Ð ×× × Û Ø Ð Ü 
 ÐÐÝ ×
ÓÔ
Ù× Ö× ØÓ ÜÔÐÓ Ø Â Ú Ñ 
 Ò ×Ñ× ØÓ ¬Ò Ò Û Ú ÛÖ Ô¹                                     Ò Ñ × × Ò
 Û Ú Ò ×Ø Ø Ñ ÒØ× 
 Ò ÔÔ Ö Ò ÒÝ ×
ÓÔ º
Ô Ö׺ ÓÖ Ü ÑÔÐ ¸ ÛÖ ÔÔ Ö× 
 Ò        Ô ××     ÜÔÐ 
 Ø 
ÓÒ¹                          ÏÖ ÔÔ Ö× 
 Ò Ð×Ó           ÛÓÚ Ò ÒØÓ Ñ Ø Ó × Ó ÒÓÒÝÑÓÙ×
×ØÖÙ
ØÓÖ Ö ÙÑ ÒØ׸ Ò ÛÖ ÔÔ Ö Ó 
Ø× 
 Ò 
ÓÑÔÓ× º                                     
Ð ×× × Ø ÖÓÙ       Ò Û 
Ð Ö Ø ÓÒ ÑÓ ¬ Öº
  Ò ÐÐݸ Ñ Ø Ó × Ò ÐÐ Â Ú 
Ð ×× ×¸ Ò
ÐÙ Ò ÒÓÒÝÑÓÙ×                                       ÝÒ Ñ 
 ×Ô 
Ø Û Ú Ò ÔÖÓÚ × ÓØ Ö Ò ¬Ø׺ Ö×ظ

Ð ×× ×¸ 
 Ò ÛÖ ÔÔ º ÔÖÓØÓØÝÔ Ó À Ò ¹ÏÖ Ô × Ñ¹                                      ÛÖ ÔÔ Ö× Ñ Ý Ô ×× ÜÔÐ 
 Ø 
ÓÒ×ØÖÙ
ØÓÖ Ô Ö Ñ Ø Ö× Ò
ÔÐ Ñ ÒØ Ò 
ÓÑÔ Ð ¹Ø Ñ Ñ Ø ÔÖÓ Ö ÑÑ Ò ×Ý×Ø Ñ ÓÖ                                      Ø     ÑÔÐ 
 Ø Ô Ö Ñ Ø Ö× ÖÓÑ Ø Ö Ð Ü 
 Ð ÒÚ ÖÓÒÑ Òغ Ë 
¹
Â Ú ¸ 
 ÐÐ Å Ý Û Ö ­Ý ×
Ö             ÓÛ Å Ý ³× ØÙÖ ×                               ÓÒ ¸ Ñ Ø Ó Ò ÒÓØ Ö 
ÓÑÔ Ð Û Ò ÛÖ ÔÔ Ö × ÛÓ¹
×ÙÔÔÓÖØ À Ò ¹ÏÖ Ôº                                                                  Ú Ò ÒØÓ Øº ÐÐÓÛ Ò Û Ú Ò ÓÒ Ò Ö × × × × Ô Ö Ø                  ¹
                                                                                    Ú ÐÓÔÑ Òغ ÁÒ         Ø ÓÒ¸ Ø × ÓÖØ Ò× Ø 
ÓÑÔ Ð » Ø» Ù
                                                                                    
Ý
Ð Û Ò Ú ÐÓÔÑ ÒØ ×Ô 
Ø× ×Ù
 × ØÖ 
 Ò Ò 
ÓÒ¹
1.     INTRODUCTION                                                                 ØÖ 
Ø Ò ÓÖ
 Ñ ÒØ Ö Ù× º Ò ÐÐݸ Ú ÐÓÔÑ ÒØ ×Ô 
Ø×
ÁÒ ×Ô 
عÓÖ ÒØ ÔÖÓ Ö ÑÑ Ò ¸ Û Ú Ò           Ú 
 ÒØÓ Ñ ¹                             
 Ò ÛÓÚ Ò ÒØÓ ÖÙÒÒ Ò ÔÖÓ Ö Ñ¸ Ù× Ò Ò ÒØ ÖÔÖ Ø Ö
Ø Ó ÑÓÙÒØ× ØÓ Ö ¬Ò Ò Ø Ñ Ø Ó × Ø 
ÓÑÔÓ× Ø ÓÒ Ó                                      ×Ù
 ×        ÒË ÐÐ ¾½℄ ÓÖ Ã Û ℄º
 Ø× Ó Ý Û Ø    Ú 
 º ÀÓÛ Ú Ö¸ 
ÙÖÖ ÒØ ×Ô 
Ø Ð Ò Ù × Ó                                  ÆÓÖÑ ÐÐݸ À Ò ¹ÏÖ Ô Ö ÕÙ Ö × Ø Ø ÛÖ ÔÔ Ö× Ú Ü¹
ÒÓØ ÐÐÓÛ Ú 
 Ø× Ð ØÓ          ¬Ò 
ÓÑÔÓ× Ø ÓÒ ÐÐݺ ÓÖ Ü¹                               
ØÐÝ Ø × Ñ × Ò ØÙÖ × × Ø Ñ Ø Ó × Ø Ø Ø Ý ÛÖ Ôº
  ÑÔÐ ¸ Ò ×Ô 
ØÂ ¾ ℄ ×Ô 
Ø ¬Ò Ø ÓÒ× Ñ Ý ÓÒÐÝ Ö Ù×                                   Ë Ò
 Ò ×Ô 
Ø ×Ý×Ø Ñ Ø Ø Ö ×ØÖ 
Ø× Ö Ù× Ó Ú 
 ØÓ Ñ Ø ¹
Ø ÖÓÙ Ò Ö Ø Ò
 º Ï ÔÖ × ÒØ Ò ÜØ Ò× ÓÒ ØÓ Â Ú ¸ 
 ÐÐ                                 Ó ×ÛØ         ÒØ 
 Ð × Ò ØÙÖ × ÛÓÙÐ ÒÓØ        ×Ô 
 ÐÐÝ Ù× Ùи
À Ò ¹ÏÖ Ô¸ Ø Ø ÐÐÓÛ× ÐÐ Ó Â Ú ³× 
Ó Ö Ù× Ø 
 Ò Õ٠׸                                À Ò ¹ÏÖ Ô ×ÙÔÔÓÖØ× Ò
Ö × ÔÓÐÝÑÓÖÔ ×Ñ Ý                     ÖÒ
 Ò
ÐÙ Ò Ó 
Ø 
ÓÑÔÓ× Ø ÓÒ Ò Ô Ö Ñ Ø Ö Þ 
ÓÒ×ØÖÙ
¹                                    ×ÓÑ ØÝÔ 
 
 Ò ØÓ ÖÙÒØ Ñ º À Ò ¹ÏÖ Ô ÐÐÓÛ× ÛÖ Ô¹
ØÓÖ׸ ØÓ Ù× Û Ø Ñ Ø Ó           Ú
 º                                                Ô Ö× ØÓ        ¬Ò ÓÒ Ö ØÖ ÖÝ Ö ÙÑ ÒØ Ò Ö ØÙÖÒ ØÝÔ ×º
   Ç 
Ø 
ÓÑÔÓ× Ø ÓÒ × Ô ÖØ 
ÙÐ ÖÐÝ ÑÔÓÖØ ÒØ Ö Ù× Ø 
 ¹                                    Ø ÓÒ ÐÐݸ ÛÖ ÔÔ Ö× Ñ Ý ÔÓÐÝÑÓÖÔ 
 ÓÚ Ö Ø ÒÙѹ
Ò ÕÙ Ò Ð Ò Ù × Ø Ø Ù× ¬Ü × Ò Ð ¹ Ò Ö Ø Ò
              Ö Ö¹                            Ö Ó Ö ÙÑ ÒØ× Ø Ý Ø º

 ݸ ×Ù
 × Â Ú º ÍÒÐ Ð Ò Ù × Ø Ø ×ÙÔÔÓÖØ Ñ Ü Ò× ½ ¸                                    À Ò ¹ÏÖ Ô × ÑÔÐ Ñ ÒØ Ò Å Ý × Ò ÜØ Ò× ÓÒ ØÓ
¾ ℄¸ Â Ú Ó × ÒÓØ ÐÐÓÛ 
Ð ×× × ØÓ     Ù ÐØ ÖÓÑ × Ú Ö Ð 
Ð ××                         Ø Å Ý ÔÖÓ Ö ÑÑ Ò Ð Ò Ù                ¾¸ ¿℄º Å Ý × 
ÓÑÔ Ð ¹
  Ò Ñ Ü Ò ¬Ò Ø ÓÒ׺ ÁÒ×Ø ¸ × Ò Ð 
Ð ×× ÑÙ×Ø            ×Ô ¹                         Ø Ñ Ñ Ø ÔÖÓ Ö ÑÑ Ò ×Ý×Ø Ñ ÓÖ Â Ú Ø Ø ÐÐÓÛ× Ù× Ö×

 Ð Þ Û Ø Ò Û ÙÒ
Ø ÓÒ Ð Øݺ Ç 
Ø 
ÓÑÔÓ× Ø ÓÒ ÐÐÓÛ×                                  ØÓ ¬Ò Ð Ò Ù             ÜØ Ò× ÓÒ׺ Å Ý ÐÐÓÛ× Ù× ØÓ ÜØ Ò

Ð ×× × ØÓ Ö Ù×     Ý Ð Ò Ò Ò×Ø Ò
 × ØÓ Ø Ö Ø ÖÙÒØ Ñ ¸                              Â Ú ³× ×ÝÒØ Ü Ò Ò ÓÖ
 ÜØ Ò             ØÝÔ 
 
 Ò ÖÙР׸ Ò
  Ò × Ú ÐÙ Ð ÓÖ Ù Ð Ò ×Ô 
Ø× × Û ÐÐ × 
Ð ×× ×º                                      ØÓ ÒØ Ö Ø ×Ô 
Ø ÓÖ ÒØ              ØÙÖ × ÑÓÖ Ø ØÐÝ ÒØÓ Ø
   ÁÒ À Ò ¹ÏÖ Ô¸ Ñ Ø Ó ÛÖ ÔÔ Ö× Ö ¬Ö×ع
Ð ×× Ú Ð٠׺                                
ÓÑÔÓÒ ÒØ Ð Ò Ù          Ø Ò ÔÖ Ú ÓÙ× ×Ý×Ø Ñ׺
ÏÖ ÔÔ Ö× 
 Ò      ÜÔÐ 
 ØÐÝ 
ÓÒ×ØÖÙ
Ø Û Ø new¸ Ò Ð                                     ÁÒ ×ÙÑÑ Öݸ À Ò ¹ÏÖ Ô Ñ × × Ú Ö Ð 
ÓÒØÖ ÙØ ÓÒ× ØÓ
                                                                                      ×Ô 
عÓÖ ÒØ Ð Ò Ù            × Ò
                                                                                       ¯ ÏÖ ÔÔ Ö 
Ó     Ñ Ý Ö Ù×        Ø ÖÓÙ     ÓØ Ò Ö Ø Ò
Permission to make digital or hard copies of all or part of this work for                  Ò Ó     
Ø 
ÓÑÔÓ× Ø ÓÒº
personal or classroom use is granted without fee provided that copies are
not made or distributed for profit or commercial advantage and that copies              ¯ ÏÖ ÔÔ Ö× 
 Ò Ø     ÜÔÐ 
 Ø 
ÓÒ×ØÖÙ
ØÓÖ Ô Ö Ñ Ø Ö׸
bear this notice and the full citation on the first page. To copy otherwise, to            Ò ÒÒ Ö ÛÖ ÔÔ Ö× 
 Ò Ø     ÑÔÐ 
 Ø Ô Ö Ñ Ø Ö× ÖÓÑ
republish, to post on servers or to redistribute to lists, requires prior specific        Ø Ö Ð Ü 
 Ð ÒÚ ÖÓÒÑ Òغ
permission and/or a fee.
AOSD 2002, Enschede, The Netherlands
Copyright 2002 ACM 1-58113-469-X/02/0004 ...°5.00.                                     ¯ Å Ø Ó × Ò ÒÓÒÝÑÓÙ× 
Ð ×× × 
 Ò           ÛÖ ÔÔ º
¯     ×Ô 
Ø Ò 
ÓÑÔÓÒ ÒØ 
Ó   ÑÝ      
ÓÑÔ Ð   ×Ô ¹     Ñ Ø Ó Ñ Ý 
 
 ¸ ÙØ 
 
 Ò × ÒÓØ ÐÛ Ý× Ò ¬
 к
         Ö Ø Ðݺ                                                Ú
 
 Ò      Ù× ØÓ ¬Ò ÓÙØ Û Ö 
 
 × Ö Ò               ¸
                                                             Ò ØÓ ÑÔÐ Ñ ÒØ 
 
 Ò º Ë Ô Ö Ø Ò Ø Ñ ÑÓ Þ Ø ÓÒ Ó
   Ì Ö ×Ø Ó Ø × Ô Ô Ö × ÓÖ Ò Þ   × ÓÐÐÓÛ׺ Ë 
Ø ÓÒ ¾ Ò¹       Ú ÐÙ ÖÓÑ Ø× 
ÓÑÔÙØ Ø ÓÒ Ý Ð × 
ÓÒ
Ö Ø       Ò ¬Ø׺ ÓÖ
ØÖÓ Ù
 × À Ò ¹ÏÖ Ô ØÙÖ × Ø ÖÓÙ       × Ö × Ó Ü ÑÔР׺        Ò×Ø Ò
 ¸ 
 
 × Ñ Ý ÛÓÚ Ò ÒØÓ ÓØ           ¹Ð Ú Ð Ñ Ø Ó
Ë 
Ø ÓÒ ¿ ÔÖÓÚ × Ò ÓÚ ÖÚ Û Ó À Ò ¹ÏÖ Ô³× 
ÙÖÖ ÒØ Ñ¹          Ò Ñ Ø Ó Ø 
 ÐÐ׺ ×Ô 
عÓÖ ÒØ ÔÖÓ Ö ÑÑ Ò ÐÐÓÛ×
ÔÐ Ñ ÒØ Ø ÓÒº Ë 
Ø ÓÒ Ú ÐÙ Ø × Ø 
Ó×Ø Ó À Ò ¹ÏÖ Ô³×         ÓÒ ØÓ × ÐÝ Ö Ú ÐÙ Ø Ø ÙØ Ð ØÝ Ó        ¹Ð Ú Ð 
 
     ØÖ
­ Ü Ð Øݺ Ë 
Ø ÓÒ     ×
Ö × Ö Ð Ø ÛÓÖ º Ò ÐÐݸ Ë 
¹           ÐÓÛ Ö¹Ð Ú Ð 
 
   ×   Ò      º
Ø ÓÒ ×ÙÑÑ Ö × ÓÙÖ 
ÓÒ
ÐÙ× ÓÒ׺                                 ÇÒ × ÑÔÐ 
 
 Ò Ñ ØÖ 
 × ØÓ 
ÓÙÒØ Ø ØÓØ Ð ÒÙÑ Ö
                                                            Ó Ñ Ø Ó ÒÚÓ
 Ø ÓÒ׸ Ò Ø ÒÙÑ Ö Ó ÒÚÓ
 Ø ÓÒ× Û Ø
2.       DYNAMIC METHOD WRAPPING                              ×Ø Ò
Ø Ö ÙÑ ÒØ׺ Ì × 
ÓÙÒØ× 
 Ò Ó Ø Ò         Ý ØÖ 
 Ò
Ì × × 
Ø ÓÒ ÒØÖÓ Ù
 × À Ò ¹ÏÖ Ô³× ×ÝÒØ Ü Ò × Ñ ÒØ 
×        Ø Ñ Ø Ó ¸ Ò ¬ÐØ Ö Ò ÙÔÐ 
 Ø × ÖÓÑ Ø ØÖ 
 º
Ø ÖÓÙ × Ú Ö Ð Ü ÑÔР׺ Ì × Ü ÑÔÐ × × ÓÛ ÓÛ À Ò ¹               ËÙÔÔÓ× Û Û × ØÓ ØÖ 
 ×Ø Ø 
 Ñ Ø Ó 
 ÐÐ Class-
ÏÖ Ô 
 Ò      Ù× ØÓ Ù ÓÔØ Ñ Þ Ø ÓÒ× ×Ù
 × 
 
 Ò ¸           Path.lookup(String) Ø Ø Ö ØÙÖÒ× ClassPath.Re-
ØÓ ÑÔÐ Ñ ÒØ 
 
 Ò ¸ ØÓ ØÖ 
 ÓÛÒ Ù ×¸ Ò ØÓ Û Ú               sourceº Ï 
 Ò ¬Ò        ÛÖ ÔÔ Ö ÓÖ ÐÓÓ ÙÔ × ÓÐÐÓÛ×
ÛÖ ÔÔ Ö× ÒØÓ Ñ Ø Ó × Ó ÐÓ
 Ð 
Ð ×× ×º Ì × Ü ÑÔÐ × Ð×Ó       ClassPath.Resource wrapper
   ÑÓÒ×ØÖ Ø ÓÛ Ó 
Ø 
ÓÑÔÓ× Ø ÓÒ¸ ÜÔÐ 
 Ø 
ÓÒ×ØÖÙ
ØÓÖ׸      lookupTracer(String name) {
 Ò × Ô Ö Ø 
ÓÑÔ Ð Ø ÓÒ Ò
Ö × Ø          ÜÔÖ ×× Ú ÔÓÛ Ö Ó      System.out.println("lookup("+name+") called");
                                                              return wrapped.apply(name);
ÛÖ ÔÔ Ö׺                                                   }
   À Ò ¹ÏÖ Ô × ¬Ò Ò Ø ÖÑ× Ó ØÛÓ 
ÓÖ 
Ð ×× × Pro-
cedure Ò Wrapperº ÈÖÓ
 ÙÖ Ó 
Ø× Ò
 Ô×ÙÐ Ø Ñ ¹               Ì   ÛÖ ÔÔ Ö   
Ð Ö Ø ÓÒ ÓÚ Ó × ÒÓØ Ñ ÒØ ÓÒ Class-
Ø Ó Ò 
ÓÑÔÓ× Ð ÛÖ ÔÔ Ö Ó ×º Ì 
Ð ×× Wrapper ×               Path.lookup   Ò Ô Ö ÓÖÑ× ÒÓ Û Ú Ò º Ì ÛÖ ÔÔ Ö 
 Ò
 Ò ×ØÖ 
Ø 
ØÓÖÝ Ø Ø 
ÓÑÔÓ× × ×Ô 
Ø 
Ó Û Ø ÛÖ ÔÔ                 ÔÔÐ ØÓ ÒÝ ×Ø Ø 
 Ñ Ø Ó Ø Ø Ø × String Ò
ÔÖÓ
 ÙÖ ×º Ì        ×ØÖ 
Ø Ñ Ø Ó Wrapper.generate(-         Ö ØÙÖÒ× ClassPath.Resourceº Ì ÛÖ ÔÔ Ö Ó Ý × Ö
Method thisMethod, Procedure wrapped) ÔÖÓ Ù
 ×              ØÓ Ü Ñ Ò Ø× Ö ÙÑ ÒØ׸ 
 ÐÐ Ø ÛÖ ÔÔ Ñ Ø Ó ¸ Ò
  ÛÖ ÔÔ       ¬Ò Ø ÓÒ Ó thisMethod ÖÓÑ Method Ó ¹           Ö ØÙÖÒ Ú ÐÙ º Ì ÛÖ ÔÔ Ö Ó 
Ø × ÓÙÒ ØÓ Ú Ö Ð
  
Ø Ø Ø 
ÓÒØ Ò× ×ÝÑ ÓÐ 
 Ò ÓÖÑ Ø ÓÒ Ò 
 ÐÐ Ð Pro-          
 ÐÐ lookupTracerº
cedure ØÓ      ÛÖ ÔÔ º Ì Û Ú Ö 
 ÐÐ× generate() ØÓ            Ï Ù× Ø wrap ×Ø Ø Ñ ÒØ ØÓ Û Ú lookupTracer ÒØÓ

ÓÑÔÙØ      ÛÓÚ Ò Ñ Ø Ó       ¬Ò Ø ÓÒº ÁÒ ÑÓ×Ø 
 × ×¸ Ø     ClassPath.lookup()¸
ÔÖÓ Ö ÑÑ Ö Ó × ÒÓØ Ò        ØÓ ÒÓÛ Ø       Ø Ð× Ó Wrap-
per.generate()¸ ÙØ Ø Ø Ñ × Ø × Ù× ÙÐ ØÓ ¬Ò gen-
                                                            wrap ClassPath.lookup(String) with lookupTracer;
erate() ÜÔÐ 
 ØÐݺ
                                                            Ì ¬Ö×Ø Ö ÙÑ ÒØ ØÓ wrap × Ñ Ø Ó × Ò ØÙÖ ¸ Ò Ø
   Å 
ÖÓ× Ø Ø ÑÔÐ Ñ ÒØ Ø ÛÖ ÔÔ Ö ÒØ Ö 
 Ð×Ó ÑÔÐ ¹           × 
ÓÒ × ÛÖ ÔÔ Ö ÜÔÖ ×× ÓÒº Ø Ö Ø × ×Ø Ø Ñ ÒØ × Ü¹
Ñ ÒØ × ÑÔÐ ×Ø Ø 
 
 
 ׺ ÌÓ × ÐÝ ÛÖ Ô Ñ Ø Ó Ø Ò              
ÙØ ¸ 
 ÐÐ× ØÓ ClassPath.lookup() Ö Ö Ö 
Ø ØÓ
 Ò Ö ÙÑ ÒØ Ó ØÝÔ Ì¸ Ø ÛÖ ÔÔ Ö ÑÙ×Ø 

 ÔØ Ö ÙÑ ÒØ×           lookupTracerº ÁÒ Ø × 
 × ¸ Û 
ÓÙÐ ÚÓ    
Ð Ö Ò Ø
Ó ØÝÔ Ì ÓÖ ×ÙÔ ÖØÝÔ º ÌÓ × ÐÝ Ô ×× Ø           Ö ÙÑ ÒØ ÓÒ   ÛÖ ÔÔ Ö Ú Ö Ð lookupTracer¸ Ò Ù× Ò ÒÓÒÝÑÓÙ×
ØÓ Ø Ø Ö Ø Ñ Ø Ó ¸ Ø ÛÖ ÔÔ Ö ÑÙ×Ø Ø            Ò Ö ÙÑ ÒØ    ÛÖ ÔÔ Ö ÜÔÖ ×× ÓÒ
Ó ØÝÔ Ì ÓÖ ×Ù ØÝÔ º Ì Ö ÓÖ ¸ Ö ÙÑ ÒØ ØÝÔ × ÑÙ×Ø
 ÒÚ Ö Òغ Ê ØÙÖÒ ØÝÔ × ÑÙ×Ø        ÒÚ Ö ÒØ Ý × Ñ Ð Ö Ö ¹    wrap ClassPath.lookup(String)
×ÓÒ Ò º                                                     with new ClassPath.Resource wrapper(String name) {
                                                                 /* body of lookupTracer */
   ÈÓÐÝÑÓÖÔ 
 ÛÖ ÔÔ Ö× Ñ Ý          ¬Ò Ù× Ò ×Ô 
 Ð ×ÝÒ¹     };
Ø Üº ÛÖ ÔÔ Ö Ø Ø Ø × Ô Ö Ñ Ø Ö Ó ØÝÔ Any Ñ Ý
ÛÓÚ Ò ÒØÓ Ñ Ø Ó Ø Ø Ø × ÒÝ Ö Ö Ò
 ÓÖ ÔÖ Ñ Ø Ú                 ÁÒ     Ø ÓÒ ØÓ Ø × 
Ð ×× Wrapper¸ Û 
 × ÙÒ ¹
ØÝÔ Ø Ø 
ÓÖÖ ×ÔÓÒ Ò Ö ÙÑ ÒØ ÔÓ× Ø ÓÒº Ë Ñ Ð ÖÐݸ            Ñ ÒØ Ð Ô ÖØ Ó Ø À Ò ¹ÏÖ Ô Ð Ò Ù ¸ À Ò ¹ÏÖ Ô ÔÖÓ¹
ÛÖ ÔÔ Ö Ø Ø Ö ØÙÖÒ× Any Ñ Ý         ÛÓÚ Ò ÒØÓ Ñ Ø Ó × Ö ¹   Ú × Ð Ö ÖÝ Ó ÙØ Ð ØÝ ÛÖ ÔÔ Ö× Ò maya.wrap.Wrap-
ØÙÖÒ Ò ÒÝ ØÝÔ ¸ Ò ÚÓ Ñ Ø Ó ×º ÈÖ Ñ Ø Ú Ú ÐÙ × ÓÙÒ           persº ÇÒ ×Ù
 ÛÖ ÔÔ Ö ÑÔÐ Ñ ÒØ× Ò Ö 
 
 ÐÐ ØÖ 
 Ò
ØÓ Any Ú Ö Ð × Ö ÓÜ ¸ Ò ÓÖ Ø ÔÙÖÔÓ× Ó ÐÓ
 Ð ØÝÔ             Ù× Ò Any Ò rest Ö ÙÑ ÒØ×

 
 Ò ¸ Any Ú Ö Ð × Ö ØÖ Ø           × Objectº ÅÓÖ ­ Ü ¹
  Ð ØÝ 
ÓÙÐ     ÐÐÓÛ Ò Ð Ò Ù Ø Ø ×ÙÔÔÓÖØ× ÓÙÒ               public static final Any wrapper
                                                            tracer(rest Object[] args) {
ÔÓÐÝÑÓÖÔ ×Ñ ×Ù
 × Â ℄º Í× Ò Â¸ ÓÒ 
ÓÙÐ 
 Ú                    System.err.println("entering " +
× ØÝ Ø ÖÓÙ ÔÓÐÝÑÓÖÔ 
 ØÝÔ Ú Ö Ð ×¸ Ò ×Ô 
 ¬
 ØÝ                                  fmtMeth(thisMethod args));
                                                                                                   ,
 Ý 
Ð Ö Ò ÙÔÔ Ö ÓÙÒ ×º                                        Any ret = wrapped.apply(args);
   À Ò ¹ÏÖ Ô Ð×Ó ¬Ò × Ò Û 
Ð Ö Ø ÓÒ ÑÓ ¬ Ö¸ restº             System.err.println("leaving " +
    ÛÖ ÔÔ Ö³× Ð ×Ø ÓÖÑ Ð Ô Ö Ñ Ø Ö Ñ Ý          rest Ob-                         fmtMeth(thisMethod args) +
                                                                                                   ,
ject[] Ø × Ô Ö Ñ Ø Ö Û ÐÐ          ÓÙÒ ØÓ Ò ÖÖ Ý Ó Ø                             " => " + ret);
                                                              return ret;
Ö ×Ø Ó Ø     
ØÙ Ð Ö ÙÑ ÒØ׺ Ì apply ÓÔ Ö ØÓÖ ØÖ Ø×         }
Ö ×Ø Ú Ö Ð × × Ð ×Ø× Ó Ö ÙÑ ÒØ׺ Ö ÙÑ ÒØ Ð ×Ø× Ñ Ý
 Ð×Ó ×ØÓÖ Ò ¬ Ð × Ò ÐÓ
 Ð Ú Ö Ð × 
Ð Ö Û Ø Ø                Ì ÑÔÐ 
 Ø Ô Ö Ñ Ø Ö thisMethod × Ò Ó 
Ø Ø Ø Ö Ô¹
rest ÑÓ ¬ Öº                                                Ö × ÒØ× Ø Ñ Ø Ó    Ò ÛÖ ÔÔ º Ï Ò tracer × ÛÓÚ Ò
                                                             ÒØÓ Ò Ò×Ø Ò
 Ñ Ø Ó ¸ args[0] 
ÓÒØ Ò× Ø Ö 
 Ú Ö¸
2.1 Evaluating Cacheable Methods                            × Ò
 Ñ Ø Ó Ö 
 Ú Ö × ÐÛ Ý× 
ÓÙÒØ    × ÛÖ ÔÔ Ö Ö¹
  
 Ò × Ò Ü ÑÔÐ Ó Ø           Ò × Ó 
ÓÒ
 ÖÒ× Ø Ø À Ò ¹       ÙÑ Òغ Ì ×Ø Ø 
 Ñ Ø Ó Wrappers.fmtMeth() Ù× ×
ÏÖ Ô 
 Ò ÜÔÖ ×× 
Ð ÒÐݺ Ì     Ö ×ÙÐØ Ó ÒÝ × ¹ « 
ع Ö       thisMethod³× 

 ×× ÑÓ ¬ Ö× ØÓ 
    ÓÛ ØÓ ÓÖÑ Ø Ø
crashTracer      ÙÑÔ× Ñ Ø Ó              ÒÚÓ
 Ø ÓÒ    Ò ÓÖÑ Ø ÓÒ Û                Ò     Ò    Ü
 ÔØ ÓÒ        × Ø ÖÓÛÒº

 trapper       Ú ÐÓÔÑ ÒØ ÛÖ ÔÔ Ö Ø                Ø ÙÒ
ÓÒ       Ø ÓÒ ÐÐÝ Ø ÖÓÛ×               ÖÙÒØ Ñ          Ü
 ÔØ ÓÒº

 stackDumper     ÈÖ ÒØ×       ×Ø 
   ØÖ 
     Ò     
 ÐÐ× Ø ÖÓÙ            Ø     ÛÖ ÔÔ          Ñ Ø Ó         º

 CacheNth     ÛÖ ÔÔ Ö ×Ù          
Ð ×× Ø    Ø Ñ ÑÓ Þ × Ø                 ÛÖ ÔÔ          Ñ Ø Ó      ³× Ö ×ÙÐØ×               ×    Ù× Ò      Ø       Ò
                                                                                                                                                        Ø        Ö ÙÑ ÒØ    ×     ݺ    CacheNth
      ÛÖ ÔÔ Ö×    Ö   Ó   Ð ØØÐ    Ú ÐÙ     ÐÓÒ ¸    ÙØ    Ö    Ù×        ÙÐ Û     Ò 
ÓÑÔÓ×             Û Ø       ÓØ        Ö ÛÖ ÔÔ Ö׺

 cache1st     ÛÖ ÔÔ Ö Ø           Ø Ñ ÑÓ Þ × Ø        ÛÖ ÔÔ           Ñ Ø Ó        ³× Ö ×ÙÐØ× Ù× Ò            Ø        ×ÓÐ       Ö ÙÑ ÒØ        ×           ݺ

 cache2nd     ÛÖ ÔÔ Ö Ø           Ø Ñ ÑÓ Þ × Ø        ÛÖ ÔÔ           Ñ Ø Ó        ³× Ö ×ÙÐØ× Ù× Ò            Ø        × 
ÓÒ      Ó   ØÛÓ       Ö ÙÑ ÒØ×           ×       ݺ

 makePerInstance(Wrapper)Ì                    ×     ÛÖ ÔÔ Ö Û             ×    Ö ÙÑ Òظ        Ò    Ö ØÙÖÒ×             ÛÖ ÔÔ Ö Ø           Ø   ÔÔÐ         × Û ÓÒ     Ô Ö¹ Ò×Ø Ò
       × ×º

 makeConditionalWrapper(Procedure, Wrapper)  Ì                                      ×        ÔÖÓ
    ÙÖ           Ò         ÛÖ ÔÔ Ö¸       Ò    Ö ØÙÖÒ×            ÛÖ ÔÔ Ö Ø     Ø 
 ÐÐ× Ø ÖÓÙ
     makeConditionalWrapper³× × 
ÓÒ Ö ÙÑ ÒØ Û                                      Ò Ø       ÔÖÓ
    ÙÖ       Ö ØÙÖÒ× ØÖÙ ¸            Ò    
 ÐÐ× Ø          Ñ Ø Ó          Ö 
ØÐÝ ÓØ   ÖÛ × º

 staticLocker         ÐÐ× Ø       ÛÖ ÔÔ      Ñ Ø Ó        Û Ø        Ø×       
Ð Ö Ò     
Ð ×× ÐÓ
        º

 instanceLocker           ÐÐ× Ø      ÛÖ ÔÔ        Ñ Ø Ó        Û Ø        Ø× Ö 
    Ú Ò       Ò×Ø Ò
      ÐÓ
           º



                 Ì Ð ½ ÍØ Ð ØÝ ÛÖ ÔÔ Ö׸ 
Ð ×× ×¸ Ò Ñ Ø Ó ×                                                            ¬Ò             Ý maya.wrap.Wrappersº

 Ö ÙÑ ÒØ Ð ×غ ÏÖ ÔÔ Ö× ×Ù
 × tracer 
 ÒÒÓØ ÜÔÐ 
 ØÐÝ                                               ÌÓ ÚÓ Ø × 
Ó×ظ À Ò ¹ÏÖ Ô ÔÖÓÚ × ×Ô 
 Ð Þ ÛÖ Ô¹
Ø ÖÓÛ 
 
      Ü
 ÔØ ÓÒ׸ × Ò
 ÛÖ ÔÔ Ö 
Ð Ö Ø ÓÒ× 
 Ò¹                                              Ô Ö× cache1st Ò cache2nd ØÓ Ò Ð ÙÒ ÖÝ ×Ø Ø 
 Ò
ÒÓØ 
ÓÒØ Ò throws 
Ð Ù× ×º ÀÓÛ Ú Ö¸ wrapped.apply()                                                  Ò×Ø Ò
 Ñ Ø Ó ×¸ Ö ×Ô 
Ø Ú Ðݺ
Ñ Ý Ø ÖÓÛ Ö ØÖ ÖÝ Ü
 ÔØ ÓÒ× Ø Ø Ö ÑÑ        Ø ÐÝ ÔÖÓÔ¹                                                 ÁÒ    Ø ÓÒ ØÓ Ø 
ÓÒÚ ÒØ ÓÒ Ð Ò×Ø Ò
    Ú
     ¬Ò
   Ø ØÓ Ø ÛÖ ÔÔ Ö³× 
 ÐÐ Öº                                                                         Ø ÖÓÙ makePerInstance()¸ À Ò ¹ÏÖ Ô ÔÖÓÚ ×           Ò¹
                                                                                                     Ö Ð Ñ 
 Ò ×Ñ Ø ÖÓÙ conditionalWrapper 
Ð Ö ¹
2.2 Composing Caches                                                                                Ø ÓÒ׺ Ï 
 Ò ØÖ 
 
 ÐÐ× ØÓ Ñ Ø Ó n ÓÒ ×Ô 
 ¬
 Ò×Ø Ò
                                                                                                    c × ÓÐÐÓÛ×
Wrappers      ¬Ò × × Ú Ö Ð ÓØ Ö Ò Ö 
 ÛÖ ÔÔ Ö׸ ÛÖ ÔÔ Ö
×Ù  ØÝÔ ×¸ Ò ÛÖ ÔÔ Ö¹ Ò Ö Ø Ò Ñ Ø Ó ×º Ì × Ó 
Ø×                                                    wrap C.n() with new Any conditionalWrapperC()
                                                                                                      { thisReceiver == c } => Wrappers.tracer;
Ñ  Ý      
ÓÑÔÓ× ØÓ ÑÔÐ Ñ ÒØ 
ÓÒ
 ÖÒ× ×Ù
 × 
 
 Ò
 Ò Ú Ö ÓÙ× Û Ý׺ ËÓÑ ÔÖ ¬Ò ÛÖ ÔÔ Ö× Ö Ð ×Ø               Ò
Ì    Ð ½º                                                                                           Ì      ÓÚ ×Ø Ø Ñ ÒØ ÛÖ Ô× C.n() Û Ø    ÛÖ ÔÔ Ö Ø Ø
   Ì 
Ð ×× CacheNth Ò Ñ Ø Ó × ×Ù
 × makeCondi-                                                      ØÖ 
 × Ø× Ü 
ÙØ ÓÒ Û Ò c × Ø Ö 
 Ú Ò Ò×Ø Ò
 º Ì ×
tionalWrapper() Ò makePerInstance() Ö Ó Ô Ö¹
                                                                                                    ÛÖ ÔÔ Ö Ñ Ý      ÔÔÐ ØÓ Ò×Ø Ò
 Ñ Ø Ó × Ó C Ø Ø Ø
Ø 
ÙÐ Ö ÒØ Ö ×غ CacheNth Ù× × ×Ø Ò Ö Â Ú        ØÙÖ ×¸ Ò¹                                          ÒÓ Ö ÙÑ ÒØ× Ò Ö ØÙÖÒ ÒÝ ØÝÔ º Ì conditional-
                                                                                                    Wrapper ×ÝÒØ Ü × Ñ 
ÖÓ Ø Ø × ÜÔ Ò       × ÓÐÐÓÛ×
Ò Ö 
Ð ×× × Ò ÜÔÐ 
 Ø 
ÓÒ×ØÖÙ
ØÓÖ׸ ØÓ ××Ó
 Ø 
 
 × Û Ø
Ñ Ø Ó ×º Ì        ¬Ò Ø ÓÒ× Ó CacheNth Ò makePerIn-                                                  makeConditionalWrapper(
stance() Ö × ÓÛÒ Ò          ÙÖ × ½ Ò ¾¸ Ö ×Ô 
Ø Ú Ðݺ                                                 new boolean procedure (final C thisReceiver {
                                                                                                                                                 )
      
 Ø Ñ CacheNth ÛÖ ÔÔ Ö × ÛÓÚ Ò ÒØÓ Ñ Ø Ó ¸                                                      },
                                                                                                         return thisReceiver == c;
generate × 
 ÐÐ º Ì × Ñ Ø Ó           ÐÐÓ
 Ø × Ò Û 
 
                                                Wrappers.tracer);
 Ò Ö ØÙÖÒ× ÔÖÓ
 ÙÖ Ø Ø Ù× × Ø 
 
 º CacheNth
Ù× × Ò ÜÔÐ 
 Ø 
ÓÒ×ØÖÙ
ØÓÖ Ô Ö Ñ Ø Ö ØÓ × Ð 
Ø Ø      Ý Ö¹                                             Ì       Ð ØÝ ØÓ Ú × ×Ô 
 ¬
 Ò×Ø Ò
 × 
Ö Ø 
 Ð ØÓ 
 
 ¹
 ÙÑ ÒØ Ù× Ò Ñ ÑÓ Þ Ø ÓÒº ÁØ Ð×Ó Ù× × Ò ÒÓÒÝÑÓÙ×                                                      Ò ÓÖ ClassPath.lookup()º ÁÒ Ø ClassPath ¬Ò ¹
ÔÖÓ
 ÙÖ 
Ð ×× ØÓ ××Ó
 Ø 
Ó Û Ø ×Ø Ø º ´ÁÒ ÑÓÖ ×Ø Ø 
                                                Ø ÓÒ Ù×      Ý Ø Å Ý 
ÓÑÔ Ð Ö¸ lookup() × ÒÓØ 
ØÙ ÐÐÝ
 ×Ô 
Ø Ð Ò Ù × ×Ù
 × ×Ô 
ظ ×Ù
 Ñ 
 Ò ×Ñ× Ö ÙÒ¹                                                       ×Ø Ø 
 Ñ Ø Ó º ClassPath × ¬Ò Ò × Ô Ö Ø Ð ¹
 Ú Ð Ð ºµ ÈÖÓ
 ÙÖ Ó 
Ø׸ Ð Ñ Ø Ó ×¸ Ö 
 ÐÐ Û Ø                                                        Ö Öݸ Ò × Ú Ö Ð ClassPath Ó 
Ø× 
 Ò           ¬Ò ÓÒ
 Ö ÙÑ ÒØ× Ò Ö ØÙÖÒ Ú Ð٠׺ Ì          Ø Ð× Ó Ø ÔÖÓ
 ÙÖ                                                 ×Ø Ò
Ø × Ö
 Ô Ø ×º ClassPath Ó 
Ø Ñ Ý Ù× Ò

 ÐÐ Ò 
ÓÒÚ ÒØ ÓÒ Ö         Ò Û Ø Ò Ø apply Ñ 
ÖÓº                                                        Ø
 
ÓÑÔ Ð Öº ÁÒ ×Ù
     
 × ¸ 
 
 Ò ÔÖÓ Ù
 × × ¹
      CacheNth ÛÖ ÔÔ Ö Ñ Ý      
ÓÑÔÓ× Û Ø ÓØ Ö ÛÖ Ô¹                                               Ò ¬
 ÒØ Ô Ö ÓÖÑ Ò
 ÑÔÖÓÚ Ñ Òظ Ò Ø × × ØÓ ××ÙÑ
Ô Ö׺ ÓÖ Ü ÑÔÐ ¸ Ô Ö¹ Ò×Ø Ò
 
 
 ÓÖ Ø Ñ Ø Ó C.m                                                     Ø Ø 
Ð ×× × Ó ÒÓØ 
 Ò          Ò Ø 
ÓÑÔ Ð Ö³× 
 º ÀÓÛ¹

 Ò 
Ö Ø Ù× Ò                                                                                        Ú Ö¸ ÓØ Ö 
Ð ÒØ× Ú « Ö ÒØ Ô Ö ÓÖÑ Ò
 Ò × Ñ ÒØ 
wrap C.m(Object)                                                                                    Ö ÕÙ Ö Ñ ÒØ׺ ClassPath Ñ Ý Ù×            Ý × ÑÔÐ 
Ð ××
  with makePerInstance(new CacheNth(1));                                                            ÐÓ Ö Ø Ø Ò Ú Ö ÐÓÓ × ÙÔ Ø × Ñ Ö ×ÓÙÖ
 ØÛ 
 ¸ Ò Û 
                                                                                                    
 × 
 
 Ò ÛÓÙÐ ÒÓØ Ù× Ùк ÐØ ÖÒ Ø Ú Ðݸ Class-
Ì ÛÖ ÔÔ Ö Ö ØÙÖÒ        Ý makePerInstance() Û ÐÐ Ô¹                                                 Path Ó 
Ø Ñ Ý         Ù× ØÓ ÐÓ ÔÐÙ Ò× ÓÖ × ÖÚÐ Ø׺ ÁÒ
ÔÐÝ Ø    Ö ÙÑ ÒØ ØÓ Ø ÛÖ ÔÔ Ñ Ø Ó        
 ØÑ Ò Û                                                   ×Ù
 
 × ×¸ Ø       × 
ÓÒØ ÒØ× Ñ Ý 
 Ò     ÝÒ Ñ 
 ÐÐÝ Ò
Ö 
 Ú Ö Ó 
Ø × Ò
ÓÙÒØ Ö º Ì ÛÖ ÔÔ Ö Ö ØÙÖÒ           Ý                                              ÐÓÓ ÙÔ Ö ×ÙÐØ× × ÓÙÐ Ò Ú Ö 
 
 º
makePerInstance() 

 ÔØ× Ö 
 Ú Ö Ó ÒÝ ØÝÔ ¸ Û 
                                                           
ÓÑÔ Ð Ö 
 Ò Ò×Ø ÐÐ 
 
 ÓÒ 
 ÐÐ× ØÓ lookup() Ò
 × ÓÙÒ ØÓ thisReceiver ÓÐÐÓÛ       Ý Þ ÖÓ ÓÖ    Ø ÓÒ Ð                                               Ø× ÓÛÒ ClassPath × ÓÐÐÓÛ×
  Ö ÙÑ ÒØ× ×ØÓÖ   Ò argsº Ë Ò
 CacheNth ÐÐÓ
 Ø ×                                                    final ClassPath path = new ClassPath(pathString);

 
     
 Ø Ñ Ø × ÛÓÚ Ò¸ Ø Ö ×ÙÐØ Ó m Û ÐÐ     
 
                                                  wrap ClassPath.lookupString(String) with
ÓÒ Ô Ö¹ Ò×Ø Ò
     × ×º                                                                               new Any conditionalWrapperClassPath(String _)
   CacheNth ÔÖÓÚ × ­ Ü Ð ØÝ Û Ø      ÖÙÒØ Ñ 
Ó×غ ÐÐ                                                  { thisReceiver == path } => Wrappers.cache2nd;
  Ö ÙÑ ÒØ× ØÓ CacheNth Ö Ô 
      ÒØÓ Ò Object[] ÓÒ
 ÒØÖݸ Ò ÙÒÔ 
      Û Ò Ø ÙÒ ÖÐÝ Ò Ñ Ø Ó × 
 ÐÐ º                                                   Ì                 ÓÚ 
Ó           × ÓÛ× ÓÛ 
ÓÒ
 ÖÒ× 
 Ò                       ×Ô Ö Ø         Ú Ö¹
public static class CacheNth extends Wrapper {
  int offset;

    public CacheNth(int offset) { this.offset = offset; }

    public Procedure generate(final Method thisMethod final Procedure wrapped) {
                                                     ,
      final HashMap cache = new HashMap();        // Store results of thisMethod in its own cache

        return new Object procedure(rest Object[] args) {
           Object ret = cache.get(args[offset]);
           if (ret == null && !cache.containsKey(args[offset]))
              {
                ret = wrapped.apply(args);
                cache.put(args[offset], ret);
              }
             return ret;
          };
    }
}


                          ÙÖ ½       
 Ò Ñ Ø Ó Ö ×ÙÐØ×       ×    ÓÒ Ò Ö ØÖ ÖÝ Ö ÙÑ Òغ

public static Wrapper                                        Ø Ú ÐÝ Ò Ð        Ù ÐÓ Ò ØÓ ¬ÐØ Ö ÓÙØ ÙÒ ÑÔÓÖØ ÒØ ÓÙع
makePerInstance(Wrapper wrapper) {                           ÔÙغ
  final Map instanceMap = new WeakHashMap();                    ÇÒ Ó Ø ØÖ 
 ×Ø Ø× Ó 
Ó Ò mayac¸ Ø 
ÓÑÔ Ð Ö ÓÖ
                                                             Å Ý ¸ × Ø Ô ØØ ÖÒ Ô Ö× Öº ÁØ ×Ù 
Ø× ÓØ Ø ÑÔÐ Ø × Ø Ø
    // match any receiver type, any return type and             Ò Ö Ø ËÌ ÒÓ × Ò Ñ 
ÖÓ Ö ÙÑ ÒØ Ð ×Ø× ØÓ × 
ÓÒ
    // any # of args
    return new Any wrapper Any (rest Object[] args) {
                                                             Ð Ú Ð Ó Ô Ö× Ò º Ë ÕÙ Ò
 × Ó ÓÖ Ò ÖÝ ×ÝÒØ Ü ØÖ ÒÓ × Ö
       Procedure proc =                                      ØÖ Ò×Ð Ø ØÓ ØÖ × Ó Ó 
Ø× 
 ÐÐ RightSymbols
         (Procedure) instanceMap.get(thisReceiver);          class PatternParser {
       if (proc == null)                                       RightSymbol parse(Object lhs, Environment env)
         {                                                     { ... }
           proc = wrapper.generate(thisMethod,                 ...
                                   wrapped);                 }
           instanceMap.put(thisReceiver proc);
                                       ,                     class TemplateParser extends PatternParser { ... }
         }                                                   class ArgumentParser extends PatternParser { ... }
       // thisReceiver must be explicitly passed in
       return proc.apply(thisReceiver args);
                                     ,                          Ò ÑÔÐ Ñ ÒØ Ø ÓÒ Ó Ø Å Ý 
ÓÑÔ Ð Ö Ñ Ø ¬Ò × Ú¹
}
    };
                                                               Ö Ð ÓÓÐ Ò Ú Ö Ð × ØÓ 
ÓÒØÖÓÐ « Ö ÒØ ØÝÔ × Ó          Ù
                                                             ÐÓ Ò º ÓÖ Ò×Ø Ò
 ¸ Debug.traceParse ÛÓÙÐ Ò Ð
                                                             ÐÓ Ò Ó Ú ÖÝ ÑÓÚ Ø Ä ÄÊ´½µ Ô Ö× Ö Ñ ×¸ Ò De-
        ÙÖ ¾   ××Ó
 Ø Ò    ÛÖ ÔÔ Ö Û Ø       
 Ö 
 Ú Öº      bug.tracePatternParse ÛÓÙÐ Ò Ð ÐÓ Ò Ó Ú ÖÝ
                                                             ÑÓÚ Ñ         Ý Ø Ô ØØ ÖÒ Ô Ö× Öº
                                                                     Ø Ð ØÖ 
 Ó Ô Ö× Ò 
Ø Ú ØÝ × 
Ö Ø 
 Ð ØÓ ØÖ 
Ø 
 ÐÐÝ ØÛ Ò ×Ó ØÛ Ö Ô 
         ׺ Ò ÔÔÐ 
 Ø ÓÒ 
 Ò 
Ù×¹      ÓÛÒ     Ù Ò Ô ØØ ÖÒ Ô Ö× Ò º ÓÖ Ò×Ø Ò
 ¸ Ø 
ÓÑÔ Ð Ö
ØÓÑ Þ Ø        Ú ÓÖ Ó Ð Ö ÖÝ 
Ð ×× × ×Ù
 × ClassPath Ý       Ñ Ý Ð ÓÒ Ô ÖØ 
ÙÐ Ö Ø ÑÔÐ Ø ÜÔÖ ×× ÓÒ Ø Ø Ò Ö Ø ×
   ¬Ò Ò ×Ô 
Ø× ÓÒ Ø× ÔÙ Ð 
 ÒØ Ö 
 º Ë Ò
 À Ò ¹ÏÖ Ô             Statement ÒÓ º ÌÓ ØÖ 
 ÓÛÒ Ø × Ù ¸ Û ÑÙ×Ø Ó ¹

 Ò Û Ú Ò Ö ×¸ Ð Ö ÖÝ³×            Ú ÓÖ 
 Ò 
 Ò Û Ø ¹        Ø Ò ØÖ 
 Ó Ø Ø ÑÔÐ Ø ÜÔÖ ×× ÓÒ³× Ô Ö× ¸ ÙØ × Ø Ò
ÓÙØ 

 ×× ØÓ ×ÓÙÖ
 
Ó º                                      Ø ÖÓÙ      ØÖ 
 Ó Ø    ÒØ Ö 
ÓÑÔ Ð Ø ÓÒ ÙÒ Ø × Ô Ò Ùк
   À Ò ¹ÏÖ Ô³× ×ÙÔÔÓÖØ ÓÖ 
 
 Ò ÜÔÐÓ Ø× Ñ ÒÝ ÝÒ Ñ 
                 Ò Ö 
 ÛÖ ÔÔ Ö 
 Ò    Ù× ØÓ Ð Ñ Ø      Ù ÓÙØÔÙØ ØÓ
ÂÚ      ØÙÖ ×º    Ö×ظ 
 
 × Ö ××Ó
 Ø Û Ø Ñ Ø Ó ×            Ø     ÝÒ Ñ 
 ÜØ ÒØ Ó Ô ÖØ 
ÙÐ Ö Ñ Ø Ó × ÓÐÐÓÛ×
Ø ÖÓÙ ÒÒ Ö 
Ð ×× 
ÐÓ×ÙÖ ×º Ë 
ÓÒ ¸ ÛÖ ÔÔ Ö          Ú ÓÖ ×   Any wrapper traceParsing(rest Object[] args) {

ÓÒØÖÓÐÐ Ø ÖÓÙ      ÜÔÐ 
 Ø 
ÓÒ×ØÖÙ
ØÓÖ Ô Ö Ñ Ø Ö׺ Ò ÐÐݸ     Debug.traceParse = true;
ÛÖ ÔÔ Ö Ó 
Ø× Ö 
ÓÑÔÓ× ØÓ ¬Ò Ú Ö ØÝ Ó 
 
 ¹                    Debug.tracePatternParse = true;
 Ò ÔÓÐ 
 × ÓÒ 
 
 Ô Ö Ñ Ø Ó ¸ ÓÒ 
 
 Ô Ö Ò×Ø Ò
 ¸              Any ret = wrapped.apply(args);
 Ò ÓÒ Ò×Ø Ò
        Ò 
 
 º ÐØ ÓÙ Ø × ×Ô 
 ¬
 ÔÓÐ ¹            Debug.tracePatternParse = false;

 ×
 Ò      ÑÔÐ Ñ ÒØ Ò ×Ø Ø 
 ×Ô 
Ø Ð Ò Ù ¸ À Ò ¹              Debug.traceParse = false;
ÏÖ Ô³× 
Ó ¹Ö Ù× Ñ 
 Ò ×Ñ× ÔÖÓÚ               ­ Ü Ð Øݺ ÓÖ    }
                                                               return ret;
 Ü ÑÔÐ ¸ Ô Ö¹ Ò×Ø Ò
      Ú 
 × ÑÔÐ Ñ ÒØ       × 
ÓÑÔÓ×¹
   Ð ÛÖ ÔÔ Ö Ö Ø Ö Ø Ò Ò Û Ð Ò Ù             ØÙÖ º           Ì traceParsing ÛÖ ÔÔ Ö 
ÓÙÐ             ¬Ò ÑÓÖ 
 Ö ¹
                                                              ÙÐÐÝ ØÓ Ò Ð Ö 
ÙÖ× ÓÒ Ò Ü
 ÔØ ÓÒ׸ ÙØ Ø       ÓÚ   ¹
2.3 Controlling Debug Output                                  Ò Ø ÓÒ ×ÙÆ
 × ÓÖ Ø    Ù Ò ÔÖÓ Ð Ñ Ø Ò º
 ÐØ ÓÙ ØÖ 
 Ò Ñ Ø Ó ÒÚÓ
 Ø ÓÒ× × Ò ÑÔÓÖØ ÒØ ¹                   Ï Ú Ò Ø × ÛÖ ÔÔ Ö ÒØÓ PatternParser.parse()
 Ù Ò ØÓÓи ×ÓÑ Ø Ñ × Ø × ×Ø ÐÐ Ò 
 ×× ÖÝ ØÓ Ö ×ÓÖØ ØÓ        Ö Ù
 × Ø     ÑÓÙÒØ Ó ÜØÖ Ò ÓÙ×     Ù ÓÙØÔÙظ ÙØ Ó ×
printlnº  ÝÒ Ñ 
 ×Ô 
Ø Û Ú Ò 
 Ò        Ù× ØÓ × Ð 
¹         ÒÓØ Ð Ñ Ò Ø Ø ÒØ Ö Ðݺ ÓÖ ØØ Ö Ö ×ÙÐØ׸ Û 
 Ò Ù× tra-
class C {                                                     static public Runnable m() {
  static private boolean once = false;                          return new Runnable() {
  static public Runnable m() {                                     public wrapped(Wrappers.tracer) void run()
    class R implements Runnable {                                  { ... }
      public void run() { ... }                                 };
    }                                                         }
    if (Debug.traceRuns && !once) {
      // Wrapping R effects all instantiations of
      // R, just as instanceof matches any
                                                              À Ö ¸ Ø Ñ Ø Ó ÑÓ ¬ Ö wrapped(Wrappers.tracer)
      // instantiation of R. Only trace it once.              × Ò Ð× Ø Ø Ø Ñ Ø Ó run() × ÓÙÐ        ÛÖ ÔÔ     Ò
      wrap R.run() with Wrappers.tracer;                      ØÖ 
 Öº Ì ÜÔÖ ×× ÓÒ Wrappers.tracer × Ú ÐÙ Ø Ò
      once = true;                                            ÛÖ ÔÔ Ò × Ô Ö ÓÖÑ Ò Ø ØÓÔ¹Ð Ú Ð 
Ð ×× C³× ×Ø Ø 
 Ò ¹
    }                                                         Ø Ð Þ Ö׺
    return new R();
  }
}


    ÙÖ ¿     Ò Ü ÑÔÐ Ó ÛÖ ÔÔ Ò Ñ Ø Ó × Ó ÐÓ
 Ð                3. IMPLEMENTING HANDI-WRAP

Ð ×× ×º                                                      À Ò ¹ÏÖ Ô Ò Ö Ø × ×Ø Ò Ö Â Ú ÝØ 
Ó º Á ÂÎÅ
                                                              
ÓÑÔ Ø Ð ØÝ Û Ö ÒÓØ Ò ××Ù ¸ Ò ÑÔÐ Ñ ÒØ Ø ÓÒ Ñ Ø
                                                               ÒÚÓÐÚ ÝÒ Ñ 
 ÐÐÝ ÙÔ Ø Ò ÚØ Ð ×º Ú Ò Ø 
ÓÒ×ØÖ ÒØ×
ceParsing ØÓ    ÙÐ    ÛÖ ÔÔ Ö Ø Ø Ò Ð × ÐÓ      Ò   Ü 
ØÐÝ    Ó Ø ÂΟ À Ò ¹ÏÖ Ô 
 Ú × ÓÓ Ô Ö ÓÖÑ Ò
 Ø ÖÓÙ
Û Ö Ø ×Ò                                                      Ø Ù× Ó 
 Ö ÙÐÐÝ 
 Ó× Ò Ø ×ØÖÙ
ØÙÖ ×¸ Ò Ý ÓÔ Ò¹
wrap PatternParser.parse(Object,Environment)                  
Ó Ò Ñ Ø Ó ³× ÓÖ Ò Ð ¬Ò Ø ÓÒ Ò Ø × Ñ ÂÎÅ Ñ ¹
with new RightSymbol conditionalWrapper                       Ø Ó Ø Ø ×Ô Ø
 × ÛÖ ÔÔ Ö׺ À Ò ¹ÏÖ Ô³× ÑÔÐ Ñ ÒØ ¹
         PatternParser(Object lhs, Environment env)           Ø ÓÒ 
 × ÓÒ× Ö         × ÓÒ Ø        ××ÙÑÔØ ÓÒ Ø Ø Ø Ú ×Ø
         { thisReceiver instanceof TemplateParser
           && lhs instanceof Type                             Ñ ÓÖ ØÝ Ó Ñ Ø Ó × Û ÐÐ ÒÓØ ÛÖ ÔÔ º
           && (((Type) lhs).getReflectClass()                     À Ò ¹ÏÖ Ô × ÑÔÐ Ñ ÒØ           ×     ÖÓÙÔ Ó 
ÓÓÔ Ö Ø Ò
               == Statement.class) }                          Ñ 
ÖÓ× ÛÖ ØØ Ò Ò Å Ý º Å Ý × Ò ÜØ Ò× ÓÒ Ó Â Ú Ø Ø
         => traceParsing;                                       ÐÐÓÛ× Ù× Ö× ØÓ ÛÖ Ø Ø Ö ÓÛÒ ×ÝÒØ Ü ÜØ Ò× ÓÒ׸ Û 
 Ö
                                                              
 ÐÐ Å Ý Ò׺ Å Ý Ò× 
 Ò Ö ÒØ ÖÔÖ Ø ÓÖ ÜØ Ò Å Ý ×ÝÒ¹
  ÏÖ ÔÔ Ö× Ö ÛÓÚ Ò ÒØÓ Ñ Ø Ó          ¬Ò Ø ÓÒ׸ Ö Ø Ö Ø Ò     Ø Ü Ý ÜÔ Ò Ò Ø ØÓ ÓØ Ö Å Ý ×ÝÒØ Ü Ø Ý ÓÔ Ö Ø
 Ö ØÖ ÖÝ Ö 
 Ú Ö¸ × Ò ØÙÖ Ô Ö׺ Ì Ö ÓÖ ¸ Ø             ÓÚ     ÓÒ ×ØÖ 
Ø ×ÝÒØ Ü ØÖ ×¸ Ò Ø Ö ÜÔ Ò× ÓÒ × ØÖ Ö
ÛÖ ÔÔ Ö ÑÙ×Ø       ÛÓÚ Ò ÒØÓ parse Ò Ø× 
Ð Ö Ò 
Ð ×׸           ÙÖ Ò Ô Ö× Ò × × Ñ ÒØ 
 
Ø ÓÒ׺ Å Ý ³× ÜÔÖ ×× Ú Ò ××
PatternParser¸ Ò Ø ÑÙ×Ø ÜÔÐ 
 ØÐÝ 
 
 ÓÖ Ø Ö ¹                
ÓÑ × ÖÓÑ ØÖ Ø Ò Ö ÑÑ Ö ÔÖÓ Ù
Ø ÓÒ× × Ò Ö 
 ÙÒ
¹

 Ú Ö 
Ð ×× TemplateParserº Ï Ð À Ò ¹ÏÖ Ô³× Û Ú¹              Ø ÓÒ׸ Ò Å Ý Ò× × ÑÙÐØ ¹Ñ Ø Ó × ÓÒ Ø Ó× Ò Ö 
 ÙÒ
¹
 Ò Ñ 
 Ò ×Ñ × ÜØÖ Ñ ÐÝ × ÑÔÐ ¸ ­ Ü Ð ÔÓÐ 
 × 
ÓÙÐ             Ø ÓÒ׺ Å Ý Ò× Ñ Ý ÓÚ ÖÖ Ø ØÖ Ò×Ð Ø ÓÒ Ó Ù ÐØ Ò ÔÖÓ¹
     Ù ÐØ ÓÒ ØÓÔ Ó Øº ÓÖ Ò×Ø Ò
 ¸ Û Ð 
 Ö Ñ Ø
 Ò 
ÓÙÐ           Ù
Ø ÓÒ׸ Ò Ñ Ý        Ò Û ÔÖÓ Ù
Ø ÓÒ× ØÓ Å Ý ³× Ä ÄÊ´½µ
Û Ú ÛÖ ÔÔ Ö ÒØÓ Ñ Ø Ó            ¬Ò Ø ÓÒ Ò ÐÐ ÓÚ ÖÖ Ò           Ö ÑÑ Öº
  ¬Ò Ø ÓÒ׺                                                       À Ò ¹ÏÖ Ô³× ÑÔÐ Ñ ÒØ Ø ÓÒ Ô Ö ÓÖÑ× Ú Ö ØÝ Ó Ø × ×
  Ä ÓØ Ö ×Ô 
Ø ×Ý×Ø Ñ׸ À Ò ¹ÏÖ Ô 
 Ò Ö Ù
                ¹    ÓÖ Û 
 Å Ý × Ô ÖØ 
ÙÐ ÖÐÝ Û ÐÐ ×Ù Ø º Ö×ظ 
Ó ØÓ
Ú ÐÓÔÑ ÒØ Ø Ñ Ý Ù Ñ ÒØ Ò println Ò ÒØ Ö 
Ø Ú                    Ò Ð ÛÖ ÔÔ Ò × ÛÓÚ Ò ÒØÓ 
 
Ð ×× 
Ð Ö Ø ÓÒ Ò Ø
    Ù Ö× Û Ø ØÖ 
 Ò ¸ 
ÓÒØÖ 
Ø Ò ÓÖ
 Ñ Òظ Ò ×Ó ÓÒº           
ÓÑÔÓÒ ÒØ ÔÖÓ Ö Ñº Ì ÔÖÓÐÓ Ù ÛÓÚ Ò ÒØÓ 
 Ñ Ø Ó
À Ò ¹ÏÖ Ô × Ò Ú ÒØ             ÓÚ Ö ×Ø Ø 
 ×Ô 
Ø Û Ú Ò         × Ò Ö Ø ÔÖÓ Ö ÑÑ Ø 
 ÐÐݸ × ÓÒ Ø Ñ Ø Ó ³× × ¹
×Ý×Ø Ñ× Ò Ø Ø ×Ô 
Ø× 
 Ò       ÛÓÚ Ò Û Ø ÓÙØ Ö 
ÓÑÔ Ð Ò       Ò ØÙÖ º Ë 
ÓÒ ¸ Ñ 
ÖÓ× Ò
 Ô×ÙÐ Ø Ò Æ
 ÒØ ÔÖÓ
 ÙÖ ¹
Ø Û Ú Ò Ø Ö Øº                                                
 ÐÐ Ò 
ÓÒÚ ÒØ ÓÒ ÓÖÖÓÛ ÖÓÑ Ø Ã Û ℄ Ë
 Ñ ØÓ
                                                              Â Ú ÝØ 
Ó 
ÓÑÔ Ð Öº Ì Ö ¸ À Ò ¹ÏÖ Ô                 × Ú Ö¹
2.4 Wrapping Unmentionable Methods                              ØÝ Ó ×ÝÒØ 
Ø 
 ÓÖÑ× ØÓ Â Ú º Ì × × ÔÓ×× Ð × Ò
 Å Ý
À Ò ¹ÏÖ Ô³× Ø Ø ÒØ Ö Ø ÓÒ Û Ø Â Ú Ô ÖÑ Ø× ×ØÖ 
ØÐÝ              ÐÐÓÛ× Ø× Ö ÑÑ Ö ØÓ        ÜØ Ò       Ò Ö ØÖ ÖÝ Û Ý׺
ÑÓÖ Û Ú Ò Ø Ò ×Ø Ø 
 ×Ô 
Ø Ð Ò Ù × ÐÐÓÛº À Ò ¹                    Ï Ð ÑÙ
 Ó À Ò ¹ÏÖ Ô × ÑÔÐ Ñ ÒØ Ø ÖÓÙ ×ÝÒ¹
ÏÖ Ô ÜØ Ò × Ø Ð Ò Ù         Ó ×Ø Ø Ñ ÒØ× Ò ÜÔÖ ×× ÓÒ׺        Ø Ü ÜØ Ò× ÓÒ׸ ØÛÓ ÑÔÓÖØ ÒØ ØÙÖ × Ö ÒÓØ À Ò ¹ÏÖ Ô
ÁÒ 
ÓÑÔ Ö ×ÓÒ¸ ×Ô 
ØÂ ÓÒÐÝ ÜØ Ò × Ø Ð Ò Ù          Ó ØÓÔ¹         Ò Ö Ø × 
Ó ØÓ 
 ÐÐ ÛÖ ÔÔ Ñ Ø Ó ³× ÓÖ Ò Ð ¬Ò Ø ÓÒ
Ð Ú Ð 
Ð Ö Ø ÓÒ׺ × Ö ×ÙÐØ Ó À Ò ¹ÏÖ Ô³× ÜÔÖ ×× Ú ¹            ÖÓÑ ÛÖ ÔÔ Ö× ÝÒ Ñ 
 ÐÐݸ Ò 
Ó ØÓ Ò Ð ÛÖ ÔÔ Ò Ó
Ò ×׸ ÛÖ ÔÔ Ö× 
 Ò     ÛÓÚ Ò ÒØÓ Ñ Ø Ó × Ø Ø 
 ÒÒÓØ           ÔÖ 
ÓÑÔ Ð Ð Ö Ö × × ÑÔÐ Ñ ÒØ Ù× Ò               Ò ÖÝ Ö ÛÖ Ø Ö
Ò Ñ      Ø Ø ØÓÔ Ð Ú Ðº ÁÒ Ô ÖØ 
ÙÐ Ö¸ Ñ Ø Ó × Ò ÐÓ
 Ð Ò          × ÓÒ Ø       ÝØ 
Ó    Ò Ò Ö Ò Ä Ö ÖÝ ½¿℄º Ï Ø ÓÙØ
 ÒÓÒÝÑÓÙ× 
Ð ×× × 
 Ò ÛÖ ÔÔ º           ÙÖ ¿ × ÓÛ× wrap       Ø      ÝØ 
Ó Ö ÛÖ Ø Ö¸ ÛÖ ÔÔ Ö× 
ÓÙÐ ÓÒÐÝ         ÝÒ Ñ 
 ÐÐÝ
×Ø Ø Ñ ÒØ Ø Ø 
 Ò ÓÒÐÝ ÔÔ Ö Ò×         ÑÔÐ Ñ ÒØ Ø ÓÒ 
Ó º     ÛÓÚ Ò ÒØÓ Ñ Ø Ó × 
ÓÑÔ Ð         Ý À Ò ¹ÏÖ Ôº
À Ö Ø ÐÓ
 Ð 
Ð ×× R 
 Ò ÓÒÐÝ         Ò Ñ Û Ø Ò C.m()º              Þ ÖÒ 
 Ò        × Ò 
 Ö ½¾℄ ×
Ö ØÛÓ × 
 Û Ý× ØÓ
ÆÓØ 
 Ø Ø wrap R.run() ÔÔÐ × ØÓ ÐÐ Ò×Ø Ò
 × Ó R¸               ÑÔÐ Ñ ÒØ ×Ô 
Ø׺ Ö×ظ ×ÓÙÖ
 
Ó ØÖ Ò× ÓÖÑ Ø ÓÒ 
 Ò
Ö Ö Ð ×× Ó Û Ø Ö Ø Ý Ö ÐÐÓ
 Ø             Ý Ø 
ÙÖÖ ÒØ Ò¹           Ù× ØÓ ×Ø Ø 
 ÐÐÝ Û Ú ×Ô 
Ø× ÒØÓ Ø           × ÔÖÓ Ö Ñ¸
ÚÓ
 Ø ÓÒ Ó mº ÁÒ Ø × Ö ×Ô 
ظ wrap Ñ Ø
 × Ø           Ú ÓÖ      × Ò ×Ô 
غ Ë 
ÓÒ ¸ ÝÒ Ñ 
 Ö ­ 
Ø ÓÒ Ñ 
 Ò ×Ñ× 
 Ò
Ó instanceof Ò 
 ×Ø׸ 
 Ù× ÐÓ
 Ð 
Ð ×× × Ö Ñ Ö ÐÝ                  Ù× ØÓ Û Ú 
Ó          Ø ÖÙÒØ Ñ º À Ò ¹ÏÖ Ô Ø ×
×ÝÒØ 
Ø 
 ×Ù Öº                                               Ñ Ð ÔÔÖÓ 
 
ÓÑÔ Ð ¹Ø Ñ Ö ­ 
Ø ÓÒ ´ Ò Ò ×ÓÑ 
 × ×
  À Ò ¹ÏÖ Ô Ð×Ó ÐÐÓÛ× Ñ Ø Ó × Ò ÒÓÒÝÑÓÙ× 
Ð ×× × ØÓ             ÝØ 
Ó Ö ÛÖ Ø Ò µ × Ù× ØÓ Ò× ÖØ Ñ Ò Ñ Ð ÓÓ × Ø Ø
   ÛÖ ÔÔ                                                        ÐÐÓÛ ÝÒ Ñ 
 ÛÖ ÔÔ Ò º
3.1 Wrapping                                                    Ö ×ØÖ 
Ø ÓÒ ÔÖ Ú ÒØ× ÛÖ ÔÔ Ö× ÖÓÑ Ø ÖÓÛ Ò 
 
          Ü
 Ô¹
À Ò ¹ÏÖ Ô Ù Ð × ÛÖ ÔÔ Ñ Ø Ó              ¬Ò Ø ÓÒ× ÖÓÑ ÛÖ Ô¹     Ø ÓÒ× ÜÔÐ 
 ØÐݸ ÙØ Ó × ÒÓØ Ð Ñ Ø Ø × Ø Ó Ñ Ø Ó × Ø Ø
Ô ÔÖÓ
 ÙÖ × Ø ÖÓÙ Ø Ñ Ø Ó Wrapper.generate()º                   ÑÝ        ÛÖ ÔÔ º Ë Ò
 ÓØØÓÑ ÔÖÓ
 ÙÖ × Ö            ÒÖ Ø
Ì ØÛÓ 
 ÐÐ Ò × Ò ÑÔÐ Ñ ÒØ Ò ÛÖ ÔÔ Ö× Ö Ö ÔÐ 
 Ò                   ÝÒ Ñ 
 ÐÐÝ Ø Ø      ÝØ 
Ó Ð Ú Ð¸ Ø Ý Ö ×Ù 
Ø ØÓ Â Ú
  Ò ÓÖ Ò Ð Ñ Ø Ó         ¬Ò Ø ÓÒ Û Ø ÛÖ ÔÔ Ö ÔÖÓ
 ÙÖ Ò          Î ÖØÙ Ð Å 
 Ò ØÝÔ ¹
 
 Ò ÖÙР׸ Ö Ø Ö Ø Ò Ø ×Ð ØÐÝ
   Ò Ö Ø Ò ÛÖ ÔÔ ÔÖÓ
 ÙÖ 
ÓÖÖ ×ÔÓÒ Ò ØÓ Ò ÓÖ ¹                  ÑÓÖ Ö ×ØÖ 
Ø Ú Â Ú Ð Ò Ù         ÖÙР׺ ËÔ 
 ¬
 ÐÐݸ ÓØØÓÑ
Ò ÐÑ Ø Ó         ¬Ò Ø ÓÒº Ì ¬Ö×Ø 
 ÐÐ Ò × Ñ Ø Ý Û Ú Ò           ÔÖÓ
 ÙÖ × 
 Ò Ò Ó             Ø    
Ð Ö   Ü
 ÔØ ÓÒ× Ø ÖÓÛÒ
  ÓÓ × ÒØÓ 
ÓÑÔÓÒ ÒØ 
Ó ¸ Ò Ø × 
ÓÒ 
 ÐÐ Ò × Ñ Ø                  Ý ÔÖÓ
 ÙÖ × Ø Ý 
 Ðи × Ò
 Ø ÂÎÅ Ó × ÒÓØ 
ÓÒ×ØÖ Ò
Ù× Ò ÝÒ Ñ 
 
Ó            Ò Ö Ø ÓÒº                             Ø     Ü
 ÔØ ÓÒ× Ø Ø Ñ Ø Ó Ñ Ý Ø ÖÓÛº
   ÌÓ ×ÙÔÔÓÖØ ÛÖ ÔÔ Ò ¸ À Ò ¹ÏÖ Ô          × ×Ø Ø 
 ¬ Ð ØÓ         ËØ Ø 
 
 
 Ò 
ÓÙÐ          ÑÔÖÓÚ     Ý ÒØÖÓ Ù
 Ò ÛÖ Ô¹
   
 
Ð ×× Ò        ÔÖÓÐÓ Ù ØÓ 
 Ñ Ø Ó Ó Ýº Ì ¬ Ð               Ô Ö Ò ÔÖÓ
 ÙÖ × Ò ØÙÖ × ØÓ Ø Ð Ò Ù º ÓÖ Ò×Ø Ò
 ¸
proc$ ÓÐ × Ò ÖÖ Ý Ó ÛÖ ÔÔ Ö ÔÖÓ
 ÙÖ ×º Ì × Ö¹                   Ø ØÝÔ Ó ÛÖ ÔÔ Ö× ÔÔÐ 
 Ð ØÓ Object.hashCode()
ÖÝ ×Ð          ÚØ Ð Ü
 ÔØ Ø Ø Ø Ò
ÐÙ × ×Ø Ø 
 Ñ Ø Ó ×             Ò System.identityHashCode() 
ÓÙÐ                ÛÖ ØØ Ò ×
  Ò Ü
ÐÙ × Ò Ö Ø Ñ Ø Ó ×º ÐÐ proc$ ÒØÖ × Ö Ò ¹                  wrapper<Object -> int>º ÀÓÛ Ú Ö¸ ÔÓÐÝÑÓÖÔ 
 ØÝÔ
Ø ÐÐÝ ÒÙÐк À Ò ¹ÏÖ Ô Ò× ÖØ× ÔÖÓÐÓ Ù ÖÓÙÒ            
 ѹ       ×Ý×Ø Ñ ÛÓÙÐ       Ò        ØÓ 
 ÔØÙÖ Ø        Ú ÓÖ Ó Ñ Ø ¹
Ø Ó Ñ Ø × ÔÖÓÐÓ Ù 
 
 × Û Ø Ö Ø Ñ Ø Ó                ×     Ò    Ó × ×Ù
 × makePerInstance() Ò makeCondition-
ÛÖ ÔÔ       Ý 
ÓÑÔ Ö Ò proc$[i] Û Ø ÒÙÐк Á ÛÖ ÔÔ Ö             alWrapper()º
 × ¬Ò ¸ Ñ 
 ÐÐ× Ø ÖÓÙ proc$[i]¸ ÓÜ Ò Ö ÙÑ ÒØ×
  Ò ÙÒ ÓÜ Ò Ø Ö ØÙÖÒ Ú ÐÙ × Ò              º ÇØ ÖÛ × ¸ Ø        4. PERFORMANCE
ÓÖ Ò Ð Ñ Ø Ó          ¬Ò Ø ÓÒ × Ü 
ÙØ º                         ÁÒ Ø × × 
Ø ÓÒ¸ Û 
ÓÑÔ Ö À Ò ¹ÏÖ Ô ØÓ ×Ø Ø 
 ×Ô 
Ø
   À Ò ¹ÏÖ Ô Ù× × Ø Ã Û Ë
 Ñ ×Ý×Ø Ñ³× 
 ÐÐ Ò 
ÓÒ¹               Ð Ò Ù ¸ ×Ô 
ظ Ò Ú ÐÙ Ø Ø ÓÚ Ö                    Ó À Ò ¹
Ú ÒØ ÓÒ¸ Û 
 × ÑÓÖ Æ
 ÒØ Ø Ò ×Ø Ò Ö Â Ú ÒØ Ö¹                   ÏÖ Ô³× 
ÓÑÔ Ð ¹Ø Ñ ØÖ Ò× ÓÖÑ Ø ÓÒ׺ Ì ×Ø× Û Ö ÖÙÒ ÓÒ
   
 × ×Ù
 × Method.invoke()º ÐØ ÓÙ À Ò ¹ÏÖ Ô                       Ù Ð ¿ ¼Å Þ È ÒØ ÙÑ ÁÁ Ñ 
 Ò Û Ø ¾ Å Ó Ñ Ñ¹
×ÙÔÔÓÖØ× ÔÖÓ
 ÙÖ × Ø Ø Ø            Ú Ö Ð ÒÙÑ Ö Ó Ö Ù¹          ÓÖݺ Ì ×Ø× Û Ö ÖÙÒ Ù× Ò Â Ã¹½º¿º½ Ù× Ò Ò Ø Ú Ø Ö ×
Ñ ÒØ׸ Ø       ÐÐÓ
 Ø ÓÒ Ó Ö ÙÑ ÒØ ÖÖ Ý× 
 Ò         ÚÓ           Ò Ø ÀÓØ×ÔÓØ 
Ð ÒØ 
ÓÑÔ Ð Ö ÙÒ Ö              Ò Ä ÒÙÜ Û Ø
 Ò Ñ ÒÝ 
 × ×º Ð×Ó¸ À Ò ¹ÏÖ Ô ÚÓ × ÝÒ Ñ 
 ÐÐÝ ÐÐÓ¹                 Ú Ö× ÓÒ ¾º¾º½¾ ÖÒ Ðº ÁÒ ÓØ Ø À Ò ¹ÏÖ Ô Ò ×¹

 Ø Ò ÓÜ Ö ÔÖ × ÒØ Ø ÓÒ× Ó ×Ñ ÐÐ ÒØ Ö× Ø ÖÓÙ Ø                  Ô 
ØÂ Ø ×Ø׸ Ø      Ð ××È Ø Ð Ö ÖÝ Û × 
ÓÑÔ Ð Û Ø Â Ã¹
­ÝÛ Ø Ô ØØ ÖÒº                                                  ½º¿º½³× javacº ÓÖ À Ò ¹ÏÖ Ô Ø ×Ø׸ Ø 
ÓÑÔ Ð Ð Ö ÖÝ
   ÌÓ ÛÖ Ô Ñ Ø Ó Ñ ¸ Û × Ø proc$[i] ØÓ Ø ÔÖÓ
 ÙÖ                Û × Ö ØÖÓ¬ØØ Û Ø Ø Ö ÕÙ Ö          ÓÓ ×¸ Ò Ø Ø ×Ø Ö Ñ ¹
Ö ØÙÖÒ      Ý generate()º Á ÓØ Ö ÛÖ ÔÔ Ö× Ú ÐÖ Ý                ÛÓÖ Û × 
ÓÑÔ Ð Û Ø mayacº ÓÖ ×Ô 
ØÂ Ø ×Ø׸ Ø Ø ×Ø
     Ò ÛÓÚ Ò ÒØÓ Ñ ¸ Ø × 
ÓÒ Ö ÙÑ ÒØ ØÓ generate() ×             Ö Ñ ÛÓÖ Û × 
ÓÑÔ Ð Û Ø javacº
Ø ÔÖ Ú ÓÙ× Ú ÐÙ Ó proc$[i]º ÇØ ÖÛ × ¸ ÓØØÓÑ ÔÖÓ¹                   Ï Ñ ×ÙÖ Ø Û ÐÐ¹Ø Ñ Ø Ò ØÓ Ô Ö ÓÖÑ × Ö × Ó

 ÙÖ Ó 
Ø ÑÙ×Ø 
ÓÒ×ØÖÙ
Ø ÓÖ Ø Ñ Ø Ó ³× ÓÖ Ò Ð                         
 ÐÐ× ØÓ ClassPath.lookup() Ó Ø Ò           Ý ØÖ 
 Ò
   ¬Ò Ø ÓÒº                                                     mayac ÖÙÒº Ç Ø × 
 ÐÐ׸ ½¼             ×Ø Ò
Ø Ö ÙÑ ÒØ× Ò
   À Ò ¹ÏÖ Ô Ñ × Ñ Ø Ó ³× ÓÖ Ò Ð ¬Ò Ø ÓÒ Ú Ð¹                   ½¼ Ö ØÙÖÒ ÒÓÒ¹ÒÙÐк 
 Ó Ø ½¼ ×Ù

 ×× ÙÐ 
 ÐÐ× Û ×
    Ð Ý 
ÓÔÝ Ò Ø ÒØÓ Ò Û Ñ Ø Ó Ø Ø 
 Ò                
 ÐÐ      Ñ      ÛØ         ×Ø Ò
Ø Ö ÙÑ Òظ × Ò
 ×Ù

 ×× ÙÐ 
 ÐÐ×
 ÖÓÑ      ÓØØÓÑ ÔÖÓ
 ÙÖ º À Ò ¹ÏÖ Ô Ò Ö Ø ×           ÓØØÓÑ     ØÝÔ × ØÓ Ò Ñ ×Ô 
 º
ÔÖÓ
 ÙÖ       ¬Ò Ø ÓÒ ÝÒ Ñ 
 ÐÐÝ Ø ¬Ö×Ø Ø Ñ Ñ Ø Ó ×                Ì Ð ¾ × ÓÛ× Ø ÒÙÑ Ö Ó × 
ÓÒ × ×Ô ÒØ Ü 
ÙØ Ò Ø
ÛÖ ÔÔ º Ì            Ò Ö Ø 
Ó       ÚÓ × Ø ÓÚ Ö       Ó Ò¹      ClassPath Ò
 Ñ Ö Ò × Ú Ö Ð 
ÓÒ¬ ÙÖ Ø ÓÒ׺ Ì ¬Ö×Ø
ÚÓ Ò Ñ Ø Ó × Ø ÖÓÙ Ø Â Ú Ö ­ 
Ø ÓÒ ÈÁº ÇÒ 
ÓÙÐ                  Ð Ò × ÓÛ× × Ñ ×ÙÖ Ñ ÒØ× Û Ø ÒÓ ÛÖ ÔÔ Ò º ËÙ × ¹
 Ò×Ø     ×Ø Ø 
 ÐÐÝ Ò Ö Ø Procedure ×Ù 
Ð ×× ÓÖ 
               ÕÙ ÒØ Ð Ò × Ú Ø Ö ×ÙÐØ Ó           Ò Ú Ö ÓÙ× 
 
 × ÖÓÙÒ
Ñ Ø Ó Ò Ø 
ÓÑÔÓÒ ÒØ 
Ó ¸ ÙØ Ø × ÛÓÙÐ Ñ                     ×¹   ClassPath.lookup() ÓÒ 
 
 × Ö                   ØÛ Ò ÐÐ Ò¹
ØÖ ÙØ       Ò Ö × ÒÓÖ Ò Ø ÐÝ Ð Ö º                              ×Ø Ò
 × 
 
 ÓÖ 
 Ò×Ø Ò
                ¬Ò Ù× Ò ×Ô 
س×
                                                                pertarget ××Ó
 Ø ÓÒ¸          Ò ¹
Ó     ÛÖ ÔÔ Ö¸ Ò À Ò ¹
3.2 Type Checking                                               ÏÖ Ô³× makePerInstance() Ò 
 
 ÓÒ ÓÒ Ô ÖØ 
Ù¹
À  Ò ¹ÏÖ Ô ÑÔÐ Ñ ÒØ× ×Ø Ø 
 ØÝÔ 
 
 Ò × Ø Ò Ú ¹                 Ð Ö Ò×Ø Ò
       ¬Ò Ù× Ò ×Ô 
ØÂ³× if Ó Ò ÔÓ ÒØ × Ò ¹
Ò   Ö ÓÚ Ö ÝÒ Ñ 
 ÐÐÝ ØÝÔ     × Òº ÁÒ ÔÖ 
Ø 
 ¸ Ø wrap          ØÓÖ¸      Ò ¹
Ó       ÛÖ ÔÔ Ö¸ Ò À Ò ¹ÏÖ Ô³× makeCon-
×Ø Ø Ñ ÒØ ÔÖÓÚ × ÑÓ×Ø Ó Ø      Ò ¬Ø× Ó ×Ø Ø 
 ØÝÔ 
 
 ¹         ditionalWrapper()º Ò ÓÔØ Ñ Þ ÛÖ ÔÔ Ö Ø Ø ÚÓ ×
 Ò º Ï Ø ÓÙØ wrap¸ Û Ú Ò ÛÓÙÐ ÒÚÓÐÚ × Ö × Ó Ø ¹                 ×ØÓÖ Ò ÒÙÐÐ Ú ÐÙ × ÒØÓ × Ø Ð × Û × Ð×Ó Ø ×Ø º Ì
  ÓÙ× Ò ÖÖÓÖ¹ÔÖÓÒ 
 ÐÐ× ØÓ Ø Â Ú Ö ­ 
Ø ÓÒ ÈÁ Ò                 
ÓÐÙÑÒ× Ô 
Ø × Ú Ö Ð ÑÔÐ Ñ ÒØ Ø ÓÒ ×ØÖ Ø ×             ×Ø Ø 
Û 
 Ñ Ø Ó × Ò ØÝÔ × Ö Ò
Ó            × ×ØÖ Ò ×º                  ÑÔÐ Ñ ÒØ Ø ÓÒ Ò ×Ô 
ظ          Ò ¹
Ó      ÛÖ ÔÔ Ö¸ ÛÖ Ô¹
   Ì wrap ×Ø Ø Ñ ÒØ ×Ø Ø 
 ÐÐÝ Ò×ÙÖ × Ø Ø Ø Ö × Ñ ¹             Ô Ö× Ö Ú ÖÓÑ cache2nd¸ Ò ÛÖ ÔÔ Ö× Ö Ú ÖÓÑ
Ø Ó ØÓ ÛÖ Ôº Ì wrap ×Ø Ø Ñ ÒØ Ð×Ó 
 
 × Ø Ø ÛÖ Ô¹               CacheNthº
Ô Ö× Ö ÛÓÚ Ò ÒØÓ Ñ Ø Ó × Û Ø 
ÓÑÔ Ø Ð × Ò ØÙÖ ×º                   ÁÒ Ø × Ü ÑÔÐ ¸ À Ò ¹ÏÖ Ô ÑÔÓ× × Ò 

 ÔØ Ð ÓÚ Ö¹
Ç Ø Ò¸ Ø × 
 
 × Ö Ô Ö ÓÖÑ ×Ø Ø 
 ÐÐݸ × ÓÒ Ø                           Ï Ú Ò cache2nd ÖÓÙÒ           × Ò Ð ClassPath Ò¹

ÓÒ
Ö Ø ØÝÔ Ó Ø ÛÖ ÔÔ Ö¸ ÙØ Ò ×ÓÑ 
 × × Ø × 
 
 ×               ×Ø Ò
 × ÖÓÙ ÐÝ ½ ± ×ÐÓÛ Ö Ø Ò Û Ú Ò ×Ô 
ØÂ Ú 
 º
ÑÙ×Ø        ÖÖ ØÓ ÖÙÒØ Ñ º ÓÖ Ò×Ø Ò
 ¸ ×Ø Ø 
 Ò ÓÖÑ ¹                ×Ô 
ØÂ³× ×Ø Ø 
 Ò ØÙÖ ÔÖÓÚ × ÂÎÅ× Û Ø ÑÓÖ 
 Ò
 ×
Ø ÓÒ × ÒÓØ Ú Ð Ð Û Ò Ñ Ø Ó Ö ØÙÖÒ× Ò ÒÓÒÝÑÓÙ×                    ÓÖ ÓÔØ Ñ Þ Ø ÓÒº ÓÖ Ò×Ø Ò
 ¸ ×Ô 
ØÂ Û Ú × 
 ÐÐ× ØÓ ÔÖ ¹
ÛÖ ÔÔ Ö Ò×Ø Ò
 º ÏÖ ÔÔ Ö× 
 Ò Ð×Ó           ¬Ò    Ý ×Ù ¹        Ú Ø Ñ Ø Ó × ÒØÓ 
Ó Û Ö À Ò ¹ÏÖ Ô Û Ú × Ú ÖØÙ Ð

Ð ×× Ò Wrapper¸ Ò Û 
 
 × À Ò ¹ÏÖ Ô Ó × ÒÓØ ×                   ÙÒ
Ø ÓÒ 
 ÐÐ׺ ÀÓÛ Ú Ö¸ ËÙÒ³× ÝÒ Ñ 
 
ÓÑÔ Ð Ö Ó × ÒÓØ
Ø Ö × Ò ØÙÖ ×º ÁÒ ×Ù
 
 × ×¸ Ø ÂÎÅ Ò ÓÖ
 × ÝÒ Ñ 
                  Ò ¬Ø ÖÓÑ Ø × ÒÐ Ò Ò ÒØ× × Ö cache2nd ÛÖ Ô¹
ØÝÔ × Øݺ                                                       Ô Ö × ÒÓ Ð ×× Æ
 ÒØ Ø Ò ÙÒ
ÓÒ Ø ÓÒ Ð Ú 
 Ò ×Ô 
غ
   ÏÖ ÔÔ Ö 
Ð Ö Ø ÓÒ× Ñ Ý ÒÓØ 
ÓÒØ Ò Ø ÖÓÛ 
Ð Ù× ×º Ì ×            À Ò ¹ÏÖ Ô³× ×ÙÔÔÓÖØ ÓÖ Ú Ö Ð ÒÙÑ Ö Ó Ö ÙÑ ÒØ×
ÈÓÐ 
Ý                     ×Ô 
Ø                À Ò ¹ÏÖ Ô
                                                                  Ù×ØÓÑ       
 ¾Ò     
 ÆØ ´½µ
                            ÆÓ Ú 
                        º¾ ¿      º¿¼         º¿¼        º¿¼
                            Ë Ö 
 
                      ¼º        ¼º ¼        ¼º ¼       ¼º ½
                            È Ö¹Ø Ö Ø 
 
                ¼º ½¾     ¼º ¾        ¼º         ¼º
                            ËÔ 
 ¬
 Ø Ö Ø 
 
            ¼º ½      ¼º ¼        ¼º ½       ¼º
                            ÇÔØ Ñ Þ ÒÙÐÐ×                          ¼º
          Ì Ð ¾ Ë 
ÓÒ × ×Ô ÒØ Ü 
ÙØ Ò Ø                  
 
      Ò
 Ñ Ö Û Ø ÓÙØ          Ö 
ØÓÖÝ Ü ×Ø Ò
 
 
 º
                            ÈÓÐ 
Ý                     ×Ô 
Ø                À Ò ¹ÏÖ Ô
                                                                  Ù×ØÓÑ       
 ¾Ò     
 ÆØ ´½µ
                            ÆÓ Ú 
                       ¼º        ¼º          ¼º         ¼º
                            Ë Ö 
 
                      ¼º¾ ¾     ¼º¾ ¿       ¼º¾ ¿      ¼º¿½
                            È Ö¹Ø Ö Ø 
 
                ¼º¿¼      ¼º¾         ¼º¿        ¼º ¼½
                            ËÔ 
 ¬
 Ø Ö Ø 
 
            ¼º¾       ¼º¾ ½       ¼º¿        ¼º¿ ¾
                            ÇÔØ Ñ Þ ÒÙÐÐ×                          ¼º¾¿
            Ì Ð ¿ Ë 
ÓÒ × ×Ô ÒØ Ü 
ÙØ Ò Ø                  
 
      Ò
 Ñ Ö Û Ø        Ö 
ØÓÖÝ Ü ×Ø Ò
 
 
 º

 ÑÔÓ× × 
ÓÒ× Ö Ð 
Ó×غ × Ö CacheNth ÛÖ ÔÔ Ö                                  Ò
 Ñ Ö        ÇÖ Ò Ð    Ê ØÖÓ¬ØØ      ± 
Ó×Ø
ÖÙÒ× ÖÓÙ ÐÝ ¼Ñ× ×ÐÓÛ Ö Ø Ò cache2nd ÛÖ ÔÔ Ö¸ ÓÖ                            ¾¼¼ 
 
           ¼º¿          ¼º¿      ½º¼½¿±
    ÓÙØ º × Ô Ö 
 Ðк ÅÙ
 Ó Ø × Ø Ñ × ×Ô ÒØ Ô 
 Ò                          ¾¾ ÑØÖØ          ½ º ¿        ½ º ½     ½ º¾ ±
CacheNth³× Ö ÙÑ ÒØ× ÒØÓ Ò ÖÖ Ý¸ 
ÐÓÒ Ò Ø               ÖÖ Ý ÓÖ             ¾¼¾ ××           ½ º ¾        ½ º ¼½    ½ º½¼±

 ÐÐ× ØÓ Ø ÛÖ ÔÔ Ñ Ø Ó ¸ Ò ÙÒÔ 
 Ò Ö ÙÑ ÒØ× ÖÓÑ                            ¾¼½ 
ÓÑÔÖ ××      ¼º           ½º½¿½    ¾¼º ±
Ø 
ÐÓÒ        ÖÖ Ýº                                                        ¾¼                 º¾½¿         º ½    ¹½º ¼ ±
     ×Ô 
ØÂ 
 
 × Ø           ¼Ñ× Ô Ö ÓÖÑ Ò
 Ø ÑÓÚ Ò ÖÓÑ                   ¾¾¾ ÑÔ Ù Ó       ¿¾º¾         ¿ º½ ¾     º ¿±
   × Ö 
 
 ØÓ Ô Ö¹Ø Ö Ø 
 
 ׺ Ì × Ñ × × Ò× ¸ × Ò
                         ¾¾ 
             ½ º ¼        ½ º ¿      º ¾¾±
Ô Ö¹Ø Ö Ø 
 
 Ò ÒÚÓÐÚ × ÓÔ Ö Ø ÓÒ× ÓÒ × 
ÓÒ              × Ø ¹             ¾½¿ Ú 
          ¿ º           ½º¿      ½¾º¾ ±
  Ð º Ë Ñ Ð ÖÐÝ cache2nd Ø × ½½ Ñ× Øº Ì × 
 Ò
  ØØÖ ÙØ ØÓ ÓØ             Ø ÓÒ Ð × Ò Ò ÓÔ Ö Ø ÓÒ× ÓÒ Ö¹           Ì Ð   Ë 
ÓÒ × ×Ô ÒØ Ò ËÔ 
ÂÎÅ Ò
 Ñ Ö ×¸
  ÙÑ ÒØ ÖÖ Ý׺                                                     Û Ø Ò Û Ø ÓÙØ À Ò ¹ÏÖ Ô ÔÖÓÐÓ Ù ×º
    Ï Ò Ò ×Ô 
ØÂ 
 
 × ÛÓÚ Ò ÒØÓ ×Ô 
 ¬
 Ø Ö Ø¸ Ø
× 
ÓÒ       × Ø Ð × ÔÔ Ö׸ ÐÓÒ Û Ø Ø ÓÚ Ö                 Ø Ñ¹
ÔÓ× ×º ÀÓÛ Ú Ö¸ cache2nd Ó × ÒÓØ Ø ÔÔÖ 
 ÐÝ ×Ø Öº
Ì × « Ö Ò
 × Ù ØÓ Ø ÑÔÐ Ñ ÒØ Ø ÓÒ Ó makeCon-                       ØÓÑ 
ÓÐÙÑÒº ÙÖØ Ö ÑÔÖÓÚ Ñ ÒØ × ÔÓ×× Ð ÓÒ ÚÓ ×
ditionalWrapper()º Ì              Ù Ö ÖÓÙÒ ×Ô 
ØÂ³× Ú 
            ×ØÓÖ Ò ÒÙÐÐ Ú ÐÙ × Ò HashMapsº

ÓÔ × this ÒØÓ ÐÓ
 Ð Ú Ö Ð Ò 
ÓÑÔ Ö × Ø                   Ò×Ø         ÅÓ×Ø Ó À Ò ¹ÏÖ Ô³× ÓÚ Ö           ÔÔ Ö× ØÓ    ÒØÖÓ Ù
¬Ð ¸Û Ð Ø           Ù Ö ÖÓÙÒ cache2nd ÔÔÐ ×             ÓÓÐ Ò        Ý Ö ÙÑ ÒØ ÖÖ Ý׺ ËÓÑ         ÖÐÝ × ÑÔÐ ÓÔØ Ñ Þ Ø ÓÒ× 
 Ò
ÔÖÓ
 ÙÖ ØÓ Ø× Ö ÙÑ ÒØ ÖÖ Ý Ø Ø Ô Ö ÓÖÑ× Ø × Ñ                      Ö Ù
 Ø × 
Ó×غ ÓÖ Ò×Ø Ò
 ¸ Ø ÛÖ ÔÔ Ö ÔÖÓ
 ÙÖ × ¹

ÓÑÔ Ö ×ÓÒº          ÓÖ Û 
ÓÑÔ Ö Ø lookup() Ö 
 Ú Ö                ¬Ò      Ý makeConditionalWrapper() Ò makePerIn-
                                                                   stance() ÓÒÐÝ Ù× Ö ×Ø Ö ÙÑ ÒØ× ØÓ 
 ÐÐ ÓØ Ö ÔÖÓ
 ÙÖ ×º
     Ò×Ø Ø 
 
         Ð Ò×Ø Ò
 ¸ Ø × 
ÓÔ         ÒØÓ Ò ÖÖ Ý¸
Ø       ÖÖ Ý × 
ÐÓÒ ¸ Ò Ø Ö 
 Ú Ö × 
ÓÔ ÓÙØ Ó Ø                    Ï 
ÓÙÐ ÚÓ          Ö ÙÑ ÒØ ÖÖ Ý× ÒØ Ö ÐÝ Ý ×Ô 
 Ð Þ Ò

ÐÓÒ º Ì × ×ÓÖØ Ó 
Ó ÔÖ × ÒØ× 
 ÐÐ Ò ØÓ ÒÝ ÓÔØ Ñ Þ¹                Ø × ÔÖÓ
 ÙÖ × ÓÒ Ö Ø × ÙÔ ØÓ º
 Ò 
ÓÑÔ Ð Öº                                                          ÁÒ ×ÙÑÑ Öݸ À Ò ¹ÏÖ Ô³× Ò Ö 
 ÛÖ ÔÔ Ö× ÒØÖÓ Ù
    À Ò ¹ÏÖ Ô³× ÓÚ Ö           
 Ò Ð×Ó Ñ ×ÙÖ Ò Ø ÔÖ ×¹             ÓÚ Ö       ÒØÓ Ö ÙÑ ÒعР×Ø ÔÖÓ
 ×× Ò º Ì × ÓÚ Ö        ÑÝ
  Ò
 Ó ÓØ Ö ÓÔØ Ñ Þ Ø ÓÒ׺ ÓÖ Ü ÑÔÐ ¸ ClassPath ÔÖÓ¹                    

 ÔØ Ð ÓÖ ÙÒÓÔØ Ñ Þ ÔÖÓ Ö Ñ׸ ÙØ Ò ¹ ÒÐ Ò Ò
Ú × Ø× ÓÛÒ 
 
 Ò Ñ 
 Ò ×Ѻ                  ClassPath Ó 
Ø
                                                                   
 Ò Ù× Û Ò Ø ÓÚ Ö                 ÖÓÛ× ØÓÓ Ö Øº

 Ò         ¬Ò ×Ó Ø Ø 
            Ö 
ØÓÖÝ ÓÒ Ø Ô Ø Ñ ÑÓ¹             Ï Ð×Ó Ñ ×ÙÖ Ø 
Ó×Ø ÒØÖÓ Ù
               Ý À Ò ¹ÏÖ Ô³×
 Þ × ÒÓÒ Ü ×Ø ÒØ ×Ù Ö 
ØÓÖ ×º Ì × 
 
 
 ÔØÙÖ × Ö ÙÒ¹               Ñ Ø Ó ÔÖÓÐÓ Ù ×º Ï Ö Ò Ø ËÔ 
ÂÎÅ                  Ò
 Ñ Ö ×
    Ò
Ý ØÛ Ò ×Ø Ò
Ø ÐÓÓ ÙÔ Ö ÙÑ ÒØ׺ ÓÖ Ü ÑÔÐ ¸                    ÙÒØ Ð Ñ Ò ÑÙÑ Ü 
ÙØ ÓÒ Ø Ñ Û × Ö 
 º Ï Ø Ò
Û 
ÓÙÐ ÚÓ             ×Ý×Ø Ñ 
 ÐÐ ØÓ ÐÓÓ ÙÔ ./java/lang/           Ö ØÖÓ¬ØØ Ø       Ò
 Ñ Ö 
Ð ×× × Û Ø À Ò ¹ÏÖ Ô Ñ Ø Ó
String.class Û Ð ÖÒ Ø Ø ./java/lang Ó × ÒÓØ
                                                                   ÔÖÓÐÓ Ù × Ò Ö Ô Ø Ø Ø ×غ Ì Ö ×ÙÐØ× Ö × ÓÛÒ Ò
  Ü ×Ø Û Ò ÐÓÓ Ò ÙÔ Objectº                                        Ì Ð º ÇÒ Ú Ö ¸ À Ò ¹ÏÖ Ô ÑÔÓ× × º ± ÓÚ Ö                   ¸
    Ì Ö ×ÙÐØ Ó Ø 
 
 Ò            Ò
 Ñ Ö Û Ø Ö 
ØÓÖÝ 
 
 ¹           ÙØ Ø ÓÚ Ö      Ú Ö × Û ÐÝ Û Ø Ø Ö ÕÙ Ò
Ý Ó Ñ Ø Ó
 Ò Ò Ð × × ÓÛÒ Ò Ì Ð ¿º À Ò ¹ÏÖ Ô³× ×ÓÐÙØ                          
 ÐÐ׺ Ì ÑÙÐØ ¹Ø Ö         Ö ÝØÖ 
 Ö Ô Ö ÓÖÑ× ÔÓÓÖÐÝ × Ò
 Ø
ÓÚ Ö        Ö Ñ Ò× Ø × Ñ cache2nd ÓÒ ×Ô 
 ¬
 Ò¹                    Ù× × ÔÖ Ú Ø ¬ Ð × Ü
ÐÙ× Ú ÐÝ Ò Ò
ÐÙ × Ö ÕÙ ÒØ 
 ÐÐ× ØÓ
×Ø Ò
 × ÖÓÙ ÐÝ ½½¼Ñ× ×ÐÓÛ Ö Ø Ò Ø             ÕÙ Ú Ð ÒØ Ú 
 º      ¬ Ð ØØ Ö׺  ×× Ð×Ó Ô Ö ÓÖÑ× ÔÓÓÖÐݸ 
 Ù× Ù ÐØ Ò ÙÒ
¹
ÀÓÛ Ú Ö¸ Ø Ö Ð Ø Ú 
Ó×Ø × Ò
Ö × À Ò ¹ÏÖ Ô × ÒÓÛ                    Ø ÓÒ× Ó Ø     ÜÔ ÖØ × ÐÐ Ð Ò Ù       Ö ÑÔÐ Ñ ÒØ       × Ú
    ± ×ÐÓÛ Ö Ø Ò ×Ô 
ظ Ò Ø × ÓÚ Ö             Ö ÔÖ × ÒØ× ¿½±     Ñ Ø Ó ×¸ Ò Ø × Ñ Ø Ó × Ö ØÝÔ 
 ÐÐÝ ÕÙ Ø ×Ñ Ðк Óѹ
Ó Ø Ø Ñ ×Ô ÒØ × Ö
 Ò Ø 
Ð ×× Ô Ø º Ì × ÓÚ Ö                 
 Ò    ÔÖ ×× ×Ù« Ö× 
 Ù× Ó          Û ×Ñ ÐÐ Ñ Ø Ó × 
 ÐÐ Û Ø Ò
      Ð Ñ Ò Ø Ø ÖÓÙ           Ò ¹ ÒÐ Ò Ò ¸ × × ÓÛÒ Ò Ø 
Ù×¹         Ø× ÒÒ Ö ÐÓÓÔº
                                                                      Í× Ö ÒØ ÖÚ ÒØ ÓÒ Ñ Ý       Ò       ØÓ 
 Ú 

 ÔØ Ð
Ô Ö ÓÖÑ Ò
 ÓÖ 
 ÖØ Ò 
Ó º Ò ÑÔÓÖØ ÒØ ¬Ö×Ø ×Ø Ô × ÒÓØ            Ò ÒØ× Ú × 
 ÔÓ ÒØ
ÙØ ØÝÔ               × ÓÒ ×         Ò       ×
 ÔÔÐÝ Ò À Ò ¹ÏÖ Ô ØÓ 
Ó ×Ù
 × Ò Ä Ï 
ÓÑÔÖ ××ÓÖ                  Ö Ð Ø ÓÒ× Ô׺
Ø Ø ÑÔÐ Ñ ÒØ× × Ò Ð Û Ðй ¬Ò 
ÓÒ
 ÖÒº È Ö ÓÖÑ Ò
                    ÇØ Ö ×Ô 
Ø ×Ý×Ø Ñ× Ú                Ò ÑÔÐ Ñ ÒØ Ø ÖÓÙ

 Ò Ð×Ó     ÑÔÖÓÚ Ý Ñ Ò Ô ÖØ 
ÙÐ Ö Ñ Ø Ó × ÙÒÛÖ Ô¹              Ñ Ø ÔÖÓ Ö ÑÑ Ò º ÇÈ»ËÌ ℄ × ÑÔÐ Ñ ÒØ Ò Î ×٠й
Ô Ð º ÓÖ Ò×Ø Ò
 ¸ Ø 
Ó×Ø Ó Ù× Ò À Ò ¹ÏÖ Ô Û Ø ÑØÖØ              ÏÓÖ × ËÑ ÐÐØ Ð º ÇÈ»ËÌ ÝÒ Ñ 
 ÐÐÝ Ò Ö Ø × Ö Ò
 ×
 ÖÓÔ× ØÓ ¼º ± Û Ò ÔÖÓÐÓ Ù × Ö ÒÓØ    ØÓ ØØ Ö Ñ Ø ¹               Ò Ø Ò Ö Ø Ò
            Ö Ö
 Ý Ò ÐØ Ö× Ø 
Ð ×× × Ó Ó ¹
Ó ×º ÙÖÖ ÒØÐݸ ÓÛ Ú Ö¸ À Ò ¹ÏÖ Ô Ó × ÒÓØ ÔÖÓÚ                      
Ø׺ ÁÒ ÇÈ»Ë̸ Ú 
 × ÛÓÚ Ò ÒØÓ ÐÐ Ö 
Ø Ò×Ø Ò
 ×
Ñ 
 Ò ×Ñ ÓÖ ×Ù
 ¬Ò ¹ Ö Ò 
ÓÒØÖÓÐ ÓÚ Ö ÛÖ ÔÔ Ð Øݺ               Ó Ô ÖØ 
ÙÐ Ö 
Ð ×׸ Û Ö × Ò À Ò ¹ÏÖ Ô Ú 
 × ÛÓÚ Ò
                                                                 ÒØÓ 
ÓÒ
Ö Ø Ñ Ø Ó         ¬Ò Ø ÓÒ× Ö 
ØÐݺ
5.   RELATED WORK                                                       ÇÇÄ ½½℄ ÑÔÐ Ñ ÒØ× ×Ô 
Ø ¼º½³× ×ÝÒ
 ÖÓÒ Þ Ø ÓÒ
À Ò ¹ÏÖ Ô ÓÛ × ÑÙ
 ØÓ ×Ô 
ØÂ ¾ ℄º Å Ø Ó ÛÖ ÔÔ Ö×                Ð Ò Ù       Ò Î ×Ù ÐÏÓÖ × ËÑ ÐÐØ Ð ¸ Û Ð ÄÙÒ Ù ¾¼℄ ¬Ò ×
  
 Ú Ø × Ñ « 
Ø × ×Ô 
ØÂ Ú 
 º ÀÓÛ Ú Ö¸ ×Ô 
ØÂ                     Ñ Ø ¹Ó 
Ø ÔÖÓØÓ
ÓÐ ÓÖ Ç 
Ø Ú ¹ Ø Ø ×ÙÔÔÓÖØ× Ñ ¹
    Ú 
 
 Ò ÛÓÚ Ò ÒØÓ Ö 
 × Ø Ó Ó Ò ÔÓ ÒØ× Ö Ø Ö Ø Ò            Ø Ó ÛÖ ÔÔ Ò º ÁÒØ Ö ×Ø Ò Ðݸ ÓØ Ø × ×Ý×Ø Ñ× Û Ú                  ¹
Ñ Ö ÐÝ Ñ Ø Ó Ó ×º ×Ô 
Ø Ð×Ó ÔÖÓÚ × Ò ×ØÖ 
Ø ÓÒ                 Ú 
 ÓÒ Ô Ö¹ Ò×Ø Ò
          × ×¸ Ö Ø Ö Ø Ò Ø Ô Ö¹
Ð ×× × ×

 ÐÐ ÔÓ ÒØ
ÙØ ÒÓØ ÔÖ × ÒØ Ò À Ò ¹ÏÖ Ôº ×Ô 
ØÂ³× Ó Ò                 ÓÔØ     Ý ÑÓÖ Ö 
 ÒØ Ú Ö× ÓÒ× Ó ×Ô 
ØÂ Ò Ý À Ò ¹
ÔÓ ÒØ × Ò ØÓÖ× Ò ÔÓ ÒØ
ÙØ× ÔÖÓÚ              Û Ú Ö ØÝ Ó         ÏÖ Ôº ÓØ            ÇÇÄ Ò ÄÙÒ Ù³× ×Ý×Ø Ñ ÙØ Ð Þ ÝÒ Ñ 
 ÙÒ
Ø ÓÒ Ð Øݸ ÑÙ
 Ó Û 
 × Ð×Ó Ú Ð Ð Ò À Ò ¹ÏÖ Ôº               Ö ­ 
Ø ÓÒ¸ Û Ö À Ò ¹ÏÖ Ô Ù× × 
ÓÑÔ Ð ¹Ø Ñ Ö ­ 
Ø ÓÒ
   Ö×ظ × Ò ØÓÖ× ×Ø Ð × Ò Ò × ØÓ Ú 
 Ö ÙÑ ÒØ׸                  ØÓ Ò× ÖØ Ü 
ØÐÝ Ø Ó× ÓÓ × Ò                 ÓÖ ÝÒ Ñ 
 Û Ú Ò º
ÖÓÐ ¬ÐÐ      Ý À Ò ¹ÏÖ Ô³× Ô Ö Ñ Ø Ö Ð ×Ø׺ Ë 
ÓÒ ¸ × ¹         À Ò ¹ÏÖ Ô × × Ñ Ð Ö ØÓ ÄÙÒ Ù³× ×Ý×Ø Ñ Ò Ø Ø ÓØ Ñ¹
Ò ØÓÖ× Ø ÖÑ Ò Û Ò Ú 
 ÔÔР׺ ÁÒ À Ò ¹ÏÖ Ô¸ Ø ×                  Ô × Þ Ø ÑÔÓÖØ Ò
 Ó 
ÓÑÔÓ× Ø ÓÒ Ò ×Ô 
Ø 
Ó º
   
 × ÓÒ × Ñ        Ý Ø ÛÖ Ô ×Ø Ø Ñ Òظ Ö Ø Ö Ø Ò Ø                Ì Ö      ×     Ò Ö 
 ÒØ ×ÙÖ Ó ÒØ Ö ×Ø Ò Ö Ò Ø
ÛÖ ÔÔ Ö ¬Ò Ø ÓÒº ÛÖ Ô ×Ø Ø Ñ ÒØ ÔÔÐ × ÛÖ ÔÔ Ö ØÓ                    Ô ØÛ Ò 
Ð ××¹ Ò ÔÖÓØÓØÝÔ ¹ × Ò Ö Ø Ò
 ÑÓ ¹
   Ô ÖØ 
ÙÐ Ö Ñ Ø Ó ¸ Ò 
 Ò 
 Ú ¬Ò Ö¹ Ö Ò 
ÓÒØÖÓÐ                Ð× ¸ ¾¾℄º Ä Ø         ÝÒ Ñ 
 ×Ô 
Ø ×Ý×Ø Ñ× ×
Ö               ÓÚ ¸
Ø ÖÓÙ Ø Ù× Ó 
ÓÒ Ø ÓÒ Ð ÛÖ ÔÔ Ö׺ Ò ÐÐݸ Ó Ò ÔÓ ÒØ              Ø × Ñ 
 Ò ×Ñ× ÐÐÓÛ Ñ Ø Ó × ØÓ ÓÚ ÖÖ                   Ò ÓÒ Ô Ö¹
   × Ò ØÓÖ× Ñ Ý Ò
ÐÙ Û Ð 
 Ö ×º                                 Ø 
ÙÐ Ö Ò×Ø Ò
 º À Ò ¹ÏÖ Ô × × Ñ Ð Ö ØÓ Ø 
ÓÑÔÓÙÒ
   À Ò ¹ÏÖ Ô Ó × ÒÓØ ÐÐÓÛ Ó Ò¹ÔÓ ÒØ× ØÓ             ×Ô 
 ¬      Ö Ö Ò
 ÑÓ Ð ¾¾℄ Ò Ø Ø ÓØ ÐÐÓÛ Â Ú Ñ Ø Ó ³× ¹
Ø ÖÓÙ Û Ð 
 Ö ×º ÁØ × ÙÒ
Ð Ö ÓÛ Û Ð 
 Ö × × ÓÙÐ ÛÓÖ                 Ú ÓÖ ØÓ      
 Ò       Ø Ø ×Ø Ø Ñ ÒØ Ð Ú Ð¸ Ö Ø Ö Ø Ò
 Ò À Ò ¹ÏÖ Ôº Ë ÓÙÐ Û Ð 
 Ö Ñ Ø
 Ò                 Ô Ö ÓÖÑ      Ø ÖÓÙ       ÜØ ÖÒ Ð ×Ô 
Ø 
Ð Ö Ø ÓÒ׺
×Ø Ø 
 ÐÐÝ ÓÖ ÝÒ Ñ 
 ÐÐÝ Ë ÓÙÐ Û Ð 
 Ö × ÔÐ 
 Ö ×ØÖ 
¹                 Ú Ø Ðº ½ ℄ ÑÔÐ Ñ ÒØ ÝÒ Ñ 
 Ú 
 Ò Ò Ò ×¹
Ø ÓÒ× ÓÒ Ù× Ö¹ ¬Ò 
Ð ××ÐÓ Ö× Ë ÓÙÐ Û Ð 
 Ö × ÐÓ                 Ô 
غ À Ò ¹ÏÖ Ô ÓÐÐÓÛ× × Ñ Ð Ö Ö
 Ø 
ØÙÖ ¸ Ò Û 

Ð ×× ×      ÖÐݸ × Ø 
ÙÖÖ ÒØ wrap ×Ø Ø Ñ ÒØ Ó ×¸ ÓÖ Ð Þ ÐÝ       ÓÓ × Ö            ØÓ Ñ Ø Ó Ø 
ÓÑÔ Ð Ø Ñ ¸ Ò ÛÖ ÔÔ Ö×
   À Ò ¹ÏÖ Ô³× ÔÔÖÓ 
 ØÓ Ú 
 Ö Ù× × ÑÓÖ ­ Ü Ð                     Ö      ¬Ò ÓÒ Ø × ÓÓ × Ø ÖÙÒØ Ñ º ÀÓÛ Ú Ö¸ À Ò ¹
Ø Ò ×Ô 
ØÂ³× ×ØÖ 
Ø ÔÓ ÒØ
ÙØ× Ò × Ú Ö Ð Û Ý׺ Ö×ظ ÐÐ           ÏÖ Ô « Ö× Ò Ø Ø ÓÓ × Ö ÔÔÐ ØÓ ÐÐ Ñ Ø Ó ×¸ Ö Ø Ö
ÛÖ ÔÔ Ö× Ö Ö Ù× Ð ¸ Ö Ø Ö Ø Ò ÓÒÐÝ Ø Ó× 
Ó               Ò      Ø Ò ×Ô 
 ¬
 × Ø Ó Ñ Ø Ó × ¬Ò                 Ý ÔÓ ÒØ
Ùغ À Ò ¹
Ô ÖØ 
ÙÐ Ö ×ØÝÐ º À Ò Ò Ö Ò ÍÒÐ Ò ½ ℄ ×
Ö                ×Ý×¹   ÏÖ Ô Ð×Ó Ù× × ÑÓÖ Æ
 ÒØ ÑÔÐ Ñ ÒØ Ø ÓÒ¸ × Ò
 Ø Ö
Ø Ñ Ø 
 ÙØ 
ÙÑ Ö×ÓÑ Ø 
 Ò ÕÙ ÓÖ 
 Ú Ò Ö Ù× Ò ×¹                   Ö ÒÓ Â Ú Ö ­ 
Ø ÓÒ 
 ÐÐ× ÓÒ Ø 
Ö Ø 
 Ð Ô Ø ¸ Ò Ñ Ø Ó
Ô 
غ Ë 
ÓÒ ¸        Ö¹ÓÖ Ö ÛÖ ÔÔ Ö× ×Ù
 × makePerIn-            Ö ÙÑ ÒØ× Ö ÒÓØ ÐÛ Ý× Ô ×× Ò ÖÖ Ý׺
stance() Ò makeConditionalWrapper() 
 Ò                     ¹            ¾¿℄ ÐÐÓÛ× Â Ú Ñ Ø Ó × ØÓ           ÝÒ Ñ 
 ÐÐÝ ÛÖ ÔÔ
¬Ò Ò Ø À Ò ¹ÏÖ Ô Ð Ò Ù ¸ Ö Ø Ö Ø Ò ÔÖÓÚ                     ×     Ò ÙÒÛÖ ÔÔ Ø ÖÓÙ              
Ð ××ÐÓ Ö Ø Ø Ô Ö ÓÖÑ× ÝØ ¹
ÔÖ Ñ Ø Ú ×º Í× Ö¹ ¬Ò ÛÖ ÔÔ Ö× 
 Ò ÑÔÐ Ñ ÒØ ØÙÖ ×                
Ó Ö ÛÖ Ø Ò º Â           Ò
ÐÙ × ÒÙÑ Ö Ó               ØÙÖ × Ø Ø
Ó Ó Ò ÔÓ ÒØ × Ò ØÓÖ׺ ÓÖ Ò×Ø Ò
 ¸ cflow³× ÙÒ
Ø ÓÒ Ð¹            À Ò ¹ÏÖ Ô Ð 
 ׸ ×Ù
 × Ø                Ð ØÝ ØÓ Ö ÑÓÚ ÛÖ ÔÔ Ö×
 ØÝ 
ÓÙÐ       ÑÔÐ Ñ ÒØ      × ÐÝ Ò Æ
 ÒØÐݸ Ò within             Ò Ø         Ð ØÝ ØÓ 
 ÓÓ× Ø ÓÖ Ö Ò Û 
 ÛÖ ÔÔ Ö× Ü¹
 × 
 ÖØ ÒÐÝ ÑÔÐ Ñ ÒØ Ð º Ì × ÓÔ Ö Ø ÓÒ× ÔÖÓÚ Ø                   
ÙØ ÓÒ Ô ÖØ 
ÙÐ Ö Ñ Ø Ó 
 Ðк ÀÓÛ Ú Ö¸ Ð                    Ú ³×
  Ù Ð Ò ÐÓ
 × ÓÖ ÓØ Ö× ×Ù
 × this Ò withincodeº                 ×Ý×Ø Ñ¸  ³× ÑÔÐ Ñ ÒØ Ø ÓÒ Ö Ð ×               Ú ÐÝ ÓÒ Â Ú ³× Ö ¹
   Ò ÐÐݸ       Ö¹ÓÖ Ö ÛÖ ÔÔ Ö× ¬ÐÐ Ø ÖÓÐ × Ó ÓØ ÔÓ ÒØ
ÙØ       ­ 
Ø ÓÒ ÈÁ Ò ÔÔ Ö× Ð ×× Æ
 ÒØ Ø Ò À Ò ¹ÏÖ Ôº
   × Ò ØÓÖ× Ò Ø ×Ô 
Ø Ò×Ø ÒØ Ø ÓÒ 
Ð Ù× pertargetº              ÍÒÐ Â ¸ À Ò ¹ÏÖ Ô ÜØ Ò × Ø Â Ú Ð Ò Ù                         ÛØ
     ÄÇË ¾ ℄³× :around Ñ Ø Ó ÕÙ Ð ¬ Ö ÐÐÓÛ× 
Ó ØÓ               Ò Û ÜÔÖ ×× ÓÒ¸ ×Ø Ø Ñ Òظ Ò           
Ð Ö Ø ÓÒ ÓÖÑ׺ Ì × Ü¹
     ÛÖ ÔÔ       ÖÓÙÒ ÐÐ ÒÚÓ
 Ø ÓÒ× Ó         Ò Ö 
 ÙÒ
Ø ÓÒº    Ø Ò× ÓÒ× Ñ À Ò ¹ÏÖ Ô × Ö ØÓ Ù× Ò ØÛÓ Û Ý׺ Ö×ظ
   Ô 
ØÂ³× around Ú 
 Ò À Ò ¹ÏÖ Ô³× ÛÖ ÔÔ Ö× × ÖÚ               À Ò ¹ÏÖ Ô Ô Ö ÓÖÑ× Ð Ñ Ø ×Ø Ø 
 ØÝÔ 
 
 Ò ¸ Û Ö ×
   × Ñ Ð Ö ÖÓÐ º ÏÖ ÔÔ Ö× « Ö ÖÓÑ ÖÓÙÒ Ñ Ø Ó × Ò ØÛÓ            Â      
 ÒÒÓØ ×Ø Ø 
 ÐÐÝ Ú Ö Ý Ø Ø 
Ð ×× Ò Ñ Ø Ó Ò Ñ ×
   Ý Û Ý׺ Ö×ظ ÛÖ ÔÔ Ö ÔÔÐ × ØÓ Ò Ò Ú Ù Ð Ñ Ø Ó                  Ö Ú Ð º Ë 
ÓÒ ¸ À Ò ¹ÏÖ Ô³× ¬Ö×Ø 
Ð ×× ÒÓØ ÓÒ Ó ÔÖÓ
 ¹
   ¬Ò Ø ÓÒ Ö Ø Ö Ø Ò        Ò Ö 
 ÙÒ
Ø ÓÒº Ë 
ÓÒ ¸ Ø ÓÖ¹          ÙÖ × Ò ÛÖ ÔÔ Ö׸ ÐÓÒ Û Ø Ø apply ÓÔ Ö ØÓÖ¸ ÔÖÓÚ
   Ö Ò Û 
 ÛÖ ÔÔ Ö× Ü 
ÙØ × Ø ÖÑ Ò             Ý Ø ÓÖ Ö Ò             × × ÓÖ ÛÖ Ø Ò 
ÓÑÔÓ× Ð ÛÖ ÔÔ Ö׺
Û 
 Ø Ý Ö ÔÔÐ ØÓ Ñ Ø Ó ¸ Ö Ø Ö Ø Ò Ø ØÝÔ ×                            Ó 
 Ø Ðº ½ ℄ ÔÖÓÔÓ× ×Ý×Ø Ñ Ò Û 
 ÛÖ ÔÔ Ò
Ó 
ØÙ Ð Ö ÙÑ ÒØ׺                                                × Ô ÖÚ × Ú º      
ÓÑÔÓÒ ÒØ ÜÔÓÖØ× × Ø Ó Ì Ä Ò Ò ×
   ÇØ Ö ×Ô 
Ø ×Ý×Ø Ñ× ×Ù
 × ËÇ » ÍÈ ½ ℄ Ò ×¹                    Ø Ø Ö Ò ØÙÖ Ð ØÓ Ø× ÑÔÐ Ñ ÒØ Ø ÓÒ¸ Ò Ø 
Ð ÒØ ÛÖ Ô×
Ô 
ØÙ Ð ÓÑÔÓÒ ÒØ× ½ ℄         Ö ×× Ø Ò      ÓÖ × Ô Ö Ø 
Óѹ     Ø × 
ÓÑÑ Ò × Ò ÇÌ Ä 
Ð ×× × Ø Ø ÔÖÓÚ                      Ò ÒØ Ö¹
Ô Ð Ø ÓÒ Ò 
ÓÑÔÓÒ ÒØ 
ÓÒØ Üغ ÐØ ÓÙ Ø × ×Ý×Ø Ñ×                    
 Ò ØÙÖ Ð ØÓ Ø 
Ð Òغ ÇÌ Ä³× Ñ Ø Ó 
Ø ÔÖÓØÓ
ÓÐ
×ÙÔÔÓÖØ ÝÒ Ñ 
 ×Ô 
Ø Û Ú Ò ¸ Ø Ý Ó ÒÓØ ØÖ Ø ×Ô 
Ø×                ÐÐÓÛ× ÛÖ ÔÔ Ö 
Ð ×× × ØÓ × ÐÝ ÜÔÖ ×× Ö ×ØÖ 
Ø ÓÒ× Ò 
ÓÒ¹
  Ø ¬Ö×ع
Ð ×× Â Ú ÒØ Ø × Ò
 ¸ Ø Ý Ó ÒÓØ ÔÖÓÚ Ø                 Ú ÒØ ÓÒ× Ò 
ÓÑÔÓÒ ÒØ³× ÜÔÓÖØ ÒØ Ö 
 º ÇÌ Ä Ð×Ó
      Ø ÓÒ Ð Ö Ù× Ñ 
 Ò ×Ñ× ÓÙÒ Ò À Ò ¹ÏÖ Ôº ÓØ                 ×ÙÔÔÓÖØ× ØÖ Ò×Ô Ö ÒØ Ñ Ø Ó ÛÖ ÔÔ Ò Ø ÖÓÙ                  Ñ
 ¹
×Ý×Ø Ñ× Ó ×ÙÔÔÓÖØ Û Ð 
 Ö ×¸ Ò ÔÓ ÒØ
ÙØ× Ö Ø ÔÖ ¹               Ò ×Ñ 
 ÐÐ Ô Ö¹Ó 
Ø Ñ Ü Ò׺ Ì × Ñ 
 Ò ×Ñ ÐÐÓÛ× Ò
Ñ ÖÝ Ø ÖÙ×Ø Ó ×Ô 
ØÙ Ð ÓÑÔÓÒ ÒØ׺ ×Ô 
ØÙ Ð ÓÑÔÓ¹                 ÑÔÓÖØ 
ÓÑÔÓÒ ÒØ³×             Ú ÓÖ ØÓ       ÙÖØ Ö 
Ù×ØÓÑ Þ º
Ï Ð ÒÙÑ Ö Ó ÔÓÛ Ö ÙÐ Ñ 
ÖÓ ×Ý×Ø Ñ׸ 
ÓÑÔ Ð ¹Ø Ñ            ℄     º ØÓÖݸ º ÄÓ ×Ó¸ Ò º ËÑ Ö                ׺ ÂÌË ÌÓÓÐ×
Ñ Ø ÔÖÓ Ö ÑÑ Ò ÜØ Ò× ÓÒ׸ Ò ÔÖ ÔÖÓ
 ××ÓÖ ØÓÓÐ Ø× ½¸                ÓÖ ÑÔÐ Ñ ÒØ Ò ÓÑ Ò¹×Ô 
 ¬
 Ð Ò Ù ×º ÁÒ Ø
 ¸ ¸ ¾ ℄ Ö Ú Ð Ð ÓÖ Â Ú ¸ Û Ð Ú Ø Ø Å Ý × ×Ø                      ÁÒØ ÖÒ Ø ÓÒ Ð ÓÒ Ö Ò
 ÓÒ ËÓ ØÛ Ö Ê Ù× ¸ ½ º
×Ù Ø ÓÖ ÑÔÐ Ñ ÒØ Ò Ð Ò Ù            ÜØ Ò× ÓÒ ×Ù
 × À Ò ¹      ℄   ú ÓÐÐ Öغ ÇÒ Û Ú Ò ×Ô 
Ø׺ ÁÒ ÇÇÈ ÏÓÖ × ÓÔ
ÏÖ Ôº Ö×ظ À Ò ¹ÏÖ Ô ÜØ Ò × Â Ú ³× 
ÓÒ
Ö Ø ×ÝÒØ Ü Ò               ÓÒ ×Ô 
عÇÖ ÒØ ÈÖÓ Ö ÑÑ Ò ¸ ½ º
Û Ý× Ø Ø 
 Ò³Ø       ÜÔÖ ××    Ý × ÑÔÐ Ñ 
ÖÓ ×Ý×Ø Ñ× ×Ù
      ℄   Ⱥ ÓØ Ò Öº Ã Û 
ÓÑÔ Ð Ò ÝÒ Ñ 
 Ð Ò Ù × ØÓ
 × ÂË ½℄ Ò 
ÓÑÔ Ð ¹Ø Ñ ÅÇÈ× ×Ù
 × ÇÔ ÒÂ Ú ¾ ℄                     Ø Â Ú Îź ÁÒ ÈÖÓ
 Ò × Ó Ø ÍË ÆÁ Ì 
 Ò 
 Ð
 Ò ÄÁ          ℄º Ë 
ÓÒ ¸ À Ò ¹ÏÖ Ô Ù× × ×Ø Ø 
 ØÝÔ Ò ÓÖ¹           ÓÒ Ö Ò
 ¸ Ê ÆÁ ÌÖ 
 ¸ Æ Û ÇÖÐ Ò׸ Ä ¸ ÂÙÒº
Ñ Ø ÓÒ Ø Ø × ÒÓØ Ú Ð Ð Ò ÔÙÖ ÐÝ ×ÝÒØ 
Ø 
 ×Ý×Ø Ñ× ×Ù
             ½ º ÍË ÆÁ          ××Ó
 Ø ÓÒº
 × ÂË Ò ÂÌË ℄º Ò ÐÐݸ Å Ý ÐÐÓÛ× ÓÚ ÖÐÓ Ò Ó ×ÝÒ¹               ℄     º Ö 
 ¸ ź Ç Ö× Ý¸ º ËØÓÙØ Ñ Ö ¸ Ò
Ø Ü × ÓÒ Ö ØÖ ÖÝ ×Ø Ø 
 ØÝÔ × Ò Ó × ÒÓØ Ö ÕÙ Ö Ø                  Ⱥ Ï Ð Öº Å Ò Ø ÙØÙÖ ×              ÓÖ Ø Ô ×Ø
   × ¹Ð Ú Ð ÔÖÓ Ö Ñ ØÓ ÜÔÐ 
 ØÐÝ Ö Ö ØÓ Ñ Ø ÔÖÓ Ö Ñ׺ ÁÒ                Ò Ò Ö 
 ØÝ ØÓ Ø Â Ú ÔÖÓ Ö ÑÑ Ò Ð Ò Ù º

ÓÒØÖ ×ظ ÇÔ ÒÂ Ú ÓÒÐÝ ÐÐÓÛ× ×ÝÒØ Ü ÓÚ ÖÐÓ Ò       × ÓÒ           ÁÒ ÈÖÓ
 Ò × Ó Ø          ÓÒ Ö Ò
 ÓÒ Ç 
عÇÖ ÒØ

Ð ×× × Ø Ø ÜÔÐ 
 ØÐÝ Ò×Ø ÒØ Ø Ñ Ø 
Ð ×׺                         ÈÖÓ Ö ÑÑ Ò ËÝ×Ø Ñ׸ Ä Ò Ù ×¸ Ò ÔÔÐ 
 Ø ÓÒ׸
                                                                  Î Ò
ÓÙÚ Ö¸ Ç
ØÓ Ö ½ º          ź
6.   CONCLUSIONS                                              ℄     º ÖÝ Òظ º ØØÓÒ¸ ú º ÎÓÐ Ö¸ Ò º º
À Ò ¹ÏÖ Ô × Ò ÜØ Ò× ÓÒ ØÓ Â Ú Ø Ø ×ÙÔÔÓÖØ× ÝÒ Ñ 
                 ÅÙÖÔ Ýº ÜÔÐ 
 Ø ÔÖÓ Ö ÑÑ Ò º ÁÒ ÈÖÓ
 Ò × Ó Ø
 ×Ô 
Ø Û Ú Ò º À Ò ¹ÏÖ Ô³× ÝÒ Ñ 
 Ò ØÙÖ ÐÐÓÛ× ÛÖ Ô¹                  Ö×Ø ÁÒØ ÖÒ Ø ÓÒ Ð ÓÒ Ö Ò
 ÓÒ ×Ô 
عÇÖ ÒØ
Ô Ö× ØÓ        ¬Ò 
ÓÑÔÓ× Ø ÓÒ ÐÐݺ ÁÒ     Ø ÓÒ¸ ÛÖ ÔÔ Ö×          ËÓ ØÛ Ö      Ú ÐÓÔÑ Òظ ÔÖº ¾¼¼¾º
 Ö Ö Ù× Ð       
 Ù× Ø Ý 
 Ò        ¬Ò ÐÓ
 ÐÐݸ Ò 
 Ò         ℄   ź Ù
 Ò Ïº Ï 
 º Ò Ö 
 ÛÖ ÔÔ Ö׺ ÁÒ
       ¬Ò Û Ø ÜÔÐ 
 Ø 
ÓÒ×ØÖÙ
ØÓÖ Ô Ö Ñ Ø Ö׺      Ò ÐÐݸ         ÈÖÓ
 Ò × Ó Ø          ÙÖÓÔ Ò ÓÒ Ö Ò
 ÓÒ
À Ò ¹ÏÖ Ô Ò
ÐÙ × Ò ÜÔÖ ×× Ú Ð Ö ÖÝ Ó Ò Ö 
 ÛÖ Ô¹                  Ç 
عÇÖ ÒØ ÈÖÓ Ö ÑÑ Ò ¸ Ô × ¾¼½ß¾¾ ¸ ¾¼¼¼º
Ô Ö׺     Ò ÑÔÐ Ñ ÒØ Ø ÓÒ Ó À Ò ¹ÏÖ Ô × Ú Ð Ð Ø             ½¼℄     º Ð ØÓÒ¸ º Ä Ú Ò׸ º          Ñ Ö׸ Ò
http://www.cs.utah.edu/˜jbaker/mayaº À Ò ¹ÏÖ Ô                    ̺ Å ÐÐ×Ø Òº ÅÙÐØ Â Ú ÅÓ ÙÐ Ö ÓÔ Ò 
Ð ×× × Ò
 
 Ú × Æ
 Ò
Ý ÓÒ ×Ø Ò Ö ÂÎÅ× Ø ÖÓÙ Ø Ù× Ó                         ×ÝÑÑ ØÖ 
 ÑÙÐØ ÔÐ ×Ô Ø
 ÓÖ Â Ú º ÁÒ ÈÖÓ
 Ò ×

 Ö ÙÐÐÝ 
 Ó× Ò Ø ×ØÖÙ
ØÙÖ × Ò Ð Ñ Ø Ù× Ó Ø Â Ú                   Ó Ø      ÓÒ Ö Ò
 ÓÒ Ç 
عÇÖ ÒØ ÈÖÓ Ö ÑÑ Ò
Ö ­ 
Ø ÓÒ ÈÁº                                                     ËÝ×Ø Ñ׸ Ä Ò Ù ×¸ Ò ÔÔÐ 
 Ø ÓÒ× ³¼¼¸ Ô ×
   Ì × Ô Ô Ö Ó
Ù× ÓÒ Ñ Ø Ó ÛÖ ÔÔ Ò Ò À Ò ¹ÏÖ Ôº                   ½¿¼ß½ ¸ Å ÒÒ ÔÓР׸ ÅƸ Ç
غ ¾¼¼¼º
ËÓÑ Ó À Ò ¹Ï Ö³× Ð Ö ÖÝ ÛÖ ÔÔ Ö× ¬ÐÐ Ø ÖÓÐ Ó Ð Ò¹           ½½℄   ú Þ ÖÒ 
 º ÝÒ Ñ 
 
ÓÓк http://www.prakinf.
 Ù      
ÓÒ×ØÖÙ
Ø× ×Ù
 × ×Ô 
ØÂ Ó Ò ÔÓ ÒØ × Ò ØÓÖ׺               tu-ilmenau.de/˜czarn/aop/sources.tar.gzº
ÇØ Ö ØÙÖ × Ó ×Ô 
عÓÖ ÒØ Ð Ò Ù ×¸ ×Ù
 × ÒØÖÓ¹               ½¾℄   ú Þ ÖÒ 
 Ò Íº × Ò 
 Öº Ò Ö Ø Ú
  Ù
Ø ÓÒ× Ò Û Ð 
 Ö ×¸ Ö ÒÓØ ×ÙÔÔÓÖØ      Ý À Ò ¹ÏÖ Ôº            ÈÖÓ Ö ÑÑ Ò Å Ø Ó ×¸ Ì 
 Ò Õ٠׸ Ò ÔÔÐ 
 Ø ÓÒ׸
Ï ÒÓØ Ø Ø Å Ý ¸ Ø Ð Ò Ù           ÓÒ ØÓÔ Ó Û 
 À Ò ¹              
 ÔØ Ö º         ×ÓÒ¹Ï ×Рݸ ½ º
ÏÖ Ô × Ù Ðظ 
 Ò ×ÙÔÔÓÖØ Ñ Ø Ó ÒØÖÓ Ù
Ø ÓÒ× Ø ÖÓÙ           ½¿℄   ź       Ѻ Ì     ÝØ 
Ó     Ò Ò Ö Ò Ð Ö Öݺ
 Ò ÑÔÐ Ñ ÒØ Ø ÓÒ ¾¸ ¿℄ Ó Ø ÅÙÐØ Â Ú Ð Ò Ù          ÜØ Ò¹          http://bcel.sourceforge.netº
× ÓÒ ½¼℄¸ Û 
 ÐÐÓÛ× ÜØ ÖÒ ÐÐÝ ¬Ò Ñ Ø Ó × ØÓ           Ò¹    ½ ℄   Ⱥ¹ º Ú ¸ ̺ Ä ÓÙܸ Ò Æº ƺ ź
ØÖÓ Ù
 ÒØÓ 
Ð ×× ×º                                                 ÓÙÖ Õ ¹Ë        Ò º ÌÛÓ¹×Ø Ô Û Ú Ò Û Ø Ö ­ 
Ø ÓÒ
                                                                  Ù× Ò ×Ô 
غ ÁÒ ÇÇÈËÄ ÏÓÖ × ÓÔ ÓÒ Ú Ò
7.   ACKNOWLEDGEMENTS                                             Ë Ô Ö Ø ÓÒ Ó ÓÒ
 ÖÒ× Ò Ç 
عÇÖ ÒØ ËÝ×Ø Ñ׸
                                                                  Ç
غ ¾¼¼½º
Ï Ø Ò Ö
         ¸ Ð ×Ø Ö Ê ¸ ÂÓ Ò Ê    Ö¸ Ë Ò Å
¹
  ÖÑ ¸ Ò Ø      ÒÓÒÝÑÓÙ× Ö Ú Û Ö× ÓÖ Ø Ö 
ÓÑÑ ÒØ×           ½ ℄   ź Ð Øظ ˺ ÃÖ × Ò ÑÙÖØ ¸ Ò Åº ÐÐ × Òº Ð ×× ×
 Ò ×Ù ×Ø ÓÒ׺ Ì × Ö × Ö
 Û × ×ÙÔÔÓÖØ      ÝØ       ¹               Ò Ñ Ü Ò׺ ÁÒ ÈÖÓ
 Ò × Ó Ø ¾ Ø              Å
 Ò×     Ú Ò
 Ê × Ö
 ÈÖÓ 
Ø×     Ò
Ý Ò Ø      Ö ÓÖ
                ËÁ ÈÄ Æ¹ËÁ          Ì ×ÝÑÔÓ× ÙÑ ÓÒ ÈÖ Ò
 ÔÐ × Ó
Ê × Ö
 Ä ÓÖ ØÓÖÝ ÙÒ Ö Ö Ñ ÒØ ÒÙÑ Ö ¿¿ ½ ß¼¼ß                      ÈÖÓ Ö ÑÑ Ò Ä Ò Ù ×¸ Ô × ½ ½ß½ ¿¸ ½ º
 ß½     Ò Æ Ø ÓÒ Ð Ë
 Ò
 ÓÙÒ Ø ÓÒ Ê Ê Û Ö ¸                 ½ ℄   ź Ó 
 ¸ º Æ ÙÑ ÒÒ¸ Ò Íº ÙÒº × Ò Ò
   Êß     ½½ º Ì ÍºËº ÓÚ ÖÒÑ ÒØ × ÙØ ÓÖ Þ ØÓ Ö ¹                   ÑÔÐ Ñ Ò Ø ÓÒ 
ÓÒ×ØÖÙ
Ø× ÓÖ Ø        Ú ÐÓÔÑ ÒØ Ó
ÔÖÓ Ù
 Ò ×ØÖ ÙØ Ö ÔÖ ÒØ× ÓÖ ÓÚ ÖÒÑ ÒØ Ð ÔÙÖÔÓ× ×                  ­ Ü Ð ¸ 
ÓÑÔÓÒ ÒعÓÖ ÒØ ×Ó ØÛ Ö Ö
 Ø 
ØÙÖ ×º ÁÒ
ÒÓØÛ Ø ×Ø Ò Ò ÒÝ 
ÓÔÝÖ Ø ÒÒÓØ Ø ÓÒ Ö ÓÒº                          ÈÖÓ
 Ò × Ó Ø Ë 
ÓÒ ÁÒØ ÖÒ Ø ÓÒ Ð ËÝÑÔÓ× ÙÑ ÓÒ
                                                                      Ò Ö Ø Ú Ò ÓÑÔÓÒ Òع × ËÓ ØÛ Ö
                                                                    Ò Ò Ö Ò ¸ Ô × ½½ ß½¾ ¸ ¾¼¼¼º
8.   REFERENCES                                             ½ ℄   ˺ À Ò Ò Ö Ò Êº ÍÒÐ Ò º Í× Ò Ò Ö Ù× Ò
 ½℄ º 
 Ö 
 Ò Ãº ÈÐ Ý ÓÖ º Ì Â Ú ×ÝÒØ 
Ø 
                        ×Ô 
Ø× Ò ×Ô 
غ ÁÒ ÇÇÈËÄ ÏÓÖ × ÓÔ ÓÒ
      ÜØ Ò Ö ´ÂË µº ÁÒ ÈÖÓ
 Ò × Ó Ø      ÓÒ Ö Ò
 ÓÒ                   Ú Ò
 Ë Ô Ö Ø ÓÒ Ó ÓÒ
 ÖÒ× Ò Ç 
عÇÖ ÒØ
    Ç 
عÇÖ ÒØ ÈÖÓ Ö ÑÑ Ò ËÝ×Ø Ñ׸ Ä Ò Ù ×¸                       ËÝ×Ø Ñ׸ Ç
غ ¾¼¼½º
      Ò ÔÔÐ 
 Ø ÓÒ׸ Ç
غ ¾¼¼½º                             ½ ℄   ƺ º ÀÓ º ÝÒ Ñ 
 ×Ô 
Ø× Ò ËÇ » ÍȺ
 ¾℄ º      Öº Å 
ÖÓ× Ø Ø ÔÐ Ý Å Ö Ø Ò ÖÓÑ Â Ú ØÓ                 Ì 
 Ò 
 Ð Ê ÔÓÖØ »¼ ¸         ÖÐ × ÍÒ Ú Ö× Øݸ ÈÖ Ù ¸
    Å Ý º Å ×Ø Ö³× Ø × ×¸ ÍÒ Ú Ö× ØÝ Ó ÍØ ¸ 
 Ñ Ö                 ÂÙÒº ½ º
    ¾¼¼½º                                                   ½ ℄   ú Ä Ö ÖÖ¸ º ÄÓÖ ÒÞ¸ Ò Åº Å Þ Ò º
 ¿℄ º      Ö Ò Ïº À× º Å Ý ÅÙÐØ ÔÐ ¹ ×Ô Ø
                       ÈÖÓ Ö ÑÑ Ò Û Ø ×Ô 
ØÙ Ð 
ÓÑÔÓÒ ÒØ׺ Ì 
 Ò 
 Ð
    ×ÝÒØ Ü ÜØ Ò× ÓÒ Ò Â Ú º ÌÓ ÔÔ Ö Ò ÈÖÓ
 Ò × Ó                  Ê ÔÓÖØ Æ͹ ˹ ¹¼½¸ ÆÓÖØ ×Ø ÖÒ ÍÒ Ú Ö× Øݸ ÔÖº
    Ø     ÓÒ Ö Ò
 ÓÒ ÈÖÓ Ö ÑÑ Ò Ä Ò Ù         × Ò Ò               ½ º
    ÁÑÔÐ Ñ ÒØ Ø ÓÒ¸ ÂÙÒº
¾¼℄   º Ⱥ ÄÙÒ Ùº Ö ­ 
Ø Ú Ö
 Ø 
ØÙÖ ÓÖ ÔÖÓ
 ××       ¾ ℄  º ËØ Ð ÂÖº ÓÑÑÓÒ Ä ×Ô¸ Ø Ä Ò Ù º            Ø Ð
    
ÓÒØÖÓÐ ÔÔÐ 
 Ø ÓÒ׺ ÁÒ ÈÖÓ
 Ò × Ó Ø   ÙÖÓÔ Ò         ÈÖ ×׸ × 
ÓÒ     Ø ÓÒ¸ ½ ¼º
      ÓÒ Ö Ò
 ÓÒ Ç 
عÇÖ ÒØ ÈÖÓ Ö ÑÑ Ò ¸ ½ º          ¾ ℄ ź Ì Ø×Ù ÓÖ ¸ ˺        ¸ ź à ÐÐ Ò¸ Ò Ãº ÁØ ÒÓº
¾½℄ Ⱥ Æ Ñ Ý Öº      Ò× ÐÐ Ð ØÛ Ø ×
Ö ÔØ Ò ÓÖ             Ê ­ 
Ø ÓÒ Ò ËÓ ØÛ Ö Ò Ò Ö Ò ¸ ÚÓÐÙÑ ½ ¾ Ó
    Â Ú º http://www.beanshell.org/º                      Ä 
ØÙÖ ÆÓØ × Ò ÓÑÔÙØ Ö Ë
 Ò
 ¸ 
 ÔØ Ö
¾¾℄ ú Ç×Ø ÖÑ ÒÒ Ò Åº Å Þ Ò º Ç 
عÓÖ ÒØ                  ÇÔ ÒÂ Ú      
Ð ××¹ × Ñ 
ÖÓ ×Ý×Ø Ñ ÓÖ Â Ú º
    
ÓÑÔÓ× Ø ÓÒ ÙÒØ Ò Ð º ÁÒ ÈÖÓ
 Ò × Ó Ø                 ËÔÖ Ò Ö Î ÖÐ ¸ ¾¼¼¼º
      ÓÒ Ö Ò
 ÓÒ Ç 
عÇÖ ÒØ ÈÖÓ Ö ÑÑ Ò ËÝ×Ø Ñ׸       ¾ ℄ ÖÓܺ Ì       ×Ô 
ØÂ ÔÖÓ Ö ÑÑ Ò Ù º http:
    Ä Ò Ù ×¸ Ò ÔÔÐ 
 Ø ÓÒ׸ Ç
غ ¾¼¼½º                    //www.aspectj.org/doc/dist/progguide/º
¾¿℄ ʺ È ÛÐ ¸ ĺ Ë ÒØÙÖ Ö¸ ĺ Ù
 Ò¸ Ò º ÐÓÖ Òº
    Â        ­ Ü Ð ×ÓÐÙØ ÓÒ ÓÖ ×Ô 
عÓÖ ÒØ
    ÔÖÓ Ö ÑÑ Ò Ò Â Ú º ÁÒ Ê ­ 
Ø ÓÒ ¾¼¼½¸ Ô × ½ß¾ ¸
    ¾¼¼½º ÄÆ Ë ¾½ ¾º

Más contenido relacionado

La actualidad más candente

[Blackhat2015] FileCry attack against Internet Explorer
[Blackhat2015] FileCry attack against Internet Explorer[Blackhat2015] FileCry attack against Internet Explorer
[Blackhat2015] FileCry attack against Internet ExplorerMoabi.com
 
La función zeta de Riemann Felipe zaldivar
La función zeta de Riemann Felipe zaldivarLa función zeta de Riemann Felipe zaldivar
La función zeta de Riemann Felipe zaldivarRaul Velazquez
 
The Proof Complexity of Linear Algebra - LICS 2002
The Proof Complexity of Linear Algebra - LICS 2002The Proof Complexity of Linear Algebra - LICS 2002
The Proof Complexity of Linear Algebra - LICS 2002Michael Soltys
 
¿Qué hacer para modificar la facultad?
¿Qué hacer para modificar la facultad?¿Qué hacer para modificar la facultad?
¿Qué hacer para modificar la facultad?victorh4
 
Les déterminants de la décision de syndication bancaire en France
Les déterminants de la décision de syndication bancaire en FranceLes déterminants de la décision de syndication bancaire en France
Les déterminants de la décision de syndication bancaire en FranceChristophe J. Godlewski
 
Quantum Treatment of Lenses - Wave Packet Optics
Quantum Treatment of Lenses - Wave Packet OpticsQuantum Treatment of Lenses - Wave Packet Optics
Quantum Treatment of Lenses - Wave Packet Opticsisainianuj
 
Ph d thesis_allanore_dec07_13_17
Ph d thesis_allanore_dec07_13_17Ph d thesis_allanore_dec07_13_17
Ph d thesis_allanore_dec07_13_17Rashid Fiaz
 
Caso panama 2001
Caso panama 2001Caso panama 2001
Caso panama 2001martinserg
 
Anscombe filosofia moral moderna
Anscombe filosofia moral modernaAnscombe filosofia moral moderna
Anscombe filosofia moral modernaherrkapellan
 
Clustering to Improve Microblog Stream Summarization
Clustering to Improve Microblog Stream SummarizationClustering to Improve Microblog Stream Summarization
Clustering to Improve Microblog Stream Summarizationandreiolariu
 
Temas selectos de estructuras de datos
Temas selectos de estructuras de datosTemas selectos de estructuras de datos
Temas selectos de estructuras de datosCecilia Loeza
 

La actualidad más candente (20)

Dynamic Graphs
Dynamic GraphsDynamic Graphs
Dynamic Graphs
 
[Blackhat2015] FileCry attack against Internet Explorer
[Blackhat2015] FileCry attack against Internet Explorer[Blackhat2015] FileCry attack against Internet Explorer
[Blackhat2015] FileCry attack against Internet Explorer
 
La función zeta de Riemann Felipe zaldivar
La función zeta de Riemann Felipe zaldivarLa función zeta de Riemann Felipe zaldivar
La función zeta de Riemann Felipe zaldivar
 
Pfsense
PfsensePfsense
Pfsense
 
10.1.1.1.7049
10.1.1.1.704910.1.1.1.7049
10.1.1.1.7049
 
LaTeX ISI
LaTeX ISILaTeX ISI
LaTeX ISI
 
Slides titrisation
Slides titrisationSlides titrisation
Slides titrisation
 
The Proof Complexity of Linear Algebra - LICS 2002
The Proof Complexity of Linear Algebra - LICS 2002The Proof Complexity of Linear Algebra - LICS 2002
The Proof Complexity of Linear Algebra - LICS 2002
 
¿Qué hacer para modificar la facultad?
¿Qué hacer para modificar la facultad?¿Qué hacer para modificar la facultad?
¿Qué hacer para modificar la facultad?
 
Les déterminants de la décision de syndication bancaire en France
Les déterminants de la décision de syndication bancaire en FranceLes déterminants de la décision de syndication bancaire en France
Les déterminants de la décision de syndication bancaire en France
 
Quantum Treatment of Lenses - Wave Packet Optics
Quantum Treatment of Lenses - Wave Packet OpticsQuantum Treatment of Lenses - Wave Packet Optics
Quantum Treatment of Lenses - Wave Packet Optics
 
Ph d thesis_allanore_dec07_13_17
Ph d thesis_allanore_dec07_13_17Ph d thesis_allanore_dec07_13_17
Ph d thesis_allanore_dec07_13_17
 
Caso panama 2001
Caso panama 2001Caso panama 2001
Caso panama 2001
 
Anscombe filosofia moral moderna
Anscombe filosofia moral modernaAnscombe filosofia moral moderna
Anscombe filosofia moral moderna
 
S
SS
S
 
Clustering to Improve Microblog Stream Summarization
Clustering to Improve Microblog Stream SummarizationClustering to Improve Microblog Stream Summarization
Clustering to Improve Microblog Stream Summarization
 
Temas selectos de estructuras de datos
Temas selectos de estructuras de datosTemas selectos de estructuras de datos
Temas selectos de estructuras de datos
 
dac-bcm
dac-bcmdac-bcm
dac-bcm
 
Ia intro
Ia introIa intro
Ia intro
 
Slides dea
Slides deaSlides dea
Slides dea
 

Destacado

Pb presentation oct 4, 2011 2
Pb presentation oct 4, 2011 2Pb presentation oct 4, 2011 2
Pb presentation oct 4, 2011 2Lyn Bunch
 
F268 IHE Enhancing teaching Report_FINAL_Web
F268 IHE Enhancing teaching Report_FINAL_WebF268 IHE Enhancing teaching Report_FINAL_Web
F268 IHE Enhancing teaching Report_FINAL_WebElisa Brewis
 
FIGUEIREDO AHSEB 2013-04-10
FIGUEIREDO AHSEB 2013-04-10FIGUEIREDO AHSEB 2013-04-10
FIGUEIREDO AHSEB 2013-04-10carfig
 
Concert halls of the world
Concert halls of the worldConcert halls of the world
Concert halls of the worldAlongCameMusic
 
Maplam Presentation
Maplam PresentationMaplam Presentation
Maplam PresentationMarco Romani
 
Powerpointproject
PowerpointprojectPowerpointproject
Powerpointproject40560777
 
2014_IBAP_certificate_EN
2014_IBAP_certificate_EN2014_IBAP_certificate_EN
2014_IBAP_certificate_ENsumita1973
 
ATA 13th Meet up Testers and Developers Bitter Enemies or Secret Lovers
ATA 13th Meet up Testers and Developers Bitter Enemies or Secret LoversATA 13th Meet up Testers and Developers Bitter Enemies or Secret Lovers
ATA 13th Meet up Testers and Developers Bitter Enemies or Secret LoversAgile Testing Alliance
 
Academic Management Seminar
Academic Management SeminarAcademic Management Seminar
Academic Management SeminarSamuel Dekolo
 
empresa entorno micro y macro
empresa entorno micro y macro empresa entorno micro y macro
empresa entorno micro y macro Maye FlakiiZz
 
Tercera teleclase
Tercera  teleclaseTercera  teleclase
Tercera teleclasekejopaco
 

Destacado (20)

Pb presentation oct 4, 2011 2
Pb presentation oct 4, 2011 2Pb presentation oct 4, 2011 2
Pb presentation oct 4, 2011 2
 
F268 IHE Enhancing teaching Report_FINAL_Web
F268 IHE Enhancing teaching Report_FINAL_WebF268 IHE Enhancing teaching Report_FINAL_Web
F268 IHE Enhancing teaching Report_FINAL_Web
 
CERTIFICATES
CERTIFICATESCERTIFICATES
CERTIFICATES
 
FIGUEIREDO AHSEB 2013-04-10
FIGUEIREDO AHSEB 2013-04-10FIGUEIREDO AHSEB 2013-04-10
FIGUEIREDO AHSEB 2013-04-10
 
Harmonie
HarmonieHarmonie
Harmonie
 
Thesun
ThesunThesun
Thesun
 
Presentation1
Presentation1Presentation1
Presentation1
 
TPACK
TPACKTPACK
TPACK
 
Concert halls of the world
Concert halls of the worldConcert halls of the world
Concert halls of the world
 
Sway June 2002
Sway June 2002Sway June 2002
Sway June 2002
 
gambetta_gpel
gambetta_gpelgambetta_gpel
gambetta_gpel
 
Activitats informatica
Activitats informaticaActivitats informatica
Activitats informatica
 
NSA BR 2006
NSA BR 2006NSA BR 2006
NSA BR 2006
 
Maplam Presentation
Maplam PresentationMaplam Presentation
Maplam Presentation
 
Powerpointproject
PowerpointprojectPowerpointproject
Powerpointproject
 
2014_IBAP_certificate_EN
2014_IBAP_certificate_EN2014_IBAP_certificate_EN
2014_IBAP_certificate_EN
 
ATA 13th Meet up Testers and Developers Bitter Enemies or Secret Lovers
ATA 13th Meet up Testers and Developers Bitter Enemies or Secret LoversATA 13th Meet up Testers and Developers Bitter Enemies or Secret Lovers
ATA 13th Meet up Testers and Developers Bitter Enemies or Secret Lovers
 
Academic Management Seminar
Academic Management SeminarAcademic Management Seminar
Academic Management Seminar
 
empresa entorno micro y macro
empresa entorno micro y macro empresa entorno micro y macro
empresa entorno micro y macro
 
Tercera teleclase
Tercera  teleclaseTercera  teleclase
Tercera teleclase
 

Runtime aspect weaving through metaprogramming

  • 1. Runtime Aspect Weaving Through Metaprogramming Jason Baker Wilson Hsieh University of Utah, School of Computing 50 South Central Campus Drive, Room 3190 Salt Lake City, Utah 84112–9205 {jbaker,wilson}@cs.utah.edu ABSTRACT Ð ×× ×¸ ÛÖ ÔÔ Ö× Ò ¬Ò Û Ø Ò Ð ×× Ð Ö Ø ÓÒ× Ï × Ö Ò ÜØ Ò× ÓÒ ØÓ Ø Â Ú Ð Ò Ù ¸ À Ò ¹ÏÖ Ô¸ ÓÖ Ñ Ø Ó Ó ×º Ï Ú Ò × ÓÑÔÐ × Ø ÖÓÙ wrap Ø Ø ×ÙÔÔÓÖØ× Û Ú Ò ×Ô Ø× ÒØÓ Ó Ø ÖÙÒØ Ñ º ×¹ ×Ø Ø Ñ ÒØ׺ À Ò ¹ÏÖ Ô ÒØ Ö Ø × Ñ Ø Ó Ú ÒØÓ Ø Ô Ø× Ò À Ò ¹ÏÖ Ô Ø Ø ÓÖÑ Ó Ñ Ø Ó ÛÖ ÔÔ Ö׸ ÓÑÔÓÒ ÒØ ÑÔÐ Ñ ÒØ Ø ÓÒ Ð Ò Ù ÑÓÖ Ø ØÐÝ Ø Ò Ð Ò¹ Û ÐÐÓÛ ×Ô Ø Ó ØÓ Ò× ÖØ ÖÓÙÒ Ñ Ø Ó Ó ¹ Ù × ×Ù × ×Ô Øº ÐØ ÓÙ Ø × ÒØ Ö Ø ÓÒ ÐÐÓÛ× ×Ð Ú Ò ×Ô Øº À Ò ¹ÏÖ Ô Ó« Ö× × Ú Ö Ð Ú Ò¹ ×Ô Ø Ó ØÓ Ð ÒÐÝ × Ô Ö Ø ÖÓÑ ÓØ Ö Ó ¸ Ø Ó × Ø × ÓÚ Ö ×Ø Ø ×Ô Ø Ð Ò Ù × ×Ù × ×Ô Øº Ö×ظ ÒÓØ Ö ÕÙ Ö × Ô Ö Ø ÓÒº ÁÒ Ø¸ À Ò ¹ÏÖ Ô³× Ø Ø ÒØ Ö ¹ ×Ô Ø× Ò ÛÓÚ Ò ÒØÓ Ò ÖÝ Ð Ö Ö ×º Ë ÓÒ ¸ ÛÖ Ô¹ Ø ÓÒ Û Ø Â Ú ÐÐÓÛ× ÑÓÖ Ò × Ó Û Ú Ò ØÓ ÜÔÖ ×× º Ô Ö Ò À Ò ¹ÏÖ Ô × ¬Ö×ع Ð ×× Â Ú Ú ÐÙ ¸ Û ÐÐÓÛ× ÏÖ ÔÔ Ö× Ò ÛÓÚ Ò ÒØÓ Ð ×× × Û Ø Ð Ü ÐÐÝ × ÓÔ Ù× Ö× ØÓ ÜÔÐÓ Ø Â Ú Ñ Ò ×Ñ× ØÓ ¬Ò Ò Û Ú ÛÖ Ô¹ Ò Ñ × × Ò Û Ú Ò ×Ø Ø Ñ ÒØ× Ò ÔÔ Ö Ò ÒÝ × ÓÔ º Ô Ö׺ ÓÖ Ü ÑÔÐ ¸ ÛÖ ÔÔ Ö× Ò Ô ×× ÜÔÐ Ø ÓÒ¹ ÏÖ ÔÔ Ö× Ò Ð×Ó ÛÓÚ Ò ÒØÓ Ñ Ø Ó × Ó ÒÓÒÝÑÓÙ× ×ØÖÙ ØÓÖ Ö ÙÑ ÒØ׸ Ò ÛÖ ÔÔ Ö Ó Ø× Ò ÓÑÔÓ× º Ð ×× × Ø ÖÓÙ Ò Û Ð Ö Ø ÓÒ ÑÓ ¬ Öº Ò ÐÐݸ Ñ Ø Ó × Ò ÐÐ Â Ú Ð ×× ×¸ Ò ÐÙ Ò ÒÓÒÝÑÓÙ× ÝÒ Ñ ×Ô Ø Û Ú Ò ÔÖÓÚ × ÓØ Ö Ò ¬Ø׺ Ö×ظ Ð ×× ×¸ Ò ÛÖ ÔÔ º ÔÖÓØÓØÝÔ Ó À Ò ¹ÏÖ Ô × Ñ¹ ÛÖ ÔÔ Ö× Ñ Ý Ô ×× ÜÔÐ Ø ÓÒ×ØÖÙ ØÓÖ Ô Ö Ñ Ø Ö× Ò ÔÐ Ñ ÒØ Ò ÓÑÔ Ð ¹Ø Ñ Ñ Ø ÔÖÓ Ö ÑÑ Ò ×Ý×Ø Ñ ÓÖ Ø ÑÔÐ Ø Ô Ö Ñ Ø Ö× ÖÓÑ Ø Ö Ð Ü Ð ÒÚ ÖÓÒÑ Òغ Ë ¹ Â Ú ¸ ÐÐ Å Ý Û Ö ­Ý × Ö ÓÛ Å Ý ³× ØÙÖ × ÓÒ ¸ Ñ Ø Ó Ò ÒÓØ Ö ÓÑÔ Ð Û Ò ÛÖ ÔÔ Ö × ÛÓ¹ ×ÙÔÔÓÖØ À Ò ¹ÏÖ Ôº Ú Ò ÒØÓ Øº ÐÐÓÛ Ò Û Ú Ò ÓÒ Ò Ö × × × × Ô Ö Ø ¹ Ú ÐÓÔÑ Òغ ÁÒ Ø ÓÒ¸ Ø × ÓÖØ Ò× Ø ÓÑÔ Ð » Ø» Ù Ý Ð Û Ò Ú ÐÓÔÑ ÒØ ×Ô Ø× ×Ù × ØÖ Ò Ò ÓÒ¹ 1. INTRODUCTION ØÖ Ø Ò ÓÖ Ñ ÒØ Ö Ù× º Ò ÐÐݸ Ú ÐÓÔÑ ÒØ ×Ô Ø× ÁÒ ×Ô Ø¹ÓÖ ÒØ ÔÖÓ Ö ÑÑ Ò ¸ Û Ú Ò Ú ÒØÓ Ñ ¹ Ò ÛÓÚ Ò ÒØÓ ÖÙÒÒ Ò ÔÖÓ Ö Ñ¸ Ù× Ò Ò ÒØ ÖÔÖ Ø Ö Ø Ó ÑÓÙÒØ× ØÓ Ö ¬Ò Ò Ø Ñ Ø Ó × Ø ÓÑÔÓ× Ø ÓÒ Ó ×Ù × ÒË ÐÐ ¾½℄ ÓÖ Ã Û ℄º Ø× Ó Ý Û Ø Ú º ÀÓÛ Ú Ö¸ ÙÖÖ ÒØ ×Ô Ø Ð Ò Ù × Ó ÆÓÖÑ ÐÐݸ À Ò ¹ÏÖ Ô Ö ÕÙ Ö × Ø Ø ÛÖ ÔÔ Ö× Ú Ü¹ ÒÓØ ÐÐÓÛ Ú Ø× Ð ØÓ ¬Ò ÓÑÔÓ× Ø ÓÒ ÐÐݺ ÓÖ Ü¹ ØÐÝ Ø × Ñ × Ò ØÙÖ × × Ø Ñ Ø Ó × Ø Ø Ø Ý ÛÖ Ôº ÑÔÐ ¸ Ò ×Ô Ø ¾ ℄ ×Ô Ø ¬Ò Ø ÓÒ× Ñ Ý ÓÒÐÝ Ö Ù× Ë Ò Ò ×Ô Ø ×Ý×Ø Ñ Ø Ø Ö ×ØÖ Ø× Ö Ù× Ó Ú ØÓ Ñ Ø ¹ Ø ÖÓÙ Ò Ö Ø Ò º Ï ÔÖ × ÒØ Ò ÜØ Ò× ÓÒ ØÓ Â Ú ¸ ÐÐ Ó ×ÛØ ÒØ Ð × Ò ØÙÖ × ÛÓÙÐ ÒÓØ ×Ô ÐÐÝ Ù× Ùи À Ò ¹ÏÖ Ô¸ Ø Ø ÐÐÓÛ× ÐÐ Ó Â Ú ³× Ó Ö Ù× Ø Ò Õ٠׸ À Ò ¹ÏÖ Ô ×ÙÔÔÓÖØ× Ò Ö × ÔÓÐÝÑÓÖÔ ×Ñ Ý ÖÒ Ò ÐÙ Ò Ó Ø ÓÑÔÓ× Ø ÓÒ Ò Ô Ö Ñ Ø Ö Þ ÓÒ×ØÖÙ ¹ ×ÓÑ ØÝÔ Ò ØÓ ÖÙÒØ Ñ º À Ò ¹ÏÖ Ô ÐÐÓÛ× ÛÖ Ô¹ ØÓÖ׸ ØÓ Ù× Û Ø Ñ Ø Ó Ú º Ô Ö× ØÓ ¬Ò ÓÒ Ö ØÖ ÖÝ Ö ÙÑ ÒØ Ò Ö ØÙÖÒ ØÝÔ ×º Ç Ø ÓÑÔÓ× Ø ÓÒ × Ô ÖØ ÙÐ ÖÐÝ ÑÔÓÖØ ÒØ Ö Ù× Ø ¹ Ø ÓÒ ÐÐݸ ÛÖ ÔÔ Ö× Ñ Ý ÔÓÐÝÑÓÖÔ ÓÚ Ö Ø ÒÙѹ Ò ÕÙ Ò Ð Ò Ù × Ø Ø Ù× ¬Ü × Ò Ð ¹ Ò Ö Ø Ò Ö Ö¹ Ö Ó Ö ÙÑ ÒØ× Ø Ý Ø º ݸ ×Ù × Â Ú º ÍÒÐ Ð Ò Ù × Ø Ø ×ÙÔÔÓÖØ Ñ Ü Ò× ½ ¸ À Ò ¹ÏÖ Ô × ÑÔÐ Ñ ÒØ Ò Å Ý × Ò ÜØ Ò× ÓÒ ØÓ ¾ ℄¸ Â Ú Ó × ÒÓØ ÐÐÓÛ Ð ×× × ØÓ Ù ÐØ ÖÓÑ × Ú Ö Ð Ð ×× Ø Å Ý ÔÖÓ Ö ÑÑ Ò Ð Ò Ù ¾¸ ¿℄º Å Ý × ÓÑÔ Ð ¹ Ò Ñ Ü Ò ¬Ò Ø ÓÒ׺ ÁÒ×Ø ¸ × Ò Ð Ð ×× ÑÙ×Ø ×Ô ¹ Ø Ñ Ñ Ø ÔÖÓ Ö ÑÑ Ò ×Ý×Ø Ñ ÓÖ Â Ú Ø Ø ÐÐÓÛ× Ù× Ö× Ð Þ Û Ø Ò Û ÙÒ Ø ÓÒ Ð Øݺ Ç Ø ÓÑÔÓ× Ø ÓÒ ÐÐÓÛ× ØÓ ¬Ò Ð Ò Ù ÜØ Ò× ÓÒ׺ Å Ý ÐÐÓÛ× Ù× ØÓ ÜØ Ò Ð ×× × ØÓ Ö Ù× Ý Ð Ò Ò Ò×Ø Ò × ØÓ Ø Ö Ø ÖÙÒØ Ñ ¸ Â Ú ³× ×ÝÒØ Ü Ò Ò ÓÖ ÜØ Ò ØÝÔ Ò ÖÙР׸ Ò Ò × Ú ÐÙ Ð ÓÖ Ù Ð Ò ×Ô Ø× × Û ÐÐ × Ð ×× ×º ØÓ ÒØ Ö Ø ×Ô Ø ÓÖ ÒØ ØÙÖ × ÑÓÖ Ø ØÐÝ ÒØÓ Ø ÁÒ À Ò ¹ÏÖ Ô¸ Ñ Ø Ó ÛÖ ÔÔ Ö× Ö ¬Ö×ع Ð ×× Ú Ð٠׺ ÓÑÔÓÒ ÒØ Ð Ò Ù Ø Ò ÔÖ Ú ÓÙ× ×Ý×Ø Ñ׺ ÏÖ ÔÔ Ö× Ò ÜÔÐ ØÐÝ ÓÒ×ØÖÙ Ø Û Ø new¸ Ò Ð ÁÒ ×ÙÑÑ Öݸ À Ò ¹ÏÖ Ô Ñ × × Ú Ö Ð ÓÒØÖ ÙØ ÓÒ× ØÓ ×Ô Ø¹ÓÖ ÒØ Ð Ò Ù × Ò ¯ ÏÖ ÔÔ Ö Ó Ñ Ý Ö Ù× Ø ÖÓÙ ÓØ Ò Ö Ø Ò Permission to make digital or hard copies of all or part of this work for Ò Ó Ø ÓÑÔÓ× Ø ÓÒº personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies ¯ ÏÖ ÔÔ Ö× Ò Ø ÜÔÐ Ø ÓÒ×ØÖÙ ØÓÖ Ô Ö Ñ Ø Ö׸ bear this notice and the full citation on the first page. To copy otherwise, to Ò ÒÒ Ö ÛÖ ÔÔ Ö× Ò Ø ÑÔÐ Ø Ô Ö Ñ Ø Ö× ÖÓÑ republish, to post on servers or to redistribute to lists, requires prior specific Ø Ö Ð Ü Ð ÒÚ ÖÓÒÑ Òغ permission and/or a fee. AOSD 2002, Enschede, The Netherlands Copyright 2002 ACM 1-58113-469-X/02/0004 ...°5.00. ¯ Å Ø Ó × Ò ÒÓÒÝÑÓÙ× Ð ×× × Ò ÛÖ ÔÔ º
  • 2. ¯ ×Ô Ø Ò ÓÑÔÓÒ ÒØ Ó ÑÝ ÓÑÔ Ð ×Ô ¹ Ñ Ø Ó Ñ Ý ¸ ÙØ Ò × ÒÓØ ÐÛ Ý× Ò ¬ к Ö Ø Ðݺ Ú Ò Ù× ØÓ ¬Ò ÓÙØ Û Ö × Ö Ò ¸ Ò ØÓ ÑÔÐ Ñ ÒØ Ò º Ë Ô Ö Ø Ò Ø Ñ ÑÓ Þ Ø ÓÒ Ó Ì Ö ×Ø Ó Ø × Ô Ô Ö × ÓÖ Ò Þ × ÓÐÐÓÛ׺ Ë Ø ÓÒ ¾ Ò¹ Ú ÐÙ ÖÓÑ Ø× ÓÑÔÙØ Ø ÓÒ Ý Ð × ÓÒ Ö Ø Ò ¬Ø׺ ÓÖ ØÖÓ Ù × À Ò ¹ÏÖ Ô ØÙÖ × Ø ÖÓÙ × Ö × Ó Ü ÑÔР׺ Ò×Ø Ò ¸ × Ñ Ý ÛÓÚ Ò ÒØÓ ÓØ ¹Ð Ú Ð Ñ Ø Ó Ë Ø ÓÒ ¿ ÔÖÓÚ × Ò ÓÚ ÖÚ Û Ó À Ò ¹ÏÖ Ô³× ÙÖÖ ÒØ Ñ¹ Ò Ñ Ø Ó Ø ÐÐ׺ ×Ô Ø¹ÓÖ ÒØ ÔÖÓ Ö ÑÑ Ò ÐÐÓÛ× ÔÐ Ñ ÒØ Ø ÓÒº Ë Ø ÓÒ Ú ÐÙ Ø × Ø Ó×Ø Ó À Ò ¹ÏÖ Ô³× ÓÒ ØÓ × ÐÝ Ö Ú ÐÙ Ø Ø ÙØ Ð ØÝ Ó ¹Ð Ú Ð ØÖ ­ Ü Ð Øݺ Ë Ø ÓÒ × Ö × Ö Ð Ø ÛÓÖ º Ò ÐÐݸ Ë ¹ ÐÓÛ Ö¹Ð Ú Ð × Ò º Ø ÓÒ ×ÙÑÑ Ö × ÓÙÖ ÓÒ ÐÙ× ÓÒ׺ ÇÒ × ÑÔÐ Ò Ñ ØÖ × ØÓ ÓÙÒØ Ø ØÓØ Ð ÒÙÑ Ö Ó Ñ Ø Ó ÒÚÓ Ø ÓÒ׸ Ò Ø ÒÙÑ Ö Ó ÒÚÓ Ø ÓÒ× Û Ø 2. DYNAMIC METHOD WRAPPING ×Ø Ò Ø Ö ÙÑ ÒØ׺ Ì × ÓÙÒØ× Ò Ó Ø Ò Ý ØÖ Ò Ì × × Ø ÓÒ ÒØÖÓ Ù × À Ò ¹ÏÖ Ô³× ×ÝÒØ Ü Ò × Ñ ÒØ × Ø Ñ Ø Ó ¸ Ò ¬ÐØ Ö Ò ÙÔÐ Ø × ÖÓÑ Ø ØÖ º Ø ÖÓÙ × Ú Ö Ð Ü ÑÔР׺ Ì × Ü ÑÔÐ × × ÓÛ ÓÛ À Ò ¹ ËÙÔÔÓ× Û Û × ØÓ ØÖ ×Ø Ø Ñ Ø Ó ÐÐ Class- ÏÖ Ô Ò Ù× ØÓ Ù ÓÔØ Ñ Þ Ø ÓÒ× ×Ù × Ò ¸ Path.lookup(String) Ø Ø Ö ØÙÖÒ× ClassPath.Re- ØÓ ÑÔÐ Ñ ÒØ Ò ¸ ØÓ ØÖ ÓÛÒ Ù ×¸ Ò ØÓ Û Ú sourceº Ï Ò ¬Ò ÛÖ ÔÔ Ö ÓÖ ÐÓÓ ÙÔ × ÓÐÐÓÛ× ÛÖ ÔÔ Ö× ÒØÓ Ñ Ø Ó × Ó ÐÓ Ð Ð ×× ×º Ì × Ü ÑÔÐ × Ð×Ó ClassPath.Resource wrapper ÑÓÒ×ØÖ Ø ÓÛ Ó Ø ÓÑÔÓ× Ø ÓÒ¸ ÜÔÐ Ø ÓÒ×ØÖÙ ØÓÖ׸ lookupTracer(String name) { Ò × Ô Ö Ø ÓÑÔ Ð Ø ÓÒ Ò Ö × Ø ÜÔÖ ×× Ú ÔÓÛ Ö Ó System.out.println("lookup("+name+") called"); return wrapped.apply(name); ÛÖ ÔÔ Ö׺ } À Ò ¹ÏÖ Ô × ¬Ò Ò Ø ÖÑ× Ó ØÛÓ ÓÖ Ð ×× × Pro- cedure Ò Wrapperº ÈÖÓ ÙÖ Ó Ø× Ò Ô×ÙÐ Ø Ñ ¹ Ì ÛÖ ÔÔ Ö Ð Ö Ø ÓÒ ÓÚ Ó × ÒÓØ Ñ ÒØ ÓÒ Class- Ø Ó Ò ÓÑÔÓ× Ð ÛÖ ÔÔ Ö Ó ×º Ì Ð ×× Wrapper × Path.lookup Ò Ô Ö ÓÖÑ× ÒÓ Û Ú Ò º Ì ÛÖ ÔÔ Ö Ò Ò ×ØÖ Ø ØÓÖÝ Ø Ø ÓÑÔÓ× × ×Ô Ø Ó Û Ø ÛÖ ÔÔ ÔÔÐ ØÓ ÒÝ ×Ø Ø Ñ Ø Ó Ø Ø Ø × String Ò ÔÖÓ ÙÖ ×º Ì ×ØÖ Ø Ñ Ø Ó Wrapper.generate(- Ö ØÙÖÒ× ClassPath.Resourceº Ì ÛÖ ÔÔ Ö Ó Ý × Ö Method thisMethod, Procedure wrapped) ÔÖÓ Ù × ØÓ Ü Ñ Ò Ø× Ö ÙÑ ÒØ׸ ÐÐ Ø ÛÖ ÔÔ Ñ Ø Ó ¸ Ò ÛÖ ÔÔ ¬Ò Ø ÓÒ Ó thisMethod ÖÓÑ Method Ó ¹ Ö ØÙÖÒ Ú ÐÙ º Ì ÛÖ ÔÔ Ö Ó Ø × ÓÙÒ ØÓ Ú Ö Ð Ø Ø Ø ÓÒØ Ò× ×ÝÑ ÓÐ Ò ÓÖÑ Ø ÓÒ Ò ÐÐ Ð Pro- ÐÐ lookupTracerº cedure ØÓ ÛÖ ÔÔ º Ì Û Ú Ö ÐÐ× generate() ØÓ Ï Ù× Ø wrap ×Ø Ø Ñ ÒØ ØÓ Û Ú lookupTracer ÒØÓ ÓÑÔÙØ ÛÓÚ Ò Ñ Ø Ó ¬Ò Ø ÓÒº ÁÒ ÑÓ×Ø × ×¸ Ø ClassPath.lookup()¸ ÔÖÓ Ö ÑÑ Ö Ó × ÒÓØ Ò ØÓ ÒÓÛ Ø Ø Ð× Ó Wrap- per.generate()¸ ÙØ Ø Ø Ñ × Ø × Ù× ÙÐ ØÓ ¬Ò gen- wrap ClassPath.lookup(String) with lookupTracer; erate() ÜÔÐ ØÐݺ Ì ¬Ö×Ø Ö ÙÑ ÒØ ØÓ wrap × Ñ Ø Ó × Ò ØÙÖ ¸ Ò Ø Å ÖÓ× Ø Ø ÑÔÐ Ñ ÒØ Ø ÛÖ ÔÔ Ö ÒØ Ö Ð×Ó ÑÔÐ ¹ × ÓÒ × ÛÖ ÔÔ Ö ÜÔÖ ×× ÓÒº Ø Ö Ø × ×Ø Ø Ñ ÒØ × Ü¹ Ñ ÒØ × ÑÔÐ ×Ø Ø ×º ÌÓ × ÐÝ ÛÖ Ô Ñ Ø Ó Ø Ò ÙØ ¸ ÐÐ× ØÓ ClassPath.lookup() Ö Ö Ö Ø ØÓ Ò Ö ÙÑ ÒØ Ó ØÝÔ Ì¸ Ø ÛÖ ÔÔ Ö ÑÙ×Ø ÔØ Ö ÙÑ ÒØ× lookupTracerº ÁÒ Ø × × ¸ Û ÓÙÐ ÚÓ Ð Ö Ò Ø Ó ØÝÔ Ì ÓÖ ×ÙÔ ÖØÝÔ º ÌÓ × ÐÝ Ô ×× Ø Ö ÙÑ ÒØ ÓÒ ÛÖ ÔÔ Ö Ú Ö Ð lookupTracer¸ Ò Ù× Ò ÒÓÒÝÑÓÙ× ØÓ Ø Ø Ö Ø Ñ Ø Ó ¸ Ø ÛÖ ÔÔ Ö ÑÙ×Ø Ø Ò Ö ÙÑ ÒØ ÛÖ ÔÔ Ö ÜÔÖ ×× ÓÒ Ó ØÝÔ Ì ÓÖ ×Ù ØÝÔ º Ì Ö ÓÖ ¸ Ö ÙÑ ÒØ ØÝÔ × ÑÙ×Ø ÒÚ Ö Òغ Ê ØÙÖÒ ØÝÔ × ÑÙ×Ø ÒÚ Ö ÒØ Ý × Ñ Ð Ö Ö ¹ wrap ClassPath.lookup(String) ×ÓÒ Ò º with new ClassPath.Resource wrapper(String name) { /* body of lookupTracer */ ÈÓÐÝÑÓÖÔ ÛÖ ÔÔ Ö× Ñ Ý ¬Ò Ù× Ò ×Ô Ð ×ÝÒ¹ }; Ø Üº ÛÖ ÔÔ Ö Ø Ø Ø × Ô Ö Ñ Ø Ö Ó ØÝÔ Any Ñ Ý ÛÓÚ Ò ÒØÓ Ñ Ø Ó Ø Ø Ø × ÒÝ Ö Ö Ò ÓÖ ÔÖ Ñ Ø Ú ÁÒ Ø ÓÒ ØÓ Ø × Ð ×× Wrapper¸ Û × ÙÒ ¹ ØÝÔ Ø Ø ÓÖÖ ×ÔÓÒ Ò Ö ÙÑ ÒØ ÔÓ× Ø ÓÒº Ë Ñ Ð ÖÐݸ Ñ ÒØ Ð Ô ÖØ Ó Ø À Ò ¹ÏÖ Ô Ð Ò Ù ¸ À Ò ¹ÏÖ Ô ÔÖÓ¹ ÛÖ ÔÔ Ö Ø Ø Ö ØÙÖÒ× Any Ñ Ý ÛÓÚ Ò ÒØÓ Ñ Ø Ó × Ö ¹ Ú × Ð Ö ÖÝ Ó ÙØ Ð ØÝ ÛÖ ÔÔ Ö× Ò maya.wrap.Wrap- ØÙÖÒ Ò ÒÝ ØÝÔ ¸ Ò ÚÓ Ñ Ø Ó ×º ÈÖ Ñ Ø Ú Ú ÐÙ × ÓÙÒ persº ÇÒ ×Ù ÛÖ ÔÔ Ö ÑÔÐ Ñ ÒØ× Ò Ö ÐÐ ØÖ Ò ØÓ Any Ú Ö Ð × Ö ÓÜ ¸ Ò ÓÖ Ø ÔÙÖÔÓ× Ó ÐÓ Ð ØÝÔ Ù× Ò Any Ò rest Ö ÙÑ ÒØ× Ò ¸ Any Ú Ö Ð × Ö ØÖ Ø × Objectº ÅÓÖ ­ Ü ¹ Ð ØÝ ÓÙÐ ÐÐÓÛ Ò Ð Ò Ù Ø Ø ×ÙÔÔÓÖØ× ÓÙÒ public static final Any wrapper tracer(rest Object[] args) { ÔÓÐÝÑÓÖÔ ×Ñ ×Ù × Â ℄º Í× Ò Â¸ ÓÒ ÓÙÐ Ú System.err.println("entering " + × ØÝ Ø ÖÓÙ ÔÓÐÝÑÓÖÔ ØÝÔ Ú Ö Ð ×¸ Ò ×Ô ¬ ØÝ fmtMeth(thisMethod args)); , Ý Ð Ö Ò ÙÔÔ Ö ÓÙÒ ×º Any ret = wrapped.apply(args); À Ò ¹ÏÖ Ô Ð×Ó ¬Ò × Ò Û Ð Ö Ø ÓÒ ÑÓ ¬ Ö¸ restº System.err.println("leaving " + ÛÖ ÔÔ Ö³× Ð ×Ø ÓÖÑ Ð Ô Ö Ñ Ø Ö Ñ Ý rest Ob- fmtMeth(thisMethod args) + , ject[] Ø × Ô Ö Ñ Ø Ö Û ÐÐ ÓÙÒ ØÓ Ò ÖÖ Ý Ó Ø " => " + ret); return ret; Ö ×Ø Ó Ø ØÙ Ð Ö ÙÑ ÒØ׺ Ì apply ÓÔ Ö ØÓÖ ØÖ Ø× } Ö ×Ø Ú Ö Ð × × Ð ×Ø× Ó Ö ÙÑ ÒØ׺ Ö ÙÑ ÒØ Ð ×Ø× Ñ Ý Ð×Ó ×ØÓÖ Ò ¬ Ð × Ò ÐÓ Ð Ú Ö Ð × Ð Ö Û Ø Ø Ì ÑÔÐ Ø Ô Ö Ñ Ø Ö thisMethod × Ò Ó Ø Ø Ø Ö Ô¹ rest ÑÓ ¬ Öº Ö × ÒØ× Ø Ñ Ø Ó Ò ÛÖ ÔÔ º Ï Ò tracer × ÛÓÚ Ò ÒØÓ Ò Ò×Ø Ò Ñ Ø Ó ¸ args[0] ÓÒØ Ò× Ø Ö Ú Ö¸ 2.1 Evaluating Cacheable Methods × Ò Ñ Ø Ó Ö Ú Ö × ÐÛ Ý× ÓÙÒØ × ÛÖ ÔÔ Ö Ö¹ Ò × Ò Ü ÑÔÐ Ó Ø Ò × Ó ÓÒ ÖÒ× Ø Ø À Ò ¹ ÙÑ Òغ Ì ×Ø Ø Ñ Ø Ó Wrappers.fmtMeth() Ù× × ÏÖ Ô Ò ÜÔÖ ×× Ð ÒÐݺ Ì Ö ×ÙÐØ Ó ÒÝ × ¹ « ع Ö thisMethod³× ×× ÑÓ ¬ Ö× ØÓ ÓÛ ØÓ ÓÖÑ Ø Ø
  • 3. crashTracer ÙÑÔ× Ñ Ø Ó ÒÚÓ Ø ÓÒ Ò ÓÖÑ Ø ÓÒ Û Ò Ò Ü ÔØ ÓÒ × Ø ÖÓÛÒº trapper Ú ÐÓÔÑ ÒØ ÛÖ ÔÔ Ö Ø Ø ÙÒ ÓÒ Ø ÓÒ ÐÐÝ Ø ÖÓÛ× ÖÙÒØ Ñ Ü ÔØ ÓÒº stackDumper ÈÖ ÒØ× ×Ø ØÖ Ò ÐÐ× Ø ÖÓÙ Ø ÛÖ ÔÔ Ñ Ø Ó º CacheNth ÛÖ ÔÔ Ö ×Ù Ð ×× Ø Ø Ñ ÑÓ Þ × Ø ÛÖ ÔÔ Ñ Ø Ó ³× Ö ×ÙÐØ× × Ù× Ò Ø Ò Ø Ö ÙÑ ÒØ × Ýº CacheNth ÛÖ ÔÔ Ö× Ö Ó Ð ØØÐ Ú ÐÙ ÐÓÒ ¸ ÙØ Ö Ù× ÙÐ Û Ò ÓÑÔÓ× Û Ø ÓØ Ö ÛÖ ÔÔ Ö׺ cache1st ÛÖ ÔÔ Ö Ø Ø Ñ ÑÓ Þ × Ø ÛÖ ÔÔ Ñ Ø Ó ³× Ö ×ÙÐØ× Ù× Ò Ø ×ÓÐ Ö ÙÑ ÒØ × Ýº cache2nd ÛÖ ÔÔ Ö Ø Ø Ñ ÑÓ Þ × Ø ÛÖ ÔÔ Ñ Ø Ó ³× Ö ×ÙÐØ× Ù× Ò Ø × ÓÒ Ó ØÛÓ Ö ÙÑ ÒØ× × Ýº makePerInstance(Wrapper)Ì × ÛÖ ÔÔ Ö Û × Ö ÙÑ Òظ Ò Ö ØÙÖÒ× ÛÖ ÔÔ Ö Ø Ø ÔÔÐ × Û ÓÒ Ô Ö¹ Ò×Ø Ò × ×º makeConditionalWrapper(Procedure, Wrapper) Ì × ÔÖÓ ÙÖ Ò ÛÖ ÔÔ Ö¸ Ò Ö ØÙÖÒ× ÛÖ ÔÔ Ö Ø Ø ÐÐ× Ø ÖÓÙ makeConditionalWrapper³× × ÓÒ Ö ÙÑ ÒØ Û Ò Ø ÔÖÓ ÙÖ Ö ØÙÖÒ× ØÖÙ ¸ Ò ÐÐ× Ø Ñ Ø Ó Ö ØÐÝ ÓØ ÖÛ × º staticLocker ÐÐ× Ø ÛÖ ÔÔ Ñ Ø Ó Û Ø Ø× Ð Ö Ò Ð ×× ÐÓ º instanceLocker ÐÐ× Ø ÛÖ ÔÔ Ñ Ø Ó Û Ø Ø× Ö Ú Ò Ò×Ø Ò ÐÓ º Ì Ð ½ ÍØ Ð ØÝ ÛÖ ÔÔ Ö׸ Ð ×× ×¸ Ò Ñ Ø Ó × ¬Ò Ý maya.wrap.Wrappersº Ö ÙÑ ÒØ Ð ×غ ÏÖ ÔÔ Ö× ×Ù × tracer ÒÒÓØ ÜÔÐ ØÐÝ ÌÓ ÚÓ Ø × Ó×ظ À Ò ¹ÏÖ Ô ÔÖÓÚ × ×Ô Ð Þ ÛÖ Ô¹ Ø ÖÓÛ Ü ÔØ ÓÒ׸ × Ò ÛÖ ÔÔ Ö Ð Ö Ø ÓÒ× Ò¹ Ô Ö× cache1st Ò cache2nd ØÓ Ò Ð ÙÒ ÖÝ ×Ø Ø Ò ÒÓØ ÓÒØ Ò throws Ð Ù× ×º ÀÓÛ Ú Ö¸ wrapped.apply() Ò×Ø Ò Ñ Ø Ó ×¸ Ö ×Ô Ø Ú Ðݺ Ñ Ý Ø ÖÓÛ Ö ØÖ ÖÝ Ü ÔØ ÓÒ× Ø Ø Ö ÑÑ Ø ÐÝ ÔÖÓÔ¹ ÁÒ Ø ÓÒ ØÓ Ø ÓÒÚ ÒØ ÓÒ Ð Ò×Ø Ò Ú ¬Ò Ø ØÓ Ø ÛÖ ÔÔ Ö³× ÐÐ Öº Ø ÖÓÙ makePerInstance()¸ À Ò ¹ÏÖ Ô ÔÖÓÚ × Ò¹ Ö Ð Ñ Ò ×Ñ Ø ÖÓÙ conditionalWrapper Ð Ö ¹ 2.2 Composing Caches Ø ÓÒ׺ Ï Ò ØÖ ÐÐ× ØÓ Ñ Ø Ó n ÓÒ ×Ô ¬ Ò×Ø Ò c × ÓÐÐÓÛ× Wrappers ¬Ò × × Ú Ö Ð ÓØ Ö Ò Ö ÛÖ ÔÔ Ö׸ ÛÖ ÔÔ Ö ×Ù ØÝÔ ×¸ Ò ÛÖ ÔÔ Ö¹ Ò Ö Ø Ò Ñ Ø Ó ×º Ì × Ó Ø× wrap C.n() with new Any conditionalWrapperC() { thisReceiver == c } => Wrappers.tracer; Ñ Ý ÓÑÔÓ× ØÓ ÑÔÐ Ñ ÒØ ÓÒ ÖÒ× ×Ù × Ò Ò Ú Ö ÓÙ× Û Ý׺ ËÓÑ ÔÖ ¬Ò ÛÖ ÔÔ Ö× Ö Ð ×Ø Ò Ì Ð ½º Ì ÓÚ ×Ø Ø Ñ ÒØ ÛÖ Ô× C.n() Û Ø ÛÖ ÔÔ Ö Ø Ø Ì Ð ×× CacheNth Ò Ñ Ø Ó × ×Ù × makeCondi- ØÖ × Ø× Ü ÙØ ÓÒ Û Ò c × Ø Ö Ú Ò Ò×Ø Ò º Ì × tionalWrapper() Ò makePerInstance() Ö Ó Ô Ö¹ ÛÖ ÔÔ Ö Ñ Ý ÔÔÐ ØÓ Ò×Ø Ò Ñ Ø Ó × Ó C Ø Ø Ø Ø ÙÐ Ö ÒØ Ö ×غ CacheNth Ù× × ×Ø Ò Ö Â Ú ØÙÖ ×¸ Ò¹ ÒÓ Ö ÙÑ ÒØ× Ò Ö ØÙÖÒ ÒÝ ØÝÔ º Ì conditional- Wrapper ×ÝÒØ Ü × Ñ ÖÓ Ø Ø × ÜÔ Ò × ÓÐÐÓÛ× Ò Ö Ð ×× × Ò ÜÔÐ Ø ÓÒ×ØÖÙ ØÓÖ׸ ØÓ ××Ó Ø × Û Ø Ñ Ø Ó ×º Ì ¬Ò Ø ÓÒ× Ó CacheNth Ò makePerIn- makeConditionalWrapper( stance() Ö × ÓÛÒ Ò ÙÖ × ½ Ò ¾¸ Ö ×Ô Ø Ú Ðݺ new boolean procedure (final C thisReceiver { ) Ø Ñ CacheNth ÛÖ ÔÔ Ö × ÛÓÚ Ò ÒØÓ Ñ Ø Ó ¸ }, return thisReceiver == c; generate × ÐÐ º Ì × Ñ Ø Ó ÐÐÓ Ø × Ò Û Wrappers.tracer); Ò Ö ØÙÖÒ× ÔÖÓ ÙÖ Ø Ø Ù× × Ø º CacheNth Ù× × Ò ÜÔÐ Ø ÓÒ×ØÖÙ ØÓÖ Ô Ö Ñ Ø Ö ØÓ × Ð Ø Ø Ý Ö¹ Ì Ð ØÝ ØÓ Ú × ×Ô ¬ Ò×Ø Ò × Ö Ø Ð ØÓ ¹ ÙÑ ÒØ Ù× Ò Ñ ÑÓ Þ Ø ÓÒº ÁØ Ð×Ó Ù× × Ò ÒÓÒÝÑÓÙ× Ò ÓÖ ClassPath.lookup()º ÁÒ Ø ClassPath ¬Ò ¹ ÔÖÓ ÙÖ Ð ×× ØÓ ××Ó Ø Ó Û Ø ×Ø Ø º ´ÁÒ ÑÓÖ ×Ø Ø Ø ÓÒ Ù× Ý Ø Å Ý ÓÑÔ Ð Ö¸ lookup() × ÒÓØ ØÙ ÐÐÝ ×Ô Ø Ð Ò Ù × ×Ù × ×Ô Ø¸ ×Ù Ñ Ò ×Ñ× Ö ÙÒ¹ ×Ø Ø Ñ Ø Ó º ClassPath × ¬Ò Ò × Ô Ö Ø Ð ¹ Ú Ð Ð ºµ ÈÖÓ ÙÖ Ó Ø׸ Ð Ñ Ø Ó ×¸ Ö ÐÐ Û Ø Ö Öݸ Ò × Ú Ö Ð ClassPath Ó Ø× Ò ¬Ò ÓÒ Ö ÙÑ ÒØ× Ò Ö ØÙÖÒ Ú Ð٠׺ Ì Ø Ð× Ó Ø ÔÖÓ ÙÖ ×Ø Ò Ø × Ö Ô Ø ×º ClassPath Ó Ø Ñ Ý Ù× Ò ÐÐ Ò ÓÒÚ ÒØ ÓÒ Ö Ò Û Ø Ò Ø apply Ñ ÖÓº Ø ÓÑÔ Ð Öº ÁÒ ×Ù × ¸ Ò ÔÖÓ Ù × × ¹ CacheNth ÛÖ ÔÔ Ö Ñ Ý ÓÑÔÓ× Û Ø ÓØ Ö ÛÖ Ô¹ Ò ¬ ÒØ Ô Ö ÓÖÑ Ò ÑÔÖÓÚ Ñ Òظ Ò Ø × × ØÓ ××ÙÑ Ô Ö׺ ÓÖ Ü ÑÔÐ ¸ Ô Ö¹ Ò×Ø Ò ÓÖ Ø Ñ Ø Ó C.m Ø Ø Ð ×× × Ó ÒÓØ Ò Ò Ø ÓÑÔ Ð Ö³× º ÀÓÛ¹ Ò Ö Ø Ù× Ò Ú Ö¸ ÓØ Ö Ð ÒØ× Ú « Ö ÒØ Ô Ö ÓÖÑ Ò Ò × Ñ ÒØ wrap C.m(Object) Ö ÕÙ Ö Ñ ÒØ׺ ClassPath Ñ Ý Ù× Ý × ÑÔÐ Ð ×× with makePerInstance(new CacheNth(1)); ÐÓ Ö Ø Ø Ò Ú Ö ÐÓÓ × ÙÔ Ø × Ñ Ö ×ÓÙÖ ØÛ ¸ Ò Û × Ò ÛÓÙÐ ÒÓØ Ù× Ùк ÐØ ÖÒ Ø Ú Ðݸ Class- Ì ÛÖ ÔÔ Ö Ö ØÙÖÒ Ý makePerInstance() Û ÐÐ Ô¹ Path Ó Ø Ñ Ý Ù× ØÓ ÐÓ ÔÐÙ Ò× ÓÖ × ÖÚÐ Ø׺ ÁÒ ÔÐÝ Ø Ö ÙÑ ÒØ ØÓ Ø ÛÖ ÔÔ Ñ Ø Ó ØÑ Ò Û ×Ù × ×¸ Ø × ÓÒØ ÒØ× Ñ Ý Ò ÝÒ Ñ ÐÐÝ Ò Ö Ú Ö Ó Ø × Ò ÓÙÒØ Ö º Ì ÛÖ ÔÔ Ö Ö ØÙÖÒ Ý ÐÓÓ ÙÔ Ö ×ÙÐØ× × ÓÙÐ Ò Ú Ö º makePerInstance() ÔØ× Ö Ú Ö Ó ÒÝ ØÝÔ ¸ Û ÓÑÔ Ð Ö Ò Ò×Ø ÐÐ ÓÒ ÐÐ× ØÓ lookup() Ò × ÓÙÒ ØÓ thisReceiver ÓÐÐÓÛ Ý Þ ÖÓ ÓÖ Ø ÓÒ Ð Ø× ÓÛÒ ClassPath × ÓÐÐÓÛ× Ö ÙÑ ÒØ× ×ØÓÖ Ò argsº Ë Ò CacheNth ÐÐÓ Ø × final ClassPath path = new ClassPath(pathString); Ø Ñ Ø × ÛÓÚ Ò¸ Ø Ö ×ÙÐØ Ó m Û ÐÐ wrap ClassPath.lookupString(String) with ÓÒ Ô Ö¹ Ò×Ø Ò × ×º new Any conditionalWrapperClassPath(String _) CacheNth ÔÖÓÚ × ­ Ü Ð ØÝ Û Ø ÖÙÒØ Ñ Ó×غ ÐÐ { thisReceiver == path } => Wrappers.cache2nd; Ö ÙÑ ÒØ× ØÓ CacheNth Ö Ô ÒØÓ Ò Object[] ÓÒ ÒØÖݸ Ò ÙÒÔ Û Ò Ø ÙÒ ÖÐÝ Ò Ñ Ø Ó × ÐÐ º Ì ÓÚ Ó × ÓÛ× ÓÛ ÓÒ ÖÒ× Ò ×Ô Ö Ø Ú Ö¹
  • 4. public static class CacheNth extends Wrapper { int offset; public CacheNth(int offset) { this.offset = offset; } public Procedure generate(final Method thisMethod final Procedure wrapped) { , final HashMap cache = new HashMap(); // Store results of thisMethod in its own cache return new Object procedure(rest Object[] args) { Object ret = cache.get(args[offset]); if (ret == null && !cache.containsKey(args[offset])) { ret = wrapped.apply(args); cache.put(args[offset], ret); } return ret; }; } } ÙÖ ½ Ò Ñ Ø Ó Ö ×ÙÐØ× × ÓÒ Ò Ö ØÖ ÖÝ Ö ÙÑ Òغ public static Wrapper Ø Ú ÐÝ Ò Ð Ù ÐÓ Ò ØÓ ¬ÐØ Ö ÓÙØ ÙÒ ÑÔÓÖØ ÒØ ÓÙع makePerInstance(Wrapper wrapper) { ÔÙغ final Map instanceMap = new WeakHashMap(); ÇÒ Ó Ø ØÖ ×Ø Ø× Ó Ó Ò mayac¸ Ø ÓÑÔ Ð Ö ÓÖ Å Ý ¸ × Ø Ô ØØ ÖÒ Ô Ö× Öº ÁØ ×Ù Ø× ÓØ Ø ÑÔÐ Ø × Ø Ø // match any receiver type, any return type and Ò Ö Ø ËÌ ÒÓ × Ò Ñ ÖÓ Ö ÙÑ ÒØ Ð ×Ø× ØÓ × ÓÒ // any # of args return new Any wrapper Any (rest Object[] args) { Ð Ú Ð Ó Ô Ö× Ò º Ë ÕÙ Ò × Ó ÓÖ Ò ÖÝ ×ÝÒØ Ü ØÖ ÒÓ × Ö Procedure proc = ØÖ Ò×Ð Ø ØÓ ØÖ × Ó Ó Ø× ÐÐ RightSymbols (Procedure) instanceMap.get(thisReceiver); class PatternParser { if (proc == null) RightSymbol parse(Object lhs, Environment env) { { ... } proc = wrapper.generate(thisMethod, ... wrapped); } instanceMap.put(thisReceiver proc); , class TemplateParser extends PatternParser { ... } } class ArgumentParser extends PatternParser { ... } // thisReceiver must be explicitly passed in return proc.apply(thisReceiver args); , Ò ÑÔÐ Ñ ÒØ Ø ÓÒ Ó Ø Å Ý ÓÑÔ Ð Ö Ñ Ø ¬Ò × Ú¹ } }; Ö Ð ÓÓÐ Ò Ú Ö Ð × ØÓ ÓÒØÖÓÐ « Ö ÒØ ØÝÔ × Ó Ù ÐÓ Ò º ÓÖ Ò×Ø Ò ¸ Debug.traceParse ÛÓÙÐ Ò Ð ÐÓ Ò Ó Ú ÖÝ ÑÓÚ Ø Ä ÄÊ´½µ Ô Ö× Ö Ñ ×¸ Ò De- ÙÖ ¾ ××Ó Ø Ò ÛÖ ÔÔ Ö Û Ø Ö Ú Öº bug.tracePatternParse ÛÓÙÐ Ò Ð ÐÓ Ò Ó Ú ÖÝ ÑÓÚ Ñ Ý Ø Ô ØØ ÖÒ Ô Ö× Öº Ø Ð ØÖ Ó Ô Ö× Ò Ø Ú ØÝ × Ö Ø Ð ØÓ ØÖ Ø ÐÐÝ ØÛ Ò ×Ó ØÛ Ö Ô ×º Ò ÔÔÐ Ø ÓÒ Ò Ù×¹ ÓÛÒ Ù Ò Ô ØØ ÖÒ Ô Ö× Ò º ÓÖ Ò×Ø Ò ¸ Ø ÓÑÔ Ð Ö ØÓÑ Þ Ø Ú ÓÖ Ó Ð Ö ÖÝ Ð ×× × ×Ù × ClassPath Ý Ñ Ý Ð ÓÒ Ô ÖØ ÙÐ Ö Ø ÑÔÐ Ø ÜÔÖ ×× ÓÒ Ø Ø Ò Ö Ø × ¬Ò Ò ×Ô Ø× ÓÒ Ø× ÔÙ Ð ÒØ Ö º Ë Ò À Ò ¹ÏÖ Ô Statement ÒÓ º ÌÓ ØÖ ÓÛÒ Ø × Ù ¸ Û ÑÙ×Ø Ó ¹ Ò Û Ú Ò Ö ×¸ Ð Ö ÖÝ³× Ú ÓÖ Ò Ò Û Ø ¹ Ø Ò ØÖ Ó Ø Ø ÑÔÐ Ø ÜÔÖ ×× ÓÒ³× Ô Ö× ¸ ÙØ × Ø Ò ÓÙØ ×× ØÓ ×ÓÙÖ Ó º Ø ÖÓÙ ØÖ Ó Ø ÒØ Ö ÓÑÔ Ð Ø ÓÒ ÙÒ Ø × Ô Ò Ùк À Ò ¹ÏÖ Ô³× ×ÙÔÔÓÖØ ÓÖ Ò ÜÔÐÓ Ø× Ñ ÒÝ ÝÒ Ñ Ò Ö ÛÖ ÔÔ Ö Ò Ù× ØÓ Ð Ñ Ø Ù ÓÙØÔÙØ ØÓ ÂÚ ØÙÖ ×º Ö×ظ × Ö ××Ó Ø Û Ø Ñ Ø Ó × Ø ÝÒ Ñ ÜØ ÒØ Ó Ô ÖØ ÙÐ Ö Ñ Ø Ó × ÓÐÐÓÛ× Ø ÖÓÙ ÒÒ Ö Ð ×× ÐÓ×ÙÖ ×º Ë ÓÒ ¸ ÛÖ ÔÔ Ö Ú ÓÖ × Any wrapper traceParsing(rest Object[] args) { ÓÒØÖÓÐÐ Ø ÖÓÙ ÜÔÐ Ø ÓÒ×ØÖÙ ØÓÖ Ô Ö Ñ Ø Ö׺ Ò ÐÐݸ Debug.traceParse = true; ÛÖ ÔÔ Ö Ó Ø× Ö ÓÑÔÓ× ØÓ ¬Ò Ú Ö ØÝ Ó ¹ Debug.tracePatternParse = true; Ò ÔÓÐ × ÓÒ Ô Ö Ñ Ø Ó ¸ ÓÒ Ô Ö Ò×Ø Ò ¸ Any ret = wrapped.apply(args); Ò ÓÒ Ò×Ø Ò Ò º ÐØ ÓÙ Ø × ×Ô ¬ ÔÓÐ ¹ Debug.tracePatternParse = false; × Ò ÑÔÐ Ñ ÒØ Ò ×Ø Ø ×Ô Ø Ð Ò Ù ¸ À Ò ¹ Debug.traceParse = false; ÏÖ Ô³× Ó ¹Ö Ù× Ñ Ò ×Ñ× ÔÖÓÚ ­ Ü Ð Øݺ ÓÖ } return ret; Ü ÑÔÐ ¸ Ô Ö¹ Ò×Ø Ò Ú × ÑÔÐ Ñ ÒØ × ÓÑÔÓ×¹ Ð ÛÖ ÔÔ Ö Ö Ø Ö Ø Ò Ò Û Ð Ò Ù ØÙÖ º Ì traceParsing ÛÖ ÔÔ Ö ÓÙÐ ¬Ò ÑÓÖ Ö ¹ ÙÐÐÝ ØÓ Ò Ð Ö ÙÖ× ÓÒ Ò Ü ÔØ ÓÒ׸ ÙØ Ø ÓÚ ¹ 2.3 Controlling Debug Output Ò Ø ÓÒ ×ÙÆ × ÓÖ Ø Ù Ò ÔÖÓ Ð Ñ Ø Ò º ÐØ ÓÙ ØÖ Ò Ñ Ø Ó ÒÚÓ Ø ÓÒ× × Ò ÑÔÓÖØ ÒØ ¹ Ï Ú Ò Ø × ÛÖ ÔÔ Ö ÒØÓ PatternParser.parse() Ù Ò ØÓÓи ×ÓÑ Ø Ñ × Ø × ×Ø ÐÐ Ò ×× ÖÝ ØÓ Ö ×ÓÖØ ØÓ Ö Ù × Ø ÑÓÙÒØ Ó ÜØÖ Ò ÓÙ× Ù ÓÙØÔÙظ ÙØ Ó × printlnº ÝÒ Ñ ×Ô Ø Û Ú Ò Ò Ù× ØÓ × Ð ¹ ÒÓØ Ð Ñ Ò Ø Ø ÒØ Ö Ðݺ ÓÖ ØØ Ö Ö ×ÙÐØ׸ Û Ò Ù× tra-
  • 5. class C { static public Runnable m() { static private boolean once = false; return new Runnable() { static public Runnable m() { public wrapped(Wrappers.tracer) void run() class R implements Runnable { { ... } public void run() { ... } }; } } if (Debug.traceRuns && !once) { // Wrapping R effects all instantiations of // R, just as instanceof matches any À Ö ¸ Ø Ñ Ø Ó ÑÓ ¬ Ö wrapped(Wrappers.tracer) // instantiation of R. Only trace it once. × Ò Ð× Ø Ø Ø Ñ Ø Ó run() × ÓÙÐ ÛÖ ÔÔ Ò wrap R.run() with Wrappers.tracer; ØÖ Öº Ì ÜÔÖ ×× ÓÒ Wrappers.tracer × Ú ÐÙ Ø Ò once = true; ÛÖ ÔÔ Ò × Ô Ö ÓÖÑ Ò Ø ØÓÔ¹Ð Ú Ð Ð ×× C³× ×Ø Ø Ò ¹ } Ø Ð Þ Ö׺ return new R(); } } ÙÖ ¿ Ò Ü ÑÔÐ Ó ÛÖ ÔÔ Ò Ñ Ø Ó × Ó ÐÓ Ð 3. IMPLEMENTING HANDI-WRAP Ð ×× ×º À Ò ¹ÏÖ Ô Ò Ö Ø × ×Ø Ò Ö Â Ú ÝØ Ó º Á ÂÎÅ ÓÑÔ Ø Ð ØÝ Û Ö ÒÓØ Ò ××Ù ¸ Ò ÑÔÐ Ñ ÒØ Ø ÓÒ Ñ Ø ÒÚÓÐÚ ÝÒ Ñ ÐÐÝ ÙÔ Ø Ò ÚØ Ð ×º Ú Ò Ø ÓÒ×ØÖ ÒØ× ceParsing ØÓ ÙÐ ÛÖ ÔÔ Ö Ø Ø Ò Ð × ÐÓ Ò Ü ØÐÝ Ó Ø ÂΟ À Ò ¹ÏÖ Ô Ú × ÓÓ Ô Ö ÓÖÑ Ò Ø ÖÓÙ Û Ö Ø ×Ò Ø Ù× Ó Ö ÙÐÐÝ Ó× Ò Ø ×ØÖÙ ØÙÖ ×¸ Ò Ý ÓÔ Ò¹ wrap PatternParser.parse(Object,Environment) Ó Ò Ñ Ø Ó ³× ÓÖ Ò Ð ¬Ò Ø ÓÒ Ò Ø × Ñ ÂÎÅ Ñ ¹ with new RightSymbol conditionalWrapper Ø Ó Ø Ø ×Ô Ø × ÛÖ ÔÔ Ö׺ À Ò ¹ÏÖ Ô³× ÑÔÐ Ñ ÒØ ¹ PatternParser(Object lhs, Environment env) Ø ÓÒ × ÓÒ× Ö × ÓÒ Ø ××ÙÑÔØ ÓÒ Ø Ø Ø Ú ×Ø { thisReceiver instanceof TemplateParser && lhs instanceof Type Ñ ÓÖ ØÝ Ó Ñ Ø Ó × Û ÐÐ ÒÓØ ÛÖ ÔÔ º && (((Type) lhs).getReflectClass() À Ò ¹ÏÖ Ô × ÑÔÐ Ñ ÒØ × ÖÓÙÔ Ó ÓÓÔ Ö Ø Ò == Statement.class) } Ñ ÖÓ× ÛÖ ØØ Ò Ò Å Ý º Å Ý × Ò ÜØ Ò× ÓÒ Ó Â Ú Ø Ø => traceParsing; ÐÐÓÛ× Ù× Ö× ØÓ ÛÖ Ø Ø Ö ÓÛÒ ×ÝÒØ Ü ÜØ Ò× ÓÒ׸ Û Ö ÐÐ Å Ý Ò׺ Å Ý Ò× Ò Ö ÒØ ÖÔÖ Ø ÓÖ ÜØ Ò Å Ý ×ÝÒ¹ ÏÖ ÔÔ Ö× Ö ÛÓÚ Ò ÒØÓ Ñ Ø Ó ¬Ò Ø ÓÒ׸ Ö Ø Ö Ø Ò Ø Ü Ý ÜÔ Ò Ò Ø ØÓ ÓØ Ö Å Ý ×ÝÒØ Ü Ø Ý ÓÔ Ö Ø Ö ØÖ ÖÝ Ö Ú Ö¸ × Ò ØÙÖ Ô Ö׺ Ì Ö ÓÖ ¸ Ø ÓÚ ÓÒ ×ØÖ Ø ×ÝÒØ Ü ØÖ ×¸ Ò Ø Ö ÜÔ Ò× ÓÒ × ØÖ Ö ÛÖ ÔÔ Ö ÑÙ×Ø ÛÓÚ Ò ÒØÓ parse Ò Ø× Ð Ö Ò Ð ×׸ ÙÖ Ò Ô Ö× Ò × × Ñ ÒØ Ø ÓÒ׺ Å Ý ³× ÜÔÖ ×× Ú Ò ×× PatternParser¸ Ò Ø ÑÙ×Ø ÜÔÐ ØÐÝ ÓÖ Ø Ö ¹ ÓÑ × ÖÓÑ ØÖ Ø Ò Ö ÑÑ Ö ÔÖÓ Ù Ø ÓÒ× × Ò Ö ÙÒ ¹ Ú Ö Ð ×× TemplateParserº Ï Ð À Ò ¹ÏÖ Ô³× Û Ú¹ Ø ÓÒ׸ Ò Å Ý Ò× × ÑÙÐØ ¹Ñ Ø Ó × ÓÒ Ø Ó× Ò Ö ÙÒ ¹ Ò Ñ Ò ×Ñ × ÜØÖ Ñ ÐÝ × ÑÔÐ ¸ ­ Ü Ð ÔÓÐ × ÓÙÐ Ø ÓÒ׺ Å Ý Ò× Ñ Ý ÓÚ ÖÖ Ø ØÖ Ò×Ð Ø ÓÒ Ó Ù ÐØ Ò ÔÖÓ¹ Ù ÐØ ÓÒ ØÓÔ Ó Øº ÓÖ Ò×Ø Ò ¸ Û Ð Ö Ñ Ø Ò ÓÙÐ Ù Ø ÓÒ׸ Ò Ñ Ý Ò Û ÔÖÓ Ù Ø ÓÒ× ØÓ Å Ý ³× Ä ÄÊ´½µ Û Ú ÛÖ ÔÔ Ö ÒØÓ Ñ Ø Ó ¬Ò Ø ÓÒ Ò ÐÐ ÓÚ ÖÖ Ò Ö ÑÑ Öº ¬Ò Ø ÓÒ׺ À Ò ¹ÏÖ Ô³× ÑÔÐ Ñ ÒØ Ø ÓÒ Ô Ö ÓÖÑ× Ú Ö ØÝ Ó Ø × × Ä ÓØ Ö ×Ô Ø ×Ý×Ø Ñ׸ À Ò ¹ÏÖ Ô Ò Ö Ù ¹ ÓÖ Û Å Ý × Ô ÖØ ÙÐ ÖÐÝ Û ÐÐ ×Ù Ø º Ö×ظ Ó ØÓ Ú ÐÓÔÑ ÒØ Ø Ñ Ý Ù Ñ ÒØ Ò println Ò ÒØ Ö Ø Ú Ò Ð ÛÖ ÔÔ Ò × ÛÓÚ Ò ÒØÓ Ð ×× Ð Ö Ø ÓÒ Ò Ø Ù Ö× Û Ø ØÖ Ò ¸ ÓÒØÖ Ø Ò ÓÖ Ñ Òظ Ò ×Ó ÓÒº ÓÑÔÓÒ ÒØ ÔÖÓ Ö Ñº Ì ÔÖÓÐÓ Ù ÛÓÚ Ò ÒØÓ Ñ Ø Ó À Ò ¹ÏÖ Ô × Ò Ú ÒØ ÓÚ Ö ×Ø Ø ×Ô Ø Û Ú Ò × Ò Ö Ø ÔÖÓ Ö ÑÑ Ø ÐÐݸ × ÓÒ Ø Ñ Ø Ó ³× × ¹ ×Ý×Ø Ñ× Ò Ø Ø ×Ô Ø× Ò ÛÓÚ Ò Û Ø ÓÙØ Ö ÓÑÔ Ð Ò Ò ØÙÖ º Ë ÓÒ ¸ Ñ ÖÓ× Ò Ô×ÙÐ Ø Ò Æ ÒØ ÔÖÓ ÙÖ ¹ Ø Û Ú Ò Ø Ö Øº ÐÐ Ò ÓÒÚ ÒØ ÓÒ ÓÖÖÓÛ ÖÓÑ Ø Ã Û ℄ Ë Ñ ØÓ Â Ú ÝØ Ó ÓÑÔ Ð Öº Ì Ö ¸ À Ò ¹ÏÖ Ô × Ú Ö¹ 2.4 Wrapping Unmentionable Methods ØÝ Ó ×ÝÒØ Ø ÓÖÑ× ØÓ Â Ú º Ì × × ÔÓ×× Ð × Ò Å Ý À Ò ¹ÏÖ Ô³× Ø Ø ÒØ Ö Ø ÓÒ Û Ø Â Ú Ô ÖÑ Ø× ×ØÖ ØÐÝ ÐÐÓÛ× Ø× Ö ÑÑ Ö ØÓ ÜØ Ò Ò Ö ØÖ ÖÝ Û Ý׺ ÑÓÖ Û Ú Ò Ø Ò ×Ø Ø ×Ô Ø Ð Ò Ù × ÐÐÓÛº À Ò ¹ Ï Ð ÑÙ Ó À Ò ¹ÏÖ Ô × ÑÔÐ Ñ ÒØ Ø ÖÓÙ ×ÝÒ¹ ÏÖ Ô ÜØ Ò × Ø Ð Ò Ù Ó ×Ø Ø Ñ ÒØ× Ò ÜÔÖ ×× ÓÒ׺ Ø Ü ÜØ Ò× ÓÒ׸ ØÛÓ ÑÔÓÖØ ÒØ ØÙÖ × Ö ÒÓØ À Ò ¹ÏÖ Ô ÁÒ ÓÑÔ Ö ×ÓÒ¸ ×Ô Ø ÓÒÐÝ ÜØ Ò × Ø Ð Ò Ù Ó ØÓÔ¹ Ò Ö Ø × Ó ØÓ ÐÐ ÛÖ ÔÔ Ñ Ø Ó ³× ÓÖ Ò Ð ¬Ò Ø ÓÒ Ð Ú Ð Ð Ö Ø ÓÒ׺ × Ö ×ÙÐØ Ó À Ò ¹ÏÖ Ô³× ÜÔÖ ×× Ú ¹ ÖÓÑ ÛÖ ÔÔ Ö× ÝÒ Ñ ÐÐݸ Ò Ó ØÓ Ò Ð ÛÖ ÔÔ Ò Ó Ò ×׸ ÛÖ ÔÔ Ö× Ò ÛÓÚ Ò ÒØÓ Ñ Ø Ó × Ø Ø ÒÒÓØ ÔÖ ÓÑÔ Ð Ð Ö Ö × × ÑÔÐ Ñ ÒØ Ù× Ò Ò ÖÝ Ö ÛÖ Ø Ö Ò Ñ Ø Ø ØÓÔ Ð Ú Ðº ÁÒ Ô ÖØ ÙÐ Ö¸ Ñ Ø Ó × Ò ÐÓ Ð Ò × ÓÒ Ø ÝØ Ó Ò Ò Ö Ò Ä Ö ÖÝ ½¿℄º Ï Ø ÓÙØ ÒÓÒÝÑÓÙ× Ð ×× × Ò ÛÖ ÔÔ º ÙÖ ¿ × ÓÛ× wrap Ø ÝØ Ó Ö ÛÖ Ø Ö¸ ÛÖ ÔÔ Ö× ÓÙÐ ÓÒÐÝ ÝÒ Ñ ÐÐÝ ×Ø Ø Ñ ÒØ Ø Ø Ò ÓÒÐÝ ÔÔ Ö Ò× ÑÔÐ Ñ ÒØ Ø ÓÒ Ó º ÛÓÚ Ò ÒØÓ Ñ Ø Ó × ÓÑÔ Ð Ý À Ò ¹ÏÖ Ôº À Ö Ø ÐÓ Ð Ð ×× R Ò ÓÒÐÝ Ò Ñ Û Ø Ò C.m()º Þ ÖÒ Ò × Ò Ö ½¾℄ × Ö ØÛÓ × Û Ý× ØÓ ÆÓØ Ø Ø wrap R.run() ÔÔÐ × ØÓ ÐÐ Ò×Ø Ò × Ó R¸ ÑÔÐ Ñ ÒØ ×Ô Ø׺ Ö×ظ ×ÓÙÖ Ó ØÖ Ò× ÓÖÑ Ø ÓÒ Ò Ö Ö Ð ×× Ó Û Ø Ö Ø Ý Ö ÐÐÓ Ø Ý Ø ÙÖÖ ÒØ Ò¹ Ù× ØÓ ×Ø Ø ÐÐÝ Û Ú ×Ô Ø× ÒØÓ Ø × ÔÖÓ Ö Ñ¸ ÚÓ Ø ÓÒ Ó mº ÁÒ Ø × Ö ×Ô Ø¸ wrap Ñ Ø × Ø Ú ÓÖ × Ò ×Ô Øº Ë ÓÒ ¸ ÝÒ Ñ Ö ­ Ø ÓÒ Ñ Ò ×Ñ× Ò Ó instanceof Ò ×Ø׸ Ù× ÐÓ Ð Ð ×× × Ö Ñ Ö ÐÝ Ù× ØÓ Û Ú Ó Ø ÖÙÒØ Ñ º À Ò ¹ÏÖ Ô Ø × ×ÝÒØ Ø ×Ù Öº Ñ Ð ÔÔÖÓ ÓÑÔ Ð ¹Ø Ñ Ö ­ Ø ÓÒ ´ Ò Ò ×ÓÑ × × À Ò ¹ÏÖ Ô Ð×Ó ÐÐÓÛ× Ñ Ø Ó × Ò ÒÓÒÝÑÓÙ× Ð ×× × ØÓ ÝØ Ó Ö ÛÖ Ø Ò µ × Ù× ØÓ Ò× ÖØ Ñ Ò Ñ Ð ÓÓ × Ø Ø ÛÖ ÔÔ ÐÐÓÛ ÝÒ Ñ ÛÖ ÔÔ Ò º
  • 6. 3.1 Wrapping Ö ×ØÖ Ø ÓÒ ÔÖ Ú ÒØ× ÛÖ ÔÔ Ö× ÖÓÑ Ø ÖÓÛ Ò Ü Ô¹ À Ò ¹ÏÖ Ô Ù Ð × ÛÖ ÔÔ Ñ Ø Ó ¬Ò Ø ÓÒ× ÖÓÑ ÛÖ Ô¹ Ø ÓÒ× ÜÔÐ ØÐݸ ÙØ Ó × ÒÓØ Ð Ñ Ø Ø × Ø Ó Ñ Ø Ó × Ø Ø Ô ÔÖÓ ÙÖ × Ø ÖÓÙ Ø Ñ Ø Ó Wrapper.generate()º ÑÝ ÛÖ ÔÔ º Ë Ò ÓØØÓÑ ÔÖÓ ÙÖ × Ö ÒÖ Ø Ì ØÛÓ ÐÐ Ò × Ò ÑÔÐ Ñ ÒØ Ò ÛÖ ÔÔ Ö× Ö Ö ÔÐ Ò ÝÒ Ñ ÐÐÝ Ø Ø ÝØ Ó Ð Ú Ð¸ Ø Ý Ö ×Ù Ø ØÓ Â Ú Ò ÓÖ Ò Ð Ñ Ø Ó ¬Ò Ø ÓÒ Û Ø ÛÖ ÔÔ Ö ÔÖÓ ÙÖ Ò Î ÖØÙ Ð Å Ò ØÝÔ ¹ Ò ÖÙР׸ Ö Ø Ö Ø Ò Ø ×Ð ØÐÝ Ò Ö Ø Ò ÛÖ ÔÔ ÔÖÓ ÙÖ ÓÖÖ ×ÔÓÒ Ò ØÓ Ò ÓÖ ¹ ÑÓÖ Ö ×ØÖ Ø Ú Â Ú Ð Ò Ù ÖÙР׺ ËÔ ¬ ÐÐݸ ÓØØÓÑ Ò ÐÑ Ø Ó ¬Ò Ø ÓÒº Ì ¬Ö×Ø ÐÐ Ò × Ñ Ø Ý Û Ú Ò ÔÖÓ ÙÖ × Ò Ò Ó Ø Ð Ö Ü ÔØ ÓÒ× Ø ÖÓÛÒ ÓÓ × ÒØÓ ÓÑÔÓÒ ÒØ Ó ¸ Ò Ø × ÓÒ ÐÐ Ò × Ñ Ø Ý ÔÖÓ ÙÖ × Ø Ý Ðи × Ò Ø ÂÎÅ Ó × ÒÓØ ÓÒ×ØÖ Ò Ù× Ò ÝÒ Ñ Ó Ò Ö Ø ÓÒº Ø Ü ÔØ ÓÒ× Ø Ø Ñ Ø Ó Ñ Ý Ø ÖÓÛº ÌÓ ×ÙÔÔÓÖØ ÛÖ ÔÔ Ò ¸ À Ò ¹ÏÖ Ô × ×Ø Ø ¬ Ð ØÓ ËØ Ø Ò ÓÙÐ ÑÔÖÓÚ Ý ÒØÖÓ Ù Ò ÛÖ Ô¹ Ð ×× Ò ÔÖÓÐÓ Ù ØÓ Ñ Ø Ó Ó Ýº Ì ¬ Ð Ô Ö Ò ÔÖÓ ÙÖ × Ò ØÙÖ × ØÓ Ø Ð Ò Ù º ÓÖ Ò×Ø Ò ¸ proc$ ÓÐ × Ò ÖÖ Ý Ó ÛÖ ÔÔ Ö ÔÖÓ ÙÖ ×º Ì × Ö¹ Ø ØÝÔ Ó ÛÖ ÔÔ Ö× ÔÔÐ Ð ØÓ Object.hashCode() ÖÝ ×Ð ÚØ Ð Ü ÔØ Ø Ø Ø Ò ÐÙ × ×Ø Ø Ñ Ø Ó × Ò System.identityHashCode() ÓÙÐ ÛÖ ØØ Ò × Ò Ü ÐÙ × Ò Ö Ø Ñ Ø Ó ×º ÐÐ proc$ ÒØÖ × Ö Ò ¹ wrapper<Object -> int>º ÀÓÛ Ú Ö¸ ÔÓÐÝÑÓÖÔ ØÝÔ Ø ÐÐÝ ÒÙÐк À Ò ¹ÏÖ Ô Ò× ÖØ× ÔÖÓÐÓ Ù ÖÓÙÒ Ñ¹ ×Ý×Ø Ñ ÛÓÙÐ Ò ØÓ ÔØÙÖ Ø Ú ÓÖ Ó Ñ Ø ¹ Ø Ó Ñ Ø × ÔÖÓÐÓ Ù × Û Ø Ö Ø Ñ Ø Ó × Ò Ó × ×Ù × makePerInstance() Ò makeCondition- ÛÖ ÔÔ Ý ÓÑÔ Ö Ò proc$[i] Û Ø ÒÙÐк Á ÛÖ ÔÔ Ö alWrapper()º × ¬Ò ¸ Ñ ÐÐ× Ø ÖÓÙ proc$[i]¸ ÓÜ Ò Ö ÙÑ ÒØ× Ò ÙÒ ÓÜ Ò Ø Ö ØÙÖÒ Ú ÐÙ × Ò º ÇØ ÖÛ × ¸ Ø 4. PERFORMANCE ÓÖ Ò Ð Ñ Ø Ó ¬Ò Ø ÓÒ × Ü ÙØ º ÁÒ Ø × × Ø ÓÒ¸ Û ÓÑÔ Ö À Ò ¹ÏÖ Ô ØÓ ×Ø Ø ×Ô Ø À Ò ¹ÏÖ Ô Ù× × Ø Ã Û Ë Ñ ×Ý×Ø Ñ³× ÐÐ Ò ÓÒ¹ Ð Ò Ù ¸ ×Ô Ø¸ Ò Ú ÐÙ Ø Ø ÓÚ Ö Ó À Ò ¹ Ú ÒØ ÓÒ¸ Û × ÑÓÖ Æ ÒØ Ø Ò ×Ø Ò Ö Â Ú ÒØ Ö¹ ÏÖ Ô³× ÓÑÔ Ð ¹Ø Ñ ØÖ Ò× ÓÖÑ Ø ÓÒ׺ Ì ×Ø× Û Ö ÖÙÒ ÓÒ × ×Ù × Method.invoke()º ÐØ ÓÙ À Ò ¹ÏÖ Ô Ù Ð ¿ ¼Å Þ È ÒØ ÙÑ ÁÁ Ñ Ò Û Ø ¾ Å Ó Ñ Ñ¹ ×ÙÔÔÓÖØ× ÔÖÓ ÙÖ × Ø Ø Ø Ú Ö Ð ÒÙÑ Ö Ó Ö Ù¹ ÓÖݺ Ì ×Ø× Û Ö ÖÙÒ Ù× Ò Â Ã¹½º¿º½ Ù× Ò Ò Ø Ú Ø Ö × Ñ ÒØ׸ Ø ÐÐÓ Ø ÓÒ Ó Ö ÙÑ ÒØ ÖÖ Ý× Ò ÚÓ Ò Ø ÀÓØ×ÔÓØ Ð ÒØ ÓÑÔ Ð Ö ÙÒ Ö Ò Ä ÒÙÜ Û Ø Ò Ñ ÒÝ × ×º Ð×Ó¸ À Ò ¹ÏÖ Ô ÚÓ × ÝÒ Ñ ÐÐÝ ÐÐÓ¹ Ú Ö× ÓÒ ¾º¾º½¾ ÖÒ Ðº ÁÒ ÓØ Ø À Ò ¹ÏÖ Ô Ò ×¹ Ø Ò ÓÜ Ö ÔÖ × ÒØ Ø ÓÒ× Ó ×Ñ ÐÐ ÒØ Ö× Ø ÖÓÙ Ø Ô ØÂ Ø ×Ø׸ Ø Ð ××È Ø Ð Ö ÖÝ Û × ÓÑÔ Ð Û Ø Â Ã¹ ­ÝÛ Ø Ô ØØ ÖÒº ½º¿º½³× javacº ÓÖ À Ò ¹ÏÖ Ô Ø ×Ø׸ Ø ÓÑÔ Ð Ð Ö ÖÝ ÌÓ ÛÖ Ô Ñ Ø Ó Ñ ¸ Û × Ø proc$[i] ØÓ Ø ÔÖÓ ÙÖ Û × Ö ØÖÓ¬ØØ Û Ø Ø Ö ÕÙ Ö ÓÓ ×¸ Ò Ø Ø ×Ø Ö Ñ ¹ Ö ØÙÖÒ Ý generate()º Á ÓØ Ö ÛÖ ÔÔ Ö× Ú ÐÖ Ý ÛÓÖ Û × ÓÑÔ Ð Û Ø mayacº ÓÖ ×Ô ØÂ Ø ×Ø׸ Ø Ø ×Ø Ò ÛÓÚ Ò ÒØÓ Ñ ¸ Ø × ÓÒ Ö ÙÑ ÒØ ØÓ generate() × Ö Ñ ÛÓÖ Û × ÓÑÔ Ð Û Ø javacº Ø ÔÖ Ú ÓÙ× Ú ÐÙ Ó proc$[i]º ÇØ ÖÛ × ¸ ÓØØÓÑ ÔÖÓ¹ Ï Ñ ×ÙÖ Ø Û ÐÐ¹Ø Ñ Ø Ò ØÓ Ô Ö ÓÖÑ × Ö × Ó ÙÖ Ó Ø ÑÙ×Ø ÓÒ×ØÖÙ Ø ÓÖ Ø Ñ Ø Ó ³× ÓÖ Ò Ð ÐÐ× ØÓ ClassPath.lookup() Ó Ø Ò Ý ØÖ Ò ¬Ò Ø ÓÒº mayac ÖÙÒº Ç Ø × ÐÐ׸ ½¼ ×Ø Ò Ø Ö ÙÑ ÒØ× Ò À Ò ¹ÏÖ Ô Ñ × Ñ Ø Ó ³× ÓÖ Ò Ð ¬Ò Ø ÓÒ Ú Ð¹ ½¼ Ö ØÙÖÒ ÒÓÒ¹ÒÙÐк Ó Ø ½¼ ×Ù ×× ÙÐ ÐÐ× Û × Ð Ý ÓÔÝ Ò Ø ÒØÓ Ò Û Ñ Ø Ó Ø Ø Ò ÐÐ Ñ ÛØ ×Ø Ò Ø Ö ÙÑ Òظ × Ò ×Ù ×× ÙÐ ÐÐ× ÖÓÑ ÓØØÓÑ ÔÖÓ ÙÖ º À Ò ¹ÏÖ Ô Ò Ö Ø × ÓØØÓÑ ØÝÔ × ØÓ Ò Ñ ×Ô º ÔÖÓ ÙÖ ¬Ò Ø ÓÒ ÝÒ Ñ ÐÐÝ Ø ¬Ö×Ø Ø Ñ Ñ Ø Ó × Ì Ð ¾ × ÓÛ× Ø ÒÙÑ Ö Ó × ÓÒ × ×Ô ÒØ Ü ÙØ Ò Ø ÛÖ ÔÔ º Ì Ò Ö Ø Ó ÚÓ × Ø ÓÚ Ö Ó Ò¹ ClassPath Ò Ñ Ö Ò × Ú Ö Ð ÓÒ¬ ÙÖ Ø ÓÒ׺ Ì ¬Ö×Ø ÚÓ Ò Ñ Ø Ó × Ø ÖÓÙ Ø Â Ú Ö ­ Ø ÓÒ ÈÁº ÇÒ ÓÙÐ Ð Ò × ÓÛ× × Ñ ×ÙÖ Ñ ÒØ× Û Ø ÒÓ ÛÖ ÔÔ Ò º ËÙ × ¹ Ò×Ø ×Ø Ø ÐÐÝ Ò Ö Ø Procedure ×Ù Ð ×× ÓÖ ÕÙ ÒØ Ð Ò × Ú Ø Ö ×ÙÐØ Ó Ò Ú Ö ÓÙ× × ÖÓÙÒ Ñ Ø Ó Ò Ø ÓÑÔÓÒ ÒØ Ó ¸ ÙØ Ø × ÛÓÙÐ Ñ ×¹ ClassPath.lookup() ÓÒ × Ö ØÛ Ò ÐÐ Ò¹ ØÖ ÙØ Ò Ö × ÒÓÖ Ò Ø ÐÝ Ð Ö º ×Ø Ò × ÓÖ Ò×Ø Ò ¬Ò Ù× Ò ×Ô ØÂ³× pertarget ××Ó Ø ÓÒ¸ Ò ¹ Ó ÛÖ ÔÔ Ö¸ Ò À Ò ¹ 3.2 Type Checking ÏÖ Ô³× makePerInstance() Ò ÓÒ ÓÒ Ô ÖØ Ù¹ À Ò ¹ÏÖ Ô ÑÔÐ Ñ ÒØ× ×Ø Ø ØÝÔ Ò × Ø Ò Ú ¹ Ð Ö Ò×Ø Ò ¬Ò Ù× Ò ×Ô ØÂ³× if Ó Ò ÔÓ ÒØ × Ò ¹ Ò Ö ÓÚ Ö ÝÒ Ñ ÐÐÝ ØÝÔ × Òº ÁÒ ÔÖ Ø ¸ Ø wrap ØÓÖ¸ Ò ¹ Ó ÛÖ ÔÔ Ö¸ Ò À Ò ¹ÏÖ Ô³× makeCon- ×Ø Ø Ñ ÒØ ÔÖÓÚ × ÑÓ×Ø Ó Ø Ò ¬Ø× Ó ×Ø Ø ØÝÔ ¹ ditionalWrapper()º Ò ÓÔØ Ñ Þ ÛÖ ÔÔ Ö Ø Ø ÚÓ × Ò º Ï Ø ÓÙØ wrap¸ Û Ú Ò ÛÓÙÐ ÒÚÓÐÚ × Ö × Ó Ø ¹ ×ØÓÖ Ò ÒÙÐÐ Ú ÐÙ × ÒØÓ × Ø Ð × Û × Ð×Ó Ø ×Ø º Ì ÓÙ× Ò ÖÖÓÖ¹ÔÖÓÒ ÐÐ× ØÓ Ø Â Ú Ö ­ Ø ÓÒ ÈÁ Ò ÓÐÙÑÒ× Ô Ø × Ú Ö Ð ÑÔÐ Ñ ÒØ Ø ÓÒ ×ØÖ Ø × ×Ø Ø Û Ñ Ø Ó × Ò ØÝÔ × Ö Ò Ó × ×ØÖ Ò ×º ÑÔÐ Ñ ÒØ Ø ÓÒ Ò ×Ô Ø¸ Ò ¹ Ó ÛÖ ÔÔ Ö¸ ÛÖ Ô¹ Ì wrap ×Ø Ø Ñ ÒØ ×Ø Ø ÐÐÝ Ò×ÙÖ × Ø Ø Ø Ö × Ñ ¹ Ô Ö× Ö Ú ÖÓÑ cache2nd¸ Ò ÛÖ ÔÔ Ö× Ö Ú ÖÓÑ Ø Ó ØÓ ÛÖ Ôº Ì wrap ×Ø Ø Ñ ÒØ Ð×Ó × Ø Ø ÛÖ Ô¹ CacheNthº Ô Ö× Ö ÛÓÚ Ò ÒØÓ Ñ Ø Ó × Û Ø ÓÑÔ Ø Ð × Ò ØÙÖ ×º ÁÒ Ø × Ü ÑÔÐ ¸ À Ò ¹ÏÖ Ô ÑÔÓ× × Ò ÔØ Ð ÓÚ Ö¹ Ç Ø Ò¸ Ø × × Ö Ô Ö ÓÖÑ ×Ø Ø ÐÐݸ × ÓÒ Ø Ï Ú Ò cache2nd ÖÓÙÒ × Ò Ð ClassPath Ò¹ ÓÒ Ö Ø ØÝÔ Ó Ø ÛÖ ÔÔ Ö¸ ÙØ Ò ×ÓÑ × × Ø × × ×Ø Ò × ÖÓÙ ÐÝ ½ ± ×ÐÓÛ Ö Ø Ò Û Ú Ò ×Ô ØÂ Ú º ÑÙ×Ø ÖÖ ØÓ ÖÙÒØ Ñ º ÓÖ Ò×Ø Ò ¸ ×Ø Ø Ò ÓÖÑ ¹ ×Ô ØÂ³× ×Ø Ø Ò ØÙÖ ÔÖÓÚ × ÂÎÅ× Û Ø ÑÓÖ Ò × Ø ÓÒ × ÒÓØ Ú Ð Ð Û Ò Ñ Ø Ó Ö ØÙÖÒ× Ò ÒÓÒÝÑÓÙ× ÓÖ ÓÔØ Ñ Þ Ø ÓÒº ÓÖ Ò×Ø Ò ¸ ×Ô ØÂ Û Ú × ÐÐ× ØÓ ÔÖ ¹ ÛÖ ÔÔ Ö Ò×Ø Ò º ÏÖ ÔÔ Ö× Ò Ð×Ó ¬Ò Ý ×Ù ¹ Ú Ø Ñ Ø Ó × ÒØÓ Ó Û Ö À Ò ¹ÏÖ Ô Û Ú × Ú ÖØÙ Ð Ð ×× Ò Wrapper¸ Ò Û × À Ò ¹ÏÖ Ô Ó × ÒÓØ × ÙÒ Ø ÓÒ ÐÐ׺ ÀÓÛ Ú Ö¸ ËÙÒ³× ÝÒ Ñ ÓÑÔ Ð Ö Ó × ÒÓØ Ø Ö × Ò ØÙÖ ×º ÁÒ ×Ù × ×¸ Ø ÂÎÅ Ò ÓÖ × ÝÒ Ñ Ò ¬Ø ÖÓÑ Ø × ÒÐ Ò Ò ÒØ× × Ö cache2nd ÛÖ Ô¹ ØÝÔ × Øݺ Ô Ö × ÒÓ Ð ×× Æ ÒØ Ø Ò ÙÒ ÓÒ Ø ÓÒ Ð Ú Ò ×Ô Øº ÏÖ ÔÔ Ö Ð Ö Ø ÓÒ× Ñ Ý ÒÓØ ÓÒØ Ò Ø ÖÓÛ Ð Ù× ×º Ì × À Ò ¹ÏÖ Ô³× ×ÙÔÔÓÖØ ÓÖ Ú Ö Ð ÒÙÑ Ö Ó Ö ÙÑ ÒØ×
  • 7. ÈÓÐ Ý ×Ô Ø À Ò ¹ÏÖ Ô Ù×ØÓÑ ¾Ò ÆØ ´½µ ÆÓ Ú º¾ ¿ º¿¼ º¿¼ º¿¼ Ë Ö ¼º ¼º ¼ ¼º ¼ ¼º ½ È Ö¹Ø Ö Ø ¼º ½¾ ¼º ¾ ¼º ¼º ËÔ ¬ Ø Ö Ø ¼º ½ ¼º ¼ ¼º ½ ¼º ÇÔØ Ñ Þ ÒÙÐÐ× ¼º Ì Ð ¾ Ë ÓÒ × ×Ô ÒØ Ü ÙØ Ò Ø Ò Ñ Ö Û Ø ÓÙØ Ö ØÓÖÝ Ü ×Ø Ò º ÈÓÐ Ý ×Ô Ø À Ò ¹ÏÖ Ô Ù×ØÓÑ ¾Ò ÆØ ´½µ ÆÓ Ú ¼º ¼º ¼º ¼º Ë Ö ¼º¾ ¾ ¼º¾ ¿ ¼º¾ ¿ ¼º¿½ È Ö¹Ø Ö Ø ¼º¿¼ ¼º¾ ¼º¿ ¼º ¼½ ËÔ ¬ Ø Ö Ø ¼º¾ ¼º¾ ½ ¼º¿ ¼º¿ ¾ ÇÔØ Ñ Þ ÒÙÐÐ× ¼º¾¿ Ì Ð ¿ Ë ÓÒ × ×Ô ÒØ Ü ÙØ Ò Ø Ò Ñ Ö Û Ø Ö ØÓÖÝ Ü ×Ø Ò º ÑÔÓ× × ÓÒ× Ö Ð Ó×غ × Ö CacheNth ÛÖ ÔÔ Ö Ò Ñ Ö ÇÖ Ò Ð Ê ØÖÓ¬ØØ ± Ó×Ø ÖÙÒ× ÖÓÙ ÐÝ ¼Ñ× ×ÐÓÛ Ö Ø Ò cache2nd ÛÖ ÔÔ Ö¸ ÓÖ ¾¼¼ ¼º¿ ¼º¿ ½º¼½¿± ÓÙØ º × Ô Ö Ðк ÅÙ Ó Ø × Ø Ñ × ×Ô ÒØ Ô Ò ¾¾ ÑØÖØ ½ º ¿ ½ º ½ ½ º¾ ± CacheNth³× Ö ÙÑ ÒØ× ÒØÓ Ò ÖÖ Ý¸ ÐÓÒ Ò Ø ÖÖ Ý ÓÖ ¾¼¾ ×× ½ º ¾ ½ º ¼½ ½ º½¼± ÐÐ× ØÓ Ø ÛÖ ÔÔ Ñ Ø Ó ¸ Ò ÙÒÔ Ò Ö ÙÑ ÒØ× ÖÓÑ ¾¼½ ÓÑÔÖ ×× ¼º ½º½¿½ ¾¼º ± Ø ÐÓÒ ÖÖ Ýº ¾¼ º¾½¿ º ½ ¹½º ¼ ± ×Ô ØÂ × Ø ¼Ñ× Ô Ö ÓÖÑ Ò Ø ÑÓÚ Ò ÖÓÑ ¾¾¾ ÑÔ Ù Ó ¿¾º¾ ¿ º½ ¾ º ¿± × Ö ØÓ Ô Ö¹Ø Ö Ø ×º Ì × Ñ × × Ò× ¸ × Ò ¾¾ ½ º ¼ ½ º ¿ º ¾¾± Ô Ö¹Ø Ö Ø Ò ÒÚÓÐÚ × ÓÔ Ö Ø ÓÒ× ÓÒ × ÓÒ × Ø ¹ ¾½¿ Ú ¿ º ½º¿ ½¾º¾ ± Ð º Ë Ñ Ð ÖÐÝ cache2nd Ø × ½½ Ñ× Øº Ì × Ò ØØÖ ÙØ ØÓ ÓØ Ø ÓÒ Ð × Ò Ò ÓÔ Ö Ø ÓÒ× ÓÒ Ö¹ Ì Ð Ë ÓÒ × ×Ô ÒØ Ò ËÔ ÂÎÅ Ò Ñ Ö ×¸ ÙÑ ÒØ ÖÖ Ý׺ Û Ø Ò Û Ø ÓÙØ À Ò ¹ÏÖ Ô ÔÖÓÐÓ Ù ×º Ï Ò Ò ×Ô ØÂ × ÛÓÚ Ò ÒØÓ ×Ô ¬ Ø Ö Ø¸ Ø × ÓÒ × Ø Ð × ÔÔ Ö׸ ÐÓÒ Û Ø Ø ÓÚ Ö Ø Ñ¹ ÔÓ× ×º ÀÓÛ Ú Ö¸ cache2nd Ó × ÒÓØ Ø ÔÔÖ ÐÝ ×Ø Öº Ì × « Ö Ò × Ù ØÓ Ø ÑÔÐ Ñ ÒØ Ø ÓÒ Ó makeCon- ØÓÑ ÓÐÙÑÒº ÙÖØ Ö ÑÔÖÓÚ Ñ ÒØ × ÔÓ×× Ð ÓÒ ÚÓ × ditionalWrapper()º Ì Ù Ö ÖÓÙÒ ×Ô ØÂ³× Ú ×ØÓÖ Ò ÒÙÐÐ Ú ÐÙ × Ò HashMapsº ÓÔ × this ÒØÓ ÐÓ Ð Ú Ö Ð Ò ÓÑÔ Ö × Ø Ò×Ø ÅÓ×Ø Ó À Ò ¹ÏÖ Ô³× ÓÚ Ö ÔÔ Ö× ØÓ ÒØÖÓ Ù ¬Ð ¸Û Ð Ø Ù Ö ÖÓÙÒ cache2nd ÔÔÐ × ÓÓÐ Ò Ý Ö ÙÑ ÒØ ÖÖ Ý׺ ËÓÑ ÖÐÝ × ÑÔÐ ÓÔØ Ñ Þ Ø ÓÒ× Ò ÔÖÓ ÙÖ ØÓ Ø× Ö ÙÑ ÒØ ÖÖ Ý Ø Ø Ô Ö ÓÖÑ× Ø × Ñ Ö Ù Ø × Ó×غ ÓÖ Ò×Ø Ò ¸ Ø ÛÖ ÔÔ Ö ÔÖÓ ÙÖ × ¹ ÓÑÔ Ö ×ÓÒº ÓÖ Û ÓÑÔ Ö Ø lookup() Ö Ú Ö ¬Ò Ý makeConditionalWrapper() Ò makePerIn- stance() ÓÒÐÝ Ù× Ö ×Ø Ö ÙÑ ÒØ× ØÓ ÐÐ ÓØ Ö ÔÖÓ ÙÖ ×º Ò×Ø Ø Ð Ò×Ø Ò ¸ Ø × ÓÔ ÒØÓ Ò ÖÖ Ý¸ Ø ÖÖ Ý × ÐÓÒ ¸ Ò Ø Ö Ú Ö × ÓÔ ÓÙØ Ó Ø Ï ÓÙÐ ÚÓ Ö ÙÑ ÒØ ÖÖ Ý× ÒØ Ö ÐÝ Ý ×Ô Ð Þ Ò ÐÓÒ º Ì × ×ÓÖØ Ó Ó ÔÖ × ÒØ× ÐÐ Ò ØÓ ÒÝ ÓÔØ Ñ Þ¹ Ø × ÔÖÓ ÙÖ × ÓÒ Ö Ø × ÙÔ ØÓ º Ò ÓÑÔ Ð Öº ÁÒ ×ÙÑÑ Öݸ À Ò ¹ÏÖ Ô³× Ò Ö ÛÖ ÔÔ Ö× ÒØÖÓ Ù À Ò ¹ÏÖ Ô³× ÓÚ Ö Ò Ð×Ó Ñ ×ÙÖ Ò Ø ÔÖ ×¹ ÓÚ Ö ÒØÓ Ö ÙÑ ÒعР×Ø ÔÖÓ ×× Ò º Ì × ÓÚ Ö ÑÝ Ò Ó ÓØ Ö ÓÔØ Ñ Þ Ø ÓÒ׺ ÓÖ Ü ÑÔÐ ¸ ClassPath ÔÖÓ¹ ÔØ Ð ÓÖ ÙÒÓÔØ Ñ Þ ÔÖÓ Ö Ñ׸ ÙØ Ò ¹ ÒÐ Ò Ò Ú × Ø× ÓÛÒ Ò Ñ Ò ×Ѻ ClassPath Ó Ø Ò Ù× Û Ò Ø ÓÚ Ö ÖÓÛ× ØÓÓ Ö Øº Ò ¬Ò ×Ó Ø Ø Ö ØÓÖÝ ÓÒ Ø Ô Ø Ñ ÑÓ¹ Ï Ð×Ó Ñ ×ÙÖ Ø Ó×Ø ÒØÖÓ Ù Ý À Ò ¹ÏÖ Ô³× Þ × ÒÓÒ Ü ×Ø ÒØ ×Ù Ö ØÓÖ ×º Ì × ÔØÙÖ × Ö ÙÒ¹ Ñ Ø Ó ÔÖÓÐÓ Ù ×º Ï Ö Ò Ø ËÔ ÂÎÅ Ò Ñ Ö × Ò Ý ØÛ Ò ×Ø Ò Ø ÐÓÓ ÙÔ Ö ÙÑ ÒØ׺ ÓÖ Ü ÑÔÐ ¸ ÙÒØ Ð Ñ Ò ÑÙÑ Ü ÙØ ÓÒ Ø Ñ Û × Ö º Ï Ø Ò Û ÓÙÐ ÚÓ ×Ý×Ø Ñ ÐÐ ØÓ ÐÓÓ ÙÔ ./java/lang/ Ö ØÖÓ¬ØØ Ø Ò Ñ Ö Ð ×× × Û Ø À Ò ¹ÏÖ Ô Ñ Ø Ó String.class Û Ð ÖÒ Ø Ø ./java/lang Ó × ÒÓØ ÔÖÓÐÓ Ù × Ò Ö Ô Ø Ø Ø ×غ Ì Ö ×ÙÐØ× Ö × ÓÛÒ Ò Ü ×Ø Û Ò ÐÓÓ Ò ÙÔ Objectº Ì Ð º ÇÒ Ú Ö ¸ À Ò ¹ÏÖ Ô ÑÔÓ× × º ± ÓÚ Ö ¸ Ì Ö ×ÙÐØ Ó Ø Ò Ò Ñ Ö Û Ø Ö ØÓÖÝ ¹ ÙØ Ø ÓÚ Ö Ú Ö × Û ÐÝ Û Ø Ø Ö ÕÙ Ò Ý Ó Ñ Ø Ó Ò Ò Ð × × ÓÛÒ Ò Ì Ð ¿º À Ò ¹ÏÖ Ô³× ×ÓÐÙØ ÐÐ׺ Ì ÑÙÐØ ¹Ø Ö Ö ÝØÖ Ö Ô Ö ÓÖÑ× ÔÓÓÖÐÝ × Ò Ø ÓÚ Ö Ö Ñ Ò× Ø × Ñ cache2nd ÓÒ ×Ô ¬ Ò¹ Ù× × ÔÖ Ú Ø ¬ Ð × Ü ÐÙ× Ú ÐÝ Ò Ò ÐÙ × Ö ÕÙ ÒØ ÐÐ× ØÓ ×Ø Ò × ÖÓÙ ÐÝ ½½¼Ñ× ×ÐÓÛ Ö Ø Ò Ø ÕÙ Ú Ð ÒØ Ú º ¬ Ð ØØ Ö׺  ×× Ð×Ó Ô Ö ÓÖÑ× ÔÓÓÖÐݸ Ù× Ù ÐØ Ò ÙÒ ¹ ÀÓÛ Ú Ö¸ Ø Ö Ð Ø Ú Ó×Ø × Ò Ö × À Ò ¹ÏÖ Ô × ÒÓÛ Ø ÓÒ× Ó Ø ÜÔ ÖØ × ÐÐ Ð Ò Ù Ö ÑÔÐ Ñ ÒØ ×Â Ú ± ×ÐÓÛ Ö Ø Ò ×Ô Ø¸ Ò Ø × ÓÚ Ö Ö ÔÖ × ÒØ× ¿½± Ñ Ø Ó ×¸ Ò Ø × Ñ Ø Ó × Ö ØÝÔ ÐÐÝ ÕÙ Ø ×Ñ Ðк Óѹ Ó Ø Ø Ñ ×Ô ÒØ × Ö Ò Ø Ð ×× Ô Ø º Ì × ÓÚ Ö Ò ÔÖ ×× ×Ù« Ö× Ù× Ó Û ×Ñ ÐÐ Ñ Ø Ó × ÐÐ Û Ø Ò Ð Ñ Ò Ø Ø ÖÓÙ Ò ¹ ÒÐ Ò Ò ¸ × × ÓÛÒ Ò Ø Ù×¹ Ø× ÒÒ Ö ÐÓÓÔº Í× Ö ÒØ ÖÚ ÒØ ÓÒ Ñ Ý Ò ØÓ Ú ÔØ Ð
  • 8. Ô Ö ÓÖÑ Ò ÓÖ ÖØ Ò Ó º Ò ÑÔÓÖØ ÒØ ¬Ö×Ø ×Ø Ô × ÒÓØ Ò ÒØ× Ú × ÔÓ ÒØ ÙØ ØÝÔ × ÓÒ × Ò × ÔÔÐÝ Ò À Ò ¹ÏÖ Ô ØÓ Ó ×Ù × Ò Ä Ï ÓÑÔÖ ××ÓÖ Ö Ð Ø ÓÒ× Ô׺ Ø Ø ÑÔÐ Ñ ÒØ× × Ò Ð Û Ðй ¬Ò ÓÒ ÖÒº È Ö ÓÖÑ Ò ÇØ Ö ×Ô Ø ×Ý×Ø Ñ× Ú Ò ÑÔÐ Ñ ÒØ Ø ÖÓÙ Ò Ð×Ó ÑÔÖÓÚ Ý Ñ Ò Ô ÖØ ÙÐ Ö Ñ Ø Ó × ÙÒÛÖ Ô¹ Ñ Ø ÔÖÓ Ö ÑÑ Ò º ÇÈ»ËÌ ℄ × ÑÔÐ Ñ ÒØ Ò Î ×٠й Ô Ð º ÓÖ Ò×Ø Ò ¸ Ø Ó×Ø Ó Ù× Ò À Ò ¹ÏÖ Ô Û Ø ÑØÖØ ÏÓÖ × ËÑ ÐÐØ Ð º ÇÈ»ËÌ ÝÒ Ñ ÐÐÝ Ò Ö Ø × Ö Ò × ÖÓÔ× ØÓ ¼º ± Û Ò ÔÖÓÐÓ Ù × Ö ÒÓØ ØÓ ØØ Ö Ñ Ø ¹ Ò Ø Ò Ö Ø Ò Ö Ö Ý Ò ÐØ Ö× Ø Ð ×× × Ó Ó ¹ Ó ×º ÙÖÖ ÒØÐݸ ÓÛ Ú Ö¸ À Ò ¹ÏÖ Ô Ó × ÒÓØ ÔÖÓÚ Ø׺ ÁÒ ÇÈ»Ë̸ Ú × ÛÓÚ Ò ÒØÓ ÐÐ Ö Ø Ò×Ø Ò × Ñ Ò ×Ñ ÓÖ ×Ù ¬Ò ¹ Ö Ò ÓÒØÖÓÐ ÓÚ Ö ÛÖ ÔÔ Ð Øݺ Ó Ô ÖØ ÙÐ Ö Ð ×׸ Û Ö × Ò À Ò ¹ÏÖ Ô Ú × ÛÓÚ Ò ÒØÓ ÓÒ Ö Ø Ñ Ø Ó ¬Ò Ø ÓÒ× Ö ØÐݺ 5. RELATED WORK ÇÇÄ ½½℄ ÑÔÐ Ñ ÒØ× ×Ô Ø ¼º½³× ×ÝÒ ÖÓÒ Þ Ø ÓÒ À Ò ¹ÏÖ Ô ÓÛ × ÑÙ ØÓ ×Ô Ø ¾ ℄º Å Ø Ó ÛÖ ÔÔ Ö× Ð Ò Ù Ò Î ×Ù ÐÏÓÖ × ËÑ ÐÐØ Ð ¸ Û Ð ÄÙÒ Ù ¾¼℄ ¬Ò × Ú Ø × Ñ « Ø × ×Ô ØÂ Ú º ÀÓÛ Ú Ö¸ ×Ô ØÂ Ñ Ø ¹Ó Ø ÔÖÓØÓ ÓÐ ÓÖ Ç Ø Ú ¹ Ø Ø ×ÙÔÔÓÖØ× Ñ ¹ Ú Ò ÛÓÚ Ò ÒØÓ Ö × Ø Ó Ó Ò ÔÓ ÒØ× Ö Ø Ö Ø Ò Ø Ó ÛÖ ÔÔ Ò º ÁÒØ Ö ×Ø Ò Ðݸ ÓØ Ø × ×Ý×Ø Ñ× Û Ú ¹ Ñ Ö ÐÝ Ñ Ø Ó Ó ×º ×Ô Ø Ð×Ó ÔÖÓÚ × Ò ×ØÖ Ø ÓÒ Ú ÓÒ Ô Ö¹ Ò×Ø Ò × ×¸ Ö Ø Ö Ø Ò Ø Ô Ö¹ Ð ×× × × ÐÐ ÔÓ ÒØ ÙØ ÒÓØ ÔÖ × ÒØ Ò À Ò ¹ÏÖ Ôº ×Ô ØÂ³× Ó Ò ÓÔØ Ý ÑÓÖ Ö ÒØ Ú Ö× ÓÒ× Ó ×Ô ØÂ Ò Ý À Ò ¹ ÔÓ ÒØ × Ò ØÓÖ× Ò ÔÓ ÒØ ÙØ× ÔÖÓÚ Û Ú Ö ØÝ Ó ÏÖ Ôº ÓØ ÇÇÄ Ò ÄÙÒ Ù³× ×Ý×Ø Ñ ÙØ Ð Þ ÝÒ Ñ ÙÒ Ø ÓÒ Ð Øݸ ÑÙ Ó Û × Ð×Ó Ú Ð Ð Ò À Ò ¹ÏÖ Ôº Ö ­ Ø ÓÒ¸ Û Ö À Ò ¹ÏÖ Ô Ù× × ÓÑÔ Ð ¹Ø Ñ Ö ­ Ø ÓÒ Ö×ظ × Ò ØÓÖ× ×Ø Ð × Ò Ò × ØÓ Ú Ö ÙÑ ÒØ׸ ØÓ Ò× ÖØ Ü ØÐÝ Ø Ó× ÓÓ × Ò ÓÖ ÝÒ Ñ Û Ú Ò º ÖÓÐ ¬ÐÐ Ý À Ò ¹ÏÖ Ô³× Ô Ö Ñ Ø Ö Ð ×Ø׺ Ë ÓÒ ¸ × ¹ À Ò ¹ÏÖ Ô × × Ñ Ð Ö ØÓ ÄÙÒ Ù³× ×Ý×Ø Ñ Ò Ø Ø ÓØ Ñ¹ Ò ØÓÖ× Ø ÖÑ Ò Û Ò Ú ÔÔР׺ ÁÒ À Ò ¹ÏÖ Ô¸ Ø × Ô × Þ Ø ÑÔÓÖØ Ò Ó ÓÑÔÓ× Ø ÓÒ Ò ×Ô Ø Ó º × ÓÒ × Ñ Ý Ø ÛÖ Ô ×Ø Ø Ñ Òظ Ö Ø Ö Ø Ò Ø Ì Ö × Ò Ö ÒØ ×ÙÖ Ó ÒØ Ö ×Ø Ò Ö Ò Ø ÛÖ ÔÔ Ö ¬Ò Ø ÓÒº ÛÖ Ô ×Ø Ø Ñ ÒØ ÔÔÐ × ÛÖ ÔÔ Ö ØÓ Ô ØÛ Ò Ð ××¹ Ò ÔÖÓØÓØÝÔ ¹ × Ò Ö Ø Ò ÑÓ ¹ Ô ÖØ ÙÐ Ö Ñ Ø Ó ¸ Ò Ò Ú ¬Ò Ö¹ Ö Ò ÓÒØÖÓÐ Ð× ¸ ¾¾℄º Ä Ø ÝÒ Ñ ×Ô Ø ×Ý×Ø Ñ× × Ö ÓÚ ¸ Ø ÖÓÙ Ø Ù× Ó ÓÒ Ø ÓÒ Ð ÛÖ ÔÔ Ö׺ Ò ÐÐݸ Ó Ò ÔÓ ÒØ Ø × Ñ Ò ×Ñ× ÐÐÓÛ Ñ Ø Ó × ØÓ ÓÚ ÖÖ Ò ÓÒ Ô Ö¹ × Ò ØÓÖ× Ñ Ý Ò ÐÙ Û Ð Ö ×º Ø ÙÐ Ö Ò×Ø Ò º À Ò ¹ÏÖ Ô × × Ñ Ð Ö ØÓ Ø ÓÑÔÓÙÒ À Ò ¹ÏÖ Ô Ó × ÒÓØ ÐÐÓÛ Ó Ò¹ÔÓ ÒØ× ØÓ ×Ô ¬ Ö Ö Ò ÑÓ Ð ¾¾℄ Ò Ø Ø ÓØ ÐÐÓÛ Â Ú Ñ Ø Ó ³× ¹ Ø ÖÓÙ Û Ð Ö ×º ÁØ × ÙÒ Ð Ö ÓÛ Û Ð Ö × × ÓÙÐ ÛÓÖ Ú ÓÖ ØÓ Ò Ø Ø ×Ø Ø Ñ ÒØ Ð Ú Ð¸ Ö Ø Ö Ø Ò Ò À Ò ¹ÏÖ Ôº Ë ÓÙÐ Û Ð Ö Ñ Ø Ò Ô Ö ÓÖÑ Ø ÖÓÙ ÜØ ÖÒ Ð ×Ô Ø Ð Ö Ø ÓÒ׺ ×Ø Ø ÐÐÝ ÓÖ ÝÒ Ñ ÐÐÝ Ë ÓÙÐ Û Ð Ö × ÔÐ Ö ×ØÖ ¹ Ú Ø Ðº ½ ℄ ÑÔÐ Ñ ÒØ ÝÒ Ñ Ú Ò Ò Ò ×¹ Ø ÓÒ× ÓÒ Ù× Ö¹ ¬Ò Ð ××ÐÓ Ö× Ë ÓÙÐ Û Ð Ö × ÐÓ Ô Øº À Ò ¹ÏÖ Ô ÓÐÐÓÛ× × Ñ Ð Ö Ö Ø ØÙÖ ¸ Ò Û Ð ×× × ÖÐݸ × Ø ÙÖÖ ÒØ wrap ×Ø Ø Ñ ÒØ Ó ×¸ ÓÖ Ð Þ ÐÝ ÓÓ × Ö ØÓ Ñ Ø Ó Ø ÓÑÔ Ð Ø Ñ ¸ Ò ÛÖ ÔÔ Ö× À Ò ¹ÏÖ Ô³× ÔÔÖÓ ØÓ Ú Ö Ù× × ÑÓÖ ­ Ü Ð Ö ¬Ò ÓÒ Ø × ÓÓ × Ø ÖÙÒØ Ñ º ÀÓÛ Ú Ö¸ À Ò ¹ Ø Ò ×Ô ØÂ³× ×ØÖ Ø ÔÓ ÒØ ÙØ× Ò × Ú Ö Ð Û Ý׺ Ö×ظ ÐÐ ÏÖ Ô « Ö× Ò Ø Ø ÓÓ × Ö ÔÔÐ ØÓ ÐÐ Ñ Ø Ó ×¸ Ö Ø Ö ÛÖ ÔÔ Ö× Ö Ö Ù× Ð ¸ Ö Ø Ö Ø Ò ÓÒÐÝ Ø Ó× Ó Ò Ø Ò ×Ô ¬ × Ø Ó Ñ Ø Ó × ¬Ò Ý ÔÓ ÒØ Ùغ À Ò ¹ Ô ÖØ ÙÐ Ö ×ØÝÐ º À Ò Ò Ö Ò ÍÒÐ Ò ½ ℄ × Ö ×Ý×¹ ÏÖ Ô Ð×Ó Ù× × ÑÓÖ Æ ÒØ ÑÔÐ Ñ ÒØ Ø ÓÒ¸ × Ò Ø Ö Ø Ñ Ø ÙØ ÙÑ Ö×ÓÑ Ø Ò ÕÙ ÓÖ Ú Ò Ö Ù× Ò ×¹ Ö ÒÓ Â Ú Ö ­ Ø ÓÒ ÐÐ× ÓÒ Ø Ö Ø Ð Ô Ø ¸ Ò Ñ Ø Ó Ô Øº Ë ÓÒ ¸ Ö¹ÓÖ Ö ÛÖ ÔÔ Ö× ×Ù × makePerIn- Ö ÙÑ ÒØ× Ö ÒÓØ ÐÛ Ý× Ô ×× Ò ÖÖ Ý׺ stance() Ò makeConditionalWrapper() Ò ¹  ¾¿℄ ÐÐÓÛ× Â Ú Ñ Ø Ó × ØÓ ÝÒ Ñ ÐÐÝ ÛÖ ÔÔ ¬Ò Ò Ø À Ò ¹ÏÖ Ô Ð Ò Ù ¸ Ö Ø Ö Ø Ò ÔÖÓÚ × Ò ÙÒÛÖ ÔÔ Ø ÖÓÙ Ð ××ÐÓ Ö Ø Ø Ô Ö ÓÖÑ× ÝØ ¹ ÔÖ Ñ Ø Ú ×º Í× Ö¹ ¬Ò ÛÖ ÔÔ Ö× Ò ÑÔÐ Ñ ÒØ ØÙÖ × Ó Ö ÛÖ Ø Ò º Â Ò ÐÙ × ÒÙÑ Ö Ó ØÙÖ × Ø Ø Ó Ó Ò ÔÓ ÒØ × Ò ØÓÖ׺ ÓÖ Ò×Ø Ò ¸ cflow³× ÙÒ Ø ÓÒ Ð¹ À Ò ¹ÏÖ Ô Ð ×¸ ×Ù × Ø Ð ØÝ ØÓ Ö ÑÓÚ ÛÖ ÔÔ Ö× ØÝ ÓÙÐ ÑÔÐ Ñ ÒØ × ÐÝ Ò Æ ÒØÐݸ Ò within Ò Ø Ð ØÝ ØÓ ÓÓ× Ø ÓÖ Ö Ò Û ÛÖ ÔÔ Ö× Ü¹ × ÖØ ÒÐÝ ÑÔÐ Ñ ÒØ Ð º Ì × ÓÔ Ö Ø ÓÒ× ÔÖÓÚ Ø ÙØ ÓÒ Ô ÖØ ÙÐ Ö Ñ Ø Ó Ðк ÀÓÛ Ú Ö¸ Ð Ú ³× Ù Ð Ò ÐÓ × ÓÖ ÓØ Ö× ×Ù × this Ò withincodeº ×Ý×Ø Ñ¸  ³× ÑÔÐ Ñ ÒØ Ø ÓÒ Ö Ð × Ú ÐÝ ÓÒ Â Ú ³× Ö ¹ Ò ÐÐݸ Ö¹ÓÖ Ö ÛÖ ÔÔ Ö× ¬ÐÐ Ø ÖÓÐ × Ó ÓØ ÔÓ ÒØ ÙØ ­ Ø ÓÒ ÈÁ Ò ÔÔ Ö× Ð ×× Æ ÒØ Ø Ò À Ò ¹ÏÖ Ôº × Ò ØÓÖ× Ò Ø ×Ô Ø Ò×Ø ÒØ Ø ÓÒ Ð Ù× pertargetº ÍÒÐ Â ¸ À Ò ¹ÏÖ Ô ÜØ Ò × Ø Â Ú Ð Ò Ù ÛØ ÄÇË ¾ ℄³× :around Ñ Ø Ó ÕÙ Ð ¬ Ö ÐÐÓÛ× Ó ØÓ Ò Û ÜÔÖ ×× ÓÒ¸ ×Ø Ø Ñ Òظ Ò Ð Ö Ø ÓÒ ÓÖÑ׺ Ì × Ü¹ ÛÖ ÔÔ ÖÓÙÒ ÐÐ ÒÚÓ Ø ÓÒ× Ó Ò Ö ÙÒ Ø ÓÒº Ø Ò× ÓÒ× Ñ À Ò ¹ÏÖ Ô × Ö ØÓ Ù× Ò ØÛÓ Û Ý׺ Ö×ظ Ô ØÂ³× around Ú Ò À Ò ¹ÏÖ Ô³× ÛÖ ÔÔ Ö× × ÖÚ À Ò ¹ÏÖ Ô Ô Ö ÓÖÑ× Ð Ñ Ø ×Ø Ø ØÝÔ Ò ¸ Û Ö × × Ñ Ð Ö ÖÓÐ º ÏÖ ÔÔ Ö× « Ö ÖÓÑ ÖÓÙÒ Ñ Ø Ó × Ò ØÛÓ Â ÒÒÓØ ×Ø Ø ÐÐÝ Ú Ö Ý Ø Ø Ð ×× Ò Ñ Ø Ó Ò Ñ × Ý Û Ý׺ Ö×ظ ÛÖ ÔÔ Ö ÔÔÐ × ØÓ Ò Ò Ú Ù Ð Ñ Ø Ó Ö Ú Ð º Ë ÓÒ ¸ À Ò ¹ÏÖ Ô³× ¬Ö×Ø Ð ×× ÒÓØ ÓÒ Ó ÔÖÓ ¹ ¬Ò Ø ÓÒ Ö Ø Ö Ø Ò Ò Ö ÙÒ Ø ÓÒº Ë ÓÒ ¸ Ø ÓÖ¹ ÙÖ × Ò ÛÖ ÔÔ Ö׸ ÐÓÒ Û Ø Ø apply ÓÔ Ö ØÓÖ¸ ÔÖÓÚ Ö Ò Û ÛÖ ÔÔ Ö× Ü ÙØ × Ø ÖÑ Ò Ý Ø ÓÖ Ö Ò × × ÓÖ ÛÖ Ø Ò ÓÑÔÓ× Ð ÛÖ ÔÔ Ö׺ Û Ø Ý Ö ÔÔÐ ØÓ Ñ Ø Ó ¸ Ö Ø Ö Ø Ò Ø ØÝÔ × Ó Ø Ðº ½ ℄ ÔÖÓÔÓ× ×Ý×Ø Ñ Ò Û ÛÖ ÔÔ Ò Ó ØÙ Ð Ö ÙÑ ÒØ׺ × Ô ÖÚ × Ú º ÓÑÔÓÒ ÒØ ÜÔÓÖØ× × Ø Ó Ì Ä Ò Ò × ÇØ Ö ×Ô Ø ×Ý×Ø Ñ× ×Ù × ËÇ » ÍÈ ½ ℄ Ò ×¹ Ø Ø Ö Ò ØÙÖ Ð ØÓ Ø× ÑÔÐ Ñ ÒØ Ø ÓÒ¸ Ò Ø Ð ÒØ ÛÖ Ô× Ô ØÙ Ð ÓÑÔÓÒ ÒØ× ½ ℄ Ö ×× Ø Ò ÓÖ × Ô Ö Ø Óѹ Ø × ÓÑÑ Ò × Ò ÇÌ Ä Ð ×× × Ø Ø ÔÖÓÚ Ò ÒØ Ö¹ Ô Ð Ø ÓÒ Ò ÓÑÔÓÒ ÒØ ÓÒØ Üغ ÐØ ÓÙ Ø × ×Ý×Ø Ñ× Ò ØÙÖ Ð ØÓ Ø Ð Òغ ÇÌ Ä³× Ñ Ø Ó Ø ÔÖÓØÓ ÓÐ ×ÙÔÔÓÖØ ÝÒ Ñ ×Ô Ø Û Ú Ò ¸ Ø Ý Ó ÒÓØ ØÖ Ø ×Ô Ø× ÐÐÓÛ× ÛÖ ÔÔ Ö Ð ×× × ØÓ × ÐÝ ÜÔÖ ×× Ö ×ØÖ Ø ÓÒ× Ò ÓÒ¹ Ø ¬Ö×ع Ð ×× Â Ú ÒØ Ø × Ò ¸ Ø Ý Ó ÒÓØ ÔÖÓÚ Ø Ú ÒØ ÓÒ× Ò ÓÑÔÓÒ ÒØ³× ÜÔÓÖØ ÒØ Ö º ÇÌ Ä Ð×Ó Ø ÓÒ Ð Ö Ù× Ñ Ò ×Ñ× ÓÙÒ Ò À Ò ¹ÏÖ Ôº ÓØ ×ÙÔÔÓÖØ× ØÖ Ò×Ô Ö ÒØ Ñ Ø Ó ÛÖ ÔÔ Ò Ø ÖÓÙ Ñ ¹ ×Ý×Ø Ñ× Ó ×ÙÔÔÓÖØ Û Ð Ö ×¸ Ò ÔÓ ÒØ ÙØ× Ö Ø ÔÖ ¹ Ò ×Ñ ÐÐ Ô Ö¹Ó Ø Ñ Ü Ò׺ Ì × Ñ Ò ×Ñ ÐÐÓÛ× Ò Ñ ÖÝ Ø ÖÙ×Ø Ó ×Ô ØÙ Ð ÓÑÔÓÒ ÒØ׺ ×Ô ØÙ Ð ÓÑÔÓ¹ ÑÔÓÖØ ÓÑÔÓÒ ÒØ³× Ú ÓÖ ØÓ ÙÖØ Ö Ù×ØÓÑ Þ º
  • 9. Ï Ð ÒÙÑ Ö Ó ÔÓÛ Ö ÙÐ Ñ ÖÓ ×Ý×Ø Ñ׸ ÓÑÔ Ð ¹Ø Ñ ℄ º ØÓÖݸ º ÄÓ ×Ó¸ Ò º ËÑ Ö ×º ÂÌË ÌÓÓÐ× Ñ Ø ÔÖÓ Ö ÑÑ Ò ÜØ Ò× ÓÒ׸ Ò ÔÖ ÔÖÓ ××ÓÖ ØÓÓÐ Ø× ½¸ ÓÖ ÑÔÐ Ñ ÒØ Ò ÓÑ Ò¹×Ô ¬ Ð Ò Ù ×º ÁÒ Ø ¸ ¸ ¾ ℄ Ö Ú Ð Ð ÓÖ Â Ú ¸ Û Ð Ú Ø Ø Å Ý × ×Ø ÁÒØ ÖÒ Ø ÓÒ Ð ÓÒ Ö Ò ÓÒ ËÓ ØÛ Ö Ê Ù× ¸ ½ º ×Ù Ø ÓÖ ÑÔÐ Ñ ÒØ Ò Ð Ò Ù ÜØ Ò× ÓÒ ×Ù × À Ò ¹ ℄ ú ÓÐÐ Öغ ÇÒ Û Ú Ò ×Ô Ø׺ ÁÒ ÇÇÈ ÏÓÖ × ÓÔ ÏÖ Ôº Ö×ظ À Ò ¹ÏÖ Ô ÜØ Ò × Â Ú ³× ÓÒ Ö Ø ×ÝÒØ Ü Ò ÓÒ ×Ô Ø¹ÇÖ ÒØ ÈÖÓ Ö ÑÑ Ò ¸ ½ º Û Ý× Ø Ø Ò³Ø ÜÔÖ ×× Ý × ÑÔÐ Ñ ÖÓ ×Ý×Ø Ñ× ×Ù ℄ Ⱥ ÓØ Ò Öº Ã Û ÓÑÔ Ð Ò ÝÒ Ñ Ð Ò Ù × ØÓ × ÂË ½℄ Ò ÓÑÔ Ð ¹Ø Ñ ÅÇÈ× ×Ù × ÇÔ ÒÂ Ú ¾ ℄ Ø Â Ú Îź ÁÒ ÈÖÓ Ò × Ó Ø ÍË ÆÁ Ì Ò Ð Ò ÄÁ ℄º Ë ÓÒ ¸ À Ò ¹ÏÖ Ô Ù× × ×Ø Ø ØÝÔ Ò ÓÖ¹ ÓÒ Ö Ò ¸ Ê ÆÁ ÌÖ ¸ Æ Û ÇÖÐ Ò׸ Ä ¸ ÂÙÒº Ñ Ø ÓÒ Ø Ø × ÒÓØ Ú Ð Ð Ò ÔÙÖ ÐÝ ×ÝÒØ Ø ×Ý×Ø Ñ× ×Ù ½ º ÍË ÆÁ ××Ó Ø ÓÒº × ÂË Ò ÂÌË ℄º Ò ÐÐݸ Å Ý ÐÐÓÛ× ÓÚ ÖÐÓ Ò Ó ×ÝÒ¹ ℄ º Ö ¸ ź Ç Ö× Ý¸ º ËØÓÙØ Ñ Ö ¸ Ò Ø Ü × ÓÒ Ö ØÖ ÖÝ ×Ø Ø ØÝÔ × Ò Ó × ÒÓØ Ö ÕÙ Ö Ø Èº Ï Ð Öº Å Ò Ø ÙØÙÖ × ÓÖ Ø Ô ×Ø × ¹Ð Ú Ð ÔÖÓ Ö Ñ ØÓ ÜÔÐ ØÐÝ Ö Ö ØÓ Ñ Ø ÔÖÓ Ö Ñ׺ ÁÒ Ò Ò Ö ØÝ ØÓ Ø Â Ú ÔÖÓ Ö ÑÑ Ò Ð Ò Ù º ÓÒØÖ ×ظ ÇÔ ÒÂ Ú ÓÒÐÝ ÐÐÓÛ× ×ÝÒØ Ü ÓÚ ÖÐÓ Ò × ÓÒ ÁÒ ÈÖÓ Ò × Ó Ø ÓÒ Ö Ò ÓÒ Ç Ø¹ÇÖ ÒØ Ð ×× × Ø Ø ÜÔÐ ØÐÝ Ò×Ø ÒØ Ø Ñ Ø Ð ×׺ ÈÖÓ Ö ÑÑ Ò ËÝ×Ø Ñ׸ Ä Ò Ù ×¸ Ò ÔÔÐ Ø ÓÒ׸ Î Ò ÓÙÚ Ö¸ Ç ØÓ Ö ½ º ź 6. CONCLUSIONS ℄ º ÖÝ Òظ º ØØÓÒ¸ ú º ÎÓÐ Ö¸ Ò º º À Ò ¹ÏÖ Ô × Ò ÜØ Ò× ÓÒ ØÓ Â Ú Ø Ø ×ÙÔÔÓÖØ× ÝÒ Ñ ÅÙÖÔ Ýº ÜÔÐ Ø ÔÖÓ Ö ÑÑ Ò º ÁÒ ÈÖÓ Ò × Ó Ø ×Ô Ø Û Ú Ò º À Ò ¹ÏÖ Ô³× ÝÒ Ñ Ò ØÙÖ ÐÐÓÛ× ÛÖ Ô¹ Ö×Ø ÁÒØ ÖÒ Ø ÓÒ Ð ÓÒ Ö Ò ÓÒ ×Ô Ø¹ÇÖ ÒØ Ô Ö× ØÓ ¬Ò ÓÑÔÓ× Ø ÓÒ ÐÐݺ ÁÒ Ø ÓÒ¸ ÛÖ ÔÔ Ö× ËÓ ØÛ Ö Ú ÐÓÔÑ Òظ ÔÖº ¾¼¼¾º Ö Ö Ù× Ð Ù× Ø Ý Ò ¬Ò ÐÓ ÐÐݸ Ò Ò ℄ ź Ù Ò Ïº Ï º Ò Ö ÛÖ ÔÔ Ö׺ ÁÒ ¬Ò Û Ø ÜÔÐ Ø ÓÒ×ØÖÙ ØÓÖ Ô Ö Ñ Ø Ö׺ Ò ÐÐݸ ÈÖÓ Ò × Ó Ø ÙÖÓÔ Ò ÓÒ Ö Ò ÓÒ À Ò ¹ÏÖ Ô Ò ÐÙ × Ò ÜÔÖ ×× Ú Ð Ö ÖÝ Ó Ò Ö ÛÖ Ô¹ Ç Ø¹ÇÖ ÒØ ÈÖÓ Ö ÑÑ Ò ¸ Ô × ¾¼½ß¾¾ ¸ ¾¼¼¼º Ô Ö׺ Ò ÑÔÐ Ñ ÒØ Ø ÓÒ Ó À Ò ¹ÏÖ Ô × Ú Ð Ð Ø ½¼℄ º Ð ØÓÒ¸ º Ä Ú Ò׸ º Ñ Ö׸ Ò http://www.cs.utah.edu/˜jbaker/mayaº À Ò ¹ÏÖ Ô Ìº Å ÐÐ×Ø Òº ÅÙÐØ Â Ú ÅÓ ÙÐ Ö ÓÔ Ò Ð ×× × Ò Ú × Æ Ò Ý ÓÒ ×Ø Ò Ö ÂÎÅ× Ø ÖÓÙ Ø Ù× Ó ×ÝÑÑ ØÖ ÑÙÐØ ÔÐ ×Ô Ø ÓÖ Â Ú º ÁÒ ÈÖÓ Ò × Ö ÙÐÐÝ Ó× Ò Ø ×ØÖÙ ØÙÖ × Ò Ð Ñ Ø Ù× Ó Ø Â Ú Ó Ø ÓÒ Ö Ò ÓÒ Ç Ø¹ÇÖ ÒØ ÈÖÓ Ö ÑÑ Ò Ö ­ Ø ÓÒ ÈÁº ËÝ×Ø Ñ׸ Ä Ò Ù ×¸ Ò ÔÔÐ Ø ÓÒ× ³¼¼¸ Ô × Ì × Ô Ô Ö Ó Ù× ÓÒ Ñ Ø Ó ÛÖ ÔÔ Ò Ò À Ò ¹ÏÖ Ôº ½¿¼ß½ ¸ Å ÒÒ ÔÓР׸ ÅƸ Ç Øº ¾¼¼¼º ËÓÑ Ó À Ò ¹Ï Ö³× Ð Ö ÖÝ ÛÖ ÔÔ Ö× ¬ÐÐ Ø ÖÓÐ Ó Ð Ò¹ ½½℄ ú Þ ÖÒ º ÝÒ Ñ ÓÓк http://www.prakinf. Ù ÓÒ×ØÖÙ Ø× ×Ù × ×Ô ØÂ Ó Ò ÔÓ ÒØ × Ò ØÓÖ׺ tu-ilmenau.de/˜czarn/aop/sources.tar.gzº ÇØ Ö ØÙÖ × Ó ×Ô Ø¹ÓÖ ÒØ Ð Ò Ù ×¸ ×Ù × ÒØÖÓ¹ ½¾℄ ú Þ ÖÒ Ò Íº × Ò Öº Ò Ö Ø Ú Ù Ø ÓÒ× Ò Û Ð Ö ×¸ Ö ÒÓØ ×ÙÔÔÓÖØ Ý À Ò ¹ÏÖ Ôº ÈÖÓ Ö ÑÑ Ò Å Ø Ó ×¸ Ì Ò Õ٠׸ Ò ÔÔÐ Ø ÓÒ׸ Ï ÒÓØ Ø Ø Å Ý ¸ Ø Ð Ò Ù ÓÒ ØÓÔ Ó Û À Ò ¹ ÔØ Ö º ×ÓÒ¹Ï ×Рݸ ½ º ÏÖ Ô × Ù Ðظ Ò ×ÙÔÔÓÖØ Ñ Ø Ó ÒØÖÓ Ù Ø ÓÒ× Ø ÖÓÙ ½¿℄ ź Ѻ Ì ÝØ Ó Ò Ò Ö Ò Ð Ö Öݺ Ò ÑÔÐ Ñ ÒØ Ø ÓÒ ¾¸ ¿℄ Ó Ø ÅÙÐØ Â Ú Ð Ò Ù ÜØ Ò¹ http://bcel.sourceforge.netº × ÓÒ ½¼℄¸ Û ÐÐÓÛ× ÜØ ÖÒ ÐÐÝ ¬Ò Ñ Ø Ó × ØÓ Ò¹ ½ ℄ Ⱥ¹ º Ú ¸ ̺ Ä ÓÙܸ Ò Æº ƺ ź ØÖÓ Ù ÒØÓ Ð ×× ×º ÓÙÖ Õ ¹Ë Ò º ÌÛÓ¹×Ø Ô Û Ú Ò Û Ø Ö ­ Ø ÓÒ Ù× Ò ×Ô Øº ÁÒ ÇÇÈËÄ ÏÓÖ × ÓÔ ÓÒ Ú Ò 7. ACKNOWLEDGEMENTS Ë Ô Ö Ø ÓÒ Ó ÓÒ ÖÒ× Ò Ç Ø¹ÇÖ ÒØ ËÝ×Ø Ñ׸ Ç Øº ¾¼¼½º Ï Ø Ò Ö ¸ Ð ×Ø Ö Ê ¸ ÂÓ Ò Ê Ö¸ Ë Ò Å ¹ ÖÑ ¸ Ò Ø ÒÓÒÝÑÓÙ× Ö Ú Û Ö× ÓÖ Ø Ö ÓÑÑ ÒØ× ½ ℄ ź Ð Øظ ˺ ÃÖ × Ò ÑÙÖØ ¸ Ò Åº ÐÐ × Òº Ð ×× × Ò ×Ù ×Ø ÓÒ׺ Ì × Ö × Ö Û × ×ÙÔÔÓÖØ ÝØ ¹ Ò Ñ Ü Ò׺ ÁÒ ÈÖÓ Ò × Ó Ø ¾ Ø Å Ò× Ú Ò Ê × Ö ÈÖÓ Ø× Ò Ý Ò Ø Ö ÓÖ ËÁ ÈÄ Æ¹ËÁ Ì ×ÝÑÔÓ× ÙÑ ÓÒ ÈÖ Ò ÔÐ × Ó Ê × Ö Ä ÓÖ ØÓÖÝ ÙÒ Ö Ö Ñ ÒØ ÒÙÑ Ö ¿¿ ½ ß¼¼ß ÈÖÓ Ö ÑÑ Ò Ä Ò Ù ×¸ Ô × ½ ½ß½ ¿¸ ½ º ß½ Ò Æ Ø ÓÒ Ð Ë Ò ÓÙÒ Ø ÓÒ Ê Ê Û Ö ¸ ½ ℄ ź Ó ¸ º Æ ÙÑ ÒÒ¸ Ò Íº ÙÒº × Ò Ò Êß ½½ º Ì ÍºËº ÓÚ ÖÒÑ ÒØ × ÙØ ÓÖ Þ ØÓ Ö ¹ ÑÔÐ Ñ Ò Ø ÓÒ ÓÒ×ØÖÙ Ø× ÓÖ Ø Ú ÐÓÔÑ ÒØ Ó ÔÖÓ Ù Ò ×ØÖ ÙØ Ö ÔÖ ÒØ× ÓÖ ÓÚ ÖÒÑ ÒØ Ð ÔÙÖÔÓ× × ­ Ü Ð ¸ ÓÑÔÓÒ ÒعÓÖ ÒØ ×Ó ØÛ Ö Ö Ø ØÙÖ ×º ÁÒ ÒÓØÛ Ø ×Ø Ò Ò ÒÝ ÓÔÝÖ Ø ÒÒÓØ Ø ÓÒ Ö ÓÒº ÈÖÓ Ò × Ó Ø Ë ÓÒ ÁÒØ ÖÒ Ø ÓÒ Ð ËÝÑÔÓ× ÙÑ ÓÒ Ò Ö Ø Ú Ò ÓÑÔÓÒ Òع × ËÓ ØÛ Ö Ò Ò Ö Ò ¸ Ô × ½½ ß½¾ ¸ ¾¼¼¼º 8. REFERENCES ½ ℄ ˺ À Ò Ò Ö Ò Êº ÍÒÐ Ò º Í× Ò Ò Ö Ù× Ò ½℄ º Ö Ò Ãº ÈÐ Ý ÓÖ º Ì Â Ú ×ÝÒØ Ø ×Ô Ø× Ò ×Ô Øº ÁÒ ÇÇÈËÄ ÏÓÖ × ÓÔ ÓÒ ÜØ Ò Ö ´ÂË µº ÁÒ ÈÖÓ Ò × Ó Ø ÓÒ Ö Ò ÓÒ Ú Ò Ë Ô Ö Ø ÓÒ Ó ÓÒ ÖÒ× Ò Ç Ø¹ÇÖ ÒØ Ç Ø¹ÇÖ ÒØ ÈÖÓ Ö ÑÑ Ò ËÝ×Ø Ñ׸ Ä Ò Ù ×¸ ËÝ×Ø Ñ׸ Ç Øº ¾¼¼½º Ò ÔÔÐ Ø ÓÒ׸ Ç Øº ¾¼¼½º ½ ℄ ƺ º ÀÓ º ÝÒ Ñ ×Ô Ø× Ò ËÇ » ÍȺ ¾℄ º Öº Å ÖÓ× Ø Ø ÔÐ Ý Å Ö Ø Ò ÖÓÑ Â Ú ØÓ Ì Ò Ð Ê ÔÓÖØ »¼ ¸ ÖÐ × ÍÒ Ú Ö× Øݸ ÈÖ Ù ¸ Å Ý º Å ×Ø Ö³× Ø × ×¸ ÍÒ Ú Ö× ØÝ Ó ÍØ ¸ Ñ Ö ÂÙÒº ½ º ¾¼¼½º ½ ℄ ú Ä Ö ÖÖ¸ º ÄÓÖ ÒÞ¸ Ò Åº Å Þ Ò º ¿℄ º Ö Ò Ïº À× º Å Ý ÅÙÐØ ÔÐ ¹ ×Ô Ø ÈÖÓ Ö ÑÑ Ò Û Ø ×Ô ØÙ Ð ÓÑÔÓÒ ÒØ׺ Ì Ò Ð ×ÝÒØ Ü ÜØ Ò× ÓÒ Ò Â Ú º ÌÓ ÔÔ Ö Ò ÈÖÓ Ò × Ó Ê ÔÓÖØ Æ͹ ˹ ¹¼½¸ ÆÓÖØ ×Ø ÖÒ ÍÒ Ú Ö× Øݸ ÔÖº Ø ÓÒ Ö Ò ÓÒ ÈÖÓ Ö ÑÑ Ò Ä Ò Ù × Ò Ò ½ º ÁÑÔÐ Ñ ÒØ Ø ÓÒ¸ ÂÙÒº
  • 10. ¾¼℄ º Ⱥ ÄÙÒ Ùº Ö ­ Ø Ú Ö Ø ØÙÖ ÓÖ ÔÖÓ ×× ¾ ℄ º ËØ Ð ÂÖº ÓÑÑÓÒ Ä ×Ô¸ Ø Ä Ò Ù º Ø Ð ÓÒØÖÓÐ ÔÔÐ Ø ÓÒ׺ ÁÒ ÈÖÓ Ò × Ó Ø ÙÖÓÔ Ò ÈÖ ×׸ × ÓÒ Ø ÓÒ¸ ½ ¼º ÓÒ Ö Ò ÓÒ Ç Ø¹ÇÖ ÒØ ÈÖÓ Ö ÑÑ Ò ¸ ½ º ¾ ℄ ź Ì Ø×Ù ÓÖ ¸ ˺ ¸ ź à ÐÐ Ò¸ Ò Ãº ÁØ ÒÓº ¾½℄ Ⱥ Æ Ñ Ý Öº Ò× ÐÐ Ð ØÛ Ø × Ö ÔØ Ò ÓÖ Ê ­ Ø ÓÒ Ò ËÓ ØÛ Ö Ò Ò Ö Ò ¸ ÚÓÐÙÑ ½ ¾ Ó Â Ú º http://www.beanshell.org/º Ä ØÙÖ ÆÓØ × Ò ÓÑÔÙØ Ö Ë Ò ¸ ÔØ Ö ¾¾℄ ú Ç×Ø ÖÑ ÒÒ Ò Åº Å Þ Ò º Ç Ø¹ÓÖ ÒØ ÇÔ ÒÂ Ú Ð ××¹ × Ñ ÖÓ ×Ý×Ø Ñ ÓÖ Â Ú º ÓÑÔÓ× Ø ÓÒ ÙÒØ Ò Ð º ÁÒ ÈÖÓ Ò × Ó Ø ËÔÖ Ò Ö Î ÖÐ ¸ ¾¼¼¼º ÓÒ Ö Ò ÓÒ Ç Ø¹ÇÖ ÒØ ÈÖÓ Ö ÑÑ Ò ËÝ×Ø Ñ׸ ¾ ℄ ÖÓܺ Ì ×Ô Ø ÔÖÓ Ö ÑÑ Ò Ù º http: Ä Ò Ù ×¸ Ò ÔÔÐ Ø ÓÒ׸ Ç Øº ¾¼¼½º //www.aspectj.org/doc/dist/progguide/º ¾¿℄ ʺ È ÛÐ ¸ ĺ Ë ÒØÙÖ Ö¸ ĺ Ù Ò¸ Ò º ÐÓÖ Òº  ­ Ü Ð ×ÓÐÙØ ÓÒ ÓÖ ×Ô Ø¹ÓÖ ÒØ ÔÖÓ Ö ÑÑ Ò Ò Â Ú º ÁÒ Ê ­ Ø ÓÒ ¾¼¼½¸ Ô × ½ß¾ ¸ ¾¼¼½º ÄÆ Ë ¾½ ¾º