Go: рд╕рднреА: WebAssembly ("wasm") рд╕рдорд░реНрдерди

рдХреЛ рдирд┐рд░реНрдорд┐рдд 2 рдлрд╝рд░ре░ 2017  ┬╖  147рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: golang/go

WebAssembly ("wasm") рдореВрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред

http://webassembly.org/

рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдмрд╛рд░ рдкреВрдЫрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреНрд░реИрдХрд┐рдВрдЧ рдмрдЧ рд╣реИред

рдЪрд╛рд╣реЗ рд╣рдо рдЗрд╕реЗ cmd/compile, gccgo, рдпрд╛ llvm-go рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рд╣рдо рдпрд╣рд╛рдВ рдЕрдкрдбреЗрдЯ рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

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

рдпрд╣рд╛рдВ рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреА рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИрдВ:

  • рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдФрд░ Node.js рдореЗрдВ рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП wasm рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдирд╛
  • рдмреБрдирд┐рдпрд╛рджреА рд╕рдВрдЪрд╛рд▓рди, рд░реВрдкрд╛рдВрддрд░рдг, рдЖрджрд┐ред
  • рдЗрдВрдЯрд░рдлреЗрд╕
  • рдЧреЛрд░реЛрдЗрди рдФрд░ рдЪреИрдирд▓
  • рд╕реНрдердЧрд┐рдд/рдЖрддрдВрдХ/рдмрдЪрд╛рд╡
  • Node.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдлрд╝рд╛рдЗрд▓реЗрдВ рдкрдврд╝рдирд╛ рдбрд┐рд╕реНрдХ рдмрдирд╛рддрд╛ рд╣реИ
  • рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛ рд░рд╣реЗ рд╣реИрдВ: bytes, container/heap, container/list, container/ring, encoding/ascii85, encoding/asn1, encoding/base32, encoding/binary, encoding/csv, encoding/hex, errors, flag, hash/adler32, hash/crc32, hash/crc64, hash/fnv, html, image, image/color, index/suffixarray, math, math/bits, path, sort, strconv, strings, text/scanner, text/tabwriter, unicode, unicode/utf8, unicode/utf16

рдХреБрдЫ рдЪреАрдЬреЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрднреА рднреА рдХрд╛рдо рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ:

  • рдкреНрд░рддрд┐рдмрд┐рдВрдм
  • рдЧреЛрд░рдЖрдЙрдЯреНрд╕ рдХреЗ рдвреЗрд░ рдХреЛ рдмрдврд╝рд╛рдирд╛
  • рдХрдЪрд░рд╛ рдЗрдХрдард╛ рдХрд░рдирд╛
  • рдкреНрд░рджрд░реНрд╢рди рдЕрдиреБрдХреВрд▓рди
  • wasm рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ рдЕрдиреБрдХреВрд▓рди
  • рдПрдХ рдЕрдЪреНрдЫреА рдЬреЗрдПрд╕ рдЗрдВрдЯрд░рдСрдк рдкрд░рдд
  • рдЕрдзрд┐рдХ рдкреИрдХреЗрдЬ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрдиреНрдп рдореБрджреНрджреЗ

рдореИрдВ рдбреЗрдврд╝ рдорд╣реАрдиреЗ рдореЗрдВ рдФрд░ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдЦрд╛рд▓реА рд╕рдордп рдореЗрдВ рдкреНрд░рдЧрддрд┐ рд╕реЗ рдмрд╣реБрдд рдЦреБрд╢ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрдЪреНрдЫрд╛ рдореМрдХрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдЧреЛ 1.11 рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдВред рдЬрдирд╡рд░реА рдореЗрдВ рдореЗрд░реЗ рдЕрдЧрд▓реЗ рдЕрдкрдбреЗрдЯ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЫреБрдЯреНрдЯреА рдкрд░ рд░рд╣реВрдВрдЧрд╛ рдФрд░ рдлрд┐рд░ рдЫреБрдЯреНрдЯрд┐рдпрд╛рдВ рд╣реИрдВред

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

@cherrymui рдФрд░ рдореИрдВрдиреЗ рд▓рдВрдмрд╛рдИ рдореЗрдВ рдПрдХ wasm GC рдкреЛрд░реНрдЯ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА
рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рджрд┐рди:

рд╣рдорд╛рд░рд╛ рд╡рд░реНрддрдорд╛рди рдирд┐рд╖реНрдХрд░реНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдЧрд░ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ
рд╡рд░реНрддрдорд╛рди рдореЗрдВ setjmp/longjmp рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рд╣реИ
рдПрдХ рдЬреАрд╕реА рдкреЛрд░реНрдЯ рдХреАред рд╣рдореЗрдВ рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдЯреИрдХ рдЕрдирдЗрдВрдбрд┐рдВрдЧ рди рд╣реЛ рдЬрд╛рдП рдФрд░
рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╕рдорд░реНрдердиред

рдЕрдиреНрдп рд╕рднреА рдкрд╣рд▓реВ рдареАрдХ рд▓рдЧ рд░рд╣реЗ рдереЗ, рдФрд░ рд╣рдордиреЗ wasm . рдХреЗ рддрд╣рдд рдПрдХ рдЧреЛ рдПрдмреАрдЖрдИ рднреА рдбрд┐рдЬрд╛рдЗрди рдХрд┐рдпрд╛ рдерд╛
(рд╡рд╕рдо рд╕реНрдЯреИрдХ рдкрд░ рдЬреА рдФрд░ рдПрд╕рдкреА рдкрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдПрдореБрд▓реЗрдЯреЗрдб рдЧреЛ рд╕реНрдЯреИрдХ рдкрд░ рдмрд╛рдХреА рд╕рдм рдХреБрдЫ) рдФрд░
MIPS рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдХреЗ wasm рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди MIPS рдмреИрдХрдПрдВрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛
wasm рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рддрд╛ рд╣реИред

рд╢рд╛рдпрдж рдЧреЛрдлрд░рдЬреЗрдПрд╕ рдЖрд╕рд╛рдиреА рд╕реЗ wasm рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдЧреЛрдлрд░рдЬ/рдЧреЛрдлрд░рдЬреНрд╕#432 рд╕реЗ:

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдРрд╕реА рддрдХрдиреАрдХ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ GopherJS рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЧреЛрдлрд░рдЬреЗрдПрд╕ рдПрдПрд╕рдЯреА рд╕реНрддрд░ рдкрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдорд╢реАрди рдХреЛрдб рд╕реНрддрд░ рдкрд░ рдирд╣реАрдВред

WebAssembly рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдЧреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рдмреИрдХрдПрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

@minux рдереНрд░реЗрдбреНрд╕ рдпрд╛ async i/o рдХреА рдХрдореА ABI рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ рдЬреЛ рд╣рдореЗрдВ wasm quirks рдХреЗ рдХрд╛рд░рдг рдХрд░рдиреА рд╣реЛрдЧреАред

@рдорд┐рдирдХреНрд╕ , @рдЪреЗрд░реАрдореБрдИ
рдХреНрдпрд╛ рдЖрдк рдХрд╣реАрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдкреЛрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдФрд░ рдХреНрдпрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛?
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЧреЛ-рджреБрднрд╛рд╖рд┐рдпрд╛ рд╕рдореБрджрд╛рдп рдПрд▓рдПрд▓рд╡реАрдПрдо рдпрд╛ рд╡рд╛рд╕реНрдо рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рджреБрднрд╛рд╖рд┐рдпрд╛ рд▓рд┐рдЦрдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред
(рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЬреАрдПрд╕рдУрд╕реА рдЫрд╛рддреНрд░ рднреА рд╡рд╛рд╕рдо рдмрд╛рдЗрдЯрдХреЛрдб рджреБрднрд╛рд╖рд┐рдпрд╛ [1] рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдХреЗрд╡рд▓ "рдмрд╛рдЗрдЯрдХреЛрдб рдЦрдкрдд" рднрд╛рдЧ, "рдХреБрдЫ рдЧреЛ-рдЖрдзрд╛рд░рд┐рдд рдЯреВрд▓рдЪреЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рдЗрдЯрдХреЛрдб рдЙрддреНрдкрд╛рджрди" рдирд╣реАрдВ)

рд╡рд┐рднрд┐рдиреНрди рдШрдЯрдХреЛрдВ рдХреЗ рдмреАрдЪ рджреЛрд╣рд░рд╛рдП рдЧрдП рдкреНрд░рдпрд╛рд╕реЛрдВ рдФрд░ рдкреНрд░рддрд┐рдмрд╛рдзрд╛ рдмреЗрдореЗрд▓ рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рдХрдо рдХрд░рдирд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

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

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

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреА MeToo рдкреНрд░рдХреГрддрд┐ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ :) рд╕реВрдЪрдХ рдмреНрд░реИрдб рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдЕрдиреБрд╕реНрдорд╛рд░рдХ: https://golang.org/wiki/NoMeToo

WebAssembly рд╕реНрдЯреИрдХ рдорд╢реАрди рд╕рдВрджрд░реНрдн рдореЗрдВ рд░реИрдЦрд┐рдХ рдореЗрдореЛрд░реА рдФрд░ рдПрдХ рдСрдкрд░реЗрд╢рди рд╕реНрдЯреИрдХ рд╣реЛрддрд╛ рд╣реИред IIUC, VM рд╕рдВрджрд░реНрдн рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рд╕рдВрднрд╡рддрдГ рдирд┐рдореНрди рдХреЛ рд╕рд╣реЗрдЬ рдХрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  1. рд╡рд░реНрддрдорд╛рди рдкреАрд╕реА, рдмрд╛рдЗрдЯрдХреЛрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ
  2. рд░реИрдЦрд┐рдХ рд╕реНрдореГрддрд┐, рдФрд░
  3. рдСрдкрд░реЗрд╢рди рд╕реНрдЯреИрдХ

VM рд╕рдВрджрд░реНрдн рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╕рд╣реЗрдЬреЗ рдЧрдП рд╕рдВрджрд░реНрднреЛрдВ рдХреА рд╡реИрд╢реНрд╡рд┐рдХ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХреЛрдИ рд╣реЛред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рд╕реЗрдЯрдЬрдВрдк рдХреЛ рдмрд╕ рдЗрди рдорд╛рдиреЛрдВ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рджреБрднрд╛рд╖рд┐рдпрд╛ рд▓реВрдк рдХреЗ рд╕рд╛рде рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╣ рд╕рдорд╛рди рд╣реИ рдХрд┐ рдХреИрд╕реЗ emacs bytecode VM рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ: https://github.com/emacs-mirror/emacs/blob/master/src /bytecode.c#L785)ред рдЗрд╕рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдкреНрд░рдгрд╛рд▓реА рд▓рд╛рдЧреВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рддрдирд╛ рдкреНрд░рджрд░реНрд╢рдирдХрд╛рд░реА рд╣реЛрдЧрд╛ред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, webassembly рдпреБрдХреНрддрд┐ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдмрд╛рдЗрдЯрдХреЛрдб рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕рдордп рд╕реНрдЯреИрдХ рдХреА рдКрдВрдЪрд╛рдИ рдХреЛ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЬрд┐рд╕рд╕реЗ рд╕рднреА рд╕реНрдЯреИрдХ рдСрдкрд░реЗрд╢рди рд╕реНрдЯреИрдХ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдкрд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рдкреЗрдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реНрдЯреИрдХ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ -> рд╕реНрдЯреИрдХ рдорд╢реАрди рдХреЛрдб рдХреЛ рдореВрд▓ рдХреЛрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдкрд┐рдВрдЧ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░реЗрдВ, рдЬрд┐рд╕рд╕реЗ рд╣рдо рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ setjmp/longjmp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЕрдкрд╡рд╛рдж рд╕рдВрдХреЗрдд рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ WasmException{} рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде panic() рдФрд░ recover() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? recover рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдЯреИрдХ рдХреЛ рдЦреЛрд▓рдирд╛ рдХрд╛ рдХрдард┐рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдкрдХрдбрд╝реЗ рдЧрдП рдЕрдкрд╡рд╛рдж рд╕реЗ рдЙрдмрд░рдиреЗ рдХреЗ рдмрд╛рдж рджреБрднрд╛рд╖рд┐рдпрд╛ рд▓реВрдк рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдХрдард┐рди рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рд╛рдВ, рдореВрд▓ рд░реВрдк рд╕реЗ @cherrymui рдХреЗ рд╕рд╛рде рдЪрд░реНрдЪрд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рдорд╛рди рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд▓реЗред

@cherrymui рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбрд┐рдЬрд╝рд╛рдЗрди рдпрд╣ рд╣реИ:
(рдпрд╣ рдЪрд░рдг $GOROOT/test/sieve.go рдХреЛ рдХрд╛рдо рдкрд░ рд▓рд╛рдиреЗ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИ, рдХреЛрдИ async IO рдирд╣реАрдВ рд╣реИ
рдорд╛рдирд╛ред)
рд╣рдо MIPS рдкреЛрд░реНрдЯ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, 31 MIPS рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ WASM рд▓реЛрдХрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдореИрдк рдХрд░рддреЗ рд╣реИрдВ
рдЪрд░ рдФрд░ рдХреЗрд╡рд▓ WASM рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдордзреНрдпрд╡рд░реНрддреА рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдПред рд╣рдо WASM рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЕрдзрд┐рдХрд╛рдВрд╢ рдЧреЛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐
рд╕реНрдЯреИрдХ рдЕрдирдЗрдВрдбрд┐рдВрдЧ рд╕рдкреЛрд░реНрдЯ рдХреА рдХрдореАред
рдкреНрд░рддреНрдпреЗрдХ MIPS рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП MIPS objlink (cmd/internal/obj) рдмрджрд▓реЗрдВ
рд╕рдВрдмрдВрдзрд┐рдд WASM рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рдеред
рдпрд╣ setjmp/longjmp (рдЙрд░реНрдл рд░рдирдЯрд╛рдЗрдо.рдЧреЛрдЧреЛ) рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рддреБрдЪреНрдЫ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░
рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореМрдЬреВрджрд╛ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдЧреЛ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реНрдЯреИрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, WASM рд╕реНрдЯреИрдХ рд╕реЗ рдЕрд▓рдЧ,
рдХреНрдпреЛрдВрдХрд┐ рдЧреЛ рдХреЛ рдХреЙрдкреА рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЪрд╛рд╣рд┐рдП
рд╕реНрдЯреИрдХ, рд╕реНрдЯреИрдХ рдкреЙрдЗрдВрдЯрд░ рдореИрдкреНрд╕ рдФрд░ рд╕реНрдЯреИрдХ рдЕрдирдЗрдВрдбрд┐рдВрдЧ рд╕рдкреЛрд░реНрдЯ, рдЬреЛ рдирд╣реАрдВ рд╣реИрдВ
WASM рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИред
(рдпрд╣ рд░рдгрдиреАрддрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рднреА рд╕рдВрд░реЗрдЦрд┐рдд рд╣реЛрддреА рд╣реИ, рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрд▓рдПрд▓рд╡реАрдПрдо рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рд▓рдЧрднрдЧ рдПрдХ рд╣реА рдХрд╛рд░рдг
(рдЬрдм рддрдХ рд╣рдо рд╕реНрдЯреИрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓рдПрд▓рд╡реАрдПрдо рдореЗрдВ рдПрдХ рдХрд╕реНрдЯрдо рдмреИрдХрдПрдВрдб рдкрд╛рд╕ рдирд╣реАрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ
рдорд╛рдирдЪрд┐рддреНрд░)ред)

рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдЫрд▓рд╛рдВрдЧ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд╢рд╛рдпрдж рдПрдХ рдмрдбрд╝реЗ рд╕реНрд╡рд┐рдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА? рдпреЗ рд╣реИ
NestedVM рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рдорд╛рдиред
http://nestedvm.ibex.org/

рдпрджрд┐ рд╣рдо рдПрдХ рджреЗрд╢реА WASM рдмреИрдХрдПрдВрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдЧреЛ рдПрдмреАрдЖрдИ рд╣реИ:
рд╕рднреА рдкреИрд░рд╛рдореАрдЯрд░ (рдкрд░рд┐рдгрд╛рдо рд╕рд╣рд┐рдд) рдСрди (рдПрдореБрд▓реЗрдЯреЗрдб) рдЧреЛ рд╕реНрдЯреИрдХ,
рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкрд░, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд WASM рд╕реНрдЯреИрдХ рдкрд░ рд╣реИрдВ:
рдирдХрд▓реА рдПрд╕рдкреА, рдЬреАред

рдЪрд░реНрдЪрд╛ рдПрдХ рдорд╣реАрдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рдкрд╣рд▓реЗ рд╣реБрдИ рдереА, рдФрд░ рдореИрдВ рд╢рд╛рдпрдж рдХреБрдЫ рднреВрд▓ рдЧрдпрд╛ рдерд╛
рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╡рд┐рд╡рд░рдгред

IIUC, рдЖрдк WASM рд╕реНрдЯреИрдХ (рдХрд▓реНрдкрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░) рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреНрдпрд╛рдЧ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдпреЛрдЧреНрдп рдФрд░ рдХреЙрдкреА рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЧреЛ рд╕реНрдЯреИрдХ рдЕрднреА рднреА рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

рд╣рд╛рдВ, рдореИрдВрдиреЗ рдЬрд┐рд╕ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбрд┐рдЬрд╛рдЗрди рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдХреЗрд╡рд▓ WASM рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ
рдЧрдгрдирд╛ рдореЗрдВ рдкреНрд░рдпреБрдХреНрдд рдордзреНрдпрд╡рд░реНрддреАред рд╕рднреА рдбреЗрдЯрд╛ рдпрд╛ рддреЛ рдЧреЛ рд╣реАрдк рдкрд░ рд╣реИрдВ (рд░реИрдЦрд┐рдХ
рдореЗрдореЛрд░реА) рдпрд╛ WASM рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдореЗрдВ рдЫрджреНрдо рд░рдЬрд┐рд╕реНрдЯрд░ред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдбрдмреНрд▓реНрдпреВрдПрдПрд╕рдПрдо рд╕реНрдкреЗрдХ рдЪрд▓рддреА/рдЦрдВрдбрд┐рдд рдФрд░ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдвреЗрд░ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдЧрд╛ред
рдпрд╣ рд╢рд╛рдпрдж рд╣реА рдХрднреА WASM рджреНрд╡рд╛рд░рд╛ рд▓рдХреНрд╖рд┐рдд рдореБрдЦреНрдпрдзрд╛рд░рд╛ рдХреА рднрд╛рд╖рд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

@bradfitz @minux @vibhavp рдЧреЛрд▓рд╛рдВрдЧ рдореЗрдВ рд╡рд╛рд╕рдо рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ? 13 рдорд╛рд░реНрдЪ рдХреЗ рдмрд╛рдж рд╕реЗ рдХреБрдЫ рдирд╣реАрдВ рд╣реБрдЖ! рдХреНрдпрд╛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЧреЛрд▓рдВрдЧ рдХреЛ рд╡рд╛рд╕рдо рдореЗрдВ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛? рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рд░реВрдЯ-рдореИрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рдЕрдЧрд░ рдХреЛрдИ wasm рд╕рдорд░реНрдерди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд░реЗрдЧрд╛ рддреЛ рдореИрдВ рдЕрдкрдирд╛ рд╕рдордп рдЧреИрд░-рд╡реИрд╢реНрд╡рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рджреЗ рд╕рдХрддрд╛ рд╣реВрдВ

@SerkanSipahi , рдЗрд╕ рдкрд░ рдХреЛрдИ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдмрдЧ рд▓реЙрдиреНрдЧрдЯрд░реНрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рд╣реИред рдЕрдЧрд░ рдХреБрдЫ рд╣реЛрдиреЗ рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдпрд╣рд╛рдВ рдЕрдкрдбреЗрдЯ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ.

рдПрдХ рдЕрдЪреНрдЫрд╛ рд░реЛрдбрдореИрдк?

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ GUI рдХреЗ рд╕рд╛рде рдЧреЛрд▓рд╛рдВрдЧ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП DELVE рдФрд░ GDLV рд╣реИред рдпрд╣ рд╕рднреА рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ рднреА рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ Perf рдЙрддреНрдХреГрд╖реНрдЯ рд╣реИред
https://github.com/derekparker/delve
https://github.com/aarzilli/gdlv

рдЕрдм, рдЬреАрдбреАрдПрд▓рд╡реА рдиреНрдпреВрдХреНрд▓рд┐рдпрд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ рдЬреЛ рдХреБрдЫ рдЕрдЪреНрдЫреЗ рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЪрдордХрджрд╛рд░ рд╣реИред
https://github.com/aarzilli/nucular

рддреЛ рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЖрдзрд╛рд░ рд╣реЛрдЧрд╛ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИ:

рдЕрдм 5 WASM рдЧреЛ рд▓рд┐рдмрд░реА рднреА рд╣реИрдВ:
https://github.com/search?l=Go&q=webassembly&ref=simplesearch&type=Repositories&utf8=%E2%9C%93

NaCl рдмрдВрдж рд╣реЛ рдЧрдпрд╛ рд╣реИ - https://blog.chromium.org/2017/05/goodbye-pnacl-hello-webassembly.html
рддреЛ рд╢рд╛рдпрдж рдЗрд╕реЗ рд╕рд╛рдл рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - https://github.com/golang/go/tree/master/misc/nacl

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЧреЛ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рднрд╛рдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ NaCl рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╛рдиреА рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╕рд┐рд░реНрдл рдХреНрд░реЛрдо рд╣реА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдмреНрд▓реЙрдЧ рдШреЛрд╖рдгрд╛ рдкреАрдПрдирдПрд╕реАрдПрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ NaCl рдХреЗ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рддрдХрдиреАрдХ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЙрддреНрдкрд╛рдж рд╣реИред рдЗрд╕рд▓рд┐рдП NaCl рд╕рдкреЛрд░реНрдЯ рдХреЛ Go рд╕реЗ рд╣рдЯрд╛рдирд╛ рдлрд┐рд▓рд╣рд╛рд▓ рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рдХреА рдмрд╛рдд рд╣реИред

рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рдо NaCl рдХреЛ Go рд╕реЗ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ, рдЗрд╕рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рд╡реЗрдм рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред

рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдордВрдЪ рд╕реНрд╡рддрдВрддреНрд░ рдХреЛрдб рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрдПрдирдПрд╕реАрдПрд▓ NaCl рдкрд░ рд╕рд┐рд░реНрдл рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИ https://developer.chrome.com/native-client/nacl-and-pnacl рдореИрдВрдиреЗ рдпрд╣рд╛рдВ NaCl рдкрджрд╛рд╡рдирддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫрд╛ - https://groups.googleред рдХреЙрдо/рдбреА/рд╡рд┐рд╖рдп/рджреЗрд╢реА-рдЧреНрд░рд╛рд╣рдХ-рдЪрд░реНрдЪрд╛/wgN2ketXybQ/рдЪрд░реНрдЪрд╛

рдпрджрд┐ рдЧреЛ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рдЙрди рд╡рд┐рднрд┐рдиреНрди рднрд╛рдЧреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬрд╣рд╛рдВ рдЕрднреА рднреА NaCl рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдиреЗ рд╕реЗ WebAssembly рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдФрд░ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ PNaCl NaCl . рдкрд░ рд╕рд┐рд░реНрдл рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИ

рдЖрдк рдЬреЛ рдЪрд╛рд╣реЗрдВ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рд╕рд╣реА рд╣реИрдВред рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЖрдИрдПрд╕рдП рд╣реИрдВ, рдХреБрдЫ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рде NaCL рдХреЗрд╡рд▓ рд▓рдХреНрд╖реНрдп ISA (x86/arm) рд╣реИ, рдЬрдмрдХрд┐ PNaCl рдПрдХ рдЕрдореВрд░реНрдд рдорд╢реАрди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ ISA рд╣реИред

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

Go рдореЗрдВ WebAssembly рд╕рдорд░реНрдерди рдХрд╛ NaCL рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИред Go рдХреЛ WebAssembly рд╕рдкреЛрд░реНрдЯ рдорд┐рд▓ рднреА рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдирд╣реАрдВ рднреАред рдпрджрд┐, рдпрд╛ рдЬрдм рдЗрд╕реЗ рдРрд╕рд╛ рд╕рдорд░реНрдерди рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ NaCL рдмрдВрджрд░рдЧрд╛рд╣ рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдХреЛрдИ рд╕рдВрдмрдВрдз рдирд╣реАрдВ рд╣реИред

рдпрд╣рд╛рдБ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХрд╛ рдПрдХ рдмрд╣реБрдд рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдЬрд╣рд╛рдБ рд╣рдо nacl рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ: https://play.golang.org/p/MfJIq8wb5-

(рдЬреЛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдЪрд▓рд╛рддрд╛ рд╣реИ, рди рдХрд┐ рдиреИрдХреНрд▓-рдЗрди-рдП-рдмреНрд░рд╛рдЙрдЬрд╝рд░)

рдХреНрдпрд╛ рдХреНрд░реЛрдо NaCL рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдпрд╛ PNaCL рдХрд╛ рдЧреЛ рд╕реЗ рдХреЛрдИ рд╕рдВрдмрдВрдз рдирд╣реАрдВ рд╣реИред рдирд╛рдбрд╛, рд╢реВрдиреНрдп, рдХреЛрдИ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдирд╣реАрдВред

рдФрд░ рдлрд┐рд░ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд▓реЛрдбрд░ рдФрд░ рдЯреВрд▓рдЪреЗрди рдХрд╛ рд╕рдорд░реНрдерди рдХреМрди рдХрд░реЗрдЧрд╛? рдЗрд╕реЗ рдХреНрд░реЛрдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдиреЗ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ WebAssembly рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдкрд╛рд▓рди рдХрд░рдирд╛ рдФрд░ рдпрд╣ рджреЗрдЦрдирд╛ рдмреБрджреНрдзрд┐рдорд╛рдиреА рдирд╣реАрдВ рд╣реЛрдЧреА рдХрд┐ рдХреНрдпрд╛ рдЦреЗрд▓ рдХреЗ рдореИрджрд╛рди рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА NaCl рд╕реИрдВрдбрдмреЙрдХреНрд╕ рд╕реЗ WebAssembly рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдЗрд╕реЗ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рднреА рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ WebAssembly рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реИред

NaCl рд╕реЗ рджреВрд░ рдЬрд╛рдиреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп WebAssembly рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣реИред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред

@ianlancetaylor , рдХреНрдпрд╛ рдЖрдк рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ "WebAssembly рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж"?

рдПрдХ рдирдЬрд╝рд░ рдореЗрдВ, рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ webassembly.org рдХрд╣рддрд╛ рд╣реИ "WebAssembly рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рд░реНрд╡рд╕рдореНрдорддрд┐ рддрдХ рдкрд╣реБрдБрдЪ рдЧрдпрд╛ рд╣реИ" рдФрд░ wasm рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдХреНрд░реЗрддрд╛рдУрдВ рдХреЗ рд╡рд░реНрддрдорд╛рди рдпрд╛ рднрд╡рд┐рд╖реНрдп рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред

@ vine77 рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ WebAssembly рдЧреЛ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо NaCl рдЖрдЬ рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рддреЛ рдЧреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП WebAssembly рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓рд╛ рдкрд░реАрдХреНрд╖рдг рдХреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?

@techtonik рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдБ рдХреБрдЫ рднреНрд░рдо рд╣реИред рдЬрдм рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ WebAssembly рдХреЛ Go рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рд╣рдорд╛рд░рд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ Go рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ WebAssembly рдХреЛрдб рдЬреЗрдирд░реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИред рд╣рдорд╛рд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ GOOS=wasm go build hello.go рдЬреИрд╕рд╛ рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдЕрдВрджрд░ рдЪрд▓ рд╕рдХреЗред рд╣рдо рдЙрд╕рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рднреА рдирд╣реАрдВ рд╣реИрдВред рд╣рдордиреЗ рд╢реБрд░реВ рд╣реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рддреЛ рдХреЛрдИ "рдЕрдЧрд▓рд╛ рдкрд░реАрдХреНрд╖рдг" рдирд╣реАрдВ рд╣реИред рдмрд╣реБрдд рдХрд╛рдо рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИред рдФрд░ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдХреЛрдИ рднреА рдЗрд╕ рдкрд░ рд╕рдХреНрд░рд┐рдпрддрд╛ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред

@ ianlancetaylor
рдЧреЛрд▓рд╛рдВрдЧ рдХреЗ рд▓рд┐рдП 4 рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВред рдПрдХ рдЧрдВрднреАрд░ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реАред рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВред

рд▓рдбрд╝рдХрд╛ рдпрд╣ рдзрд╛рдЧрд╛ рдЪреЗрд╡реА рдЪреЗрд╕ рдХрд╛рд░ рдХреА рддрд░рд╣ рд╣реИ рдЬрд┐рд╕реЗ рдмрдЪреНрдЪреЛрдВ рдХреЗ рд╕рд╛рде рдкреАрдЫреЗ рдХреА рд╕реАрдЯ рдкрд░ рдЪрд┐рд▓реНрд▓рд╛рддреЗ рд╣реБрдП рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ "рдХреНрдпрд╛ рд╣рдо рдЕрднреА рддрдХ рд╣реИрдВ" :)

@ joeblew99 : рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рд▓рд┐рдВрдХ рдРрд╕реА рдЪреАрдЬреЗрдВ рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИрдВ WebAssembly рдкрд░ рдЬрд╛рдПрдВред
рд╡реЗ WebAssembly -> amd64 рдХрдВрдкрд╛рдЗрд▓рд░ рдЬреИрд╕реА рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдЧреЛ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рд╣реИрдВред

рдореБрдЭреЗ рдбрд░ рдерд╛ рдХрд┐ рддреБрдо рдРрд╕рд╛ рдХрд╣реЛрдЧреЗред рдХрд╛рдлреА рдЙрдЪрд┐рддред
рддреЛ "рд▓рд╛рдУ рдЕрдк" рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ? рддреЛ рд╕рдм рдЬрд╛рдирддреЗ рд╣реИрдВ...
рдЧреЛрдлрд░рдЬ рдиреЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдЯреВрд▓ рдЪреЗрди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░/рдХреЛрдб рдЬрдирд░реЗрд╢рди рдореЗрдВ рд╕рд╣реА рд╕реНрддрд░ рдкрд░ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреА рд╡рд╣реА рдЧрд▓рддреА рдХреА?

рд▓рдВрдмреА рд▓рд┐рд╕реНрдЯ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдг рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдпред

  • SSA рдмреИрдХрдПрдВрдб рдореЗрдВ WebAssembly рдХреЛрдб рдЬрдирд░реЗрдЯ рдХрд░реЗрдВред рдмреИрдХрдПрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╢реАрдиреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, WebAssembly рдХреА рд╕реНрдЯреИрдХ рдорд╢реАрди рдХреЛ рдЕрдкрдирд╛рдиреЗ рдореЗрдВ рдХреБрдЫ рдХрд╛рдо рд▓рдЧреЗрдЧрд╛ред
  • рдПрдХ рд╕реВрдЪрдХ рдХреНрдпрд╛ рд╣реИ? WebAssembly рдореЗрдВ рдкреЙрдЗрдВрдЯрд░ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИред
  • рд╣рдо рд╕реНрдЯреИрдХ рдХрд╛ рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ? рд╣рдореЗрдВ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд▓реЗрдХрд┐рди рдШрдмрд░рд╛рд╣рдЯ/рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐, рдЯреНрд░реЗрд╕рдмреИрдХ рдкреНрд░рд┐рдВрдЯрд┐рдВрдЧ рдЗрддреНрдпрд╛рджрд┐ рднреАред
  • рд╣рдо рдПрдХ рдЧреЛрд░реМрдЯрд╛рдЗрди рдХреЛ рдХреИрд╕реЗ рдирд┐рд▓рдВрдмрд┐рдд/рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
  • рд╣рдо рдвреЗрд░ рдХреИрд╕реЗ рдмрд┐рдЫрд╛ рд╕рдХрддреЗ рд╣реИрдВ? WebAssembly рдХреЗрд╡рд▓ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ sbrk рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╣рдореЗрдВ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдкрддрд╛ рд╕реНрдерд╛рди рд▓реЗрдЖрдЙрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рд╕реНрдкреИрди, ptr/nonptr рдмрд┐рдЯреНрд╕ рдЖрджрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХрд╣рд╛рдБ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ?
  • рдмрд╣реБ рд╕реВрддреНрд░рдгред WebAssembly рдХреЗ рдкрд╛рд╕ рдЗрд╕ рд╕рдордп рдереНрд░реЗрдбреНрд╕ рдХреА рдХреЛрдИ рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдорд╡рд░реНрддреА GC рдХрд░рдирд╛ред рд╣рдореЗрдВ рддрд╛рд▓реЗ рдФрд░ рд╢рд╛рдпрдж рдкрд░рдорд╛рдгреБ рд╕рдВрдЪрд╛рд▓рди рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
  • рд╣рдо рдУрдПрд╕ рдФрд░ рдиреЗрдЯ рдЬреИрд╕реЗ рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рддрдХ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ?
  • WebAssembly рдХреЗ рдкрд╛рд╕ "рдЧреЛрдЯреЛ" рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реИред

рдпрд╣ рд╢рд╛рдпрдж рдкреВрд░реА рд╕реВрдЪреА рдирд╣реАрдВ рд╣реИред

рдЬрдм рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ WebAssembly рдХреЛ Go рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рд╣рдорд╛рд░рд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ Go рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ WebAssembly рдХреЛрдб рдЬреЗрдирд░реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИред

@ianlancetaylor рдкрд╣рд▓реЗ рдЧреИрд░-рд╡реЗрдм рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛? NaCl рдХреЛ рдкрд╣рд▓реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдлрд┐рд░ рдЙрд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░-рд╕реНрд╡рддрдВрддреНрд░ рд▓реЛрдбрд░ рдорд┐рд▓рд╛, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЧреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдмрд┐рдирд╛ WebAseembly - http://webassembly.org/docs/non-web/ - рдФрд░ рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдЧреЛрд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреЛрд▓рддрд╛ рд╣реИред

@ Randall77 рдХреНрдпрд╛ рдЗрд╕ рд╕реВрдЪреА рд╕реЗ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдпреЛрдЧреНрдп рдЪреЗрдХрд▓рд┐рд╕реНрдЯ рд▓рд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдореБрджреНрджреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдорд╛рд╕реНрдЯрд░ рдореБрджреНрджреЗ рдХреА рддрд░рд╣ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд╣рд▓реВ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╢реЛрдз рдХрд░рддрд╛ рд╣реИ?

@techtonik wrt рдЧреИрд░-рд╡реЗрдм: @vibhavp рдЙрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ GSoC рдЗрдВрдЯрд░реНрдирд╢рд┐рдк рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдореИрдВ рдКрдкрд░ рдХреБрдЫ рдкрджреЛрдВ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ред
рдпрд╣ рд╡рд╣рд╛рдБ рдкрд░ рд╣реИ: https://github.com/go-interpreter/wagon

@techtonik : рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреЗрдХрд▓рд┐рд╕реНрдЯ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЬрдЧрд╣ wasm рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИред рдПрдХ рдмрд╛рд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░/рдпрд╛ рд▓реЛрдЧ рдЗрд╕ рдкрд░ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╡реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдореБрджреНрджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдпрд╣ рд╕рдордп рд╕реЗ рдкрд╣рд▓реЗ рд╣реИ - рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ (рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдпрд╛ рдХреЛрдб) рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореИрдВ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдбреЙрдХреНрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╣рдордд рд╣реВрдВред
рдореИрдВ рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддрд╛/ рдХрд░рддреА рд╣реВрдВ/рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рд╣реИрдВ рдФрд░ рдмрд╕ рдЗрд╕реЗ рдПрдХ рд╕рд╛рде рд▓рдкреЗрдЯрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдПрдХ рд░реЛрдбрдореИрдк рдХреЗ рд╕рд╛рде рдЬреЛ рдЬреЛрдЦрд┐рдо/рдЗрдирд╛рдо рд╕рдВрддреБрд▓рди рдХреЛ рдЪрд░рдгрдмрджреНрдз рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕реЗ рдПрдбреНрд░реЗрд╕ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рднреА рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЧрд▓реЗ рдореЗрдВ рдЦрд░рд╛рд╢ рдХреА рддрд░рд╣ рдЪрд┐рдкрдХрд╛ рд╣реБрдЖ рд╣реИред

рдореИрдВ рдЧреЛрдлрд░рдЬреЗрдПрд╕ рдХрд╛ рд▓реЗрдЦрдХ рд╣реВрдВ, рдЬреЛ рдЧреЛ рдЯреВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдПрдХ рдХрдВрдкрд╛рдЗрд▓рд░ рд╣реИред рдореИрдВрдиреЗ рд╡рд╣ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЗрд╕рд▓рд┐рдП рд▓рд┐рдЦрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░рд╛ рджреГрдврд╝ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк, рдЧреЛ рдФрд░ рдЕрдиреНрдп рдЬреИрд╕реЗ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдХрдВрдкрд╛рдЗрд▓рд░, рдПрд╕рдПрд╕рдП, рдорд╢реАрди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЖрджрд┐ рдкрд░ рдЕрдЪреНрдЫрд╛ рдЬреНрдЮрд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╢рд╛рдпрдж рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рд╡рд░рдг рдпрд╛рдж рдЖ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдорд╢реАрди рдХреЛрдб рдХреЗ рд▓рд┐рдП рдХрдВрдкрд╛рдЗрд▓рд░ рдмреИрдХрдПрдВрдб рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдПрдХ рдкреВрд░реНрдг рдкреНрд░рд╕реНрддрд╛рд╡ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд▓рд┐рдЦрдиреЗ рдХреЗ рдпреЛрдЧреНрдп рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ред рдлрд┐рд░ рднреА, рдореБрдЭреЗ Go рдФрд░ WebAssembly рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдкрд░ рдХреБрдЫ рдЖрд▓реЛрдЪрдирд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ред

WebAssembly рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рдореБрдЭреЗ x86 рдпрд╛ arm рдЬреИрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдорд╢реАрди рдХреЛрдб рд▓рдХреНрд╖реНрдпреЛрдВ рд╕реЗ рдмрд╣реБрдд рдЕрд▓рдЧ рд╣реЛрдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдорд╢реАрди рдХреЗ рдмрдЬрд╛рдп рд╕реНрдЯреИрдХ рдорд╢реАрди рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рддреБрд░рдВрдд рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ x86 рдФрд░ рджреЛрд╕реНрддреЛрдВ рдХреЗ рдмрдЧрд▓ рдореЗрдВ рдЧреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рдЕрдВрддрд┐рдо рдЪрд░рдг рдореЗрдВ рдПрдХ рдФрд░ рд▓рдХреНрд╖реНрдп рд╣реИред рдПрдХ рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╡рд╣рд╛рдВ рди рд░рдЦрд╛ рдЬрд╛рдП, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп WebAssembly рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдореМрдЬреВрджрд╛ рдХрдВрдкрд╛рдЗрд▓рд░ рдЪрд░рдгреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬреЛ рдХрд┐ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдореЗрдВ рдХреЛрдИ рднреА рд╕рдВрдХрд▓рдХ рдХреЗ рдХрд╛рдВрдЯреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: рдореБрдЭреЗ рдРрд╕рд╛ рд╣реЛрддрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред

рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: рд╣рдореЗрдВ рдЬреЛ рдЪрд╛рд╣рд┐рдП рдЙрд╕рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдВред рд╣рдо рдПрдХ рд░рдЬрд┐рд╕реНрдЯрд░ рдорд╢реАрди рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯреИрдХ рдорд╢реАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдРрд╕рд╛ рдЙрдЪрд┐рдд рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЗ рд╕реЗ рдХрд░реЗрдВред WebAssembly рдореЗрдВ рд▓реЛрдб рдФрд░ рд╕реНрдЯреЛрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рд░реИрдЦрд┐рдХ рдореЗрдореЛрд░реА рд╣реИ, рдЬреЛ рдЕрдЪреНрдЫреА рд╣реИред рд╣рдо WebAssembly рдХреЗ call рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реНрдЯреИрдХ рдкреНрд░рдмрдВрдзрди рдФрд░ рдХреЙрд▓ рддрдВрддреНрд░ рдХреЛ рд░реЛрд▓ рдХрд░реЗрдВрдЧреЗред рд╕реНрдЯреИрдХ рдЙрд╕ рд░реИрдЦрд┐рдХ рдореЗрдореЛрд░реА рдкрд░ рд░рд╣реЗрдВрдЧреЗ рдФрд░ рдЧреЛ рд░рдирдЯрд╛рдЗрдо рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рд╕реНрдЯреИрдХрдкреЙрдЗрдВрдЯрд░ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рд╣реЛрдЧрд╛ред рд╕рднреА рдХреЛрдб рдПрдХ рд╣реА WebAssembly рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд░рд╣реЗрдВрдЧреЗред рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд╛рдЦрд╛ рдХреЗ рд╕рд╛рде рдЯреЙрдкрд▓реЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ (рдпрд╛ WebAssembly рдХрд╛ br_table рдЖрдзрд╛рд░рд┐рдд рд╕рдордХрдХреНрд╖) рд╣реЛрдЧрд╛ред рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ SSA рдореВрд▓ рдмреНрд▓реЙрдХ рдкреНрд░рддрд┐ рдПрдХ рд╢рд╛рдЦрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реЛрдЧрд╛ред рдХреБрдЫ рд╡рд┐рд╡рд░рдг рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ рдпрд╣рд╛рдВ рдЫреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдмрдбрд╝реА рддрд╕реНрд╡реАрд░ рдореЗрдВ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд╕рднреНрдп рд░рдЬрд┐рд╕реНрдЯрд░ рдорд╢реАрди рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред рдмреЗрд╢рдХ рдЗрд╕рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдмрд╣реБрдд рд╣рдж рддрдХ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ WebAssembly рдЗрди рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╢реАрди рдХреЛрдб рдореЗрдВ рдХрд┐рддрдиреА рдЕрдЪреНрдЫреА рддрд░рд╣ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред

рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ: рдХреНрдпрд╛ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднреЛрд▓рд╛ рдФрд░ рдкрд╛рдЧрд▓ рд╣реВрдБ? рддрдм рдореБрдЭреЗ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рддрдм рддрдХ рдХреЗ рд▓рд┐рдП рд╕реНрдердЧрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдкреНрд░рд╕рдиреНрдирддрд╛ рд╣реЛ рд░рд╣реА рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдореИрдВ рдФрд░ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╕реАрдЦ рд▓реЗрддрд╛ред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдпрд╣ рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рд╕реНрддрд╛рд╡ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдзрдиреНрдпрд╡рд╛рджред

рдЧреЛ рдкрдХреНрд╖ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ WebAssembly рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЧреЛ рд░рдирдЯрд╛рдЗрдо рдЗрд╕реЗ рд▓рдХреНрд╖рд┐рдд рдХрд░ рд╕рдХреЗред

WebAssembly рдореЗрдВ рдЕрднреА рддрдХ рдзрд╛рдЧреЗ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд░реЛрдбрдореИрдк рдкрд░ рд╣реИ рдФрд░ рдПрдХ рдпреБрдХреНрддрд┐ рд╣реИред https://github.com/WebAssembly/threads

рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдг рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд▓рд┐рди рдХреНрд▓рд╛рд░реНрдХ рдХреА рдмрд╛рддрдЪреАрдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрдИ рд╡рд┐рдХрд▓реНрдк рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ https://youtu.be/HktWin_LPf4?t=28m31s

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

рдЧреЛрдореЛрдмрд╛рдЗрд▓ рдХреА рддрд░рд╣, рднрд╛рд╖рд╛ рдХрд╛ рдкреБрд▓ рднреА рд╣реИред

@ Randall77 рдиреЗ рдЬреАрд╕реА рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдзрд╛рдЧреЗ рдХрд╛ рднреА рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ред рдХреНрдпрд╛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдард┐рди рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? Concurrency рдХреЛ рдПрдХ рд╣реА рдереНрд░реЗрдб рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЬреАрд╕реА рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдореЗрд░реА рдирд┐рдЬреА рд░рд╛рдп рд╣реИ рдХрд┐ рдореИрдВ рдЙрди рд╕рднреА рдкрд░ рд╢рд╛рд╕рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬреАрд╕реА рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рдХрд░рддрд╛ред рдореИрдВ рдЧреЛ рдХреЗ рд▓рд┐рдП рдЧреЛ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЬреАрд╕реА рдФрд░ рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЬреАрд╕реА рд░рдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред WebAssembly рдХреА рд░реИрдЦрд┐рдХ рдореЗрдореЛрд░реА рдкрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдвреЗрд░ рдФрд░ рдвреЗрд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдХреЗ рд╣рдо рдЙрд╕ GC рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ Go рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реИ, рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдБред

@neelance рд╣рд╛рдБ рдПрдХрд╛рдзрд┐рдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ WebAssembly рдзрд╛рдЧреЗ рдПрдХ рдЕрдЪреНрдЫреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рдЦреНрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

WebAssembly рдХреЗ рд▓рд┐рдП GC рдкреНрд░рд╕реНрддрд╛рд╡ рдЕрднреА рднреА рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реИред рдЗрдЪреНрдЫреБрдХ рдкрд╛рд░реНрдЯрд┐рдпрд╛рдВ рдпрд╣рд╛рдВ рднрд╛рдЧ рд▓реЗ рд╕рдХрддреА рд╣реИрдВ:

https://github.com/WebAssembly/gc

@neelance , рдореИрдВ рдХрдВрдкрд╛рдЗрд▓рд░, рдПрд╕рдПрд╕рдП, рдорд╢реАрди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЗрддреНрдпрд╛рджрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ред рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдиреЗ рдЬреЛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдмрд╛рдЗрдирд░реА рдЖрдХрд╛рд░ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░реЗрдЧрд╛? рдЕрдЧрд░ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдХрд╛рд░ рджрдХреНрд╖рддрд╛ WebAssembly рдХреЗ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рд▓рдХреНрд╖реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдереАред рдпрд╣ рдЗрд╕ рдЧреЛ-> WebAssembly рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рднреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣реИ рдирд╛?

@alxkchr рдореЗрд░рд╛ рдЕрдиреБрднрд╡ рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдб-рдЬреЗрди рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЗ рдХрд╛рд░рдг рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ gzip рд▓рдЧрд╛рдиреЗ рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдореБрдЖрд╡рдЬрд╛ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдлрд┐рд░ рднреА, рдореЗрд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдЖрдХрд╛рд░ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╕рдмрд╕реЗ рдХреБрд╢рд▓ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИред рдлрд┐рд░ рднреА, рдХреБрдЫ рд╕рдорд╛рдзрд╛рди рдЬрд┐рдиреНрд╣реЗрдВ рдЙрдЪрд┐рдд рд╕рдордп рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд┐рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рд╣реИ рдирд╛? ;-) рдореЗрд░реЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдмрд╛рдЗрдирд░реА рдЖрдХрд╛рд░ рдкрд╣рд▓реА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдирд╣реАрдВ рд╣реИред

fyi: рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИред

@neelance рдЕрдм рддрдХ рдХреА рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА рдЦрдмрд░ :) рдХреНрдпрд╛ рдЖрдк рдХрд▓реНрдкрдирд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ? (рдореБрдЭреЗ рдЖрд╢рд╛ рдХрд░рддрд╛ рд╣реВрдБ)

рдЧреЛ рд╕реНрдкреЗрдХ? рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рдЧреЛ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдмреИрдХрдПрдВрдб/рд▓рдХреНрд╖реНрдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпреБрдХреНрддрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореМрдЬреВрдж рд╣реИред ;)

рдореЗрд░рд╛ рдорддрд▓рдм рд╡рд╛рд╕рдо рд╕реНрдкреЗрдХ рд╣реИ :)

@рдиреАрд▓рд╛рдВрд╕

fyi: рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИред

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛

рд╣рдорд╛рд░рд╛ рд╡рд░реНрддрдорд╛рди рдирд┐рд╖реНрдХрд░реНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдЧрд░ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ
рд╡рд░реНрддрдорд╛рди рдореЗрдВ setjmp/longjmp рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рд╣реИ
рдПрдХ рдЬреАрд╕реА рдкреЛрд░реНрдЯ рдХреАред рд╣рдореЗрдВ рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдЯреИрдХ рдЕрдирдЗрдВрдбрд┐рдВрдЧ рди рд╣реЛ рдЬрд╛рдП рдФрд░
рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╕рдорд░реНрдердиред

(https://github.com/golang/go/issues/18892#issuecomment-276858667)

@neelance : рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЕрднреА рднреА рд╢реБрд░реБрдЖрддреА рджрд┐рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ wasm GOARCH wasm32 (рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╡реИрд╕рд╛ рд╣реА) рдирд╛рдо рджреЗрдирд╛ рд╕рдордЭрджрд╛рд░реА рд╣реЛрдЧреАред

@sbinet рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдПрдЖрд░рдПрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░/рдкреИрдХреЗрдЬ рдХреЛ arm рдФрд░ arm64 (рдЗрд╕реА рддрд░рд╣ mips рдФрд░ mips64 рдХреЗ рдмрдЬрд╛рдп) рдирд╛рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ arm32 рдФрд░ arm64 ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рдпрд╛ рдмреБрд░рд╛ рдЙрджрд╛рд╣рд░рдг рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

@SerkanSipahi рдореИрдВ рд╢реБрд░реВ рдореЗрдВ V8 (рдиреЛрдбрдЬ/рдХреНрд░реЛрдо) рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ https://webassembly.github.io/spec/ рдХрд╛ рдЙрдкрдпреЛрдЧ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред

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

@cznic рдЬреИрд╕рд╛ рдКрдкрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВ wasm рдХреЗ call рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рд░реИрдЦрд┐рдХ рд╕реНрдореГрддрд┐ рдкрд░ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдвреЗрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░ setjmp/longjmp рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@sbinet рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ 64 рдмрд┐рдЯ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ wasm рдореЗрдВ 64 рдмрд┐рдЯ рдСрдкрд░реЗрд╢рди рд╣реИрдВред

@neelance рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВред WebAssembly рдпреБрдХреНрддрд┐ рдЕрднреА рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ 32 рдмрд┐рдЯ рдкрддрд╛ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ, рдмрд╛рдж рдХреЗ рд▓рд┐рдП wasm64 рдпреБрдХреНрддрд┐ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ ред

рджрд┐рд▓рдЪрд╕реНрдк, рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╣рдо рдмрд╛рдж рдореЗрдВ рдЗрд╕ рдкрд░ рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореИрдВ рд╕рдм рдХреБрдЫ 64 рдмрд┐рдЯ рдЪрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП int , uint рдФрд░ uintptr рд╕рднреА рдХрд╛ рдЖрдХрд╛рд░ 64 рдмрд┐рдЯреНрд╕ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореЗрдореЛрд░реА рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ 32 рдмрд┐рдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ wasm64p32 рддрдм (рдПрдирдПрд╕реАрдПрд▓ рдирд╛рдордХрд░рдг рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП), рдпрд╛ рдХреБрдЫ рдФрд░
рд╕рдорд╛рдиред

4 рдирд╡рдВрдмрд░, 2017 рдХреЛ рд╕реБрдмрд╣ 5:28 рдмрдЬреЗ, "рд░рд┐рдЪрд░реНрдб рдореБрд╕рд┐рдпреЛрд▓" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рджрд┐рд▓рдЪрд╕реНрдк, рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╣рдо рдмрд╛рдж рдореЗрдВ рдЗрд╕ рдкрд░ рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣ рд╕рдХрддреЗ рд╣реИрдВред
рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореИрдВ рд╕рдм рдХреБрдЫ 64 рдмрд┐рдЯ рдЪрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП int, uint рдФрд░ uintptr
рд╕рднреА рдХрд╛ рдЖрдХрд╛рд░ 64 рдмрд┐рдЯ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ 32 рдмрд┐рдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рд╕реНрдореГрддрд┐ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдирд╛ред рдЗрд╕реЗ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред

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

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ wasm64p32 рддрдм (рдПрдирдПрд╕реАрдПрд▓ рдирд╛рдордХрд░рдг рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП), рдпрд╛ рдХреБрдЫ рдФрд░
рд╕рдорд╛рдиред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рджреЛ рдирдВрдмрд░ рд╣реЛрдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╣реЛрдЧрд╛ (рдкрддрд╛ рд╕реНрдерд╛рди рдЖрдХрд╛рд░ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде)ред webassembly.org рд╕реЗ:

wasm32 рдФрд░ wasm64 рджреЛрдиреЛрдВ рд╣реА WebAssembly рдХреЗ рд╕рд┐рд░реНрдл рдПрдХ рдореЛрдб рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдореЙрдбреНрдпреВрд▓ рд╣реЗрдбрд░ рдореЗрдВ рдПрдХ рдлреНрд▓реИрдЧ рджреНрд╡рд╛рд░рд╛ рдЪреБрдирд╛ рдЬрд╛рдирд╛ рд╣реИ, рдФрд░ рд░реИрдЦрд┐рдХ рдореЗрдореЛрд░реА рдХреЛ рдХреИрд╕реЗ рд╣реИрдВрдбрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд╣рд░ рдХреЛрдИ рд╢рдмреНрджрд╛рд░реНрде рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рджреЛ рдирдВрдмрд░ рд╣реЛрдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╣реЛрдЧрд╛ (рдкрддрд╛ рд╕реНрдерд╛рди рдЖрдХрд╛рд░ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде)ред webassembly.org рд╕реЗ:

wasm32 рдФрд░ wasm64 рджреЛрдиреЛрдВ рд╣реА WebAssembly рдХреЗ рд╕рд┐рд░реНрдл рдПрдХ рдореЛрдб рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдореЙрдбреНрдпреВрд▓ рд╣реЗрдбрд░ рдореЗрдВ рдПрдХ рдлреНрд▓реИрдЧ рджреНрд╡рд╛рд░рд╛ рдЪреБрдирд╛ рдЬрд╛рдирд╛ рд╣реИ, рдФрд░ рд░реИрдЦрд┐рдХ рдореЗрдореЛрд░реА рдХреЛ рдХреИрд╕реЗ рд╣реИрдВрдбрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд╣рд░ рдХреЛрдИ рд╢рдмреНрджрд╛рд░реНрде рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИред

рдпрд╣ рдПрдХ рдЖрдХрд╛рдВрдХреНрд╖рд╛рддреНрдордХ рдмрдпрд╛рди рд╣реИред рдпрд╣ рд╕рдЪ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди WebAssembly CG / WG рдиреЗ wasm64 рдХреА рдкрд░реНрдпрд╛рдкреНрдд рдЦреЛрдЬ рдирд╣реАрдВ рдХреА рд╣реИ рддрд╛рдХрд┐ рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реЛ рд╕рдХреЗ рдХрд┐ рдХрдерди рд╕рдЯреАрдХ рд╣реИред

рдЪрд▓реЛ @neelance рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдирд╛рдо рдмрд╛рдж рдореЗрдВ рдмрджрд▓рдирд╛ рдЖрд╕рд╛рди рд╣реИред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЧреЛ рдХреЛ рд╕реАрдзреЗ рдорд╢реАрди рдирд┐рд░реНрджреЗрд╢реЛрдВ (AFAIK) рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЦреБрдж рд╕реЗ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдХрднреА рдЧреЛ рдЯреВ рд╕реА рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдЧреЛ -> рд╕реА -> рд╡рд╛рд╕рдо (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмрд╣реБрдд рдХреБрд╢рд▓ рдирд╣реАрдВ) рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред

@TomerHeber рдпрд╣ рд╕реА ++ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд╕рдВрдХрд▓рди рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдпрд╣ рд╡рд╛рд╕рдо рдХреЗ рд╕рдВрдХрд▓рди рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛рдо рд╣реЛрдЧрд╛

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

рдпрд╣рд╛рдВ рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреА рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣реА рд╣реИрдВ:

  • рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдФрд░ Node.js рдореЗрдВ рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП wasm рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдирд╛
  • рдмреБрдирд┐рдпрд╛рджреА рд╕рдВрдЪрд╛рд▓рди, рд░реВрдкрд╛рдВрддрд░рдг, рдЖрджрд┐ред
  • рдЗрдВрдЯрд░рдлреЗрд╕
  • рдЧреЛрд░реЛрдЗрди рдФрд░ рдЪреИрдирд▓
  • рд╕реНрдердЧрд┐рдд/рдЖрддрдВрдХ/рдмрдЪрд╛рд╡
  • Node.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдлрд╝рд╛рдЗрд▓реЗрдВ рдкрдврд╝рдирд╛ рдбрд┐рд╕реНрдХ рдмрдирд╛рддрд╛ рд╣реИ
  • рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рд╣реЛ рд░рд╣реЗ рд╣реИрдВ: bytes, container/heap, container/list, container/ring, encoding/ascii85, encoding/asn1, encoding/base32, encoding/binary, encoding/csv, encoding/hex, errors, flag, hash/adler32, hash/crc32, hash/crc64, hash/fnv, html, image, image/color, index/suffixarray, math, math/bits, path, sort, strconv, strings, text/scanner, text/tabwriter, unicode, unicode/utf8, unicode/utf16

рдХреБрдЫ рдЪреАрдЬреЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЕрднреА рднреА рдХрд╛рдо рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ:

  • рдкреНрд░рддрд┐рдмрд┐рдВрдм
  • рдЧреЛрд░рдЖрдЙрдЯреНрд╕ рдХреЗ рдвреЗрд░ рдХреЛ рдмрдврд╝рд╛рдирд╛
  • рдХрдЪрд░рд╛ рдЗрдХрдард╛ рдХрд░рдирд╛
  • рдкреНрд░рджрд░реНрд╢рди рдЕрдиреБрдХреВрд▓рди
  • wasm рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░ рдЕрдиреБрдХреВрд▓рди
  • рдПрдХ рдЕрдЪреНрдЫреА рдЬреЗрдПрд╕ рдЗрдВрдЯрд░рдСрдк рдкрд░рдд
  • рдЕрдзрд┐рдХ рдкреИрдХреЗрдЬ рдкрд░реАрдХреНрд╖рдг рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрдиреНрдп рдореБрджреНрджреЗ

рдореИрдВ рдбреЗрдврд╝ рдорд╣реАрдиреЗ рдореЗрдВ рдФрд░ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдЦрд╛рд▓реА рд╕рдордп рдореЗрдВ рдкреНрд░рдЧрддрд┐ рд╕реЗ рдмрд╣реБрдд рдЦреБрд╢ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрдЪреНрдЫрд╛ рдореМрдХрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдЧреЛ 1.11 рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдВред рдЬрдирд╡рд░реА рдореЗрдВ рдореЗрд░реЗ рдЕрдЧрд▓реЗ рдЕрдкрдбреЗрдЯ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЫреБрдЯреНрдЯреА рдкрд░ рд░рд╣реВрдВрдЧрд╛ рдФрд░ рдлрд┐рд░ рдЫреБрдЯреНрдЯрд┐рдпрд╛рдВ рд╣реИрдВред

рдХреНрдпрд╛ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдЫреБрдЯреНрдЯрд┐рдпреЛрдВ рдХреЗ рд╣реИрдХ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдмрд┐рдЯреНрд╕ рджрд┐рд▓рдЪрд╕реНрдк рд▓рдЧрддреЗ рд╣реИрдВред

рдмреЗрдЭрд┐рдЭрдХ рдЗрд╕реЗ рджреЗрдЦреЗрдВ рдФрд░ рдореЗрд░реЗ рдХрд╛рдВрдЯреЗ рдкрд░ рдкреАрдЖрд░ рдмрдирд╛рдПрдВред рдЖрдк рдореБрдЭреЗ рдЧреЛрдлрд╝рд░реНрд╕ рд╕реНрд▓реИрдХ рдкрд░ рднреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЬрд╛рдВрдЪ рдХрд╛ рдПрдХ рдХреНрд╖реЗрддреНрд░ рд╕реНрдЯреИрдХ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЕрднреА, рд░рдЬрд┐рд╕реНрдЯрд░ рдЖрд╡рдВрдЯрди рдЪрд░рдг рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ (wasm рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рдЪрд░) рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддрд╛ рд╣реИред get_local рдФрд░ set_local рд╣рдореЗрд╢рд╛ рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрд╢рди рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реИ рдпрджрд┐ рдореВрд▓реНрдп рдХреБрдЫ рдмрд╛рдж рдХреЗ рдСрдкрд░реЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдЯреИрдХ рдкрд░ рдмрд╕ рд░рд╣ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдПрдХ рдЫрджреНрдо рд░рдЬрд┐рд╕реНрдЯрд░ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ REG_STACK рдФрд░ рдпрджрд┐ рдЗрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдирд┐рд░реНрджреЗрд╢ рдЬрдирд░реЗрдЯрд░ рдХреЛ get_local рдФрд░ set_local рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВред рдлрд┐рд░ рдЙрдкрдпреБрдХреНрдд рд╣реЛрдиреЗ рдкрд░ regalloc рдЗрд╕ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдкреБрдирдГ:

рдПрдХ рдЕрдЪреНрдЫреА рдЬреЗрдПрд╕ рдЗрдВрдЯрд░рдСрдк рдкрд░рдд

рдХреНрдпрд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ wasm рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╕рдордЭрджрд╛рд░ рддрд░реАрдХрд╛ рд╣реИ? рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдбреЛрдо/рдЬреЗрдПрд╕ рдЗрдВрдЯрд░рдСрдк рдЕрднреА рднреА wasm рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдерд╛ред рдЕрдЧрд░ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рддреЛ рдпрд╣ рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реЛрдЧрд╛!

рдЖрдк рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЖрдпрд╛рдд рдФрд░ рдирд┐рд░реНрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ float64 рдФрд░ int32 рддрд░реНрдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рд╛рдЭрд╛ рд░реИрдЦрд┐рдХ рд╕реНрдореГрддрд┐ рд╣реИред рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдЙрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдг рдЗрддрдирд╛ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

(рдореИрдВ рдЗрд╕реЗ рдЖрдкрдХреЗ (@neelance) рд░реЗрдкреЛ рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭ рдкрд╛рдпрд╛ рдХрд┐ рдореБрджреНрджреЛрдВ рдХреЛ рдХреИрд╕реЗ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП...)

рдХреНрдпрд╛ $#$1 js.foo #$ рдХреЛ рдХреЙрд▓/рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп wabt рдЯреВрд▓рдЪреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛?
рдореБрдЭреЗ рдкреВрд░реНрдг nodejs рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди рдХреЗ рдмрдЬрд╛рдп wabt рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд▓рдЧрд╛ :)

(рдореИрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг main.go рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХрд╛ рднреА рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж a.wasm рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдЧреЛ-рджреБрднрд╛рд╖рд┐рдпрд╛/рд╡реИрдЧрди#36...)

рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХрд╛рдВрдЯреЗ рдкрд░ рдореБрджреНрджреЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рд╣реИ, рд╡рд╣рд╛рдВ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХрд╛ рдкреНрд░рд╢реНрди рдирд╣реАрдВ рд╕рдордЭрддрд╛ред рдХреНрдпрд╛ рдЖрдк wasm-interp рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдХреБрдЫ рдХреЛ wasm рдмрд╛рдЗрдЯрдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдмрд╛рдХреА рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ JS рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреИрд╕реЗ рдХрдВрд╕реЛрд▓ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ: рдХреНрдпрд╛ рдЖрдкрдиреЗ https://github.com/neelance/go/tree/wasm-wip/misc/wasm рджреЗрдЦрд╛ рд╣реИ?

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

  1. рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдкреНрд░реЛрдЧреНрд░рд╛рдо рдмрдирд╛рдПрдВ рдЬреЛ рдХрдВрд╕реЛрд▓ рдкрд░ рдкреНрд░рд┐рдВрдЯ рд╣реЛред
  2. GOOS=js GOARCH=wasm ./bin/go build -o out.wasm wasm.go
  3. ./misc/wasm/go_js_wasm_exec out.wasm

рдЖрдирдВрдж рд▓реЗрдирд╛ !

рдпрджрд┐ рдЖрдк go_js_wasm_exec рдХреЛ рдЕрдкрдиреЗ PATH рдореЗрдВ рд▓рд┐рдВрдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк go run рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред ;-)

рдЕрд░реЗ рджреЛрд╕реНрддреЛрдВ, WASM рдХреЗ рд▓рд┐рдП Go рдХреЗ рд╕рд╛рде рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣рдг рдХреА рд╕реНрдерд┐рддрд┐ рдХреИрд╕реА рд╣реИ? рд╣рдордиреЗ рдХреНрд░рд┐рд╕реНрдЯрд▓ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рдФрд░ рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреНрд░рд┐рд╕реНрдЯрд▓ рд╕рдВрднрд╡рддрдГ рдЙрдиреНрд╣реАрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЬреАрд╕реА рдХреЗ рд╕рд╛рде рд╣реИрдВред рдХреНрдпрд╛ рдРрд╕рд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рд╕реЗ рд╣рдо рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ WebAssembly рдХреЗ рдХрд╛рд░реНрдпрдХрд╛рд░реА рд╕рдореВрд╣ рдХрд╛ рд╕рд╣рдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВ рдпрд╛ рдЙрд╕рдХреА рдорджрдж рдХрд░ рд╕рдХреЗрдВ?

рдХреГрдкрдпрд╛ рдмреЗрдЭрд┐рдЭрдХ рдКрдкрд░ рдмрддрд╛рдП рдЧрдП рд╕реВрддреНрд░ рдкрд░ рдЭрдВрдХрд╛рд░ рдХрд░реЗрдВ рдпрд╛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХрд╣рд╛рдВ рдЪреИрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ/рд╕рдВрднрд╡рддрдГ рд╕рд╣рдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ WASM рдХреЗ рдкрд░рд┐рдкрдХреНрд╡ рд╣реЛрдиреЗ рддрдХ рдУрдкрд▓ рдкрде рдЕрдм рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдордЭрджрд╛рд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд╛рдирдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЙрд╕ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗред

рд╣реЗ рджреЛрд╕реНрддреЛрдВ, рдореИрдВ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рдорд╣реАрдиреЛрдВ рд╕реЗ рдЬреЛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЙрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХреЛрдб рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВ: https://github.com/matthewmueller/joy

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

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕ рдЧреНрд░рд╛рдл рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдФрд░ WebAssembly рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдХрдард┐рди рд╣реЛрдЧрд╛ред рдореИрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдорджрдж рдФрд░ рд╕рд╣рдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдЬреЛ рдореИрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреБрдЫ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд▓рд┐рдВрдХ рджрд┐рдП рдЧрдП рд╣реИрдВ:

рдЙрдкрд░реЛрдХреНрдд рдХреНрд░рд┐рд╕реНрдЯрд▓ рдХреЗ рд▓рд┐рдП рдЬреАрд╕реА рдореБрджреНрджреЗ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдЗрд╕рдореЗрдВ рдЧреЛ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, @kripken рдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ рдФрд░ рдпрд╣рд╛рдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВ: https://github.com/WebAssembly/binaryen/issues/1312#issuecomment -348409211

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╕рднреА рдХреЗ рдкрд╛рд╕ рдЕрдЪреНрдЫреА рдЫреБрдЯреНрдЯрд┐рдпрд╛рдВ рд╣реЛрдВрдЧреАред рдпрд╣рд╛рдБ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЕрджреНрдпрддрди рд╣реИ:

рдЕрдкрдиреЗ рдЖрдЦрд┐рд░реА рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рдж рд╕реЗ, рдореИрдВ рдкреНрд░рддрд┐рдмрд┐рдВрдм, рд╕реНрдЯреИрдХ-рдЧреНрд░реЛрдЗрдВрдЧ рдФрд░ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдКрдкрд░ рдФрд░ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрдзрд╛рд░реЛрдВ рдиреЗ рдЗрд╕реЗ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рджрд┐рдпрд╛ рдХрд┐ 136 stdlib рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рд╕реЗ 104 рдХреЗ рдкрд░реАрдХреНрд╖рдг рдЕрдм рдЧреБрдЬрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдИ рд╕рдВрдХрд▓рдХ рдкрд░реАрдХреНрд╖рдг рд╣рд░реЗ рд╣реИрдВред рдЕрдЪреНрдЫреА рдкреНрд░рдЧрддрд┐!

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдлреАрдЪрд░ рд╕рдорд░реНрдерди рдФрд░ рд╢реБрджреНрдзрддрд╛ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдЕрднреА рддрдХ рдкреНрд░рджрд░реНрд╢рди рдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреБрдХреВрд▓рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

рдореИрдВ рдкреНрд░рдпреЛрдЧ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ (рдФрд░ Promise рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЧреЛрдлрд░рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рдЧреЛрдлрд░рдЬреЗрдПрд╕ рдХреЗ рд▓рд┐рдП рдЗрддрдирд╛ рдЕрдзрд┐рдХ рд╣реИ, рдЖрдкрдиреЗ рд╢рд╛рдпрдж рдореБрдЭреЗ рд╕реА ++ рд╕реЗ рдмрдЪрд╛рдпрд╛ рд╣реИ !), рдЗрд╕рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗрд╡рд▓ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдкреНрд░рдпрд╛рд╕ рдореЗрдВ рд╣реИ рдФрд░ рд╢рд╛рдпрдж рдЧреЛ рдФрд░ WASM рд▓рдХреНрд╖реНрдп рдХреЗ рдмреАрдЪ рдЕрд╕рдВрдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдЧрд░реВрдХрддрд╛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреАред рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд @rossberg рдЙрджреНрдзрд░рдг рдХреЛ рдбрдВрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдпреБрдХреНрдд рд╕реНрдерд╛рди рдЪрд╛рд╣рддрд╛ рдерд╛, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЬрдм рдореИрдВ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ WASM рдХреЛ рдЧреЛрд░реМрдВрдЯрд╛рдЗрди рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдХреИрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

@рдиреАрд▓реЗрдВрд╕ рдиреЗ рдЙрддреНрддрд░ рджрд┐рдпрд╛ :

@cznic рдиреЗ рдЙрддреНрддрд░ рджрд┐рдпрд╛ :

@рдиреАрд▓реЗрдВрд╕ рдиреЗ рд▓рд┐рдЦрд╛ :

рд╣рдо WebAssembly рдХреЗ call рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕реНрдЯреИрдХ рдкреНрд░рдмрдВрдзрди рдФрд░ рдХреЙрд▓ рддрдВрддреНрд░ рдХреЛ рд░реЛрд▓ рдХрд░реЗрдВрдЧреЗред рд╕реНрдЯреИрдХ рдЙрд╕ рд░реИрдЦрд┐рдХ рдореЗрдореЛрд░реА рдкрд░ рд░рд╣реЗрдВрдЧреЗ рдФрд░ рдЧреЛ рд░рдирдЯрд╛рдЗрдо рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рд╕реНрдЯреИрдХрдкреЙрдЗрдВрдЯрд░ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рд╣реЛрдЧрд╛ред рд╕рднреА рдХреЛрдб рдПрдХ рд╣реА WebAssembly рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд░рд╣реЗрдВрдЧреЗред рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд╛рдЦрд╛ рдХреЗ рд╕рд╛рде рдЯреЙрдкрд▓реЗрд╡рд▓ рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ (рдпрд╛ WebAssembly рдХрд╛ br_table рдЖрдзрд╛рд░рд┐рдд рд╕рдордХрдХреНрд╖) рд╣реЛрдЧрд╛ред рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ SSA рдореВрд▓ рдмреНрд▓реЙрдХ рдкреНрд░рддрд┐ рдПрдХ рд╢рд╛рдЦрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реЛрдЧрд╛ред

рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

@minux рдиреЗ рд▓рд┐рдЦрд╛ :

рд╣рдорд╛рд░рд╛ рд╡рд░реНрддрдорд╛рди рдирд┐рд╖реНрдХрд░реНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдЧрд░ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ
рд╡рд░реНрддрдорд╛рди рдореЗрдВ setjmp/longjmp рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рд╣реИ
рдПрдХ рдЬреАрд╕реА рдкреЛрд░реНрдЯ рдХреАред рд╣рдореЗрдВ рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдЯреИрдХ рдЕрдирдЗрдВрдбрд┐рдВрдЧ рди рд╣реЛ рдЬрд╛рдП рдФрд░
рдЕрдкрд╡рд╛рдж рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╕рдорд░реНрдердиред

@cznic рдЬреИрд╕рд╛ рдКрдкрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВ wasm рдХреЗ call рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдореИрдВ рд░реИрдЦрд┐рдХ рд╕реНрдореГрддрд┐ рдкрд░ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдвреЗрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░ setjmp/longjmp рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

WASM рдХреЗ "рд╕рд╣-рдбрд┐рдЬрд╛рдЗрдирд░" рдФрд░ "рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓реЗрдЦрдХ" рдХреЗ рдЕрдиреБрд╕рд╛рд░, call рдХреА рд╕реАрдорд╛рдПрдВ, рдЬреЛ рдЗрд╕реЗ рдЧреЛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкрдпреБрдХреНрдд рдмрдирд╛рддреА рд╣реИрдВ, рдХрд╛ рд╕реБрд░рдХреНрд╖рд╛/рд╕реБрд░рдХреНрд╖рд╛ рд╕реЗ рдХреБрдЫ рд▓реЗрдирд╛-рджреЗрдирд╛ рд╣реИ:

@rossberg рдиреЗ рд▓рд┐рдЦрд╛ :

рдЖрдк рдХреЙрд▓ рд╕реНрдЯреИрдХ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ "рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд" рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рдкрд╕реА рдкрддреЗ (*) рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рддреЛ рдЖрдк рдЕрдкрдиреЗ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рдХреЗ рд▓рд┐рдП рд░реИрдЦрд┐рдХ рд╕реНрдореГрддрд┐ рдореЗрдВ рдЫрд╛рдпрд╛ рд╕реНрдЯреИрдХ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, WebAssembly рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдмрд┐рд▓реНрдЯ-рдЗрди "рд╕реНрдЯреИрдХ" рдХреА рдХрд┐рд╕реА рднреА рдзрд╛рд░рдгрд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдХрдИ рдЕрдиреНрдп рдбрд┐рдЬрд╝рд╛рдЗрди рдирд┐рд░реНрдгрдпреЛрдВ рдХреА рддрд░рд╣, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ: рдХреНрдпреЛрдВрдХрд┐ Wasm рд╡реЗрдм рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ "рд╕реБрд░рдХреНрд╖рд┐рдд" рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдХреЛрдИ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рд╣реИ, рдХреЛрдб рдХреЛ рдореЗрдореЛрд░реА рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдФрд░ рдкрддрд╛ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ), рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рдХрд╛рд╕реНрдЯ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рдЖрджрд┐ред рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕реНрдкрд╖реНрдЯ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реЛрдиреЗ рд╕реЗ рдЕрдиреНрдп рд▓рд╛рдн рднреА рдорд┐рд▓рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдкреНрд░рднрд╛рд╡реА рд░рдЬрд┐рд╕реНрдЯрд░ рдЖрд╡рдВрдЯрди, рд╕рдорд╛рдирд╛рдВрддрд░ рдпрд╛ рдЖрд▓рд╕реА рд╕рдВрдХрд▓рди, рдЙрдкрдпреЛрдЧреА рдбрд┐рдмрдЧ рдЙрдкрдХрд░рдг, рдЖрджрд┐ред

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

[тАж]

(*) рдЖрдк рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдкреВрд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдПрдХ рд▓реВрдкрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдХреЗ, рдПрдХ рд╡рд┐рд╢рд╛рд▓ рддрд╛рд▓рд┐рдХрд╛ рдХреВрдж рдореЗрдВ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рд░рд┐рдЯрд░реНрди рдкрддреЗ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рд╢рд╛рдпрдж рдмрд╣реБрдд рдзреАрдорд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ WebAssembly рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЛ рд╣рд░рд╛ рджреЗрдЧрд╛ ред

рддреЛ @neelance рдЬреЛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЙрд╕рдХрд╛ WASM рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рд╢рд╛рдпрдж рдЙрдк-рд░реВрдкреА рд╣реЛрдЧреА?

рдЧреЛрдлрд░рдЬреЗрдПрд╕ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ @ рдиреАрд▓реЗрдВрд╕ рдХреЗ рдХреМрд╢рд▓ рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗрддреЗ рд╣реБрдПред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ "WASM рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рд╕рд╛рде рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛" рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдореИрдВ рдЖрдкрдХреЛ рдпрд╣ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ:

рд╣рд╛рдВ, рд╡рд░реНрддрдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг WebAssembly рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЗрд╖реНрдЯрддрдо рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдЬ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ WebAssembly рдХреЗ call рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП, WebAssembly рдХреЛ рдХреБрдЫ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдЧреЛ рд╕рд╛рдЗрдб рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдореЗрд░реЗ рдкрд╛рд╕ 80% рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдЪреАрдЬрд╝ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ 100% рд╣реИ рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдХрд╛рд▓реНрдкрдирд┐рдХ рд╣реИред ;-)

рдпрджрд┐ рдЖрдк рдЕрдзрд┐рдХ рддрдХрдиреАрдХреА рд╡рд┐рд╡рд░рдг рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭрд╕реЗ #webassembly рдкрд░ https://invite.slack.golangbridge.org/ рдкрд░ рдмрд╛рдд рдХрд░реЗрдВред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ "WASM рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЗ рд╕рд╛рде рдЕрдВрддрдГрдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛" рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрд╕ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред

рд╢рд╛рдпрдж @rossberg _тАЬрд╡реЗрдмрдЕрд╕реЗрдВрдмрд▓реА рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╣рд░рд╛рдиреЗтАЭ_ рдХреЗ рд╕рд╛рде рдЬрд┐рд╕ рдмрд╛рдд рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ рд╣реИ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЯреВрд▓реНрд╕ рдФрд░ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдСрдкрд░реЗрдмрд┐рд▓рд┐рдЯреА, рдЬреЛ call рдХреЛ рд╕рд╛рдЗрдб-рд╕реНрдЯреЗрдкрд┐рдВрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдЖрдкрдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдХреЗ рдкреНрд░реЛрдЯреЗрдХреНрдЯреЗрдб рдХреЙрд▓ рд╕реНрдЯреИрдХ switch рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрд╡рдпрдВ рдХреЗ рдирд┐рд░рдВрддрд░рддрд╛?

рд▓реЗрдХрд┐рди рдЙрд╕рдХреЗ рд▓рд┐рдП, WebAssembly рдХреЛ рдХреБрдЫ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ WASM рдЧреЛрд░рдЖрдЙрдЯрд┐рди (рд╣рд░реЗ рдзрд╛рдЧреЗ) рдХреЗ рд╕рд╛рде рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ Promise рдореЙрдбрд▓ рдХреЛ рдЦреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдЯреИрдХ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИрдВред

рдореЗрд░реЗ рдкрд╛рд╕ 80% рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдЧрд╛ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рдЪреАрдЬрд╝ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ 100% рд╣реИ рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдХрд╛рд▓реНрдкрдирд┐рдХ рд╣реИред ;-)

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

рд╡реЗрдм/рдбрдмреНрд▓реНрдпреВрдПрдПрд╕рдПрдо рдкрд░ рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ, рд╣рдо рдЧреЛ рдпрд╛ рдЕрдиреНрдп рднрд╛рд╖рд╛рдПрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рд╣рд░реЗ рд░рдВрдЧ рдХреЗ рдзрд╛рдЧреЗ рд╣реИрдВ, рддреЛ рд╢рд╛рдпрдж рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдбрдмреНрд▓реНрдпреВрдПрдПрд╕рдПрдо рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬреАрд╕реАрд╕реА рдХреЗ -fsplit-stack рдХреЗ рд╕рдорд╛рди) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдмреЗрд╣рддрд░ рдореМрдХрд╛ рд╣реИ? .

рдпрджрд┐ рдЖрдкрдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ WASM рдХреА рд╡рд░реНрддрдорд╛рди рд╕реАрдорд╛рдУрдВ рдХреЗ рднреАрддрд░ рдЗрд╖реНрдЯрддрдо рдкреНрд░рджрд░реНрд╢рди рдХрд╛ 80% рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд╕реБрдЦрдж рдЖрд╢реНрдЪрд░реНрдп рд╣реЛрдЧрд╛ред рдпрджрд┐ рдкреНрд░рджрд░реНрд╢рди рдкрд░рд┐рдгрд╛рдо рдЕрддреНрдпрдзрд┐рдХ рдЦрд░рд╛рдм рд╣реИ, рддреЛ рдпрд╣ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ Promise рдХреЙрд▓рдмреИрдХ рдЖрдзрд╛рд░рд┐рдд рдореЙрдбрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╣рд░реЗ рдзрд╛рдЧреЗ рдХреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдпрджрд┐ рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ "рд╡реЗрдмрдЕрд╕реЗрдВрдмрд▓реА рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдХреЛ рд╣рд░рд╛рдиреЗ" рдХреА рд╡рд┐рдбрдВрдмрдирд╛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ) рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ :-)ред

рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВ рдПрдХ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЧреЛ рдореЗрдВ рдЯрд╛рдЗрдкрдХреНрд▓рд╛рд╕ рдЬреЗрдирд░рд┐рдХ рдЬреЛрдбрд╝рдиреЗ (рдФрд░ рдЧреЛ 2 рдХреЗ рд▓рд┐рдП рдЬреЗрдиреЗрд░рд┐рдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд╛ рдЕрдкрдирд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкреНрд░рджрд╛рди рдХрд░рдиреЗ) рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ (рдЕрднреА рддрдХ рдХреЛрдИ рджреГрдврд╝ рдирд┐рд░реНрдгрдп рдирд╣реАрдВ), рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдмрдврд╝рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╣рд┐рд╕реНрд╕рд╛ рдХрд░рдиреЗ рдореЗрдВ рднреА рд╢рд╛рдорд┐рд▓ рд╣реВрдВ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ред

@ shelby3 рдХреГрдкрдпрд╛ рдлрд╝реЙрд░реНрдореЗрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрдВрдж рдХрд░реЗрдВ рдЬреЛ рдЖрдкрдХреЗ рдЯреЗрдХреНрд╕реНрдЯ рдХреЛ рдЗрддрдирд╛ рдЫреЛрдЯрд╛ рдмрдирд╛рддрд╛ рд╣реИ рдХрд┐ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЗ рдкрдврд╝рдиреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ рдкрд╣рд▓реЗ рди рд▓рд┐рдЦреЗрдВред рдЫрд┐рдкреА рд╣реБрдИ рдмрд╛рддреЛрдВ рдХрд╛ рд╕рдВрдХреЗрдд рджрд┐рдП рдмрд┐рдирд╛ рдЗрд╕реЗ рдЕрдкрдардиреАрдп рдмрдирд╛рдирд╛ рдкрд╛рдардХреЛрдВ рдХреЛ рджреЛ рдмрд╛рд░ (рдпрд╛ рдЕрдзрд┐рдХ) рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдореВрд▓ рдЗрд░рд╛рджреЗ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИред

@ рд╢реЗрд▓реНрдмреА 3 рдореИрдВрдиреЗ рдЖрдкрдХреЗ рдкреЛрд╕реНрдЯ рдХреЛ рдЫреЛрдЯреЗ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реЙрд░реНрдореЗрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдРрд╕рд╛ рдХрд░рдирд╛ рдмрдВрдж рдХрд░реЗрдВред

рдмрджрд▓реЗрдВ https://golang.org/cl/102835 рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ: go/build, cmd/dist: add js/wasm architecture

рдмрджрд▓реЗрдВ https://golang.org/cl/103255 рдореЗрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ: wasm: add scripts for running WebAssembly binaries

рдмрджрд▓реЗрдВ https://golang.org/cl/103256 рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ: cmd/compile: add SSA config options noAvg and noHmul

рдмрджрд▓реЗрдВ https://golang.org/cl/103275 рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ: cmd/compile/internal/gc: factor out beginning of SSAGenState.Call

рдмрджрд▓реЗрдВ https://golang.org/cl/103295 рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ: cmd/compile: add wasm architecture

рдмрджрд▓реЗрдВ https://golang.org/cl/103535 рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ: cmd/compile: wasm stack optimization

рдмрджрд▓реЗрдВ https://golang.org/cl/103795 рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ: cmd/link: add wasm architecture

рдмрджрд▓реЗрдВ https://golang.org/cl/103877 рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ: runtime: add js/wasm architecture

рдмрджрд▓реЗрдВ https://golang.org/cl/103915 рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ: internal/bytealg: add wasm architecture

рдареАрдХ рд╣реИ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕реАрдПрд▓ рдЙрдбрд╝рдиреЗ рд▓рдЧреЗ рд╣реИрдВред
рдкреЛрд░реНрдЯрд┐рдВрдЧ рдиреАрддрд┐ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╣рдо рдХреИрд╕рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ: https://github.com/golang/go/wiki/PortingPolicy ?
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдмрд┐рд▓реНрдбрд░реНрд╕ рдХреИрд╕реЗ рджрд┐рдЦреЗрдВрдЧреЗ?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ @neelance рдХрд┐ рдЖрдк рдмрдВрджрд░рдЧрд╛рд╣ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрди рдЕрдк рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
(рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рд╕реАрдПрд▓ рдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рдпрд╣ рд╕рдм рдмрддрд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдВрдиреЗ рдЙрди рд╕рднреА рдХреЛ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИред)

рд╣рд╛рдВ, рдореИрдВ рдмрдВрджрд░рдЧрд╛рд╣ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред @bradfitz рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдмрд┐рд▓реНрдбрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдмрджрд▓реЗрдВ https://golang.org/cl/106995 рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ: sync/atomic: add wasm architecture

рдмрджрд▓реЗрдВ https://golang.org/cl/106996 рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ: math: add wasm architecture

рдмрджрд▓реЗрдВ https://golang.org/cl/106997 рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ: time: add wasm architecture

рдмрджрд▓реЗрдВ https://golang.org/cl/106998 рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ: mime: add wasm architecture

рдмрджрд▓реЗрдВ https://golang.org/cl/109195 рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ: syscall/js: add package

рдмрджрд▓реЗрдВ https://golang.org/cl/109976 рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ: syscall: enable some nacl code to be shared with js/wasm

рдмрджрд▓реЗрдВ https://golang.org/cl/109977 рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ: os: add js/wasm architecture

рдмрджрд▓реЗрдВ https://golang.org/cl/109995 рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ: net: add js/wasm architecture

рдмрджрд▓реЗрдВ https://golang.org/cl/110095 рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ: crypto: add js/wasm architecture

рдмрджрд▓реЗрдВ https://golang.org/cl/110096 рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ: all: skip unsupported tests for js/wasm

рдмрджрд▓реЗрдВ https://golang.org/cl/112736 рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ: env/js-wasm, dashboard: add start of a js-wasm builder

рдмрджрд▓реЗрдВ https://golang.org/cl/113515 рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ: misc/wasm: make wasm_exec.js more flexible

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

рдмрджрд▓реЗрдВ https://golang.org/cl/114197 рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ: runtime, sycall/js: add support for callbacks from JavaScript

рд╣рд╛рдп рд╕рдм, рдореИрдВ @neelance рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдХрд╛рдо рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ WASM рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде (рдорд╛рди рд▓реЗрдВ, рдЗрд╕рдХреА рдкрд╣рд▓реА рд░рд┐рд▓реАрдЬ), cgo рднреА рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рд╕реА рдХреЛрдб рдПрдореНрдмреЗрдб рдХрд░реЗрдВ, GO рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ, WASM рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВред рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реА рдорд╣рд╛рд╢рдХреНрддрд┐ рд╣реЛрдЧреАред рдЖрдк рд╕рдм рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ред

@cmaster11 рдпрд╣ рдЬрд╛рдирдХрд░ рдЦреБрд╢реА рд╣реБрдИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рдкрд╕рдВрдж рдЖрдпрд╛ред :) рдЖрдкрдХреЗ рдкреНрд░рд╢реНрди рдкрд░: cgo рд╕реА рдЯреВ рдЧреЛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдпрд╣ рджреЛрдиреЛрдВ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдЙрдирдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрдВрдкрд╛рдЗрд▓рд░реНрд╕ рдХреЗ рд╕рд╛рде рдорд╢реАрди рдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдПрдХ рдмрд╛рдЗрдирд░реА рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░рддрд╛ рд╣реИред рд╕реА рдХреЛрдб рдХреЛ WebAssembly рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА emscripten рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рджреЛрдиреЛрдВ WebAssembly рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдХреЛ рд░рдирдЯрд╛рдЗрдо рдкрд░ рд▓реЛрдб рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЧреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░реЗрдЧреАред

рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд┐рд▓реЗрдирд┐рдпрд▓реНрд╕

@ рд╢реЗрд▓реНрдмреА 3 рдореИрдВ рд╢рд╛рдпрдж рдЖрдкрд╕реЗ рдмрдбрд╝рд╛ рд╣реВрдБ рдФрд░ рдореИрдВрдиреЗ рдЖрдкрдХреЛ рдиреАрдЪрд╛ рджрд┐рдЦрд╛рдпрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛ рдмрд╕ рдЖрдкрдХреА рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ рд╣реИред

рдпрд╣ рд╕рддреНрддрд╛ рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИред @andybons рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреА рдкреЛрд╕реНрдЯ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рдЖрдк рдкрд░ рдПрдХ рдПрд╣рд╕рд╛рди рдХрд┐рдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдЗрд╕реЗ рджреВрд╕рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХреЗред

рдмрд┐рдирд╛ webidl рдХреЗ js/wasm рд╕рдкреЛрд░реНрдЯ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд░ рдХреЗ рднреАрддрд░ рд╕реЗ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЬреНрдпрд╛рджрд╛ рдЗрдВрдЯрд░рдСрдкрд░реЗрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╛рд╕рдо рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рд╡реЗрдмрд┐рдбрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╕реА ++ рдлреВ рдХреНрд▓рд╛рд╕ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдкрд░ рдореИрдВрдиреЗ рдПрдореНрд╕реНрдХреНрд░рд┐рдкреНрдЯреЗрди рд╡реЗрдмрд┐рдбрд▓ рдкрд╛рдпрдерди рдЯреВрд▓ рдкрд░ рдПрдХ рдЕрдЪреНрдЫреА рдирдЬрд╝рд░ рдбрд╛рд▓реАред
рдореИрдВ рдПрдХ рдЧреЛрд▓рдВрдЧ рдмрддрдЦ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╡реЗрдмрд┐рдбрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдЬреИрд╕реЗ рдлреВ рдХреНрд▓рд╛рд╕ред
рд╡рд╣ рддрд░реНрдХ рдЕрдиреНрдп wasm рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдСрдкрд░реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд▓реЛрдб рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЙрдирдХреЗ рдорд╛рд░реНрд╢рд▓рд┐рдВрдЧ рд╕реНрдЯрдмреНрд╕ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдФрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП idl рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдиреНрдпрдерд╛ рд╣рдореЗрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡реНрдпреВрдЕрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди wasm рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдХреМрди рд╕реЗ рдХреЙрд▓ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред

python /usr/lib/emscripten/tools/webidl_binder.py Foo.idl glue
This generates:
glue.cpp
glue.js
WebIDLGrammar.pkl

emcc -v Foo.cpp my_glue_wrapper.cpp --post-js glue.js -o output.js
This generates:
output.js
output.wasm

emrun --list_browsers
emrun --browser chrome handcrafted_Foo.html 
emrun --browser firefox handcrafted_Foo.html 
firefox handcrafted_Foo.html &
chrome handcrafted_Foo.html &

$ cat Foo.h

#ifndef FOO_H
#define FOO_H (1)

class Foo {
public:
  int getVal();
  void setVal(int v);
 private:
  int nValue;
};

#endif

$ cat Foo.cpp

#include "Foo.h"

int Foo::getVal() {
  return nValue;
}

void Foo::setVal(int v) {
  nValue = v;
}

$ cat my_glue_wrapper.cpp

#include "Foo.h"
#include "glue.cpp"

$ cat Foo.idl

interface Foo {
        void Foo();
        long getVal();
        void setVal(long v);
};

$ cat handcrafted_Foo.html

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>WebAssembly Sample</title>
  </head>

  <body>
    <h1>Web Assembly</h1>

    <div class="output">
        <pre id="log"></pre>
    </div>

    <script src="output.js"></script>
    <script>      
      "use strict";


    function log() {
        document.querySelector('#log').textContent += Array.prototype.join.call(arguments, '') + '\n';
    }

    Module.onRuntimeInitialized = _ => {
      log(`blah `);
      var f = new Module.Foo();
      f.setVal(200);
      alert(f.getVal());
      log(`blah `);
    };

    </script>

  </body>
</html>

@ omac777 , рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдСрдк рдЧреЛ рдХреЗ 1.11 рдкреНрд░рд╛рд░рдВрднрд┐рдХ WebAssembly рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рд╣реИред

рдареАрдХред рдореИрдВ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реВрдБ рдХрд┐ webidl рдПрдХ рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╢реНрди рд╣реИрдВ рдХрд┐ wasm рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧреА рдмрдирд╛рдпрд╛ рдЬрд╛рдПред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдКрдкрд░ рдмрддрд╛рдП рдЧрдП Foo рдХреНрд▓рд╛рд╕ рдореЗрдВ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдЗрд╕рдХреЗ idl рдХреЗ рд╕рд╛рде-рд╕рд╛рде emscripten c++ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдореИрдВрдиреЗ рдПрдХ рдЧреЛрд▓рдВрдЧ рдмрддрдЦ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдЙрд╕рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рдХрд╣реЗрдВ рдХрд┐ рдореИрдВ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рд╡реЗ рд╕реА ++ рдлреВ рд╕реЗрдЯрд╡реИрд▓ рдФрд░ рдЧреЗрдЯрд╡реИрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдВред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдзреАрдорд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЧреЛ рдХреЗ рднреАрддрд░ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдирд╛ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рд▓рдХреНрд╖реНрдп рд╣реЛрдЧрд╛ред

рдореИрдВ foo.go.wasm.a's рдФрд░ foo.go.wasm.so's рдХреИрд╕реЗ рдмрдирд╛рдКрдВ? рдХреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ foo.wasm рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ foo.go.js рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ?
рдЕрдЧрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝реВрдЬрд╝ рд╕реЗ рднрд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдИ рдЬрд╛рддреА, рддреЛ рдХреНрдпрд╛ рдХреЛрдИ otherfoos.go.a.js рднреА рдЬреЗрдирд░реЗрдЯ рд╣реЛрддрд╛?

рдореИрдВ go.wasm.a рдФрд░ go.wasm.so рдХреЛ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП emcc output.wasm рд╕реЗ рдХреИрд╕реЗ рд▓рд┐рдВрдХ рдХрд░реВрдВ рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИ:
emcc -v Foo.cpp my_glue_wrapper.cpp --post-js glue.js -o output.js foo.go.wasm otherfoos.go.wasm.a

рдПрд╕рдбреАрдПрд▓ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдХреИрд╕реЗ рд▓рд┐рдВрдХ рдХрд░реЗрдВ рдЬреЛ emcc wasm рд╕реЗ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред

wasm рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг goroutines, MAXCPUcores, рдЪреИрдирд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрдм рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛?
рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдзрдиреНрдпрд╡рд╛рджред

@ omac777 , рдЧреЛ 1.11 рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ:

рдЧреЛ рдХреЛрдб рдПрдХ WebAssembly рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмреАрдЪ рдЖрдЧреЗ рдФрд░ рдкреАрдЫреЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

*.a рдпрд╛ *.so рдлрд╛рдЗрд▓реЛрдВ рдпрд╛ C рдпрд╛ GCC рдпрд╛ emcc рдпрд╛ SDL рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдСрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐рд╕реА рднреА рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВред рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рджрд╛рдпрд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдФрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

wasm рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг goroutines, MAXCPUcores, рдЪреИрдирд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрдм рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛?

рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЧреЛрд░рдЖрдЙрдЯреНрд╕ рдФрд░ рдЪреИрдирд▓реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ (рдЬреЛ рдХрд┐ рдЧреЛ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реИ)ред WebAssembly рдХреЗрд╡рд▓ рдПрдХ рдХреЛрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдпрджрд┐ рдЖрдкрдХрд╛ рдорддрд▓рдм MAXCPUCores рд╕реЗ рд╣реИред рдпрд╣ рдЧреЛ рдпрд╛ рдЧреЛ рдХреЗ WebAssembly рд╕рдорд░реНрдерди рдХреА рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИред

рддреЛ рдЖрдк рдХреНрдпрд╛ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдореИрдВ рдЬрд▓реНрдж рд╣реА рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рджреЗрдЦреВрдВрдЧрд╛?
GOARCH=wasm GOOS=js go build -o awesome.wasm.so -buildmode=c-shared foo.go

рддреЛ рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 4 рдХреЛрд░ рдпрд╛ 20 рдХреЛрд░ рд╡рд╛рд▓реЗ рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣реИрдВ, рддреЛ рдЧреЛ рдЬрдирд░реЗрдЯреЗрдб рд╡рд╛рд╕рдо рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХреЗрд╡рд▓ рдЙрди рдХреЛрд░ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛? рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдЖрдк рдХреИрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡реЗрдм рдЕрд╕реЗрдВрдмрд▓реА рд╕рдорд░реНрдерди рдЬрд╛рдиреЗ рдпрд╛ рдЬрд╛рдиреЗ рдХреА рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдмрддрд╛ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдпрд╣ WEBASSEMLY.org рдХреА рд╣реА рдПрдХ рд╕реАрдорд╛ рд╣реИ?

@ omac777 - рд╣рд╛рдВ, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ WebAssembly рдХреА рдПрдХ рд╕реАрдорд╛ рд╣реИ, рди рдХрд┐ рдЧреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиред

@ omac777 WASM рдореЗрдВ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рд╕рдорд░реНрдерди рдПрдХ рдХрд╛рд░реНрдп рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реИ рдФрд░ рдЗрд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд░рд┐рд▓реАрдЬрд╝ рд╣реЛрдиреЗ рддрдХ рдХреБрдЫ рд╕рдордп рд▓рдЧреЗрдЧрд╛ред

https://github.com/WebAssembly/threads/blob/master/proposals/threads/Overview.md

рддреЛ рдЖрдк рдХреНрдпрд╛ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдореИрдВ рдЬрд▓реНрдж рд╣реА рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рджреЗрдЦреВрдВрдЧрд╛?
GOARCH=wasm GOOS=js go build -o Awesome.wasm.so -buildmode=c-shared foo.go

рд╕рдВрднрд╡рддрдГ рдЧреЛ 1.12 рдореЗрдВред

рдЧреЛ рдХреЙрд▓рд┐рдВрдЧ рд╕реА/рд╕реА ++ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рд▓рдкреЗрдЯрдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдлрд┐рд░ рдЧреЛ рд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░реИрдкрд░ рдХреЛ рдЧреЛ 1.11 рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░реЗрдВред

рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдзрд╛рдЧреЗ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ (рд╢рд╛рдпрдж) рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬ/рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИ рдЬреЛ рд╡реЗрдмрдПрд╕реЗрдкреНрд▓реА (рд╕рдВрдХрд▓рди, рдЖрджрд┐) рдХрд╛ рдЙрдкрдпреЛрдЧ v1.11 рдореЗрдВ рдХреИрд╕реЗ рдХрд░реЗрдВ?

@SerkanSipahi , рдЕрднреА рдирд╣реАрдВред рд▓реЗрдХрд┐рди рд░рд┐рд▓реАрдЬ рд╕реЗ рдкрд╣рд▓реЗ рдбреЙрдХреНрд╕ рд╣реЛрдВрдЧреЗред

рдпрд╣ рдкреЛрд╕реНрдЯ рднреА рд╣реИ, рдЕрднреА рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ:
https://blog.gopheracademy.com/advent-2017/go-wasm/

рдпрд╣ рдореЗрд░реЗ рд╕рд╛рде рд╣реБрдЖ рд╣реИ рдХрд┐ рд╣рдордиреЗ (рдЖрдИрдЖрдИрдЖрд░рд╕реА) рдПрдХ wasm рдореЙрдбреНрдпреВрд▓ рдХреЗ export рдЦрдВрдб рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдореИрдкрд┐рдВрдЧ (рди рд╣реА рддрдВрддреНрд░) рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред

рдореИрдВрдиреЗ #25612 рджрд╛рдпрд░ рдХрд┐рдпрд╛ рд╣реИред

wasm рд▓рдХреНрд╖реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдХреГрдкрдпрд╛ рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВ/рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд░реЗрдВ рдХрд┐ рдХреИрд╕реЗ рдЬрд╛рдПрдВ:
- рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП wasm рд╕реЗ рдФрд░ рдПрдХ рдЧреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд░реНрдпрд╛рдд/рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
-рд▓рд┐рдВрдХ sdl2/webgl/qt рдПрдХ рдЧреЛрд▓рд╛рдВрдЧ рдмрд╛рдЗрдирд░реА рдХреЗ рд▓рд┐рдП
-рд╕рднреА sdl2/webgl/qt рдИрд╡реЗрдВрдЯреНрд╕ рдХреЛ рдкрдХрдбрд╝реЗрдВ
-рдпрджрд┐ рд╣рдо рд▓реВрдк рдореЗрдВ рд╣реИрдВ рддреЛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╕реАрдкреАрдпреВ рд╕рдордп рдХреЛ рд╕реНрд▓реАрдк рдХреЗ рд╕рд╛рде рдУрдПрд╕ рдкрд░ рд╡рд╛рдкрд╕ рдЫреЛрдбрд╝ рджреЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
emscripten emscripten_sleep(10) рдореЗрдВ

go рдЯреВрд▓ рд╕реЗ output.html рдлрд╝рд╛рдЗрд▓ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕/рдХреНрд░реЛрдо рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рд▓рдЧрд╛рддрд╛рд░ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рднрд▓реЗ рд╣реА рдПрдХ рд╕рдлрд▓ output.html рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ output.html рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдПрдХ рд╕рдлрд▓рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗред

@ omac777 , рд╣рдо рдКрдкрд░ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЪреБрдХреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЯреНрдпреВрдирд┐рдВрдЧ:

wasm рд▓рдХреНрд╖реНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдХреГрдкрдпрд╛ рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВ/рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд░реЗрдВ рдХрд┐ рдХреИрд╕реЗ рдЬрд╛рдПрдВ:
- рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП wasm рд╕реЗ рдФрд░ рдПрдХ рдЧреЛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдирд┐рд░реНрдпрд╛рдд/рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
-рд▓рд┐рдВрдХ sdl2/webgl/qt рдПрдХ рдЧреЛрд▓рд╛рдВрдЧ рдмрд╛рдЗрдирд░реА рдХреЗ рд▓рд┐рдП
-рд╕рднреА sdl2/webgl/qt рдИрд╡реЗрдВрдЯреНрд╕ рдХреЛ рдкрдХрдбрд╝реЗрдВ

рдКрдкрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЧреЛ 1.11 рдХреЗ рджрд╛рдпрд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕рдорд░реНрдерд┐рдд, рдкреНрд░рд▓реЗрдЦрд┐рдд рдпрд╛ рд╕рдВрднрд╡ рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

-рдпрджрд┐ рд╣рдо рд▓реВрдк рдореЗрдВ рд╣реИрдВ рддреЛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╕реАрдкреАрдпреВ рд╕рдордп рдХреЛ рд╕реНрд▓реАрдк рдХреЗ рд╕рд╛рде рдУрдПрд╕ рдкрд░ рд╡рд╛рдкрд╕ рдЫреЛрдбрд╝ рджреЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП

@neelance рдХреЛ JS рдФрд░ рдЧреЛ рд╢реЗрдбреНрдпреВрд▓рд░ рдХреЗ рдмреАрдЪ рдХреЙрд▓рдмреИрдХ рдФрд░ рдЗрдВрдЯрд░рдСрдк рдорд┐рд▓рд╛, рдЗрд╕рд▓рд┐рдП рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ time.Sleep рдФрд░ рджреЛрд╕реНрддреЛрдВ рдХреЛ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВ рд╕рдордЭрддрд╛/рд╕рдордЭрддреА рд╣реВрдВ рдХрд┐ Go 1.11 рдореЗрдВ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рднреА рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреА рджреВрд░/рд▓рдВрдмрд╛ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред рдРрд╕реЗ рд▓реЛрдЧ рд╣реИрдВ рдЬреЛ рдХреНрдпреВрдЯреА рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЧреЛ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЙрд╕ рдиреБрд╕реНрдЦрд╛/рдХреНрдпреВрдЯреА рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╕рдм рдЕрдЪреНрдЫрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╕реАрдорд╛рдПрдВ рд╣реИрдВ (рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЛрдИ рдХреНрдпреВрдЯреА рдХреНрдпреВрдЯреА рдирд╣реАрдВ рд╣реИ рдФрд░ рдХреЛрдИ рдХреНрдпреВрдЯреА 64 рдмрд┐рдЯ рдЖрд░реНрдо рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рд╣реИ) рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛)ред рдСрдЯреЛрдХреИрдб рдореЗрдВ рд╡рд┐рдВрдбреЛрдЬрд╝ рдФрд░ рдореИрдХреЛрдЬрд╝ рдХреЗ рд▓рд┐рдП рдПрдорд╕реНрдХреНрд░рд┐рдкреНрдЯрди, рд╕реА ++ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡реЗрдмрд╕реИрдореНрдк рд╕рдорд╛рдзрд╛рди рд╣реИред рдореИрдВ рдЕрднреА рднреА рдорд╣рд╕реВрд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЧреЛрд▓рдВрдЧ рдЕрднреА рднреА рдЙрдкрдпреЛрдЧ рдХреЗ рдХреБрдЫ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╡рд╢ рд╣реИ, рдЬрд╣рд╛рдВ рд╕реА ++ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕реА ++ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐ рд╣реИ:
emcc --clear-cache --clear-ports
em++ -v -std=c++1y hello_world_sdl.cpp -s USE_SDL=2 -s USE_SDL_IMAGE=2 EMTERPRETIFY=1 -s EMTERPRETIFY_ASYNC=1 -s WASM=1 -o hello_world_sdl.html

рдЧреЛрд▓рд╛рдВрдЧ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рдорд╛рди рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛?
рдЕрджреНрдпрддрди: рдореИрдВ рд╕рд╣реА рдЦрдбрд╝рд╛ рд╣реВрдБред рдЧреЛ рдХреЛрдб рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рд╕реАрдЬреАрдУ рд╕рдВрдХрд▓рди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдХрд╛рд░рдг рдЧреЛрд▓рд╛рдВрдЧ рдХреЛ "-рдПрд╕" рд╕реНрд╡рд┐рдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рд╕реНрдкрд╖реНрдЯ рдХреИрд╢ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдмрдВрджрд░рдЧрд╛рд╣ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдЧреЛрд▓рдВрдЧ рдмрд┐рд▓реНрдб рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдпрд╛рдиреА go1.9 рд╕реЗ go1.10 рддрдХ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рддреЗ рд╕рдордп рдмрдЧ рдкреЗрд╢ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред go1.10.3 to go1.11 (рдЬрдм рд╣рдо vgo рд▓рд╛рдЗрдлрд╕реНрдЯрд╛рдЗрд▓ рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ)ред рдореБрдЭреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЧреЛ рдмрд┐рд▓реНрдб рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ "рдЧреЛ рдмрд┐рд▓реНрдб-рдП" рдХрд░рдирд╛ рдкрдбрд╝рд╛ред
GOARCH=wasm GOOS=js go --clear-cache --clear-ports

рдЧреЛрд▓рд╛рдВрдЧ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рдорд╛рди рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛?
GOARCH=wasm GOOS=js go --clear-cache --clear-ports

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдЧреЛ рдХреЗ рдХреИрд╢реЗ рдХреЛ рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рд╢реЛрдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

@neelance - рдЕрдм рдЬрдм рдХреЙрд▓рдмреИрдХ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдмреБрдирд┐рдпрд╛рджреА рд╕рдорд░реНрдерди рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рдмрдЧ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдВ рдпрд╛ рдЖрдкрдХреЗ рдорди рдореЗрдВ рдХреБрдЫ рдФрд░ рд╣реИ?

рд╣рд╛рдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдм рд╣рдо рдЗрд╕реЗ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ

рдорд╣рд╛рди рдХрд╛рдо!!! @рдиреАрд▓рд╛рдВрд╕

рдпрд╣ рдХрдорд╛рд▓ рд╣реИ, рдмрдврд╝рд┐рдпрд╛ рдХрд╛рдо @neelance!

рдмрджрд▓реЗрдВ https://golang.org/cl/120057 рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ: doc/go1.11: mention GOOS/GOARCH values of WebAssembly port explicitly

рдмрджрд▓реЗрдВ https://golang.org/cl/120575 рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ: cmd/dist: skip non-std tests on js/wasm

рдХреНрдпрд╛ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ рдХрдо рдХрд░рдиреЗ рдХреЗ рдореБрджреНрджреЗ рдХреЛ рдЦреЛрд▓рдирд╛ рдЙрдЪрд┐рдд рд╣реИ (рдпрджрд┐ рдпрд╣ рд╕рдВрднрд╡ рднреА рд╣реИ)? рдпрд╛ рдЗрд╕реЗ рдХрд╣реАрдВ рдФрд░ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ?

@matthewp, рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдПрдХ webassembly- рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдХрд╛рд░ рдмрдЧ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред рд╕рд╛рдорд╛рдиреНрдп рдПрдХ #6853 рд╣реИред

рдмрджрд▓реЗрдВ https://golang.org/cl/120958 рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ: net: re-implement built-in simulated network on JS and NaCl

рдХреНрдпрд╛ рдЧреЛрд▓рд╛рдВрдЧ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд░реНрдорд┐рдд рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдЕрдЦрдВрдбрддрд╛ (рд╕реАрдПрдлрдЖрдИ) рд╣реИ? рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ WASM рдореЗрдВ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдХрд┐рдо рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕реЗ CFI рджреНрд╡рд╛рд░рд╛ рдХреНрд▓реИрдВрдЧ рдХрдВрдкрд╛рдЗрд▓рд░ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
https://www.fastly.com/blog/hijacking-control-flow-webassembly-program
https://github.com/trailofbits/clang-cfi-showcase/blob/master/cfi_vcall.cpp

рдмрд╕ рдЗрд╕реЗ рд╕реНрдХрд┐рдо рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдкреЛрд╕реНрдЯ рдХрд╣рддрд╛ рд╣реИ "WebAssembly рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреИрд╕реА рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рдореНрди рд╕реНрддрд░ рдХреА рднрд╛рд╖рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реНрд░реЛрдд рднрд╛рд╖рд╛ (рд╕реА рдпрд╛ рдЧреЛ) рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдкрд░ рдмрдЧ рдХреЗ рдХреБрдЫ рд╡рд░реНрдЧ рд▓рд╛рдЧреВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред ред" рд╡рд╣рд╛рдБ рдХреЛрдИ рдЖрд╢реНрдЪрд░реНрдп рдирд╣реАрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЧреЛ рдХреЗ рдкрд╛рд╕ рдРрд╕реЗ рдореБрджреНрджреЗ рд╣реЛрдВрдЧреЗ, рддреЛ рд╡реЗ рдЕрдиреНрдп рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрдВрдЧреЗ, рди рдХрд┐ рдХреЗрд╡рд▓ WebAssembly рдкрд░ред

WebAssembly рдЬреНрдпрд╛рджрд╛рддрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдирд╛рдкрд╛рдХ WebAssembly рдХреЛрдб рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдпрд╣ WebAsssembly рдЙрджрд╛рд╣рд░рдг рдХреЗ рднреАрддрд░ рдЧрд╛рд░рдВрдЯреА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрддрдирд╛ рдирд╣реАрдВ рд╣реИ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЗрд╕рдореЗрдВ рд╕реЗ рдХреБрдЫ рд╣реИ)ред рдЬреИрд╕рд╛ рдХрд┐ @neelance рдиреЗ рдХрд╣рд╛, рдпрд╣ рдХрд┐рд╕реА рднреА рдЖрд╡рд╢реНрдпрдХ рд╕реБрд░рдХреНрд╖рд╛ рдЧрд╛рд░рдВрдЯреА рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП LanguageX->WebAssembly рдХрдВрдкрд╛рдЗрд▓рд░ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред
рдЧреЛ рдХреЗ рдкрд╛рд╕ рд╕реАрдПрдлрдЖрдИ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ - рдЬрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рдПрдХ рд╡рд┐рдзрд┐ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рд╣рдо рдкрд╣рд▓реЗ рд╣реА vtable рдЦреЛ рдЪреБрдХреЗ рд╣реИрдВред рд╣рдордиреЗ рдЗрд╕ рддрдереНрдп рдХреЛ рднреА рдЦреЛ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рдПрдХ vtable рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЧреЛ рдЗрд╕ рдХрд╛рд░рдирд╛рдореЗ рдХреА рдЪрдкреЗрдЯ рдореЗрдВ рд╣реИ, рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рдХреЛрдИ рд╕рдорд╛рдирддрд╛ рд╣реИред рдЕрднреА рдХреЗ рд▓рд┐рдП, рдХрдо рд╕реЗ рдХрдо, WebAssembly Go рдкреЛрд░реНрдЯ (рдФрд░ WebAssembly, рдкреВрд░реНрдг рд╡рд┐рд░рд╛рдо) рдореЗрдВ рд╕рдорд╛рдирддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╢реЛрд╖рдг рдХреЗрд╡рд▓ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, WebAssembly рдХреЗ рд▓реЛрдЧ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рд╕рдорд╛рдирддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВред

@ Randall77 рдпрд╣ рд╕рд╛рджреЗ linux/amd64 рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ? рдХреНрдпрд╛ WebAssembly рдХреЗ рд▓рд┐рдП рдЬреЛрдЦрд┐рдо рдХрд┐рд╕реА рддрд░рд╣ рдмрдбрд╝рд╛ рд╣реИ?

рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдЬреЛрдЦрд┐рдо рд╕рдорд╛рди рд╣реИ (рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдХрд┐ WebAssembly рдореЗрдВ рдЕрднреА рддрдХ рдзрд╛рдЧреЗ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рд╕рдордп WebAssembly рдХреЗ рд▓рд┐рдП рд╢реВрдиреНрдп рд╣реИ)ред unsafe рдЖрдпрд╛рдд рдХрд┐рдП рдмрд┐рдирд╛, рдбреЗрдЯрд╛ рджреМрдбрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ unsafe рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдРрд╕реА рднреЗрджреНрдпрддрд╛ рдХрд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдХреЛрдб рдореЗрдВ рд▓рд┐рдВрдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдпрд╛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдмрд╛рдЗрдирд░реА рдореЗрдВ рдХрд┐рд╕реА рдЧреИрдЬреЗрдЯ рдХреЛ рдвреВрдВрдврдирд╛ рдФрд░ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдорд╛рди рдкрд░ рдбреЗрдЯрд╛ рд░реЗрд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдо рдкрд░ рдПрдХ рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

рдареАрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЗ рдЧреЛ рдХреЛрдб рдореЗрдВ рдХреЛрдИ рдбреЗрдЯрд╛ рджреМрдбрд╝ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдареАрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд╛рде рд╣реА, WebAssembly рдХреЗ рд╕рд╛рде рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╕рдордп рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ WebAssembly рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗ рдмрдЪ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рдбреЗрдЯрд╛ рджреМрдбрд╝ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рдпрд╛ рдмрд╕ unsafe рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗред рджрд┐рд▓рдЪрд╕реНрдк рдЕрдВрддрд░реНрджреГрд╖реНрдЯрд┐ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рд╛ рд╡рд┐рд╖рдп рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИред

рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдореИрдВ рдЧреЛрд▓рд╛рдВрдЧ рдХреЗ рднреАрддрд░ рд╕реЗ рдЗрд╕ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реВрдВ, рдЙрддрдирд╛ рд╣реА рдореИрдВ рдПрдХ рд╕рдВрдХреНрд░рдордг рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрднрд╡ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдЧреЛрд▓рдВрдЧ рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдФрд░ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рд░рдЦрд░рдЦрд╛рд╡ рдХреЛ рдЦрд░рд╛рдм рдХрд░ рджреЗрдЧрд╛ред рдореБрдЭреЗ рд╕рдордЭрд╛рдиреЗ рджреЛред рдпрд╣рд╛рдБ рдПрдХ рдЕрджреНрднреБрдд wasm golang рдРрдк рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдХреБрдЫ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдЖрдИ рдХреИрдВрдбреА рдЬрд╛рджреВ рдХрд░рддрд╛ рд╣реИред

https://github.com/stdiopt/gowasm-experiments/blob/master/bouncy/main.go

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

рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

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

@ omac777 рдореИрдВ рдЖрдкрд╕реЗ рд╕рд╣рдордд рд╣реВрдВред рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЬреЗрдПрд╕ рдХреЗ рдирд┐рдореНрди рд╕реНрддрд░реЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЕрдЪреНрдЫреА рдЧреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реЛрдВрдЧреА, рдЗрд╕рд▓рд┐рдП рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдХрднреА рднреА рд╕реАрдзреЗ syscall/js рдХреЛ рдЫреВрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред syscall рдкреИрдХреЗрдЬ рдХреЗ рд╕рдорд╛рди, рдпрд╣ рдмрджрд╕реВрд░рдд рд╣реИ рдФрд░ рд▓рдЧрднрдЧ рдХреЛрдИ рднреА рдЗрд╕рдХрд╛ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред ;-)

@ omac777 GopherJS рдХреЗ рд▓рд┐рдП, рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рд╕реАрдзреЗ рдирд┐рдореНрди-рд╕реНрддрд░реАрдп js рдкреИрдХреЗрдЬ рдХреЗ рдмрдЬрд╛рдп рд╡рд┐рднрд┐рдиреНрди рдмреНрд░рд╛рдЙрдЬрд╝рд░ API рдХреЗ рд▓рд┐рдП рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЗрд╕реА рддрд░рд╣ рдХрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╡рд╛рд╕рдо рдХреЗ рд╕рд╛рде рднреА рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдХрдИ рдЧреЛрдлрд░рдЬреЗрдПрд╕ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдЙрд╕реА рдкреИрдХреЗрдЬ рдореЗрдВ рд╡рд╛рд╕рдо рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ, рдФрд░ рдЖрд╡рд╢реНрдпрдХрддрд╛рдиреБрд╕рд╛рд░ рдирдП рдкреИрдХреЗрдЬ рдмрдирд╛рдП рдЬрд╛рдПрдВрдЧреЗред

рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рджреЗрдЦреЗрдВ https://github.com/gopherjs/gopherjs/wiki/Bindings , https://dmitri.shuralyov.com/talks/2016/Go-in-the-browser/Go-in-the-browserред рд╕реНрд▓рд╛рдЗрдб#11 (рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд 4 рд╕реНрд▓рд╛рдЗрдбреНрд╕), рдФрд░ https://github.com/dominikh/go-js-dom/issues/57ред

рд╣рдореЗрдВ рдпрд╣ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡реЗрдмрд╕реИрдореНрдк рд░реЛрдбрдореИрдк рдкрд░ рд╕рд╛рдорд╛рдиреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рд╣реИ:

https://webassembly.org/docs/future-features/

рдпрд╣ syscall рдХрд╣рд╛рдиреА рдХреЛ рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рджреЗрдЧрд╛, рдЬреИрд╕реЗ

рд╕рдВрджрд░реНрдн DOM рдФрд░ рдЕрдиреНрдп рд╡реЗрдм API рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реАрдзреЗ WebAssembly рдХреЛрдб рд╕реЗ;
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рд╕реАрдзреЗ WebAssembly рд╕реЗ рд╡реЗрдм рдПрдкреАрдЖрдИ (рдЖрджрд┐рдо рдпрд╛ рдбреАрдУрдПрдо/рдЬреАрд╕реА/рд╡реЗрдм рдПрдкреАрдЖрдИ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдкрд╛рд╕ рдХрд░рдирд╛) рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ; рддрдерд╛
рд╕реАрдзреЗ WebAssembly рдХреЛрдб рд╕реЗ GC рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЖрд╡рдВрдЯрд┐рдд рдФрд░ рд╣реЗрд░рдлреЗрд░ рдХрд░рддрд╛ рд╣реИред

рд╡реИрд╕реЗ рднреА, рдзрдиреНрдпрд╡рд╛рдж @neelance etред рдЕрд▓. рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрддрдирд╛ рдЕрджреНрднреБрдд! рдореИрдВ

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдбреАрдУрдПрдо рдХрд╛ рдЧреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдерд╛?

рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдФрд░ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рдЧреЛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдлрд┐рд░, рдЧреЛ рдбреЛрдо рд╕реЗ рдХреЛрдб рдЬреЗрдирд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@fractalbach : рдпрджрд┐ WebAssembly рдХреЗ рд╣реЛрд╕реНрдЯ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреА рдкреБрд╖реНрдЯрд┐ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдХрд╛рд░реНрдп рд╕рдореВрд╣ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ WebAssembly рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ DOM рд╣реЗрд░рдлреЗрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддрдм рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЕрдореВрд░реНрдд рдбреЛрдо, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдФрд░ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛ред

рд▓реЗрдХрд┐рди рдЙрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдРрд╕рд╛ рдХрд░рдирд╛ рдЙрддрдирд╛ рдЖрдХрд░реНрд╖рдХ рдирд╣реАрдВ рд╣реИред

WebAssembly рдЬрд╛рдУ: JS рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╕рдВрд░рдЪрдирд╛рдПрдВ

https://medium.com/@nlepage/go -webassembly-binding-structs-to-js-references-4eddd6fd4d23

рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдХрд░реНрд╖рдХ рд╣реИред рдЙрдкрдпреЛрдЧ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЗ рднреАрддрд░ рдЬреЗрд╕рди рдорд╛рд░реНрд╢рд▓рд┐рдВрдЧ/рдЕрдирдорд░реНрд╢рд▓рд┐рдВрдЧ рдХреЗ рд╕рдорд╛рди рд╣реИред рдпрд╣ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд╕реНрддрд╛рдВрддрд░рдгреАрдп рдХреМрд╢рд▓ рдмрдирд╛рддрд╛ рд╣реИред

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

рдЖрдкрдХреЗ рд╕рднреА рдХрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП @neelance рдХреЛ рдлрд┐рд░ рд╕реЗ рдзрдиреНрдпрд╡рд╛рджред рдЗрд╕рдХреА рдмрд╣реБрдд рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред
рдЖрдкрдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рд╢реНрд░реА рдирд┐рдХреЛрд▓рд╕ рд▓реЗрдкреЗрдЬред рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрд░рд┐рд╕реНрдЯрд▓рд╛рдЗрдЬ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЕрдВрддрд░рд┐рдо рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕рднреА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢реЛрд░ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдСрдкрд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░ рдорд╛рд░реНрдЧ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рд╕рдо рдЗрдВрдЯрд░рдлреЗрд╕рд┐рдВрдЧ рдкреВрд░рд╛ рди рд╣реЛ рдЬрд╛рдПред

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░, рдпрд╣ рдПрдХ рдЙрдЪреНрдЪ рдЯреНрд░реИрдлрд╝рд┐рдХ рдереНрд░реЗрдб рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдиреЗ рд╕рджрд╕реНрдпрддрд╛ рд▓реА рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЪрд░реНрдЪрд╛ рдХрд░рдирд╛ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореВрд▓ рдореБрджреНрджреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реИрдВ - рдЬреЛ рдХрд┐ рдЧреЛ рдХреЗ рд▓рд┐рдП WebAssembly рд╕рдорд░реНрдерди рд╣реИред

рдХреГрдкрдпрд╛ рдЙрдЪрд┐рдд рдордВрдЪреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ - рдЧреЛрд▓рд╛рдВрдЧ-рдирдЯреНрд╕/рдЧреЛрд▓рдВрдЧ-рджреЗрд╡ред рдпрд╛ рдЕрдЧрд░ рдЖрдкрдХреЗ рдорди рдореЗрдВ рдХреБрдЫ рдЦрд╛рд╕ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВред

рдзрдиреНрдпрд╡рд╛рджред

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

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

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

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

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

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

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