Ctypes рдХреЗ рд╕рд╛рде рдкрд╛рдпрдерди рдХреЛрдб рдЕрдиреБрдХреВрд▓рди

рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд╛рдпрдерди рдбреЗрд╡рд▓рдкрд░ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рдЫрд╛рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ ред




рдиреЛрдЯ : рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдХреЛрдб GNU AGPLv3 рдХреЗ рддрд╣рдд рд▓рд╛рдЗрд╕реЗрдВрд╕ рдкреНрд░рд╛рдкреНрдд рд╣реИ ред

рдореИрдВрдиреЗ рдпрд╣ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рдЗрд╕рд▓рд┐рдП рд▓рд┐рдЦреА рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдРрд╕рд╛ рдХреЛрдИ рдирд╣реАрдВ рдорд┐рд▓рд╛ рдЬреЛ ctypes рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реЛред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдХрд┐рд╕реА рдХреЗ рдЬреАрд╡рди рдХреЛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред

рд╕рд╛рдордЧреНрд░реА:

  1. рдмреБрдирд┐рдпрд╛рджреА рдЕрдиреБрдХреВрд▓рди
  2. рд╢реИрд▓рд┐рдпреЛрдВ
  3. рдЕрдЬрдЧрд░ рдХрд╛ рд╕рдВрдХрд▓рди
  4. рдкрд╛рдпрдерди рдореЗрдВ рд╕рдВрд░рдЪрдирд╛рдПрдВ
  5. C рдореЗрдВ рдЕрдкрдирд╛ рдХреЛрдб рдХреЙрд▓ рдХрд░реЗрдВ
  6. PyPy

рдмреБрдирд┐рдпрд╛рджреА рдЕрдиреБрдХреВрд▓рди


рд╕реА рдореЗрдВ рдкрд╛рдпрдерди рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдкрд╛рдпрдерди рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ


рдкрд╛рдпрдерди рдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╕реЗрдЯ рдФрд░ рддрд╛рдирд╛рд╢рд╛рд╣реА, рд╕реА рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рд╡реЗ рдЖрдкрдХреЗ рдЦреБрдж рдХреЗ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдкрд╛рдпрдерди рдХрдХреНрд╖рд╛рдПрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдорд╛рдирдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ, рд╕рдВрдЧреНрд░рд╣ рдореЙрдбреНрдпреВрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рддрд╛рдирд╛рд╢рд╛рд╣реА, рд╕реВрдЪреА рдФрд░ рдЯрдкрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

рд╕реВрдЪреА рдХреЗ рднрд╛рд╡


рдорд╛рдирдХ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реВрдЪреА рдореЗрдВ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╕реВрдЪреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

# Slow
      mapped = []
      for value in originallist:
          mapped.append(myfunc(value))
      
      # Faster
      mapped = [myfunc(value) in originallist]

ctypes


Ctypes рдореЙрдбреНрдпреВрд▓ subprocessрд╕реАрдПрд▓рдЖрдИ рд╕реЗ рдЕрдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбреНрдпреВрд▓ рдпрд╛ рдЕрдиреНрдп рд╕рдорд╛рди рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдкрд╛рдпрдерди рд╕реЗ рд╕реА рдХреЛрдб рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ ред

рдХреЗрд╡рд▓ рджреЛ рднрд╛рдЧ рд╣реИрдВ: рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реА рдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ shared objectрдФрд░ рдЙрдиреНрд╣реЗрдВ рдЯрд╛рдЗрдк рд╕реА

рдореЗрдВ рдореИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдХреЛрдб рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░рдХреНрдЪрд░реНрд╕ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░рдирд╛ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЕрдкрдиреЗ рдкрд╛рдпрдерди рдХреЛрдб рдХреЛ lcs.c рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝реВрдВрдЧрд╛ , рдЬреЛ рджреЛ рдореЗрдВ рд╕рдмрд╕реЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдкрд░рд┐рдХреНрд░рдордг рдкрд╛рддрд╛ рд╣реИред рддрд╛рд░ рдХреА рд╕реВрдЪреАред рдореИрдВ рдЕрдЬрдЧрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

list1 = ['My', 'name', 'is', 'Sam', 'Stevens', '!']
      list2 = ['My', 'name', 'is', 'Alex', 'Stevens', '.']
      
      common = lcs(list1, list2)
      
      print(common)
      # ['My', 'name', 'is', 'Stevens']

рдПрдХ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд╕реА рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИ рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рддрд░реНрдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкреНрд░рдХрд╛рд░ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд▓рдВрдмрд╛рдИ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреЙрдЗрдВрдЯ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд▓рдВрдмрд╛рдИ рд╡рд╛рд▓реЗ рдЕрдиреБрдХреНрд░рдо рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд░рддрд╛ рд╣реВрдВред

рдкрд╛рдпрдерди рдореЗрдВ рд╕реА рдХреЛрдб рдХрд╛ рд╕рдВрдХрд▓рди


рдкрд╣рд▓реЗ, C рд╕реНрд░реЛрдд рдХреЛрдб ( lcs.c ) рдХреЛ lcs.soрдкрд╛рдпрдерди рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

gcc -c -Wall -Werror -fpic -O3 lcs.c -o lcs.o
      gcc -shared -o lcs.so lcs.o

  • - рджреАрд╡рд╛рд░ рд╕рднреА рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧреА ;
  • - Werror рддреНрд░реБрдЯрд┐рдпреЛрдВ рдореЗрдВ рд╕рднреА рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рд▓рдкреЗрдЯреЗрдЧрд╛ ;
  • - fpic рдкреЛрдЬреАрд╢рди-рдЗрдВрдбрд┐рдкреЗрдВрдбреЗрдВрдЯ рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рдиреНрд╕ рдЬреЗрдирд░реЗрдЯ рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдкрд╛рдЗрдерди рдореЗрдВ рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА;
  • - O3 рдЕрдиреБрдХреВрд▓рди рдХреЛ рдЕрдзрд┐рдХрддрдо рдХрд░рддрд╛ рд╣реИ;

рдФрд░ рдЕрдм рд╣рдо рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рдпрдерди рдХреЛрдб рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ ред

рдкрд╛рдпрдерди рдореЗрдВ рд╕рдВрд░рдЪрдирд╛рдПрдВ


рдиреАрдЪреЗ рджреЛ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдореЗрд░реЗ рд╕реА рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИрдВред

struct Sequence
      {
          char **items;
          int length;
      };
      
      struct Cell
      {
          int index;
          int length;
          struct Cell *prev;
      };

рдФрд░ рдпрд╣рд╛рдБ рдЗрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкрд╛рдпрдерди рдореЗрдВ рд╣реИред

import ctypes
      class SEQUENCE(ctypes.Structure):
          _fields_ = [('items', ctypes.POINTER(ctypes.c_char_p)),
                      ('length', ctypes.c_int)]
      
      class CELL(ctypes.Structure):
          pass
      
      CELL._fields_ = [('index', ctypes.c_int), ('length', ctypes.c_int),
                       ('prev', ctypes.POINTER(CELL))]

рдХреБрдЫ рдиреЛрдЯ:

  • рд╕рднреА рд╕рдВрд░рдЪрдирд╛рдПрдВ рдРрд╕реА рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ рдЬреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИрдВ ctypes.Structureред
  • рдПрдХрдорд╛рддреНрд░ рдлрд╝реАрд▓реНрдб _fields_рдЯреНрдпреВрдкрд▓реНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЯрдкрд▓ рд╣реИ ( <variable-name>, <ctypes.TYPE>)ред
  • рд╡рд╣рд╛рдБ ctypesрдореЗрдВ рдЗрд╕реА рддрд░рд╣ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ c_char (рдЪрд╛рд░) рдФрд░ c_char_p (* рдЪрд╛рд░) ред
  • рдПрдХ рдРрд╕рд╛ ctypesрднреА рд╣реИ POINTER()рдЬреЛ рдЗрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕реВрдЪрдХ рдмрдирд╛рддрд╛ рд╣реИред
  • рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ CELL, рддреЛ рдЖрдкрдХреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдШреЛрд╖рдгрд╛ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдлрд┐рд░ _fields_рдмрд╛рдж рдореЗрдВ рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ ред
  • рдЪреВрдВрдХрд┐ рдореИрдВрдиреЗ CELLрдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдкрд╛рдпрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ , рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдереА, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдВрдкрддреНрддрд┐ рд╣реИред

C рдореЗрдВ рдЕрдкрдирд╛ рдХреЛрдб рдХреЙрд▓ рдХрд░реЗрдВ


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рд╕реА рдореЗрдВ рдирдП рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЕрдм рдЖрдк рдкрд╛рдпрдерди рдХреЛрдб рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдирдП рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

def list_to_SEQUENCE(strlist: List[str]) -> SEQUENCE:
          bytelist = [bytes(s, 'utf-8') for s in strlist]
          arr = (ctypes.c_char_p * len(bytelist))()
          arr[:] = bytelist
          return SEQUENCE(arr, len(bytelist))
      
      
      def lcs(s1: List[str], s2: List[str]) -> List[str]:
          seq1 = list_to_SEQUENCE(s1)
          seq2 = list_to_SEQUENCE(s2)
      
          # struct Sequence *lcs(struct Sequence *s1, struct Sequence *s2)
          common = lcsmodule.lcs(ctypes.byref(seq1), ctypes.byref(seq2))[0]
      
          ret = []
      
          for i in range(common.length):
              ret.append(common.items[i].decode('utf-8'))
          lcsmodule.freeSequence(common)
      
          return ret
      
      lcsmodule = ctypes.cdll.LoadLibrary('lcsmodule/lcs.so')
      lcsmodule.lcs.restype = ctypes.POINTER(SEQUENCE)
      
      list1 = ['My', 'name', 'is', 'Sam', 'Stevens', '!']
      list2 = ['My', 'name', 'is', 'Alex', 'Stevens', '.']
      
      common = lcs(list1, list2)
      
      print(common)
      # ['My', 'name', 'is', 'Stevens']

рдХреБрдЫ рдиреЛрдЯ:

  • **char (рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рд╕реВрдЪреА) рдкрд╛рдпрдерди рдореЗрдВ рдмрд╛рдЗрдЯреНрд╕ рдХреА рд╕реВрдЪреА рд╕реЗ рд╕реАрдзреЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред
  • рд╡рд╣рд╛рдБ lcs.cрдПрдХ рд╕рдорд╛рд░реЛрд╣ рд╣реИ lcs()рд╣рд╕реНрддрд╛рдХреНрд╖рд░ struct рдЕрдиреБрдХреНрд░рдо рдХреЗ рд╕рд╛рде * LCS (struct рдЕрдиреБрдХреНрд░рдо * рдПрд╕ 1, struct рдЕрдиреБрдХреНрд░рдо * s2) ред рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ lcsmodule.lcs.restype = ctypes.POINTER(SEQUENCE)ред
  • рдЕрдиреБрдХреНрд░рдо рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП , рдореИрдВ ctypes.byref()рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдЖрдкрдХреА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП "рдкреНрд░рдХрд╛рд╢ рд╕реВрдЪрдХ" рд▓реМрдЯрд╛рддрд╛ рд╣реИ (рддреБрд▓рдирд╛ рдореЗрдВ рддреЗрдЬреА рд╕реЗ ctypes.POINTER())ред
  • common.items- рдпрд╣ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ, рдЙрдиреНрд╣реЗрдВ рд╕реВрдЪреА рдХреЗ retрд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ strред
  • lcsmodule.freeSequence (рдЖрдо) рдмрд╕ рдЖрдо рд╕реЗ рдЬреБрдбрд╝реА рдореЗрдореЛрд░реА рдХреЛ рдореБрдХреНрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╛рд╣рдХ (AFAIK) рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдПрдХрддреНрд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рдЕрдиреБрдХреВрд▓рд┐рдд рдкрд╛рдпрдерди рдХреЛрдб рд╡рд╣ рдХреЛрдб рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ C рдореЗрдВ рд▓рд┐рдЦрд╛ рд╣реИ рдФрд░ рдкрд╛рдпрдерди рдореЗрдВ рд▓рд┐рдкрдЯрд╛ рд╣реИред

рдХреБрдЫ рдФрд░: PyPy


рдзреНрдпрд╛рди рджреЗрдВ: рдореИрдВрдиреЗ рдЦреБрдж рдХрднреА PyPy рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред
рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЕрдиреБрдХреВрд▓рди рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЖрдкрдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ PyPy рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЪрд▓рд╛рдирд╛ , рдЬрд┐рд╕рдореЗрдВ рдПрдХ JIT рдХрдВрдкрд╛рдЗрд▓рд░ (рд╕рд┐рд░реНрдл-рдЗрди-рдЯрд╛рдЗрдо) рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдЫреЛрд░реЛрдВ рдХреЗ рдХрд╛рдо рдХреЛ рдЧрддрд┐ рджреЗрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдмрд╛рд░-рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдорд╢реАрди рдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдкрдХреА рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рд╣реИ рдпрд╛ рдЖрдк рдЙрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рд▓рд┐рдЦреЗрдВ (samuel.robert.stevens@gmail.com)ред

рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд░рд╛рд╣ рдкрд░ !

All Articles