Design: рдЪрд░реНрдЪрд╛: WebAssembly, рдпреВрдирд┐рдХреЛрдб рдФрд░ рд╡реЗрдм рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо

рдХреЛ рдирд┐рд░реНрдорд┐рдд 22 рдордИ 2021  ┬╖  19рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: WebAssembly/design

рдпрд╣ рдореБрджреНрджрд╛ "WebAssembly, рдпреВрдирд┐рдХреЛрдб рдФрд░ рд╡реЗрдм рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо" рдХреА рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рд╣реИред рдкреНрд░рд╕реНрддреБрддрд┐ рдкреВрд░реНрд╡-рд░рд┐рдХреЙрд░реНрдб рдХреА рдЧрдИ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ https://github.com/WebAssembly/meetings/pull/775 рдореЗрдВ рдЖрдЬрдорд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ 22 рдЬреВрди рдХреА рд╕реАрдЬреА рд╡реАрдбрд┐рдпреЛ рдореАрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЪрд░реНрдЪрд╛ рдХрд╛ рд╕рдордп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИред


(рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ)

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

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

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

рдПрдХ рдЖрд╕рд╛рди рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдРрд╕реА рднрд╛рд╖рд╛рдПрдВ/рдПрдкреАрдЖрдИ рд╣реЛрдВ рдЬреЛ рдЕрдорд╛рдиреНрдп рдпреВрдирд┐рдХреЛрдб рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдпрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп (list u8) рдпрд╛ (list u16) (рд╕рдВрднрд╡рддрдГ рдХреБрдЫ рдЕрдЪреНрдЫреЗ рдЙрдкрдирд╛рдореЛрдВ рдЬреИрд╕реЗ byte_string рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЖрдИрдЯреА string рдкреНрд░рдХрд╛рд░, рдЬреЛ рдЖрдИрдЖрдИрдЖрд░рд╕реА (list char) рд▓рд┐рдП рдПрдХ рдЙрдкрдирд╛рдо рд╣реИред

рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореЗрд░рд╛ рдкрд╕рдВрджреАрджрд╛ рд╕рдорд╛рдзрд╛рди рднреА рд╣реИ - рдПрдХ wtf16string рдкреНрд░рдХрд╛рд░ (list u16) рд▓рд┐рдП рдПрдХ рдЙрдкрдирд╛рдо рд╣реЛрдЧрд╛, рдЙрд╕реА рддрд░рд╣ string рдХреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ (list char) рд▓рд┐рдП рдПрдХ рдЙрдкрдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред (list u16) (рдЬреИрд╕реЗ) JS рджреНрд╡рд╛рд░рд╛ рдмреБрд▓рд╛рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо JS рд╕реВрдЪреА (рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛) рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдЬрдмрдХрд┐ wtf16string рд▓реМрдЯрдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо

рдХреИрдирдирд┐рдХрд▓ рдПрдмреАрдЖрдИ рдХреЗ рдорд╕реМрджреЗ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд wtf16string рдЙрдкрдирд╛рдо рдЬреЛрдбрд╝рдирд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЕрд╡рд┐рд╡реЗрдХрдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИред

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

рд╢рд╛рдпрдж рдХреБрдЫ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдЬреЛ рдореИрдВрдиреЗ рдЕрдм рддрдХ рдСрдлрд╝рд▓рд╛рдЗрди рдлреАрдбрдмреИрдХ рд╕реЗ рдПрдХрддреНрд░ рдХрд┐рдП рд╣реИрдВ, рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП:

рдЕрд▓рдЧ WTF-16

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ, рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:

string   := list char
string16 := list u16

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдорд▓реЛрдВ рдХреЗ рд╕рд╛рде, рд▓рд┐рдВрдХрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдЬрдмрд░рджрд╕реНрддреА рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:

| рд╕реЗ | рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП | рдЕрдкреЗрдХреНрд╖рд╛
|---------------|---------------|---------------
| string | string16 | UTF-8 рд╕реЗ UTF-16 рдореЗрдВ рдкреБрди: рдПрдиреНрдХреЛрдб рдХрд░реЗрдВ
| string16 | string | WTF-16 рд╕реЗ UTF-8 (рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╡рд┐рдХрд▓реНрдк) рдореЗрдВ рдкреБрди: рдПрдиреНрдХреЛрдб рдХрд░реЗрдВ

рдЬрдмрд░рджрд╕реНрддреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХ string16 рдореЙрдбреНрдпреВрд▓ WASI рд╣реЛрд╕реНрдЯ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреНрд░рдорд╢рдГ string рдФрд░ string16 рдореЙрдбреНрдпреВрд▓ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рднрд▓реЗ рд╣реА рджреЛрдиреЛрдВ string рдФрд░ рдПрдХ string16 рдореЙрдбреНрдпреВрд▓ рдпрд╛ рд╣реЛрд╕реНрдЯ рд╕рдорд╛рди string рдпрд╛ string16 рдирд┐рд░реНрдпрд╛рдд рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЕрдиреНрдпрдерд╛ рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ред

рдпрд╣ рд╡реЗрдм рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдореЗрдВ рдПрдХ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХрд╛ рднреА рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ JS рдХреЛ list u16 рдХрд░рдирд╛ Uint16Array рдпрд╛ DOMString ред Uint16Array рд╕реЗ DOMString рдПрдХ JS-рд╡реНрдпрд╛рдкреА рдЬрдмрд░рджрд╕реНрддреА рдЕрд╡рд╛рдВрдЫрдиреАрдп рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди JS рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдирд╛рдо string16 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЕрдкрдиреА рдмрд╛рдЗрдирд░реА рдЖрдИрдбреА рдХреЗ рд╕рд╛рде, string16 :> list u16 рдПрдХ рдПрдбреЗрдкреНрдЯрд░ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ list u16 рдмрдЬрд╛рдп string16 :> list u16 рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рд╢рдмреНрджрд╛рд░реНрде рд╣реЛ рд░рд╣рд╛ рд╣реИ)ред рдЗрд╕рд▓рд┐рдП рдЙрдкрдирд╛рдоред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, string16 рдПрдХ DOMString рдмрди рдЬрд╛рдПрдЧрд╛ рдЬрдмрдХрд┐ list u16 рдПрдХ Uint16Array рдмрди рдЬрд╛рдПрдЧрд╛ред

рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ string16 рдирд╛рдо рд╕реЗ рдЬреБрдбрд╝рд╛ рдирд╣реАрдВ рд╣реВрдВ рдФрд░ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдирд╛рдо, рдпрд╛ рдХрд┐рд╕реА рднреА рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рдареАрдХ рд░рд╣реЗрдЧрд╛ рдЬрд┐рд╕реЗ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╛рдо/рдЖрдИрдбреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдпрд╣рд╛рдВ list.is_canon рд╕рдорд╛рди рдЕрдиреБрдХреВрд▓рди рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ list.count рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рд╛рде рд╣реА, рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЕрдиреБрд╕рд╛рд░ UTF-any рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд▓реИрдЯрд┐рди1 рдЕрдиреБрдХреВрд▓рди рдХреЗ рджреНрд╡рд╛рд░ рдХреЛ list.*_canon рдЕрдбреИрдкреНрдЯрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдореЗрдВ рддрддреНрдХрд╛рд▓ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рди рдЖрд░рдХреНрд╖рд┐рдд рдХрд░рдХреЗ рдЦреБрд▓рд╛ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпреВрдЯреАрдПрдл-рдХреЛрдИ рднреА

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ, рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:

list.lift_canon $unit [...]
list.is_canon $unit [...]
list.lower_canon $unit [...]

where the $unit immediate is
  0: 8-bit (UTF-8, ASCII-compatible)
  1: 16-bit (UTF-16)
  2: 32-bit (UTF-32)
  3: 8-bit (Latin1, narrow UTF-16)

рдЗрд╕ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЧрдарди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рдбрдмрд▓ рд░реА-рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдУрд╡рд░рд╣реЗрдб рдФрд░ рдХреЛрдб рдЖрдХрд╛рд░ рдкрд░ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рднрд╛рд╡реЛрдВ рд╕реЗ рдмрдЪрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд░реЛрдЧреЗрдЯ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЕрдирд╕реБрдирд╛ рдХрд░ рджреЗрддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ $unit 1-3 рдХреЛ рдПрдорд╡реАрдкреА рдХреЗ рдмрд╛рдж рдЖрдЧреЗ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЗ рд╕рд╛рде рддреБрд░рдВрдд рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдбрдмреНрд▓реНрдпреВрдЯреАрдПрдл-рдХреЛрдИ рднреА

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ, рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:

list.lift_canon $unit [...]
list.is_canon $unit [...]
list.lower_canon $unit [...]

where the $unit immediate is
  0: 8-bit (WTF-8, ASCII-compatible)
  1: 16-bit (WTF-16)
  2: 32-bit (Code points except surrogate pairs)
  3: 8-bit (Latin1, narrow WTF-16)

рдЗрд╕ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП char рдХреЛ рдпреВрдирд┐рдХреЛрдб рд╕реНрдХреЗрд▓рд░ рд╡реИрд▓реНрдпреВ рд╕реЗ рдпреВрдирд┐рдХреЛрдб рдХреЛрдб рдкреЙрдЗрдВрдЯреНрд╕ рддрдХ рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬрдмрдХрд┐ char рдХреА рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рд╕рд░реЛрдЧреЗрдЯ рдЬреЛрдбрд╝реЗ (рд▓реЗрдХрд┐рди рдЕрд▓рдЧ-рдерд▓рдЧ рд╕рд░реЛрдЧреЗрдЯ рдХреА рдЕрдиреБрдорддрд┐) рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддреЗ рд╣реБрдП, рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЙрдард╛рдиреЗ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдлрд┐рд░ рд╕реЗ, рдПрдХ рдПрдорд╡реАрдкреА рдореЗрдВ рдареЛрд╕ $unit s рдмрд╣рд╕ рдпреЛрдЧреНрдп рд╣реИрдВред

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

рдПрдХреАрдХреГрдд рдбрдмреНрд▓реНрдпреВ/рдпреВрдЯреАрдПрдл-рдХреЛрдИ рднреА

рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ, рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:

  • рд▓рд┐рдлреНрдЯ "рдпреВрдирд┐рдХреЛрдб рдХреЛрдб рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕реВрдЪреА рд╕рд░реЛрдЧреЗрдЯ рдЬреЛрдбрд╝реЗ рдореЗрдВ рд╕рдВрд╢реЛрдзрди" рд▓реЗрдХрд┐рди рдХрдо "рдпреВрдирд┐рдХреЛрдб рд╕реНрдХреЗрд▓рд░ рдореВрд▓реНрдпреЛрдВ рдХреА рд╕реВрдЪреА"ред рдпрд╣ рдПрдХ рдЧреИрд░-рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдбрд┐рдЬрд╝рд╛рдЗрди-рдХреЗрд╡рд▓ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ рдЬрдм рдХреЗрд╡рд▓ 16-рдмрд┐рдЯ рдЙрдард╛рдиреЗ рдХреЗ рджреМрд░рд╛рди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
  • "рдпреВрдирд┐рдХреЛрдб рдХреЛрдб рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕реВрдЪреА" рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рдХрд░рддреЗ рд╕рдордп рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ passthrough рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝реЗрдВред рдпрд╣ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдЬреЛрдбрд╝ рд╣реИ рдЬреЛ рджреЛрд╖рд░рд╣рд┐рдд рдкрд╛рд╕рдереНрд░реВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИред

рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:

  • рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЧрдард┐рдд
  • рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдбрдмреНрд▓реНрдпреВрдЯреАрдПрдл рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рджреЛрд╖рд░рд╣рд┐рдд рдПрдиреНрдХреЛрдбрд┐рдВрдЧ
  • https://github.com/WebAssembly/interface-types/issues/136#issuecomment -861799460 рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд рд╣реЛрдиреЗ рдкрд░: рдЕрдзрд┐рдХрд╛рдВрд╢ (рд╕рднреА?) рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдПрдиреНрдХреЛрдбрд░ рд╣рдо рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ

рдЖрдИрдЖрдИрдпреВрд╕реА, рдореВрд▓ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдИрдЯреА рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдпреВрдирд┐рдХреЛрдб рдХреЛрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХреБрдЫ рднрд╛рд╖рд╛рдПрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ i8 рдпрд╛ i16 рдорд╛рдиреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддреА рд╣реИрдВ рдЬреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЧрдард┐рдд рдпреВрдирд┐рдХреЛрдб рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдПрдХ рдЖрд╕рд╛рди рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдРрд╕реА рднрд╛рд╖рд╛рдПрдВ/рдПрдкреАрдЖрдИ рд╣реЛрдВ рдЬреЛ рдЕрдорд╛рдиреНрдп рдпреВрдирд┐рдХреЛрдб рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдпрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп (list u8) рдпрд╛ (list u16) (рд╕рдВрднрд╡рддрдГ рдХреБрдЫ рдЕрдЪреНрдЫреЗ рдЙрдкрдирд╛рдореЛрдВ рдЬреИрд╕реЗ byte_string рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЖрдИрдЯреА string рдкреНрд░рдХрд╛рд░, рдЬреЛ рдЖрдИрдЖрдИрдЖрд░рд╕реА (list char) рд▓рд┐рдП рдПрдХ рдЙрдкрдирд╛рдо рд╣реИред рдХреНрдпрд╛ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд╡реНрдпрд╛рдкрд╛рд░ рдмрдВрдж рдкрд░ рдЕрднреА рддрдХ рдХрд╣реАрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдмрд╛рд░реАрдХ рд╣реИ, рдЗрд╕рдореЗрдВ рдЖрдИрдЯреА char рдХреЛ "рдпреВрдирд┐рдХреЛрдб рд╕реНрдХреЗрд▓рд░ рд╡реИрд▓реНрдпреВ" рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЙрдирдореЗрдВ рдПрдХ рдЫреЗрдж рд╣реИ рдЬрд╣рд╛рдВ рд╕рд░реЛрдЧреЗрдЯ рдХреЛрдб рдкреЙрдЗрдВрдЯ рд╣реЛрдВрдЧреЗ, рдФрд░ рдЗрд╕ рддрд░рд╣ рдЕрд▓рдЧ рд╕рд░реЛрдЧреЗрдЯ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ . рджреВрд╕рд░реА рдУрд░, рдбрдмреНрд▓реНрдпреВрдЯреАрдПрдл рдЗрд╕ рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рдмрд┐рдирд╛ "рдпреВрдирд┐рдХреЛрдб рдХреЛрдб рдЕрдВрдХ" рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЛ рд╕рд░реЛрдЧреЗрдЯ рдХреЛрдб рдмрд┐рдВрджреБ рдЬреЛрдбрд╝реЗ рдирд╣реАрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ (рдЗрдиреНрд╣реЗрдВ рдкреВрд░рдХ рдХреЛрдб рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛> рдпреВ + рдПрдлрдПрдлрдПрдлрдПрдл, рдЬрдмрдХрд┐ рдкреГрдердХ рд╕рд░реЛрдЧреЗрдЯ рдареАрдХ рд╣реИрдВ)ред рдХреНрдпрд╛ рдпрд╣реА рдЖрдкрдХрд╛ рдорддрд▓рдм рд╣реИ?

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реА-рдЬреИрд╕реЗ рдмрд╛рдЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ const char* рдЬреЛ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрднреА рддрдХ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХреА рдЧрдИ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдпрд╛рдж рдХрд┐рдпрд╛ рд╣реЛ, рд╣рд╛рд▓рд╛рдБрдХрд┐ред

рдПрдХ рдЖрд╕рд╛рди рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдРрд╕реА рднрд╛рд╖рд╛рдПрдВ/рдПрдкреАрдЖрдИ рд╣реЛрдВ рдЬреЛ рдЕрдорд╛рдиреНрдп рдпреВрдирд┐рдХреЛрдб рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдпрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп (list u8) рдпрд╛ (list u16) (рд╕рдВрднрд╡рддрдГ рдХреБрдЫ рдЕрдЪреНрдЫреЗ рдЙрдкрдирд╛рдореЛрдВ рдЬреИрд╕реЗ byte_string рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЖрдИрдЯреА string рдкреНрд░рдХрд╛рд░, рдЬреЛ рдЖрдИрдЖрдИрдЖрд░рд╕реА (list char) рд▓рд┐рдП рдПрдХ рдЙрдкрдирд╛рдо рд╣реИред

рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореЗрд░рд╛ рдкрд╕рдВрджреАрджрд╛ рд╕рдорд╛рдзрд╛рди рднреА рд╣реИ - рдПрдХ wtf16string рдкреНрд░рдХрд╛рд░ (list u16) рд▓рд┐рдП рдПрдХ рдЙрдкрдирд╛рдо рд╣реЛрдЧрд╛, рдЙрд╕реА рддрд░рд╣ string рдХреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ (list char) рд▓рд┐рдП рдПрдХ рдЙрдкрдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред (list u16) (рдЬреИрд╕реЗ) JS рджреНрд╡рд╛рд░рд╛ рдмреБрд▓рд╛рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо JS рд╕реВрдЪреА (рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХрд╛) рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдЬрдмрдХрд┐ wtf16string рд▓реМрдЯрдиреЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо

рдХреИрдирдирд┐рдХрд▓ рдПрдмреАрдЖрдИ рдХреЗ рдорд╕реМрджреЗ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд wtf16string рдЙрдкрдирд╛рдо рдЬреЛрдбрд╝рдирд╛ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЕрд╡рд┐рд╡реЗрдХрдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИред

рджреВрд╕рд░реА рдУрд░, рдбрдмреНрд▓реНрдпреВрдЯреАрдПрдл рдЗрд╕ рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рдмрд┐рдирд╛ "рдпреВрдирд┐рдХреЛрдб рдХреЛрдб рдЕрдВрдХ" рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдиреБрдХреНрд░рдореЛрдВ рдХреЛ рд╕рд░реЛрдЧреЗрдЯ рдХреЛрдб рдмрд┐рдВрджреБ рдЬреЛрдбрд╝реЗ рдирд╣реАрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ (рдЗрдиреНрд╣реЗрдВ рдкреВрд░рдХ рдХреЛрдб рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛> рдпреВ + рдПрдлрдПрдлрдПрдлрдПрдл, рдЬрдмрдХрд┐ рдкреГрдердХ рд╕рд░реЛрдЧреЗрдЯ рдареАрдХ рд╣реИрдВ)ред

рдЖрд╣, рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдбрдмреНрд▓реНрдпреВрдЯреАрдПрдл -8 рдПрдХ рд╕рд╛рджреЗ (list u16) рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдпрд╣ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рддрд┐рдмрдВрдз рд╣реИ? рдореИрдВрдиреЗ рдЙрд╕ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдирд╣реАрдВ рдХреА рдереАред рдореЗрд░реЗ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рд╣реИ рдХрд┐ рдпрд╣ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП overkill рд╣реЛрдЧрд╛ рджреЛрдиреЛрдВ рдПрдХ string рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдПрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЧрдард┐рдд рдпреВрдирд┐рдХреЛрдб рдЕрджрд┐рд╢ рдореВрд▓реНрдпреЛрдВ рдХреЗ рджреГрд╢реНрдпреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЯрд╛рдЗрдк wtf16string рдкреНрд░рдХрд╛рд░ рд╣реИ рдХрд┐ рд▓рдЧрднрдЧ рдПрдХ (list u16) рд▓реЗрдХрд┐рди рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рддрд┐рдмрдВрдз рд╣реИрдВред рдХреНрдпрд╛ рдХрд┐рд╕реА рдЕрдкреНрд░рддрд┐рдмрдВрдзрд┐рдд (list u16) рд▓рд┐рдП рдЙрдкрдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬреЛ рдпреВрдирд┐рдХреЛрдб рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ? рдбрдмреНрд▓реНрдпреВрдЯреАрдПрдл -8 рд╕реНрдкреЗрдХ рдореЗрдВ рдпрд╣ рдиреЛрдЯ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╣реЛрдЧрд╛ред

рдЖрд╣, рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдбрдмреНрд▓реНрдпреВрдЯреАрдПрдл -8 рдПрдХ рд╕рд╛рджреЗ (рд╕реВрдЪреА u16) рдХреЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдпрд╣ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рддрд┐рдмрдВрдз рд╣реИ?

рдЗрд╕рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, "рдЬреИрд╕реЗ рдпреВрдЯреАрдПрдл -8 рдХреГрддреНрд░рд┐рдо рд░реВрдк рд╕реЗ рдпреВрдЯреАрдПрдл -16 рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдпреВрдирд┐рдХреЛрдб рдЯреЗрдХреНрд╕реНрдЯ рддрдХ рд╕реАрдорд┐рдд рд╣реИ, рдбрдмреНрд▓реНрдпреВрдЯреАрдПрдл -8 рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЦрд░рд╛рдм рдЧрдард┐рдд рдпреВрдЯреАрдПрдл -16 рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реЛрдЧреЗрдЯ рдХреЛрдб рдкреЙрдЗрдВрдЯ рдЬреЛрдбрд╝реЗ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреГрддреНрд░рд┐рдо рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд╣реИред" Iiuc, рдпрд╣ рдЗрдирдХреЗ рд╕рд╛рде рдЙрд╕реА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ UTF-8 рд▓рдВрдмреЗ рдпрд╛ рдЫреЛрдЯреЗ рдмрд╛рдЗрдЯ рдЕрдиреБрдХреНрд░рдореЛрдВ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред WTF-8 рдХрд┐рд╕реА рднреА (list u16) рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ (list u8) рдорд╛рдиреНрдп WTF-8 рдирд╣реАрдВ рд╣реИред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдЕрдкреНрд░рддрд┐рдмрдВрдзрд┐рдд (рд╕реВрдЪреА u16) рдХреЗ рд▓рд┐рдП рдЙрдкрдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬреЛ рдпреВрдирд┐рдХреЛрдб рдХреА рд╕реБрдЧрдард┐рддрддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ?

WTF-16 рдорд╛рдирдЪрд┐рддреНрд░ 1:1 рд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ u16 рдорд╛рдиреЛрдВ рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрди рдорд╛рдиреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рд╛рдБ, (list u16) рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

IIUC, WTF-8 рдордирдорд╛рдиреА list u8 ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ "рд╕рд░реЛрдЧреЗрдЯ рдЬреЛрдбрд╝реА рдмрд╛рдЗрдЯ рдЕрдиреБрдХреНрд░рдо" рдХреЛ рдордирд╛ рдХрд░рддрд╛ рд╣реИ ( рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ)ред

рд╣рд╛рд▓рд╛рдВрдХрд┐, WTF-16 _is_ list u16 рдЬреИрд╕рд╛ рд╣реА рд╣реИред рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реИ рдХрд┐ рд╡реЗ рдПрдХ рдирд╛рдордХрд░рдг рд╡рд┐рд╖рдп рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рддрд╛рдЬрд╝рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ :)

рдореИрдВрдиреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕-рдкреНрд░рдХрд╛рд░/#135 рдореЗрдВ рд╕рд░реЛрдЧреЗрдЯреНрд╕ рдХреЗ рдкреНрд░рд╢реНрди рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рдкрд╣рд▓рд╛ рдкреНрд░рд╢реНрди/рдЙрддреНрддрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдЪреНрдЪ рдХреНрд░рдо рдмрд┐рдЯ рд╣реИ рдФрд░, рдпрджрд┐ рд╣рдо рдЙрд╕ рдкрд░ рд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдкрд░ рдмрд╛рдж рдХреА рдЪрд░реНрдЪрд╛ рдЖрд╕рд╛рди рд╣реЛрдЧреАред

рдзрдиреНрдпрд╡рд╛рдж, рд▓реНрдпреВрдХред

рдпрджрд┐ рдЖрдк рдЙрдкрд░реЛрдХреНрдд рдХреЗ рд░реВрдк рдореЗрдВ "рдЕрд▓рдЧ рдбрдмреНрд▓реНрдпреВрдЯреАрдПрдл -16" рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд╣реИрдВ (рдбрдмреНрд▓реНрдпреВрдПрдПрд╕рдЖрдИ рдПрдкреАрдЖрдИ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдФрд░ рдЧреЛрдВрдж рдХреЛрдб рдХреЗ рдмрд┐рдирд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдмрд░рджрд╕реНрддреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ), рддреЛ рдореИрдВ рд╕реБрдЭрд╛рдП рдЧрдП char рд╕рд╛рде рд╕рд╣рдЬ рдорд╣рд╕реВрд╕ рдХрд░реВрдВрдЧрд╛ рдореВрд▓реНрдп рд╕реАрдорд╛ред рддрдм WTF-16 рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдПрд╕реНрдХреЗрдк рд╣реИрдЪ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдФрд░ рд╕рд╛рде рд╣реА рдЗрд╕реЗ рдЙрд╕реА рднрд╛рд╖рд╛, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдореЙрдбреНрдпреВрд▓ рдФрд░ UTF- * рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдореИрдВ WASI btw рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдорд╣рд╕реВрд╕ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рдмреЗрдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рдкреЗрд╢ рдХрд┐рдП рдЧрдП рдкреНрд░рдореБрдЦ рджрд░реНрдж рдмрд┐рдВрджреБ рдХреЛ рдЬрдЧрд╣ рдореЗрдВ рдЬрдмрд░рджрд╕реНрддреА рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдПрдХ рдЕрд▓рдЧ string16 рдкреНрд░рдХрд╛рд░ рд╣реЛрдиреЗ рдкрд░ рдЬреИрд╕реЗ рдЖрдк рд╕рд░реЛрдЧреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ, рддрдм рднреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕-рдкреНрд░рдХрд╛рд░/# 135 рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╕рд░реЛрдЧреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╕рднреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрдВрдЧреА, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдо рд╣реЛрдирд╛ рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдПрдХ (рд╡рд┐рд╢реЗрд╖рдХрд░ рдпрджрд┐ рд╡реЗ рдкрд░реЛрдХреНрд╖ рд░реВрдк рд╕реЗ рдЕрдВрддрд░-рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВ, рддреЛ рд╡реЗ рдЕрд░реНрдердкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ)ред рджреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рд╣реЛрдиреЗ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрдирд░ рдФрд░ рдЙрдкрднреЛрдХреНрддрд╛ рдкрд░ рдорд╛рдирд╕рд┐рдХ рдмреЛрдЭ рдбрд╛рд▓рдиреЗ рд╕реЗ рдЪреАрдЬреЗрдВ рдФрд░ рднреА рдмрджрддрд░ рд╣реЛ рдЬрд╛рдПрдВрдЧреА ("рджреЛ рдкреНрд░рдХрд╛рд░ рдХреНрдпреЛрдВ рд╣реИрдВ? рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ? рдореБрдЭреЗ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?")ред рдЕрдВрдд рдореЗрдВ, рдбрдмреНрд▓реНрдпреВрдЯреАрдПрдл -16 рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛ рдЖрдо рддреМрд░ рдкрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рдорд╛рдирдХреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рд╡реЗрдм/рдЖрдИрдИрдЯреАрдПрдл рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдЗрдВрдЯрд░рдлреЗрд╕-рдкреНрд░рдХрд╛рд░/#135 рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЧрдпрд╛

рд╡реЗрдм-рдЕрдирдиреНрдп рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЗрдПрд╕ рдпрд╛ рд╡реЗрдм рдПрдкреАрдЖрдИ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдмрд╛рдзреНрдпрдХрд╛рд░реА" wasm рдЖрдпрд╛рдд рдФрд░ рдирд┐рд░реНрдпрд╛рдд рдХреЗ рд▓рд┐рдП JS API рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреНрдп рдЙрднрд░рддреЗ рдЬреЗрдПрд╕ рдПрдкреАрдЖрдИ рдореЗрдВ рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ, рдЬреИрд╕реЗ рд╕реНрдЯреИрдХ-рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ, рдФрд░ рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдХрд╣рд╛рдВ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рд╕рд╛рдорд╛рдиреНрдп "рдмрд╛рдзреНрдп рдЖрдпрд╛рдд"/"рдмрд╛рдзреНрдп рдирд┐рд░реНрдпрд╛рдд" рдЬреЗрдПрд╕ рдПрдкреАрдЖрдИ рдЬреЛ рд╡реЗрдм рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВ рд╡рд╛рджреЛрдВ, JS рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдФрд░ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╕рд░рдгреА рджреГрд╢реНрдпреЛрдВ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓реЗред

рдПрдХ рдЕрд▓рдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧ 16 рдкреНрд░рдХрд╛рд░ рд╣реЛрдиреЗ рд╕реЗ рдЖрдк рд╕рд░реЛрдЧреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣реЗ рд╣реИрдВ, рдлрд┐рд░ рднреА рдЗрдВрдЯрд░рдлрд╝реЗрд╕-рдкреНрд░рдХрд╛рд░/135 рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╕рд░реЛрдЧреЗрдЯ рдХреЗ рд╕рд╛рде рд╕рднреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрдВрдЧреА

рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рд╕рдЪ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рднреА рдпрд╛рдж рдЖрддреА рд╣реИ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХрдо рд╕реЗ рдХрдо рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рднрд╛рд╖рд╛ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрдХрд▓рд┐рдд рдореЙрдбреНрдпреВрд▓, рдХрд┐рд╕реА рднреА рд╕рдВрдЧрдд рднрд╛рд╖рд╛, рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдмреАрдЪ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЗрд╕ рдмрд╛рдд рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдмрд┐рдирд╛ рднреА рдХрд┐ рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдореЙрдбреНрдпреВрд▓ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд░ рд░рд╣рд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдорддреМрд░ рдкрд░ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЗ рдпрд╣реА рд╣реЛрддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЙрдЪрд┐рдд рд╕рдордЭреМрддрд╛ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╛рдВрдЫрд┐рдд char рдореВрд▓реНрдп рд╕реАрдорд╛ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЧрдард┐рдд (рдпреВрдПрд╕рд╡реА) рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рд╕рдорд░реНрдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рджреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рд╣реЛрдиреЗ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрдирд░ рдФрд░ рдЙрдкрднреЛрдХреНрддрд╛ рдкрд░ рдорд╛рдирд╕рд┐рдХ рдмреЛрдЭ рдбрд╛рд▓рдиреЗ рд╕реЗ рдЪреАрдЬреЗрдВ рдФрд░ рднреА рдЦрд░рд╛рдм рд╣реЛ рдЬрд╛рдПрдВрдЧреА ("рджреЛ рдкреНрд░рдХрд╛рд░ рдХреНрдпреЛрдВ рд╣реИрдВ? рдХреНрдпрд╛ рдЕрдВрддрд░ рд╣реИ? рдореБрдЭреЗ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?")

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

рдЕрдВрдд рдореЗрдВ, рдбрдмреНрд▓реНрдпреВрдЯреАрдПрдл -16 рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛ рдЖрдо рддреМрд░ рдкрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рдорд╛рдирдХреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдорд╛рд░реНрдЧрджрд░реНрд╢рди рд╡реЗрдм/рдЖрдИрдИрдЯреАрдПрдл рдХреЗ рдЦрд┐рд▓рд╛рдл рд╣реЛрдЧрд╛

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

рдЗрд╕рд▓рд┐рдП рдореИрдВ рдПрдХ рдЙрдЪрд┐рдд рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдпрд╛ рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд╕рд╛рде рд╕рдордЭреМрддрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдФрд░ рдЕрдЧрд░ рд╣рдо рд╕рд╣рдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВ рддреЛ рдореБрдЭреЗ рдЦреБрд╢реА рд╣реЛрдЧреАред

рдореИрдВ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдЖрдк рдЬреЛ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕-рдкреНрд░рдХрд╛рд░/#135 рдореЗрдВ рдЙрдард╛рдИ рдЧрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдкреНрд░рддрд┐рд╡рд╛рдж рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдИрдЯреА рдПрдХ рдирдП domstring рдкреНрд░рдХрд╛рд░ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдмрд┐рдирд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рдордЬрдмреВрдд рдорд╛рд░реНрдЧрджрд░реНрд╢рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрд╕рдХрд╛ рдореБрдХрд╛рдмрд▓рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдмрд╕ рдЕрдзрд┐рдХ рдЕрдиреБрднрд╡-рдЖрдзрд╛рд░рд┐рдд рд╕рд╛рдХреНрд╖реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

(рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдЕрдЧрд░ рд╣рдо рд╕рд░реЛрдЧреЗрдЯреНрд╕ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдкрд░ рд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреВ рдЯреАрдПрдл -16 рдХреЛ string рдХреЗ рдХреИрдирдирд┐рдХрд▓ рдПрдмреАрдЖрдИ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд░реНрдерди рджреЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рд╕рдордЭрджрд╛рд░реА рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рд╖рдп рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреБрдЫ рд╡рд┐рдХрд▓реНрдк, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдЕрдореВрд░реНрдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛, рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред)

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

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

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреБрдЦрдж рд╣реИ рдЬрдм рдкреВрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рдмрд╕реЗ рдореБрдЦреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рд╛рдорд╛рди рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реИ рдЬрдм рддрдХ рдЪреАрдЬреЗрдВ "рд╕реБрдзрд╛рд░" рд╣реЛрддреА рд╣реИрдВ рдФрд░ рд╡реЗ рдПрдмреАрдЖрдИ рдХреЛ "рдареАрдХ" рдХрд░рддреЗ рд╣реИрдВред

рдФрд░ рд╕рд░реЛрдЧреЗрдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рди рдХрд░рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рд╕реБрд╡рд┐рдзрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓рд╛рдкрд░рд╡рд╛рд╣ substring(0, 1) рдпрд╣рд╛рдВ рдпрд╛ рд╡рд╣рд╛рдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдпрд╛рддрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ split("") рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ join() рдлрд┐рд░ рд╕реЗ, рдпрд╛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ StringBuilder рдмрдирд╛рдПрдВ рдЬреЛ рдХрднреА-рдХрднреА рдбрдмрд▓ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╡рд░реНрдг рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдЬрд╛рджреВ рдерд╛ред рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдПрдХ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдПрдХ рд╕рдореВрд╣ рдиреЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЧрдарди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЪреБрдирд╛, рдФрд░ рдЬрдм рд╡рд╛рд╕рдо рдЗрди рднрд╛рд╖рд╛рдУрдВ рдФрд░ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдореЙрдбреНрдпреВрд▓рд░ рд╡рд╛рд╕рдо рдмрди рдЬрд╛рдПрдЧрд╛, рдЙрддрдиреА рд╣реА рдЕрдзрд┐рдХ рд╕реАрдорд╛ рд╣реЛрдЧреА, рдпрд╣ рдмрддрд╛рдирд╛ рдХрдард┐рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдХрд┐рд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ, рдФрд░ рд╕рдорд╕реНрдпрд╛ рдЬрд┐рддрдиреА рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧреАред

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

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

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

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

JS, Java рдФрд░ C# рдореЗрдВ рддрд╛рд░ рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐, рдЬрдм рддрдХ рдпреВрдирд┐рдХреЛрдб рдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ 2 рдмрд╛рдЗрдЯреНрд╕ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдереЗ рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ UCS-2 рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдирд╣реАрдВ рдерд╛, рдХреЛрдб рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЗрди рднрд╛рд╖рд╛рдУрдВ рдиреЗ рдмрд╕ рдХрд┐рдпрд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред рдЗрд╕реА рддрд░рд╣, Linux syscalls рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рди рдХреЗ рд╕рдВрдкрд░реНрдХ рдореЗрдВ рд╣реИред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЖрдЬ рдХреЛрдИ рдХреЛрдб рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЖрдИрдЯреА рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдорд╛рди рдкрд╢реНрдЪ-рд╕рдВрдЧрддрддрд╛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВред рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ, wasm рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рдХрд╛рд░ рдЬрд╛рдирдмреВрдЭрдХрд░ рдореМрдЬреВрджрд╛ рдПрдХрд▓ рднрд╛рд╖рд╛ рдпрд╛ syscall ABI рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреА рдорд╛рдВрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╡реИрдз рд▓рдХреНрд╖реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдШрдЯрдХ рдореЙрдбрд▓ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛/рдорд╛рдирдХ/рдкрд░рдд рд╣реЛрдЧреАред рдпрд╣ рд▓реЗрдпрд░рд┐рдВрдЧ рдФрд░ рд╕реНрдХреЛрдкрд┐рдВрдЧ рдХрд╛ рд▓рд╛рдн рд╣реИ: рд╣рдореЗрдВ рдПрдХ рдРрд╕реА рдЪреАрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗред

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

  1. рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдорд╛рдирдиреЗ рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрд╛рд░рдг рд╣реИрдВ рдХрд┐ рд╕рд░реЛрдЧреЗрдЯ рдкрд╛рд╕ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ (рдФрд░ рдЕрдХреНрд╕рд░ рдЕрд░реНрдердкреВрд░реНрдг рдирд╣реАрдВ)
  2. рдХрд╕реНрдЯрдо рдЬреЗрдПрд╕ рдПрдкреАрдЖрдИ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╣рдореЗрд╢рд╛ рдмрдЪ рдирд┐рдХрд▓рддрд╛ рд╣реИ (рдпрд╣ рдПрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡реЗрдм рдПрдкреАрдЖрдИ рдХреЗ 100% рд╡реЗрдм рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдЬреЗрдПрд╕-рдЧреЛрдВрдж-рд░рд╣рд┐рдд рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╣реЛ)

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

рдХреБрдЫ рдмрд┐рдВрджреБ рдЬрд┐рдирд╕реЗ рдореИрдВ рдЕрд╕рд╣рдордд рд╣реВрдВ:

рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рдХрд┐ рдЖрдк рдЬреЛ рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рд╡рд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕-рдкреНрд░рдХрд╛рд░/#135 . рдореЗрдВ рдЙрдард╛рдИ рдЧрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ

рдпрд╣ рдЕрдм рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рд╣реИ, рдФрд░ рдкреЛрд╕реНрдЯ рдореЗрдВ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдореИрдВ рдЙрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬрд┐рд╕реЗ рдореИрдВ рд╣рд╛рдирд┐ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдЪрд┐рдд рд╕рдордЭреМрддрд╛ рдорд╛рдирддрд╛ рд╣реВрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореИрдВ рдЕрд▓рдЧ рдореБрджреНрджреЗ рдореЗрдВ рдЖрдкрдХреЗ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдареАрдХ рд░рд╣реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рддрднреА рдЬрдм рдХреЛрдИ рджреЛрд╖рд░рд╣рд┐рдд рдлрд╝реЙрд▓рдмреИрдХ рдЙрдкрд▓рдмреНрдз рд╣реЛред рдпрд╣ рдпрд╛ рддреЛ/рдпрд╛ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ WTF-8/16 рдЕрдзрд┐рдХ рд╕рдорд╛рд╡реЗрд╢реА, рдХрдо рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рднреА рдмреЗрд╣рддрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ Wasm рдХреЗ рдЙрдЪреНрдЪ рд╕реНрддрд░реАрдп рд▓рдХреНрд╖реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреНрд░рдорд╢рдГ рд╡реЗрдм рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рд╕рдореЗрдХрд┐рдд рд░реВрдк рд╕реЗ рдПрдХреАрдХреГрдд рдХрд░рдирд╛ рд╣реИред -рд╡реЗрдм рдХреА рд╕рдВрдЧрдд рдкреНрд░рдХреГрддрд┐, рдФрд░ рдпрд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рдХрд╛рд░реЛрдВ рдкрд░ рднреА рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред

рдореМрдЬреВрджрд╛ рдЬреЗрдПрд╕ рдПрдкреАрдЖрдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реАрдорд╛рдУрдВ рдкрд░ рдордирдорд╛рдирд╛ рдореВрд▓реНрдп рд░реВрдкрд╛рдВрддрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп-рдЙрджреНрджреЗрд╢реНрдп рдПрд╕реНрдХреЗрдк рд╣реИрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕ рд╢реБрд░реБрдЖрддреА рдмрд┐рдВрджреБ рдкрд░ рджреВрд╕рд░реА рдПрд╕реНрдХреЗрдк рд╣реИрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреИрд╕реЗ рд╣реИред

рдХрд╕реНрдЯрдо JS API рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╣рдореЗрд╢рд╛ рдмрдЪ рдирд┐рдХрд▓рддрд╛ рд╣реИ

рдпрд╣ рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдЬрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЧреЛрдВрдж рдХреЛрдб рд╣реИ рдЬреИрд╕реЗ:

const STRING_SMALLSIZE = 192; // break-even point in V8
const STRING_CHUNKSIZE = 1024; // mitigate stack overflow
const utf16 = new TextDecoder("utf-16le", { fatal: true }); // != wtf16

/** Gets a string from memory. */
function getStringImpl(buffer, ptr) {
  let len = new Uint32Array(buffer)[ptr + SIZE_OFFSET >>> 2] >>> 1;
  const wtf16 = new Uint16Array(buffer, ptr, len);
  if (len <= STRING_SMALLSIZE) return String.fromCharCode(...wtf16);
  try {
    return utf16.decode(wtf16);
  } catch {
    let str = "", off = 0;
    while (len - off > STRING_CHUNKSIZE) {
      str += String.fromCharCode(...wtf16.subarray(off, off += STRING_CHUNKSIZE));
    }
    return str + String.fromCharCode(...wtf16.subarray(off));
  }
}

рдкрд╣рд▓рд╛, рдЪреВрдВрдХрд┐ рд╣рдо Chrome рдФрд░ Node.js рдХреА рдмрд╣реБрдд рдкрд░рд╡рд╛рд╣ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдкрд╛рдпрд╛ рдХрд┐ UTF-16LE рдХреЗ рд▓рд┐рдП V8 рдХрд╛ TextDecoder рдЕрдиреНрдп рдЗрдВрдЬрдиреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИ (SM рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреЗрдЬрд╝ рд╣реИ), рдЗрд╕рд▓рд┐рдП String.fromCharCode рд╣реИ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ V8 рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдмреНрд░реЗрдХ рдИрд╡рди рдкреЙрдЗрдВрдЯ рддрдХ рддреЗрдЬрд╝ред рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, WTF-16 (рдЬреЛ рдЕрд▓рдЧ рд╕реЗ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ) рдХреЗ рд▓рд┐рдП рдХреЛрдИ TextDecoder рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдкрд╣рд▓реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЧрдард┐рдд UTF-16 рдХреЛ рдбрд┐рдХреЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдлреЗрдВрдХрдиреЗ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рдкрд╕ рдЪрдВрдХрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧрд┐рд░ рдЬрд╛рддреЗ рд╣реИрдВ рдмрд╣реБрдд рдзреАрдорд╛ String.fromCharCode ред рдЪрдВрдХрд┐рдВрдЧ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд▓рдВрдмреА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд░ рдХреЗрд╡рд▓ String.fromCharCode рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рд╕реНрдЯреИрдХ рдУрд╡рд░рдлреНрд▓реЛ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред

рджреВрд╕рд░реА рдУрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд╕реНрдЯ рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рдЬреЛ рдПрдХ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдИрдЯреА, рдЕрднреА рдЙрддрдирд╛ рддрдЯрд╕реНрде рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдо рддреМрд░ рдкрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдИрдЯреА string s рдХрд╛ рдмрд┐рдВрджреБ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреЗрдПрд╕ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╣реИ, рдЬреЛ рдЕрднреА рднреА рд╣рдорд╛рд░рд╛ рдкреНрд░рд╛рдердорд┐рдХ рдЗрдВрдЯрд░рдСрдк рд▓рдХреНрд╖реНрдп рд╣реИред

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

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

wasm рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рдХрд╛рд░ рдЬрд╛рдирдмреВрдЭрдХрд░ рдореМрдЬреВрджрд╛ рдПрдХрд▓ рднрд╛рд╖рд╛ рдпрд╛ syscall ABI рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рдХреА рдорд╛рдВрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ

рдореИрдВрдиреЗ рдЗрд╕реЗ рдРрд╕реЗ рдкрдврд╝рд╛ рдЬреИрд╕реЗ рдореИрдВ рдЗрд╕ рд░рд╛рдп рдХрд╛ рдерд╛, рдЬреЛ рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рд╣реВрдВред рдореИрдВ рдЖрдкрдХреЛ рдпрд╣рд╛рдВ рд╕рдВрджреЗрд╣ рдХрд╛ рд▓рд╛рдн рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдХрд┐ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЖрдИрдЯреА рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗрд╡рд▓ рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рдореВрд╣ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдбрдмреНрд▓реНрдпреВрдЯреАрдПрдл -8/16 рдЕрдзрд┐рдХ рд╕рдорд╛рд╡реЗрд╢реА рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рддрд╛рд░реНрдХрд┐рдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХреА рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬреЗрдПрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рд░рд╛рдЙрдВрдбрдЯреНрд░рд┐рдкреНрд╕ рд╣реИред рд╣рдо рдпрд╣рд╛рдВ рдЕрд╕рд╣рдордд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдПрдХ рдЙрдЪрд┐рдд рдПрд╕реНрдХреЗрдк рд╣реИрдЪ рдХреЗ рдЕрднрд╛рд╡ рдореЗрдВред рдпрджрд┐ рдПрдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рджреЛрд╖рд░рд╣рд┐рдд рд╡рд┐рдХрд▓реНрдк рдореМрдЬреВрдж рд╣реЛрдЧрд╛, рддреЛ рдХреЛрдИ рднреА рдЯреВрдЯрд╛ рд╣реБрдЖ рдпрд╛ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рд╡рдВрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ, рдореИрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдкрдХреЗ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдареАрдХ рд░рд╣реВрдВрдЧрд╛ред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рдорд╛рдирдиреЗ рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрд╛рд░рдг рд╣реИрдВ рдХрд┐ рд╕рд░реЛрдЧреЗрдЯ рдкрд╛рд╕ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ (рдФрд░ рдЕрдХреНрд╕рд░ рдЕрд░реНрдердкреВрд░реНрдг рдирд╣реАрдВ)

рд╣рдо рдпрд╣рд╛рдВ рдЕрд╕рд╣рдордд рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рдкреНрд░рд╕реНрддреБрддрд┐ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдЙрдЪрд┐рдд рд╕рдВрджреЗрд╣ рдкреЗрд╢ рдХрд░рддреА рд╣реИрдВ рдХрд┐ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рджреБрд░реНрд▓рдн, рдмрд╣реБрдд рд╕рд╛рд░реНрдердХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдХрд╣реЗрдВ рдХрд┐ рдЬрд╣рд╛рдВ рдЕрдЦрдВрдбрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ), рдФрд░ рдореЗрд░реА рд░рд╛рдп рд╣реИ рдХрд┐ "рд╣рдореЗрдВ рдкрд░рд┐рдЪрдп рджреЗрдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдирд┐рдЪреНрдЫреБрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рд╣рдорд╛рд░реЗ рдпреВрдирд┐рдХреЛрдб рд╕реНрд╡рдЪреНрдЫрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХреА рдЙрдореНрдореАрдж рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЦрддрд░реЗред" рдпрд╣реА рд╣реИ, рдпрджрд┐ рд╣рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреИрдирдирд┐рдХрд▓ рдПрдмреАрдЖрдИ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдорд╛рдорд▓реЛрдВ рдореЗрдВ рднреА рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИ: рдЬрд╛рд╡рд╛/рд╕реА#/рдПрдПрд╕<->рдЬреЗрдПрд╕, рдЬрд╛рд╡рд╛/рд╕реА#/рдПрдПрд╕<-> рдЬрд╛рд╡рд╛/рд╕реА#/рдПрдПрд╕. рдЕрдиреНрдп рдкрдереЛрдВ рдкрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╢рд╛рдпрдж рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рднрд╛рд╖рд╛рдУрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдХреНрд░рдорд╢рдГ рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЯреВрдЯрд╛ рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рдЕрднреА рднреА рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕рд╛ рдХреЛрдИ рд╕рдмреВрдд рд╣реИ рдЬреЛ рдпрд╣ рдмрддрд╛рддрд╛ рд╣реЛ рдХрд┐ рдЗрди WTF-16 рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рд┐рдореЗрдВрдЯрд┐рдХреНрд╕ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдП рдмрд┐рдирд╛ IT рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдирд╣реАрдВ рд╣реЛрдЧрд╛

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

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдЬреЗрдПрд╕ рдЧреЛрдВрдж рдХреЛрдб рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдлрд┐рдХреНрд╕ рдЬреЗрдПрд╕ рдПрдкреАрдЖрдИ рдпрд╛ рдЬреЗрдПрд╕ рдореЗрдВ рд╣реИ, рди рдХрд┐ рдкреВрд░реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдШрдЯрдХ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ wtf-16-string рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдЬреЛрдбрд╝рдХрд░ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рдЙрд╕ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдирдИ рдЬрд╛рдирдХрд╛рд░реА рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣реА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╡рд╛рдм рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ; рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЬреНрдпрд╛рджрд╛рддрд░ рд▓рдХреНрд╖реНрдпреЛрдВ/рджрд╛рдпрд░реЗ рдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рдкрд░ рдЕрд╕рд╣рдордд рд╣реИрдВред

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

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдФрд░ рднреА рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рд╕рдВрдЧрддрд┐ рдпрд╣ рд╣реИ рдХрд┐ UTF-16LE рдХреЗ рд▓рд┐рдП TextEncoder рднреА рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рдХреЛ рдпрд╣ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

/** Allocates a new string in the module's memory and returns its pointer. */
function __newString(str) {
  if (str == null) return 0;
  const length = str.length;
  const ptr = __new(length << 1, STRING_ID);
  const U16 = new Uint16Array(memory.buffer);
  for (var i = 0, p = ptr >>> 1; i < length; ++i) U16[p + i] = str.charCodeAt(i);
  return ptr;
}

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╛рд╡рд╛, рд╕реА #, рдПрдПрд╕ рдФрд░ рдЕрдиреНрдп рдЬреИрд╕реЗ рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдкреНрд░рдореБрдЦ рджрд░реНрдж рдмрд┐рдВрджреБ рд╣реИ, рдФрд░ рдпреЗ рджреЛрдиреЛрдВ рддрдм рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдВрдЧреЗ рдЬрдм list u16 рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рдПред рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдпрд╣ рдЬреЗрдПрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рдЙрд╕ рдбрдмрд▓ рд░реА-рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ + рдПрдХ рд╣реА рднрд╛рд╖рд╛ рдХреЗ рджреЛ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмреАрдЪ рд╣рд╛рдирд┐ рдЗрддрдиреА рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ :(

рд╡реЗрдм рдкрд░ рдЙрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдХреИрд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП TextEncoder / TextDecoder рд╕реЗ рдкрд░реЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рдПрдХ рдкреВрд░реА рдЬрдЧрд╣ рд╣реИред рджреВрд╕рд░рд╛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡реИрдХрд▓реНрдкрд┐рдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдХрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд░реВрдкрд╛рдВрддрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП new WebAssembly.Function() (рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рд╣реИ) рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рд╡рд╛рд╕рдо рдХреЗ рдЧреИрд░-рдШрдЯрдХ рдЙрдкрдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧреА (рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдмрд╣реБрдд рдЬрд▓реНрдж), рдЗрд╕ рдмрд╛рдд рдХреЛ рдкреБрд╖реНрдЯ рдХрд░рддреЗ рд╣реБрдП рдХрд┐ рдЬреЗрдПрд╕ рдПрдкреАрдЖрдИ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдЬрдЧрд╣ рд╣реЛрдЧреАред

рдПрдлрд╡рд╛рдИрдЖрдИ: рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕реБрдЭрд╛рд╡реЛрдВ рдХреА https://github.com/WebAssembly/interface-types/issues/135#issuecomment -863493832 рдореЗрдВ рдЖрдпрд╛ рдерд╛ :)

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

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

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

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

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

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

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