рдкрд╛рдпрдерди рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд░ рд╢реНрд░реГрдВрдЦрд▓рд╛ тЖТ 11l тЖТ C ++ [рдкрд╛рдпрдерди рдХреЛрдб рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ]




рдпрд╣ рдЖрд▓реЗрдЦ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рджреЛ рдЯреНрд░рд╛рдВрд╕рдкреНрд▓рд░реНрд╕ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреА рд╣реИ ( рдирдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ 11 рдПрд▓ рдореЗрдВ рдХреЛрдб рдкрд╣рд▓реЗ рдкрд╛рдпрдерди рдХреЛрдб рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ , рдФрд░ рджреВрд╕рд░рд╛ рдЕрдиреБрд╡рд╛рдж рдХреЛрдб 11 рд╕реА рдореЗрдВ рд╕реА ++), рдФрд░ рдЕрдиреНрдп рддреНрд╡рд░рдг рдЯреВрд▓ / рд╕реЗ рднреА рдЗрд╕ рдкреНрд░рджрд░реНрд╢рди рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ рдкрд╛рдпрдерди рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди (PyPy, Cython, Nuitka)ред

рд╢реНрд░реЗрдгреА рдХреЗ рд╕рд╛рде рд╕реНрд▓рд╛рдЗрд╕ \ рд╕реНрд▓рд╛рдЗрд╕ рдХреА рдЬрдЧрд╣

рдЕрдЬрдЧрд░11L
s[-1] s[-2] s[:-1] s[1:] s[:2] s[1:2] s[::2] s[1::2] s[3:10:2] 
 s.last s[(len)-2] s[0..<(len)-1] s[1..] s[0..<2] s[1..<2] s[(0..).step(2)] s[(1..).step(2)] s[(3..<10).step(2)] 
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ s[-2] рдмрдЬрд╛рдп рд╕рд░рдгреА s[(len)-2] рдХреЗ рдЕрдВрдд рд╕реЗ рдЕрдиреБрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреЗрдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
  1. рдЬрдм, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд┐рдЫрд▓реЗ рдЪрд░рд┐рддреНрд░ рдХреЛ s[i-1] рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд▓реЗрдХрд┐рди i = 0 рдХреЗ рд▓рд┐рдП / рдЬреИрд╕реЗ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрдЬрд╛рдп рдпрд╣ рд░рд┐рдХреЙрд░реНрдб рдЪреБрдкрдЪрд╛рдк рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдЕрдВрддрд┐рдо рдЪрд░рд┐рддреНрд░ рдХреЛ рд▓реМрдЯрд╛ рджреЗрдЧрд╛ [ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдореБрдЭреЗ рдРрд╕реА рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИ ] ред
  2. рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ s[i:] рдмрд╛рдж i = s.find(":") рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬрдм рдЪрд░рд┐рддреНрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ [ рдкрд╣рд▓реЗ рдЕрдХреНрд╖рд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ '' рднрд╛рдЧ рдХреЗ рдмрдЬрд╛рдп : рдФрд░ рдлрд┐рд░ 'рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЕрдВрддрд┐рдо рдЪрд░рд┐рддреНрд░' рд▓рд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ ] (рдФрд░ рдЖрдо рддреМрд░ рдкрд░) , рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди find() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде -1 рд▓реМрдЯрдирд╛ рднреА рдЧрд▓рдд рд╣реИ [ рдЕрд╢рдХреНрдд / рдХреЛрдИ рдирд╣реАрдВ рд▓реМрдЯрдирд╛ рдЪрд╛рд╣рд┐рдП [ рдФрд░ рдпрджрд┐ -1 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: i = s.find(":") ?? -1 ] ] )ред
  3. рдХрд┐рд╕реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдЕрдВрддрд┐рдо n рдЕрдХреНрд╖рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП s[-n:] рд▓рд┐рдЦрдирд╛ n = 0 рдкрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдЪреЗрди


рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдпрд╣ рдкрд╛рдпрдерди рднрд╛рд╖рд╛ рдХреА рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЗрд╕реЗ рдСрдкрд░реЗрдЯрд░ рдФрд░ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ in рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ / рддрд┐рд░рд╕реНрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
a < b < cb in a<..<c
a <= b < cb in a..<c
a < b <= cb in a<..c
0 <= b <= 9b in 0..9

рд╕реВрдЪреА рдХреА рд╕рдордЭ


рдЗрд╕реА рддрд░рд╣, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдЖрдк рдкрд╛рдпрдерди рдХреА рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдордирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╕реВрдЪреА рдХреА рд╕рдордЭред
рдЬрдмрдХрд┐ рдХреБрдЫ рдорд╣рд┐рдорд╛ рд╕реВрдЪреА рд╕рдордЭ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ `рдлрд┐рд▓реНрдЯрд░ ()` рдФрд░ `рдирдХреНрд╢рд╛ ()` рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ , рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рд╣реИ рдХрд┐:
  1. рдЙрди рд╕рднреА рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рдкрд╛рдпрдерди рдХреА рд╕реВрдЪреА рдХреЛ рджреЗрдЦрд╛ рд╣реИ, рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдлрд╝рдВрдХреНрд╢рдВрд╕ `рдлрд╝рд┐рд▓реНрдЯрд░ ()` рдФрд░ `рдореИрдк ()` рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
     dirs[:] = [d for d in dirs if d[0] != '.' and d != exclude_dir] dirs[:] = filter(lambda d: d[0] != '.' and d != exclude_dir, dirs) '[' + ', '.join(python_types_to_11l[ty] for ty in self.type_args) + ']' '[' + ', '.join(map(lambda ty: python_types_to_11l[ty], self.type_args)) + ']' # Nested list comprehension: matrix = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], ] [[row[i] for row in matrix] for i in range(4)] list(map(lambda i: list(map(lambda row: row[i], matrix)), range(4))) 
  2. 11l рдореЗрдВ `рдлрд┐рд▓реНрдЯрд░ ()` рдФрд░ `рдирдХреНрд╢рд╛ ()` рдкрд╛рдпрдерди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕реБрдВрджрд░ рд▓рдЧрддреЗ рд╣реИрдВ
     dirs[:] = filter(lambda d: d[0] != '.' and d != exclude_dir, dirs) dirs = dirs.filter(d -> d[0] != '.' & d != @exclude_dir) '[' + ', '.join(map(lambda ty: python_types_to_11l[ty], self.type_args)) + ']' '['(.type_args.map(ty -> :python_types_to_11l[ty]).join(', '))']' outfile.write("\n".join(x[1] for x in fileslist if x[0])) outfile.write("\n".join(map(lambda x: x[1], filter(lambda x: x[0], fileslist)))) outfile.write(fileslist.filter(x -> x[0]).map(x -> x[1]).join("\n")) 
    рдФрд░ рдлрд▓рд╕реНрд╡рд░реВрдк, 11l рдореЗрдВ рд╕реВрдЪреА рдмреЛрдз рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИ [ filter() рдФрд░ (рдпрд╛ / рдпрд╛ map() filter() рд╕рд╛рде рд╕реВрдЪреА рдмреЛрдз рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ 11l рдореЗрдВ рдкрд╛рдпрдерди рдХреЛрдб рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рджреМрд░рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ] ред

рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ рдЕрдЧрд░-рдПрд▓рд┐рдл-рдФрд░-рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП


рдЬрдмрдХрд┐ рдкрд╛рдпрдерди рдореЗрдВ рдПрдХ рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдирд╣реАрдВ рд╣реИ, рдпрд╣ 11l рдореЗрдВ рд╕рдмрд╕реЗ рд╕реБрдВрджрд░ рдирд┐рд░реНрдорд╛рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕реНрд╡рд┐рдЪ рд╕реНрд╡рд┐рдЪ рдбрд╛рд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛:
рдЕрдЬрдЧрд░11L
 ch = instr[i] if ch == "[": nesting_level += 1 elif ch == "]": nesting_level -= 1 if nesting_level == 0: break elif ch == "'": ending_tags.append(''') # '' elif ch == "'": assert(ending_tags.pop() == ''') 
 switch instr[i] '[' nesting_level++ ']' if --nesting_level == 0 loop.break "'" ending_tags.append("'") // '' "'" assert(ending_tags.pop() == "'") 
рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдЬрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ C ++ рдХреЛрдб рд╣реИ
 switch (instr[i]) { case u'[': nesting_level++; break; case u']': if (--nesting_level == 0) goto break_; break; case u''': ending_tags.append(u"'"_S); break; // '' case u''': assert(ending_tags.pop() == u'''); break; } 


рдЫреЛрдЯреЗ рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЛ рджреЗрд╢реА рдХреЛрдб рдореЗрдВ рдмрджрд▓реЗрдВ


рдкрд╛рдпрдерди рдХреЛрдб рдХреА рдЗрд╕ рдкрдВрдХреНрддрд┐ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
 tag = {'*':'b', '_':'u', '-':'s', '~':'i'}[prev_char()] 
рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХрд╛ рдпрд╣ рд░реВрдк [ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ ] рдмрд╣реБрдд рдкреНрд░рднрд╛рд╡реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

11 рдПрд▓ рдореЗрдВ, рдЗрд╕ рд▓рд╛рдЗрди рдХреЗ рдЕрдиреБрд░реВрдк рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ [ рдФрд░ рдкрд╛рдпрдерди рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд тЖТ 11 рдПрд▓ ] рди рдХреЗрд╡рд▓ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ [ рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд╛рдпрдерди рдореЗрдВ рдЙрддрдирд╛ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ ] , рд▓реЗрдХрд┐рди рдпрд╣ рднреА рддреЗрдЬ рд╣реИ:
 var tag = switch prev_char() {'*' {'b'}; '_' {'u'}; '-' {'s'}; '~' {'i'}} 

рдЙрдкрд░реЛрдХреНрдд рдкрдВрдХреНрддрд┐ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
 auto tag = [&](const auto &a){return a == u'*' ? u'b'_C : a == u'_' ? u'u'_C : a == u'-' ? u's'_C : a == u'~' ? u'i'_C : throw KeyError(a);}(prev_char()); 
[ рд▓рдВрдмреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реБрдП, C ++ рдХрдВрдкрд╛рдЗрд▓рд░ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдЗрдирд▓рд╛рдЗрди рдХреЛ рдПрдХреАрдХреГрдд рдХрд░реЗрдЧрд╛ рдФрд░ рдХреЗрд╡рд▓ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдиреА рд░рд╣реЗрдЧреА ?/: ]

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрдм рдПрдХ рдЪрд░ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╢рдмреНрджрдХреЛрд╖ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
рдЕрдЬрдЧрд░
 rn = {'I': 1, 'V': 5, 'X': 10, 'L': 50, ...} 
11L
 var rn = ['I' = 1, 'V' = 5, 'X' = 10, 'L' = 50, ...] 
рд╕реА ++
 auto rn = create_dict(dict_of(u'I'_C, 1)(u'V'_C, 5)(u'X'_C, 10)(u'L'_C, 50)...); 

рдХреИрдкреНрдЪрд░ \ Ca рдмрд╛рд╣рд░реА рдЪрд░ рдЪрд░


рдкрд╛рдпрдерди рдореЗрдВ, рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдХ рдЪрд░ рд╕реНрдерд╛рдиреАрдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ [ рд╡рд░реНрддрдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ ] рд▓рд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЧреИрд░-рдХреАрд╡рд░реНрдб рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ [ рдЕрдиреНрдпрдерд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, found = True рдирдпрд╛ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдирдпрд╛ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдмрдирд╛рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдпред рдореМрдЬреВрджрд╛ рдмрд╛рд╣рд░реА рдЪрд░ ] ред
11l рдореЗрдВ, рдЗрд╕рдХреЗ рд▓рд┐рдП @ рдЙрдкрд╕рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
рдЕрдЬрдЧрд░11L
 writepos = 0 def write_to_pos(pos, npos): nonlocal writepos outfile.write(...) writepos = npos 
 var writepos = 0 fn write_to_pos(pos, npos) @outfile.write(...) @writepos = npos 
C ++:
 auto writepos = 0; auto write_to_pos = [..., &outfile, &writepos](const auto &pos, const auto &npos) { outfile.write(...); writepos = npos; }; 

рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░


рдмрд╛рд╣рд░реА рдЪрд░ рдХреЗ рд╕рдорд╛рди, рдпрджрд┐ рдЖрдк рдкрд╛рдЗрдерди [ рд╡реИрд╢реНрд╡рд┐рдХ рдЦреЛрдЬрд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП ] рдореЗрдВ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдЕрджреГрд╢реНрдп рд╡рд┐рдХрд▓реНрдк рдорд┐рд▓рддрд╛ рд╣реИ:
 break_label_index = -1 ... def parse(tokens, source_): global source, tokeni, token, scope source = source_ tokeni = -1 token = None break_label_index = -1 scope = Scope(None) ... 
 var break_label_index = -1 ... fn parse(tokens, source_) :source = source_ :tokeni = -1 :token = null break_label_index = -1 :scope = Scope(null) ... 
11 рдПрд▓ рдХреЛрдб [ рджрд╛рдпрд╛рдБ ] , рдкрд╛рдпрдерди [ рдмрд╛рдПрдВ ] рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕рдВрдХрд▓рди break_label_index рдкрд░ 'рдЕрдШреЛрд╖рд┐рдд break_label_index рдЪрд░' рддреНрд░реБрдЯрд┐ break_label_index рдХрд░реЗрдЧрд╛ред

рд╡рд░реНрддрдорд╛рди рдХрдВрдЯреЗрдирд░ рдЖрдЗрдЯрдо рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ / рд╕рдВрдЦреНрдпрд╛


рдореИрдВ рдЪрд░ рдХреЗ рдЖрджреЗрд╢ рдХреЛ рднреВрд▓рддрд╛ рд░рд╣рддрд╛ рд╣реВрдВ рдХрд┐ enumerate рдкрд╛рдпрдерди рдлрд╝рдВрдХреНрд╢рди {{рдореВрд▓реНрдп рдкрд╣рд▓реЗ рдЖрддрд╛ рд╣реИ, рдлрд┐рд░ рдЗрдВрдбреЗрдХреНрд╕, рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд}ред рд░реВрдмреА рдореЗрдВ рдПрдирд╛рд▓реЙрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ - each.with_index - рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ: рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕реВрдЪрдХрд╛рдВрдХ рдореВрд▓реНрдп рдХреЗ рдмрд╛рдж рдЖрддрд╛ рд╣реИ, рдкрд╣рд▓реЗ рдирд╣реАрдВред рд▓реЗрдХрд┐рди 11l рдореЗрдВ, рддрд░реНрдХ рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рдФрд░ рднреА рдЖрд╕рд╛рди рд╣реИ:
рдЕрдЬрдЧрд░11L
 items = ['A', 'B', 'C'] for index, item in enumerate(items): print(str(index) + ' = ' + item) 
 var items = ['A', 'B', 'C'] loop(item) items print(loop.index' = 'item) 

рдЙрддреНрдкрд╛рджрдХрддрд╛


рдкреАрд╕реА рдорд╛рд░реНрдХрдЕрдк рдХреЛ рдПрдЪрдЯреАрдПрдордПрд▓ рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдкреАрд╕реА рдорд╛рд░реНрдХрдЕрдк рдкрд░ рд▓реЗрдЦ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрд░реЛрдд рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ [ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд▓реЗрдЦ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреАрд╕реА рдорд╛рд░реНрдХрдЕрдк рдкрд░ рд▓рд┐рдЦреЗ рдЧрдП рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рд╣реИ ] , рдФрд░ рдЗрд╕реЗ 10 рдмрд╛рд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд 48.8 рдХрд┐рд▓реЛрдмрд╛рдЗрдЯ рдЖрд▓реЗрдЦ рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ 488Kb рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдпрд╣рд╛рдБ рдПрдХ рдЖрд░реЗрдЦ рджрд┐рдЦрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдкрд╛рдпрдерди рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдВрдмрдВрдзрд┐рдд рддрд░реАрдХрд╛ рдореВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд┐рддрдирд╛ рддреЗрдЬрд╝ рд╣реИ [ CPython ] :

рдФрд░ рдЕрдм Python тЖТ 11l тЖТ C ++ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд░ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдЖрд░реЗрдЦ рдХреЛ рдЖрд░реЗрдЦ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

рд░рдирдЯрд╛рдЗрдо [ 488Kb рдлрд╝рд╛рдЗрд▓ рд░реВрдкрд╛рдВрддрд░рдг рд╕рдордп ] CP68 рдХреЗ рд▓рд┐рдП 868 рдПрдордПрд╕ рдФрд░ рдЙрддреНрдкрдиреНрди рд╕реА ++ рдХреЛрдб рдХреЗ рд▓рд┐рдП 38 рдПрдордПрд╕ рдерд╛ [ рдЗрд╕ рд╕рдордп рдореЗрдВ рдкреВрд░реНрдг-рднрд╛рдЧ рд╢рд╛рдорд┐рд▓ рд╣реИ [ рдЕрд░реНрдерд╛рдд рди рдХреЗрд╡рд▓ рд░реИрдо рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ ] рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓рд╛рдирд╛ рдФрд░ рд╕рднреА рдЗрдирдкреБрдЯ / рдЖрдЙрдЯрдкреБрдЯ [ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ [ .pq ] рдкрдврд╝рдирд╛ рдФрд░ рдирдИ рдлрд╝рд╛рдЗрд▓ [ .html ] рдХреЛ рдбрд┐рд╕реНрдХ рдкрд░ рд╕рд╣реЗрдЬрдирд╛ ] ред

рдореИрдВ рд╢реЗрдб рд╕реНрдХрд┐рди рдХреЛ рднреА рдЖрдЬрдорд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрдерд╛рдиреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
Numba рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ (рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ 'рдЕрдЬреНрдЮрд╛рдд opcode рдХрд╛ рдЙрдкрдпреЛрдЧ LOAD_BUILD_CLASS' рдлреЗрдВрдХрддрд╛ рд╣реИ)ред
рдпрд╣рд╛рдВ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣ рд╣реИ [ рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд ] (рдЕрдЬрдЧрд░ 3.6 рдпрд╛ рдЙрдЪреНрдЪрддрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд╛рдпрдерди рдкреИрдХреЗрдЬ: pywin32, рд╕рд╛рдЗрдерди)ред

рдкрд╛рдпрдерди рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдФрд░ рдкрд╛рдпрдерди рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓рд░реНрд╕ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ -> 11l рдФрд░ 11l -> C ++:
рдЕрдЬрдЧрд░11 рдПрд▓ рдЙрддреНрдкрдиреНрди
(рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рдмрдЬрд╛рдп рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде)
11L
(рдкрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде)
рдЙрддреНрдкрдиреНрди рд╕реА ++

Source: https://habr.com/ru/post/hi431318/


All Articles