¡§®à ¨â¥à¯à¥â â®à 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];
- ¨â¥à ªâ¨¢ ï ª®á®«ì
- ¯¥à¥¤ ç ¯ à ¬¥â஢ ç¥à¥§ ARGV
¡¨¡«¨®â¥ª¥ menuetlibc ¯à®æ¥¤ãà à §¡®à ¯ à ¬¥â஢ ª®¬ ¤®© áâப¨ ¯®ª
¥ ¤ ¯â¨à®¢ ¤«ï ®«¨¡à¨, ¯®í⮬㠯ਠ§ ¯ã᪥ TinyPy ¯à¨å®¤¨âáï ¢¢®¤¨âì
¨¬ï ä ©« ¢àãçãî, â ª¦¥ ¥«ì§ï ¯¥à¥¤ ¢ âì ¯ à ¬¥âàë ¢ ª®¬ ¤®© áâப¥.
ª®¥ç®, ¥ å¢ â ¥â ®á®¢®© ᨫë 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. ¯®á«¥¤¥¬ á«ãç ¥ 㦮
㪠§ âì £«®¡ «ìë© ¬ áᨢ ARGV=[0, 'math.py', 'math.tpc'], â ª ª ª ¯¥à¥¤ âì
¯ à ¬¥âàë ç¥à¥§ ª®¬ ¤ãî áâப㠯®ª ¥«ì§ï. ®á«¥ í⮣® ¬®¦® § ¯ãáâ¨âì
prog.py ¨§ TinyPy. ¨â ªá¨á "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.
த®«¦¥¨¥ á«¥¤ã¥â.