Subversion Repositories Kolibri OS

Rev

Rev 2053 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. Ž¡§®à ¨­â¥à¯à¥â â®à  TinyPy ¨ § ¬¥âª¨ ¯® ¥£®  ¤ ¯â æ¨¨ ª à ¡®â¥ ¢ Š®«¨¡à¨Ž‘.
  2.  
  3. 1. —â® â ª®¥ TinyPy ¨ 祬 ®­ å®à®è ¢ ¯« ­¥ ¯®àâ¨à®¢ ­¨ï
  4.  
  5.  TinyPy - ¨­â¥à¯à¥â â®à Python-¯®¤®¡­®£® ï§ëª , ᮧ¤ ­­ë© ”¨«®¬
  6. •íáᨠ(Phil Hassey), ®â«¨ç î騩áï ®ç¥­ì ­¥¡®«ì訬¨ à §¬¥à ¬¨: ¢ë¡®à®¬ ®¯æ¨©
  7. ª®¬¯¨«ï樨 ¬®¦­® ¤®¡¨âìáï à §¬¥à®¢ ¨á¯®«­ï¥¬®£® ¬®¤ã«ï ¢ ¯à¥¤¥« å 64 ª¨«®¡ ©â.
  8.  
  9.  à¨ ࠧࠡ®âª¥ ¯à¨«®¦¥­¨© ¤«ï Š®«¨¡à¨ ¢ ¤àã£¨å ®¯¥à æ¨®­­ëå á¨á⥬ å
  10. ¤®áâ㯥­ ¤®¢®«ì­® è¨à®ª¨© ¢ë¡®à ªà®áá-ª®¬¯¨«ïâ®à®¢.  ¡®à á।á⢠ࠧࠡ®âª¨ ¢
  11. á ¬®© Š®«¨¡à¨ ¤® ­¥¤ ¢­¥£® ¢à¥¬¥­¨ ¡ë« ®£à ­¨ç¥­ FASM. Œ®¦­® ¯à¥¤¯®«®¦¨âì, çâ®
  12. ¢®§¬®¦­®áâì ᮧ¤ ¢ âì ¯à®£à ¬¬ë ¢ á ¬®© á¨á⥬¥ ­  â ª®¬ «¥£ª®¨§ãç ¥¬®¬ ¨
  13. à á¯à®áâà ­ñ­­®¬ ï§ëª¥, ª ª Python, ¯®¢ë蠥⠯ਢ«¥ª â¥«ì­®áâì á¨áâ¥¬ë ¤«ï
  14. ¯®«ì§®¢ â¥«ï, ¤ «ñª®£® ®â ¯à®£à ¬¬¨à®¢ ­¨ï ­   áᥬ¡«¥à¥.
  15.  
  16. TinyPy ®ª § «áï «ñ£®ª ¢ ¯®àâ¨à®¢ ­¨¨: §­ ç¨â¥«ì­ ï ç áâì ¥£® ­ ¯¨á ­  ­  á ¬®¬
  17. Python,   ®áâ «ì­ ï ç áâì - ­  C, ¨á室­ë¥ ⥪áâë § ­¨¬ îâ çãâì ¡®«ìè¥ 200 Š¡.
  18. „«ï ª®¬¯¨«ï樨 ­ã¦­  ⮫쪮 áâ ­¤ àâ­ ï ¡¨¡«¨®â¥ª  libc. ˆ§ ­¥ñ ¨á¯®«ì§ã¥âáï
  19. ¢á¥£® ®ª®«® ¯®«ãâ®à  ¤¥áï⪮¢ ä㭪権 (vsnprintf/vsprintf, malloc/memcpy/memmove/free,
  20. fopen/fread/fwrite/fclose).
  21.  
  22.  ‚ ¨â®£¥ à ¡®â  ¯® ¯®àâ¨à®¢ ­¨î TinyPy á®áâ®ï«  ¨§ á«¥¤ãîé¨å ç á⥩:
  23.  1.  ¯¨á ­¨¥ Makefile ¤«ï ᡮન ª®¬¯¨«ïâ®à®¬ GCC á ¨á¯®«ì§®¢ ­¨¥¬
  24.  menuetlibc.
  25.  2. „®¡ ¢«¥­¨¥ ¢ menuetlibc ­¥¤®áâ îé¨å ä㭪権 vsnprintf/vsprintf.
  26.  3. ®¤ª«î祭¨¥ ¡¨¡«¨®â¥ª¨ Š®«¨¡à¨ ¤«ï à ¡®âë á ª®­á®«ìî.
  27.  4. ˆ ª®­¥ç­®, ®â«®¢ à §­®®¡à §­ëå ¬¥«ª¨å ¡ £®¢ (ª ª ¦¥ ¡¥§ í⮣®!).
  28.  
  29. 2. ‚®§¬®¦­®á⨠TinyPy.
  30.  
  31. 2.1. ’¨¯ë ¤ ­­ëå.
  32.  
  33. Š ¦¤ë© ®¡ê¥ªâ ¢ á।¥ TinyPy ¯à¥¤áâ ¢«ï¥âáï 16-¡ ©â®¢®© áâàãªâãன tp_obj.
  34. ¥à¢ë¥ 4 ¡ ©â  § ­¨¬ ¥â ⨯, ¨ ­ §­ ç¥­¨¥ ¯®á«¥¤ãîé¨å 12 ¡ ©â § ¢¨á¨â ®â ­¥£®.
  35. „®áâ㯭ë á«¥¤ãî騥 ⨯ë: TP_NONE, TP_NUMBER, TP_STRING, TP_DICT, TP_LIST,
  36. TP_FNC, TP_DATA.
  37.  
  38.  TP_NONE - ᮮ⢥âáâ¢ã¥â ¥¤¨­á⢥­­®¬ã ®¡ê¥ªâã None. ®«ìè¥ ¯à® ­¥£® ᪠§ âì
  39.  ­¥ç¥£®.
  40.  
  41.  TP_NUMBER - ç¨á«®, åà ­¨âáï ª ª float. …᫨ ç¨á«® ®â«¨ç ¥âáï ®â ¡«¨¦ ©è¥£®
  42.  æ¥«®£® ¬¥­ìè¥, 祬 ­  10^(-6), ®­® áç¨â ¥âáï 楫ë¬, ¨ ¯à¨ ¯¥ç â¨ ¢ë¢®¤¨âáï
  43.  ª ª 楫®¥. ’ ª¦¥ ª í⮬ã ⨯㠮⭮áïâáï «®£¨ç¥áª¨¥ True ¨ False.
  44.  ®¤¤¥à¦¨¢ îâáï  à¨ä¬¥â¨ç¥áª¨¥ ®¯¥à æ¨¨ +,-,*,/,%, ¡¨â®¢ë¥ << ¨ >>, «®£¨ç¥áª¨¥
  45.  |, &.
  46.  
  47.  à¨¬¥à:
  48.  print(2+2*2, 7/3, (-7)%3, 1==True, 0==False)
  49.  
  50.  ‚뢮¤¨â:
  51.  6 2.333333 -1 1 1
  52.  
  53.  ‡ ¬¥â¨¬ áà §ã, çâ® print ï¥âáï ä㭪樥© (ª ª ¢ Python 3), â® ¥áâì ¯ à ¬¥âàë
  54.  ®¡ï§ â¥«ì­® 㪠§ë¢ âì ¢ ᪮¡ª å.
  55.  
  56.  TP_STRING - áâப . ®¤¤¥à¦¨¢ îâáï: ¯à®¢¥àª  ¢å®¦¤¥­¨ï ("str1" in "str2"), á१ë s[:b], s[a:b],
  57.  s[a:], ä㭪樨 len, index, join, split, find, strip, replace.
  58.  
  59.  TP_DICT - á«®¢ àì, ®­ ¦¥  áá®æ¨ â¨¢­ë© ¬ áᨢ. ®¤¤¥à¦¨¢ ¥âáï ¤®¡ ¢«¥­¨¥
  60.  ­®¢®£® í«¥¬¥­â  ¨ ¢á¥å í«¥¬¥­â®¢ ¤à㣮£® á«®¢ àï. ¥à¥¡®à ¯® ¢á¥¬ ª«îç ¬ ¨
  61.  ã¤ «¥­¨¥ í«¥¬¥­â®¢ ¯®ª  ­¥ ¯®¤¤¥à¦¨¢ ¥âáï. ‘«®¢ à¨ â ª¦¥ ïîâáï 㤮¡­ë¬ ᯮᮡ®¬
  62.  ¯à¥¤áâ ¢«¥­¨ï ®¡ê¥ªâ®¢, ¢ ç áâ­®áâ¨, ¥á«¨ d á«®¢ àì, â® § ¯¨á¨ d.key ¨
  63.  d['key'] à ¢­®§­ ç­ë. ‚ í⮬ TinyPy ­¥¬­®£® ­ ¯®¬¨­ ¥â JavaScript.
  64.  
  65.  TP_LIST - ᯨ᮪. ®¤¤¥à¦¨¢ îâáï: ¯¥à¥¡®à ¯® í«¥¬¥­â ¬ (for el in list),
  66.  ä㭪樨 len, append/appendx, extend, insert/insertx, pop, find, index, sort.
  67. ’ ª¦¥ ¯®¤¤¥à¦¨¢ ¥âáï äã­ªæ¨ï range. reverse() ¯®ª  ­¥ ¯®¤¤¥à¦¨¢ ¥âáï.
  68.  
  69.  TP_FNC - äã­ªæ¨ï. ë¢ ¥â 2 ⨯®¢ - ®¡ëç­ ï äã­ªæ¨ï ¨ ¬¥â®¤, ®â«¨ç îâáï
  70.  ¯®à浪®¬ ¢ë§®¢ .
  71.  
  72.  TP_DATA - ¢­ãâ७­¨¥ áâàãªâãàë TinyPy.
  73.  
  74. 2. ‚®§¬®¦­®á⨠TinyPy ¢ áà ¢­¥­¨¨ á "¡®«ì訬" Python
  75.  
  76. "what tinypy won't be:
  77. - a full implementation of Python;
  78. - totally compatible with Python"
  79.         "roadmap.txt", tinypy sources
  80.  
  81.  ‘¨­â ªá¨á ï§ëª  TinyPy ®ç¥­ì ¯®å®¦ ­  Python, ­® ¬­®£¨¥ áãé¥á⢥­­ë¥
  82.  ¢®§¬®¦­®á⨠Python ­¥ ¯®¤¤¥à¦¨¢ îâáï:
  83.  
  84.  - ¨â¥à â®àë ¨ ᮯணࠬ¬;
  85.  - ᨭ⠪á¨ç¥áª¨© "á å à" ¤«ï ®¡ê¥­¨ï ᯨ᪮¢ ¨ á«®¢ à¥©, ­ ¯®¤®¡¨¥
  86.  odd_squares = [a*a for a in range(100) if a%2];
  87.  - ¨­â¥à ªâ¨¢­ ï ª®­á®«ì.
  88.  
  89.  ˆ ª®­¥ç­®, ­¥ 墠⠥⠮᭮¢­®© ᨫë Python - ¥£® áâ ­¤ àâ­®© ¡¨¡«¨®â¥ª¨.
  90.  
  91. 3.  áè¨à¥­¨¥ TinyPy.
  92.  
  93.   ¡®à ¢áâ஥­­ëå ä㭪権 ¢ TinyPy ¤®áâ â®ç­® ¡¥¤¥­, ­® § â® ¤®¡ ¢«¥­¨¥ ­®¢ëå
  94.  ¬®¤ã«¥© ¤®áâ â®ç­® ¯à®áâ®.  áᬮâਬ ᮧ¤ ­¨¥ ¬®¤ã«¥© ­  á ¬®¬ TinyPy, ­ 
  95.  C ¨ ­  FASM.
  96.  
  97.  3.1. Œ®¤ã«¨ ­  TinyPy.
  98.  
  99.  TinyPy ¯®¤¤¥à¦¨¢ ¥â ¬®¤ã«ì­®¥ ¯à®£à ¬¬¨à®¢ ­¨¥, ᮧ¤ ­¨¥ ¬®¤ã«¥©
  100.  ¯à¨­æ¨¯¨ «ì­® ­¨ç¥¬ ­¥ ®â«¨ç ¥âáï ®â Python. ãáâì, ã ­ á ¥áâì ¯à®áâ ï
  101.  ¯à®£à ¬¬  ¨§ ¤¢ãå ä ©«®¢:
  102.  
  103. ” ©« math.py:
  104.  def square(a):
  105.      return a*a
  106.  
  107. ” ©« prog.py:
  108. import math
  109.  
  110. if __name__=="__main__":
  111.     math.square(12)
  112.  
  113.  ‚­ ç «¥ ­ã¦­® ᪮¬¯¨«¨à®¢ âì ¬®¤ã«ì math.py ¢ ¡ ©â-ª®¤ ¯à¨ ¯®¬®é¨ ¯à®£à ¬¬ë
  114.  py2bc.py, ®­  à ¡®â ¥â ª ª ¢ Python, â ª ¨ ¢ TinyPy. ‡ ¯ã᪠¥¬ shell ¨ ¢ë¯®«­ï¥¬ ª®¬ ­¤ã
  115.  # tinypy py2bc.py math.py math.tpc
  116.  
  117.  ®á«¥ í⮣® ¬®¦­® § ¯ãáâ¨âì prog.py ¨§ TinyPy.
  118.  
  119.  # tinypy prog.py
  120.  144
  121.  
  122.  ‡ ¬¥ç ­¨¥: ᨭ⠪á¨á "from module import function" ¯®ª  ­¥ ¯®¤¤¥à¦¨¢ ¥âáï.
  123.  
  124.  3.2 Œ®¤ã«¨ ­  C.
  125.  
  126.  à¨¬¥à ᮧ¤ ­¨ï ¬®¤ã«¥© ­  C ¬®¦­® ¯®á¬®âà¥âì ¢ ª â «®£¥ modules/kolibri. ’ ª¨¥
  127.  ¬®¤ã«¨ áâ â¨ç¥áª¨ «¨­ªãîâáï á á ¬¨¬ ¨­â¥à¯à¥â â®à®¬ ¨, ᮮ⢥âá⢥­­®,
  128.  ã¢¥«¨ç¨¢ îâ ¥£® à §¬¥à. „«ï á­¨¦¥­¨ï ­ ª« ¤­ëå à á室®¢ ª®¬¯®­¥­âë TinyPy
  129.  ª®¬¯¨«¨àãîâáï ¢ ®¤¨­ ®¡ê¥ªâ­ë© ¬®¤ã«ì,   ä ©«ë ¨á室­ëå ⥪á⮢ ¢ª«îç îâáï á
  130.  ¯®¬®éìî ¤¨à¥ªâ¨¢ë #include. „®¯®«­¨â¥«ì­ë¥ ¬®¤ã«¨ ¬®£ãâ ª®¬¯¨«¨à®¢ âìáï ª ª ¢
  131.  ®â¤¥«ì­ë¥ ®¡ê¥ªâ­ë¥ ä ©«ë, ¢ í⮬ á«ãç ¥ ­ã¦­® ¤®¯¨á âì ¨å ¢ Makefile, ¨«¨
  132.  â®ç­® â ª ¦¥ ¯®¤ª«îç âìáï ¤¨à¥ªâ¨¢®© include.
  133.  
  134.  ‚ ¬®¤ã«¥ ¤®«¦­  ¯à¨áãâá⢮¢ âì äã­ªæ¨ï ¨­¨æ¨ «¨§ æ¨¨ ®¡ëç­® ®­  ­ §ë¢ ¥âáï
  135.  <modname>_init. Ž­  ¢ë§ë¢ ¥âáï ¢ tpmain áࠧ㠯®á«¥ ¨­¨æ¨ «¨§ æ¨¨ ¢¨àâã «ì­®©
  136.  ¬ è¨­ë, ᮧ¤ ñâ á«®¢ àì  íªá¯®àâ¨à㥬ëå ®¡ê¥ªâ®¢ ¨ ¤®¡ ¢«ï¥â ¥£® ¢ ¯à¥¤®¯à¥¤¥«ñ­­ë© á«®¢ àì modules.
  137.  
  138.  —â®¡ë ®¯à¥¤¥«¨âì TinyPy-äã­ªæ¨î, ­ã¦­® ᮧ¤ âì ®¡ëç­ãî äã­ªæ¨î ­  C ¢¨¤ 
  139.  
  140. tp_obj myfunc(tp_vm *tp);
  141.  
  142.  3.3 Œ®¤ã«¨ ­  FASM.
  143.  
  144. Œ®¤ã«ì ­  FASM ¯¨è¥âáï  ­ «®£¨ç­®, ­® ¢á¥£¤  ª®¬¯¨«¨àã¥âáï ¢ ®â¤¥«ì­ë©
  145. ®¡ê¥ªâ­ë© ä ©«. à¨¬¥à ¬®¦­® ¯®á¬®âà¥âì ¢ ª â «®£¥ fasm_modules. Œ®¤ã«ì
  146. kolibri_dbg íªá¯®àâ¨àã¥â ®¤­ã äã­ªæ¨î debug_print, ¢ë¢®¤ïéãî áâப㠭  ¤®áªã
  147. ®â« ¤ª¨.
  148.  
  149.  4. Ž¡§®à ¬®¤ã«ï kolibri.
  150.  
  151.  à®¤®«¦¥­¨¥ á«¥¤ã¥â.
  152.