Design: рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдФрд░ рдПрдВрдбрд┐рдпрдиреНрд╕

рдХреЛ рдирд┐рд░реНрдорд┐рдд 3 рд╕рд┐рддре░ 2016  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: WebAssembly/design

рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд╣рддреА рд╣реИ рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдЗрдЯ рдСрд░реНрдбрд░ i32.load рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓ рдЯреЗрдмрд▓, рд╕реНрдерд┐рд░ рдбреЗрдЯрд╛ рдЖрджрд┐ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдЕрдиреБрднрд╛рдЧ рд╣реЛрддрд╛ рд╣реИред рдЗрди рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдорддреМрд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдореВрд▓реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, WebAssembly рдЕрдкрдиреЗ data рдЦрдВрдб рдореЗрдВ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдЕрдиреБрдХреНрд░рдореЛрдВ рддрдХ рд╕реАрдорд┐рдд рд╣реИред рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХреЛрдИ int32 рдХрд╛ рдЕрдиреБрдХрд░рдг рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдПрдВрдбрд┐рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВред

рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ WebAssebmly рдореЗрдВ LLVM рдХреЗ рд╕рдорд╛рди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рд╛рд░рдВрднрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рд╣реЛред рдпрд╣ рди рдХреЗрд╡рд▓ рд╕реНрдереИрддрд┐рдХ рдбреЗрдЯрд╛ рдХреЗ рдПрдВрдбрд┐рдпрди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рднреА рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдЯрд╛ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рдЬреЛ рд╕рдВрднрд╡рддрдГ LEB128 рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдореЗрдВ рдХрдо рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬрдмрдХрд┐ рдбреЗрдЯрд╛ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рд╡реЗ рд╣рдореЗрд╢рд╛ 4 рдмрд╛рдЗрдЯреНрд╕ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рд╡рд░реНрддрдорд╛рди рдЙрдкрд╛рдп рд╣реИрдВ:

  • рдбреЗрдЯрд╛ рдЕрдиреБрднрд╛рдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдмрдбрд╝реЗ рдкреНрд░рд╛рд░рдВрднрдХрд░реНрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
  • рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░реЗрдВ, рдбрд┐рдХреЛрдбрд░ рдХреЛ WebAssembly рдмрд╛рдЗрдирд░реА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ, рдЗрд╕реЗ start рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдЪрд▓рд╛рдПрдВ

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

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

рд╕рднреА 6 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

WebAssembly рдереЛрдбрд╝рд╛-рд╕рд╛ рдПрдВрдбрд┐рдпрди рд╣реИред рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ AstSemantics.md рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ; рдореИрдВрдиреЗ рдЕрдм рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП https://github.com/WebAssembly/design/pull/787 рджрд╛рдпрд░ рдХрд┐рдпрд╛ рд╣реИред

рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдпрд╣рд╛рдБ рдФрд░ рдпрд╣рд╛рдБ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣рд╛рдБ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

рдбреЗрдЯрд╛ рд╕реЗрдХреНрд╢рди рдореЗрдВ LEB128-рдПрдиреНрдХреЛрдбреЗрдб рдбреЗрдЯрд╛ рд░рдЦрдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдЗрд╕реЗ рдХрдИ рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рддреЛ рдПрдХ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рд╕рд╛рде, рдпрд╛ рдкрд░рдд 1 рд╕рдВрдкреАрдбрд╝рди рдХреЗ рд╕рд╛рде ред рдкрд░рдд 2 рд╕рдВрдкреАрдбрд╝рди рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдмрдбрд╝реЗ рдбреЗрдЯрд╛ рд╕реЗрдЧрдореЗрдВрдЯ рдореЗрдВ рднреА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рджред рдмрд╣реБрдд рдордЬрдмреВрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ? рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рд╕реАрдкреАрдпреВ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдмрдбрд╝реЗ-рдПрдВрдбрд┐рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдХреЛрдИ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ WebAssembly рдЗрд╕ рд╕реАрдкреАрдпреВ рдкрд░ рдХреБрдЫ рдУрд╡рд░рд╣реЗрдб рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ред

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

рд╢рдирд┐рд╡рд╛рд░, 3 рд╕рд┐рддрдВрдмрд░, 2016 рдХреЛ рд╢рд╛рдо 4:07 рдмрдЬреЗ, рдПрд▓реЗрдХреНрд╕реА рдПрдВрдбреНрд░реАрд╡ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдЖрдкрдХреЛ рдзрдиреНрдпрд╡рд╛рджред рдмрд╣реБрдд рдордЬрдмреВрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ? рдХреЛрдИ CPU рдирд╣реАрдВ рд╣реИ I
рдкрддрд╛ рд╣реИ рдХрд┐ рдмрдбрд╝реЗ-рдПрдВрдбрд┐рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдХреЛрдИ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдмрди рдЬрд╛рддрд╛ рд╣реИ
рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, WebAssembly рдЗрд╕ CPU рдкрд░ рдХреБрдЫ рдУрд╡рд░рд╣реЗрдб рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛ред

MIPS рдФрд░ SPARC CPU рдмрдбрд╝реЗ-рдПрдВрдбрд┐рдпрди рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ SPARC рдореЗрдВ рдереЛрдбрд╝рд╛-рдПрдВрдбрд┐рдпрди рд╣реИ
рд▓реЛрдб/рд╕реНрдЯреЛрд░ рдХрд╛рдлреА рд╕рдордп рд╕реЗ рд╣реИ, рдФрд░ рдПрдордЖрдИрдкреАрдПрд╕ рдХреЗ рдЫреЛрдЯреЗ-рдЫреЛрдЯреЗ рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВред

рд╣рдордиреЗ рд╕реНрдкрд╖реНрдЯ рдПрдВрдбрд┐рдпрдирдиреЗрд╕-рд╕реНрд╡реИрдкрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ V8 рдореЗрдВ рдмрдбрд╝реЗ-рдПрдВрдбрд┐рдпрди рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ
рдХреЛрдб рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдУрд╡рд░рд╣реЗрдбреНрд╕ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рдирд╣реАрдВ рдорд╛рдкрд╛ рд╣реИред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЗрд╕ рдереНрд░реЗрдб рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реА рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/WebAssembly/design/issues/786#issuecomment -244548450,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ALnq1EEkfh88rAXYByuL9uNcjbsjVnFbks5qmX8agaJpZM4J0Snh
.

рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ WebAssebmly рдореЗрдВ LLVM рдХреЗ рд╕рдорд╛рди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рд╛рд░рдВрднрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рд╣реЛред

рдпрд╣ WebAssembly рдореЗрдВ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣ C рдФрд░ C++ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: main() рдХреЛ _start рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ .init_array рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣рд╛рдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реИред

рдПрдВрдбрд┐рдпрдирдиреЗрд╕ рдкрд░ @sunfishcode / @titzer рд╕реЗ рд╕рд╣рдорддред

рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

artem-v-shamsutdinov picture artem-v-shamsutdinov  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

arunetm picture arunetm  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

void4 picture void4  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dpw picture dpw  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

frehberg picture frehberg  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ