Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 2052 → Rev 2053

/programs/develop/tinypy/tp_kolibri.txt
0,0 → 1,152
Ž¡§®à ¨­â¥à¯à¥â â®à  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.
 
à®¤®«¦¥­¨¥ á«¥¤ã¥â.