Ž¡§®à ¨â¥à¯à¥â â®à TinyPy ¨ § ¬¥âª¨ ¯® ¥£® ¤ ¯â 樨 ª à ¡®â¥ ¢ Š®«¨¡à¨Ž‘. 1. —â® â ª®¥ TinyPy ¨ 祬 ® å®à®è ¢ ¯« ¥ ¯®àâ¨à®¢ ¨ï TinyPy - ¨â¥à¯à¥â â®à Python-¯®¤®¡®£® ï§ëª , ᮧ¤ ë© ”¨«®¬ •íáᨠ(Phil Hassey), ®â«¨ç î騩áï ®ç¥ì ¥¡®«ì訬¨ à §¬¥à ¬¨: ¢ë¡®à®¬ ®¯æ¨© ª®¬¯¨«ï樨 ¬®¦® ¤®¡¨âìáï à §¬¥à®¢ ¨á¯®«ï¥¬®£® ¬®¤ã«ï ¢ ¯à¥¤¥« å 64 ª¨«®¡ ©â. à¨ à §à ¡®âª¥ ¯à¨«®¦¥¨© ¤«ï Š®«¨¡à¨ ¢ ¤àã£¨å ®¯¥à 樮ëå á¨á⥬ å ¤®áâ㯥 ¤®¢®«ì® è¨à®ª¨© ¢ë¡®à ªà®áá-ª®¬¯¨«ïâ®à®¢. ¡®à á।áâ¢ à §à ¡®âª¨ ¢ á ¬®© Š®«¨¡à¨ ¤® ¥¤ ¢¥£® ¢à¥¬¥¨ ¡ë« ®£à ¨ç¥ FASM. Œ®¦® ¯à¥¤¯®«®¦¨âì, çâ® ¢®§¬®¦®áâì ᮧ¤ ¢ âì ¯à®£à ¬¬ë ¢ á ¬®© á¨á⥬¥ â ª®¬ «¥£ª®¨§ãç ¥¬®¬ ¨ à á¯à®áâà ñ®¬ ï§ëª¥, ª ª Python, ¯®¢ëè ¥â ¯à¨¢«¥ª ⥫ì®áâì á¨áâ¥¬ë ¤«ï ¯®«ì§®¢ ⥫ï, ¤ «ñª®£® ®â ¯à®£à ¬¬¨à®¢ ¨ï áᥬ¡«¥à¥. TinyPy ®ª § «áï «ñ£®ª ¢ ¯®àâ¨à®¢ ¨¨: § ç¨â¥«ì ï ç áâì ¥£® ¯¨á á ¬®¬ Python, ®áâ «ì ï ç áâì - C, ¨áå®¤ë¥ â¥ªáâë § ¨¬ îâ çãâì ¡®«ìè¥ 200 Š¡. „«ï ª®¬¯¨«ï樨 㦠⮫쪮 áâ ¤ àâ ï ¡¨¡«¨®â¥ª libc. ˆ§ ¥ñ ¨á¯®«ì§ã¥âáï ¢á¥£® ®ª®«® ¯®«ãâ®à ¤¥áï⪮¢ äãªæ¨© (vsnprintf/vsprintf, malloc/memcpy/memmove/free, fopen/fread/fwrite/fclose). ‚ ¨â®£¥ à ¡®â ¯® ¯®àâ¨à®¢ ¨î TinyPy á®áâ®ï« ¨§ á«¥¤ãîé¨å ç á⥩: 1. ¯¨á ¨¥ Makefile ¤«ï ᡮન ª®¬¯¨«ïâ®à®¬ GCC á ¨á¯®«ì§®¢ ¨¥¬ menuetlibc. 2. „®¡ ¢«¥¨¥ ¢ menuetlibc ¥¤®áâ îé¨å äãªæ¨© vsnprintf/vsprintf. 3. ®¤ª«î票¥ ¡¨¡«¨®â¥ª¨ Š®«¨¡à¨ ¤«ï à ¡®âë á ª®á®«ìî. 4. ˆ ª®¥ç®, ®â«®¢ à §®®¡à §ëå ¬¥«ª¨å ¡ £®¢ (ª ª ¦¥ ¡¥§ í⮣®!). 2. ‚®§¬®¦®á⨠TinyPy. 2.1. ’¨¯ë ¤ ëå. Š ¦¤ë© ®¡ê¥ªâ ¢ á।¥ TinyPy ¯à¥¤áâ ¢«ï¥âáï 16-¡ ©â®¢®© áâàãªâãன tp_obj. ¥à¢ë¥ 4 ¡ ©â § ¨¬ ¥â ⨯, ¨ § 票¥ ¯®á«¥¤ãîé¨å 12 ¡ ©â § ¢¨á¨â ®â ¥£®. „®áâã¯ë á«¥¤ãî騥 ⨯ë: TP_NONE, TP_NUMBER, TP_STRING, TP_DICT, TP_LIST, TP_FNC, TP_DATA. TP_NONE - ᮮ⢥âáâ¢ã¥â ¥¤¨á⢥®¬ã ®¡ê¥ªâã None. ®«ìè¥ ¯à® ¥£® ᪠§ âì ¥ç¥£®. TP_NUMBER - ç¨á«®, åà ¨âáï ª ª float. …᫨ ç¨á«® ®â«¨ç ¥âáï ®â ¡«¨¦ ©è¥£® 楫®£® ¬¥ìè¥, 祬 10^(-6), ®® áç¨â ¥âáï 楫ë¬, ¨ ¯à¨ ¯¥ç ⨠¢ë¢®¤¨âáï ª ª 楫®¥. ’ ª¦¥ ª í⮬ã ⨯㠮â®áïâáï «®£¨ç¥áª¨¥ True ¨ False. ®¤¤¥à¦¨¢ îâáï à¨ä¬¥â¨ç¥áª¨¥ ®¯¥à 樨 +,-,*,/,%, ¡¨â®¢ë¥ << ¨ >>, «®£¨ç¥áª¨¥ |, &. ਬ¥à: print(2+2*2, 7/3, (-7)%3, 1==True, 0==False) ‚뢮¤¨â: 6 2.333333 -1 1 1 ‡ ¬¥â¨¬ áà §ã, çâ® print ï¥âáï äãªæ¨¥© (ª ª ¢ Python 3), â® ¥áâì ¯ à ¬¥âàë ®¡ï§ â¥«ì® ãª §ë¢ âì ¢ ᪮¡ª å. TP_STRING - áâப . ®¤¤¥à¦¨¢ îâáï: ¯à®¢¥àª ¢å®¦¤¥¨ï ("str1" in "str2"), á१ë s[:b], s[a:b], s[a:], äãªæ¨¨ len, index, join, split, find, strip, replace. TP_DICT - á«®¢ àì, ® ¦¥ áá®æ¨ â¨¢ë© ¬ áᨢ. ®¤¤¥à¦¨¢ ¥âáï ¤®¡ ¢«¥¨¥ ®¢®£® í«¥¬¥â ¨ ¢á¥å í«¥¬¥â®¢ ¤à㣮£® á«®¢ àï. ¥à¥¡®à ¯® ¢á¥¬ ª«îç ¬ ¨ 㤠«¥¨¥ í«¥¬¥â®¢ ¯®ª ¥ ¯®¤¤¥à¦¨¢ ¥âáï. ‘«®¢ ਠ⠪¦¥ ïîâáï 㤮¡ë¬ ᯮᮡ®¬ ¯à¥¤áâ ¢«¥¨ï ®¡ê¥ªâ®¢, ¢ ç áâ®áâ¨, ¥á«¨ d á«®¢ àì, â® § ¯¨á¨ d.key ¨ d['key'] à ¢®§ çë. ‚ í⮬ TinyPy ¥¬®£® ¯®¬¨ ¥â JavaScript. TP_LIST - ᯨ᮪. ®¤¤¥à¦¨¢ îâáï: ¯¥à¥¡®à ¯® í«¥¬¥â ¬ (for el in list), äãªæ¨¨ len, append/appendx, extend, insert/insertx, pop, find, index, sort. ’ ª¦¥ ¯®¤¤¥à¦¨¢ ¥âáï äãªæ¨ï range. reverse() ¯®ª ¥ ¯®¤¤¥à¦¨¢ ¥âáï. TP_FNC - äãªæ¨ï. ë¢ ¥â 2 ⨯®¢ - ®¡ëç ï äãªæ¨ï ¨ ¬¥â®¤, ®â«¨ç îâáï ¯®à浪®¬ ¢ë§®¢ . TP_DATA - ¢ãâ२¥ áâàãªâãàë TinyPy. 2. ‚®§¬®¦®á⨠TinyPy ¢ áà ¢¥¨¨ á "¡®«ì訬" Python "what tinypy won't be: - a full implementation of Python; - totally compatible with Python" "roadmap.txt", tinypy sources ‘¨â ªá¨á ï§ëª TinyPy ®ç¥ì ¯®å®¦ Python, ® ¬®£¨¥ áãé¥áâ¢¥ë¥ ¢®§¬®¦®á⨠Python ¥ ¯®¤¤¥à¦¨¢ îâáï: - ¨â¥à â®àë ¨ á®¯à®£à ¬¬; - á¨â ªá¨ç¥áª¨© "á å à" ¤«ï ®¡ê¥¨ï ᯨ᪮¢ ¨ á«®¢ ३, ¯®¤®¡¨¥ odd_squares = [a*a for a in range(100) if a%2]; - ¨â¥à ªâ¨¢ ï ª®á®«ì. ˆ ª®¥ç®, ¥ å¢ â ¥â ®á®¢®© ᨫë Python - ¥£® áâ ¤ à⮩ ¡¨¡«¨®â¥ª¨. 3. áè¨à¥¨¥ TinyPy. ¡®à ¢áâ஥ëå äãªæ¨© ¢ TinyPy ¤®áâ â®ç® ¡¥¤¥, ® § â® ¤®¡ ¢«¥¨¥ ®¢ëå ¬®¤ã«¥© ¤®áâ â®ç® ¯à®áâ®. áᬮâਬ ᮧ¤ ¨¥ ¬®¤ã«¥© á ¬®¬ TinyPy, C ¨ FASM. 3.1. Œ®¤ã«¨ TinyPy. TinyPy ¯®¤¤¥à¦¨¢ ¥â ¬®¤ã«ì®¥ ¯à®£à ¬¬¨à®¢ ¨¥, ᮧ¤ ¨¥ ¬®¤ã«¥© ¯à¨æ¨¯¨ «ì® ¨ç¥¬ ¥ ®â«¨ç ¥âáï ®â Python. ãáâì, ã á ¥áâì ¯à®áâ ï ¯à®£à ¬¬ ¨§ ¤¢ãå ä ©«®¢: ” ©« math.py: def square(a): return a*a ” ©« prog.py: import math if __name__=="__main__": math.square(12) ‚ ç «¥ 㦮 ᪮¬¯¨«¨à®¢ âì ¬®¤ã«ì math.py ¢ ¡ ©â-ª®¤ ¯à¨ ¯®¬®é¨ ¯à®£à ¬¬ë py2bc.py, ® à ¡®â ¥â ª ª ¢ Python, â ª ¨ ¢ TinyPy. ‡ ¯ã᪠¥¬ shell ¨ ¢ë¯®«ï¥¬ ª®¬ ¤ã # tinypy py2bc.py math.py math.tpc ®á«¥ í⮣® ¬®¦® § ¯ãáâ¨âì prog.py ¨§ TinyPy. # tinypy prog.py 144 ‡ ¬¥ç ¨¥: á¨â ªá¨á "from module import function" ¯®ª ¥ ¯®¤¤¥à¦¨¢ ¥âáï. 3.2 Œ®¤ã«¨ C. ਬ¥à ᮧ¤ ¨ï ¬®¤ã«¥© C ¬®¦® ¯®á¬®âà¥âì ¢ ª â «®£¥ modules/kolibri. ’ ª¨¥ ¬®¤ã«¨ áâ â¨ç¥áª¨ «¨ªãîâáï á á ¬¨¬ ¨â¥à¯à¥â â®à®¬ ¨, ᮮ⢥âá⢥®, 㢥«¨ç¨¢ îâ ¥£® à §¬¥à. „«ï ᨦ¥¨ï ª« ¤ëå à á室®¢ ª®¬¯®¥âë TinyPy ª®¬¯¨«¨àãîâáï ¢ ®¤¨ ®¡ê¥ªâë© ¬®¤ã«ì, ä ©«ë ¨á室ëå ⥪á⮢ ¢ª«îç îâáï á ¯®¬®éìî ¤¨à¥ªâ¨¢ë #include. „®¯®«¨â¥«ìë¥ ¬®¤ã«¨ ¬®£ãâ ª®¬¯¨«¨à®¢ âìáï ª ª ¢ ®â¤¥«ìë¥ ®¡ê¥ªâë¥ ä ©«ë, ¢ í⮬ á«ãç ¥ 㦮 ¤®¯¨á âì ¨å ¢ Makefile, ¨«¨ â®ç® â ª ¦¥ ¯®¤ª«îç âìáï ¤¨à¥ªâ¨¢®© include. ‚ ¬®¤ã«¥ ¤®«¦ ¯à¨áãâá⢮¢ âì äãªæ¨ï ¨¨æ¨ «¨§ 樨 ®¡ëç® ® §ë¢ ¥âáï <modname>_init. Ž ¢ë§ë¢ ¥âáï ¢ tpmain áà §ã ¯®á«¥ ¨¨æ¨ «¨§ 樨 ¢¨àâ㠫쮩 ¬ è¨ë, ᮧ¤ ñâ á«®¢ àì íªá¯®àâ¨à㥬ëå ®¡ê¥ªâ®¢ ¨ ¤®¡ ¢«ï¥â ¥£® ¢ ¯à¥¤®¯à¥¤¥«ñë© á«®¢ àì modules. —â®¡ë ®¯à¥¤¥«¨âì TinyPy-äãªæ¨î, 㦮 ᮧ¤ âì ®¡ëçãî äãªæ¨î C ¢¨¤ tp_obj myfunc(tp_vm *tp); 3.3 Œ®¤ã«¨ FASM. Œ®¤ã«ì FASM ¯¨è¥âáï «®£¨ç®, ® ¢á¥£¤ ª®¬¯¨«¨àã¥âáï ¢ ®â¤¥«ìë© ®¡ê¥ªâë© ä ©«. ਬ¥à ¬®¦® ¯®á¬®âà¥âì ¢ ª â «®£¥ fasm_modules. Œ®¤ã«ì kolibri_dbg íªá¯®àâ¨àã¥â ®¤ã äãªæ¨î debug_print, ¢ë¢®¤ïéãî áâப㠤®áªã ®â« ¤ª¨. 4. Ž¡§®à ¬®¤ã«ï kolibri. த®«¦¥¨¥ á«¥¤ã¥â.