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