
рдпрд╣ рд▓рдШреБ рд▓реЗрдЦ рдПрдХ рд▓реЗрдЦ рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдкрд┐рдЫрд▓реА рдмрд╛рд░, рдореИрдВрдиреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╕рд░рд▓ рдХрд┐рд░рдг рдЕрдиреБрд░реЗрдЦрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рд▓реБрдЖрдЬрд┐рдЯ 2.0 рдмреАрдЯрд╛ 5 рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рддреБрд▓рдирд╛ рдХреАред рддреБрд▓рдирд╛ рдкрд░рд┐рдгрд╛рдо: рдХреНрд░реЛрдо рдореЗрдВ рдХреНрд░реЛрдо рдиреЗ 20,000 RPS рд╕реНрдХреЛрд░ рдХрд┐рдпрд╛ рдФрд░ рдкреНрд░рдердо рд╕реНрдерд╛рди рд▓рд┐рдпрд╛, рдФрд░ LJJIT - 5,000 RPS рдФрд░ рдЕрдВрддрд┐рдо рд╕реНрдерд╛рдиред
LuaJIT 2.0 рдмреАрдЯрд╛ 6 рдХреА рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд╕рд╛рде, рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рдЧрдИ рд╣реИ: Lua рдХреНрд░реЛрдо рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрд╛рд╣рд░ рдЖ рдЧрдпрд╛ред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдирд┐рдХрд▓рд╛ред
рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдмрдбрд╝рд╛ рд╕рд░рдгреА рд╣реИ рдЬрд┐рд╕реЗ рд╕рдВрдЦреНрдпрд╛рдУрдВ рд╕реЗ рднрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдк рдпрд╣ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ? рдпрд╣рд╛рдБ Lua рдкрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ:
a = {} for i = 1, n do a[i] = i*i - 0.5 end
рдмрдбрд╝реЗ рдПрди рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмрд╣реБрдд рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рд▓реВрдЖ рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдХрд┐ рд╕рд░рдгреА рдХрд┐рд╕ рдЖрдХрд╛рд░ рдХреА рд╣реЛрдЧреА рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕ рд╕рд░рдгреА рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реБрдЖ рдХреЛ рдпрд╣ рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рд░рдгреА рдХреЗ рд╕реВрдЪрдХ 1. рд░реЗрдВрдЬ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдПрдБ рд╣реИрдВред рдФрд░ рдорд╛рди рдкреВрд░реНрдгрд╛рдВрдХ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрд╕реЗ рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ рдЬрдм рд╡реЗ рдПрдХ рдмрд╛рд░ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
a['qqq'] = {red = 1, green = 0.5, blue = 0.8}
рдпрд╣ рдмрд╣реБрдореБрдЦреА рдкреНрд░рддрд┐рднрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдзреАрдорд╛ рдХрд░ рджреЗрддреА рд╣реИред рдореИрдВ рдХрд┐рд╕реА рддрд░рд╣ рд▓реБрдЖ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдлрд╝реЙрд░реНрдо рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ "рдбрдмрд▓ рдП [рдПрди]"ред рдЖрдк рдЗрд╕реЗ рдорд╛рдирдХ Lua рдЯреВрд▓ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк Lua рдореЗрдВ рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ - рдпрд╣ рднрд╛рд╖рд╛ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ - рдФрд░ рдЖрдкрдХреЛ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рд╡рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рдПрдлрдПрдлрдЖрдИ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╕рд░рдгреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
ffi = require'ffi' a = ffi.new('double[?]', 1 + n) for i = 1, n do a[i] = i*i end
рдпрд╣ рд╕рд░рд▓ рдХреЛрдб рдкрд░рд┐рд╡рд░реНрддрди рдЧрддрд┐ рдХреЛ рдХрдИ рдЧреБрдирд╛ рдмрдврд╝рд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рд╕реНрдореГрддрд┐ рдХреЛ рдХрд╛рдлреА рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИред рдмрд╕ рдПрдХ рдХрд┐рд░рдг рдЕрдиреБрд░реЗрдЦрдХ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдПред
рдкрд┐рдЫрд▓реА рдХрд┐рд░рдг рдЕрдиреБрд░реЗрдЦрдХ рдореЗрдВ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдлреВрд▓ рд╣реЛрддреЗ рд╣реИрдВ - рддреАрди рдХреНрд╖реЗрддреНрд░реЛрдВ рд╡рд╛рд▓реА рдЫреЛрдЯреА рдореЗрдЬреЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдХрд┐рд░рдг рд▓реЙрдиреНрдЪ рдХреА рдЧрдИ рдереА, рдЗрд╕рдХреЗ рд░рдВрдЧ рдХреА рдЧрдгрдирд╛ рдХреА рдЧрдИ рдереА, рдФрд░ рдпрд╣ рд░рдВрдЧ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЧрд┐рд░ рдЧрдпрд╛ред рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджреЗрдЦрд╛ рдЧрдпрд╛:
pixels = {} for x = 1, width do for y = 1, height do local color = raytrace(x, y) pixels[y*width + x] = color end end
рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди, рдпрд╣ рдкрд┐рдХреНрд╕реЗрд▓ рддрд╛рд▓рд┐рдХрд╛ рдмрдврд╝реА, рдПрдХ рдирдпрд╛ рддрддреНрд╡ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдордп рднреА рдмрдврд╝ рдЧрдпрд╛, рдФрд░ рдХрд┐рд░рдг рдЯреНрд░реЗрд╕рд░ рдХреА рдЧрддрд┐ рдЧрд┐рд░ рдЧрдИред рдкрд░рд┐рдгрд╛рдо 5,000 рдЖрд░рдкреАрдПрд╕ (рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдХрд┐рд░рдгреЗрдВ) рдФрд░ рдЕрдВрддрд┐рдо рд╕реНрдерд╛рди рд╣реИред
рдПрдлрдПрдлрдЖрдИ рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, рдПрдХ рд╕рд╛рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛, рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рд╕реНрдореГрддрд┐ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛ред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЗрд╕ рддрд░рд╣ рдмрди рдЧрдпрд╛ рд╣реИ:
ffi = require'ffi' pixels = ffi.new('float[?]', width*height*3) i = 0 for y = 1, height do for x = 1, width do local color = raytrace(x, y) pixels[i + 0] = color[1] pixels[i + 1] = color[2] pixels[i + 2] = color[3] i = i + 3 end end
рдХреЛрдб рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдереЛрдбрд╝рд╛ рд▓рдВрдмрд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдХреЛрдб рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреАрдПрдордкреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рд░рдгреА рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рдЖрд╕рд╛рди рд╣реИред рдпрд╣ рд╕рд░рд▓ рдЕрдиреБрдХреВрд▓рди рддреАрди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
- рд╕реНрдореГрддрд┐ рдХреА рдорд╛рддреНрд░рд╛ 25 рдореЗрдЧрд╛рдмрд╛рдЗрдЯ рддрдХ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдирд╣реАрдВ рдмрдврд╝рддреА рд╣реИред
- рдХрд┐рд░рдг рдЕрдиреБрд░реЗрдЦрдХ рдХреА рдЧрддрд┐ рдкрд░рд┐рдгрд╛рдореА рдЫрд╡рд┐ рдХреЗ рдЖрдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддреА рд╣реИред
- рдЧрддрд┐ рдмрдврд╝рдХрд░ 40,000 рдЖрд░рдкреАрдПрд╕ рд╣реЛ рдЬрд╛рддреА рд╣реИ
рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП: рдкрд┐рдЫрд▓реА рддреБрд▓рдирд╛ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдкрд░рд┐рдгрд╛рдо - рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ + рдХреНрд░реЛрдо - рдиреЗ 20,000 рдЖрд░рдкреАрдПрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдФрд░ 150 рдПрдордмреА рдореЗрдореЛрд░реА рдЦрд░реНрдЪ рдХреАред
рдиреАрдЪреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдкрд┐рдЫрд▓реА рддреБрд▓рдирд╛ рд╕реЗ рд▓рд┐рдП рдЧрдП рд╣реИрдВред рд░реЗрдПрдЯреНрд░реЗрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдиреЗ рдПрдХ рд╣реА рджреГрд╢реНрдп рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ 3 рдмреАрдо рдкрд╛рд╕ рдХрд░рдХреЗ 1000 ├Ч 1000 рдкрд┐рдХреНрд╕рд▓ рдХреА рд╕реНрдХреНрд░реАрди рдкрд░ рднреЗрдЬрд╛ред
LuaJIT | 40,000 рдЖрд░рдкреАрдПрд╕ | 25 рдПрдордмреА |
рдХреНрд░реЛрдо | 20,400 рдЖрд░рдкреАрдПрд╕ | 150 рдПрдордмреА |
рдУрдкреЗрд░рд╛ | 15,700 рдЖрд░рдкреАрдПрд╕ | |
рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ | 9,300 рдЖрд░рдкреАрдПрд╕ | |
рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ | 9,000 рдЖрд░рдкреАрдПрд╕ | |
рдпрд╣ рдХрд╣рдирд╛ рдмрд╛рдХреА рд╣реИ рдХрд┐ рд▓реБрдЖ рд░рд╛рд╕реНрдЯрд░ рдЯреНрд░реЗрд╕рд░ рдореИрдВрдиреЗ рд╕реАрдзрд╛ рд▓рд┐рдЦрд╛ рдФрд░ рд╡реИрдХреНрдЯрд░ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рде (рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдЧреБрдгрд╛) рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд╡реЗрдХреНрдЯрд░ рдмрдирд╛рддрд╛ рд╣реИред рд▓рдЧрд╛рддрд╛рд░ рдмрдирд╛рдП рдЧрдП рд╡реИрдХреНрдЯрд░ рдХрд╛ рдпрд╣ рдЭреБрдВрдб рдХрдЪрд░рд╛ рдмреАрдирдиреЗ рд╡рд╛рд▓реЗ рдХрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЕрддрд┐рд░рд┐рдХреНрдд рд╡реИрдХреНрдЯрд░ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдХрд┐рд░рдг рдЯреНрд░реЗрд╕рд░ рдХреА рдЧрддрд┐ рдФрд░ рдмрдврд╝ рдЬрд╛рдПрдЧреАред
рд░реЗ рдЯреНрд░реЗрд╕рд░ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВрдиреЗ рдЭреВрда рдмреЛрд▓рд╛
рдерд╛ ред "Luajit main.lua" рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВред рд▓реНрдпреВрдЬрд┐рдЯ рд╕рдВрд╕реНрдХрд░рдг рдХрдо рд╕реЗ рдХрдо 2.0 рдмреАрдЯрд╛ 6 рд╣реИред