Rust: рд░рд╕реНрдЯ рдХреЛ рдПрдореНрд╕реНрдХреНрд░рд┐рдкреНрдЯреЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 18 рдЕрдкреНрд░реИрд▓ 2012  ┬╖  30рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: rust-lang/rust

рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдкрд░ рдХреБрдЫ рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рд╣реИ рдФрд░ rustc рдЕрдм рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ emscripten рдЕрдиреБрд╡рд╛рдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрдХрд▓рд┐рдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдпрд╣ рд░рдирдЯрд╛рдЗрдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╣рд┐рдЯ рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд▓рд╛ рдХрджрдо рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ emcc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рдирдЯрд╛рдЗрдо рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИред рдЙрди рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдЬреЛ EMSCRIPTEN ifdefs рдХреЗ рдкреАрдЫреЗ рдирд╣реАрдВ рдмрдирддреА рд╣реИрдВред

Emscripten рдЗрдирд▓рд╛рдЗрди рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд░рдирдЯрд╛рдЗрдо рдХреЗ рд╕рднреА рд╣рд┐рд╕реНрд╕реЗ рдЬреЛ emscripten рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдмрдирддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдЗрдирд▓рд╛рдЗрди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдо рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдкреАрд╕рдореАрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ C++ рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдХрдВрдкрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреА рдЬрд╣рдордд рдирд╣реАрдВ рдЙрдард╛ рд╕рдХрддреЗред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред

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

рдореИрдВ 1.0 рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЯреНрд░рд╛рдЗрдПрдЬ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдЗрдЪреНрдЫрд╛-рд╕реВрдЪреА рд╡рд╛рд▓реА рд╕рд╛рдордЧреНрд░реА рдХреЛ RFCs рд░реЗрдкреЛ рдХреА рддрд░рд╣ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣реАрдВ рдкрд░ рдкреНрд░рдореБрдЦ рдирдИ рдЪреАрдЬреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛/рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ RFCs рд░реЗрдкреЛ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ: rust-lang/rfcs#604

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

#3608 рднреА рджреЗрдЦреЗрдВред

рдЕрднреА рднреА рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛; рдХрд┐рд╕реА рдкрд░рд┐рдкрдХреНрд╡рддрд╛ рдореАрд▓ рдХреЗ рдкрддреНрдерд░ рдкрд░ рдирд╣реАрдВред

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

рдпрд╣ рднреА рджреЗрдЦреЗрдВ https://github.com/mozilla/rust/issues/7282

рдЕрдм рдЬрдмрдХрд┐ рд░рдирдЯрд╛рдЗрдо рд░рд╕реНрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдЗрд╕ рдмрдЧ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рдмрджрд▓рддрд╛ рд╣реИ? рдПрдХ рд░рдирдЯрд╛рдЗрдорд▓реЗрд╕ рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдХреЛ рдПрдорд╕реНрдХреНрд░рд┐рдкреНрдЯрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рдирд╛ рдХрд┐рддрдирд╛ рдХрдард┐рди рд╣реЛрдЧрд╛?

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

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

@brson : рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ #10780 рдЗрд╕ рд╕рдордп рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдЕрд╡рд░реЛрдзрдХ рд╣реЛрдЧрд╛ред рдЬрдВрдЧ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рдЦрдВрдбрд┐рдд рд╕реНрдЯреИрдХ рд╕рдорд░реНрдерди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдЯреИрдХ рд╕реБрд░рдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЖрдХрд╛рд░ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рд╕рд╛рде рд▓реИрдВрдбрд┐рдВрдЧ рдкреИрдб рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдЧрд╛ред

-Z no-landing-pads рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдпрд╣ рдЕрдм рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ! рдЗрд╕рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡реИрд╕реЗ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдлрд╛рдЗрд▓реЗрдВ, рдЯреАрд╕реАрдкреА, рдпреВрдбреАрдкреА, рдЖрджрд┐) рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрджрд┐ рдФрд░ рдЬрдм рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдлреНрд░реАрд╕реНрдЯреИрдВрдбрд┐рдВрдЧ рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ рдФрд░ рд╣рдо рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдФрд░ рдЕрдзрд┐рдХ рдореБрджреНрджреЛрдВ рдХреЛ рдЦреЛрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдореИрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рдореИрдВ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рдо рд╕рдВрднрд╡рдд: рд╣реЛ рдЪреБрдХрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡рдд: libemscripten рд╣реЛрдЧреА рддрд╛рдХрд┐ рдПрдорд╕реНрдХреНрд░рд┐рдкреНрдЯрди-рд╡рд┐рд╢рд┐рд╖реНрдЯ I/O рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдиреИрдЧ рд╣рд┐рдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЫреЛрдбрд╝рдиреЗ рд▓рд╛рдпрдХ рд╣реИ рдореБрджреНрджрд╛ рдЦреБрд▓рд╛ рд╣реИ (рдпрд╣ рдЕрднреА рднреА рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ!)

@alexcrichton : рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рд╕рдорд░реВрдкрддрд╛ рдФрд░ рдПрдорд╕реНрдХреНрд░рд┐рдкреНрдЯрди рдХреЗ рд▓рд┐рдП I/O рд╕рдорд░реНрдерди рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛, рдпрд╣ stdout/stderr рдХреЗ рд▓рд┐рдП рдХрдВрд╕реЛрд▓ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХрд┐рд╕реА рднреА рдЪреАрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ рдЬреЛ рдПрдХ рдИрд╕реНрдХреНрд░рд┐рдкреНрдЯрди рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЖрд╡рдВрдЯрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдкрд░реЗ рдПрдХ рдлреНрд░реАрд╕реНрдЯреИрдВрдбрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИред

рд╕реНрдерд┐рддрд┐ рдЕрдкрдбреЗрдЯ:

@alexcrichton рдиреЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЕрдзрд┐рдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЫреЛрдЯреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рдореВрд╣ рдореЗрдВ

рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдХреИрд╕реЗ рджреВрдВрдЧрд╛:

  • рд░рд╕реНрдЯ рдФрд░ LLVM рдЯреВрд▓рдЪреЗрди рдХреЗ рд╕рд╛рде рдХреБрдЫ рдкреНрд░рдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рд╕рдордЭреЗрдВ рдХрд┐ asm.js рдХреЛ рдХреНрд░реЙрд╕-рдХрдВрдкрд╛рдЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдбрдЬрди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
  • рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ emscripten рдХреЗ рд╕рд╛рде libcore рдмрдирд╛рдПрдВ рдФрд░ рд╕рд╛рдмрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рд╡реЗрдм рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
  • рдПрдХ рдПрдорд╕реНрдХреНрд░рд┐рдкреНрдЯрди-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рдХреНрд╖реНрдп рдЯреНрд░рд┐рдкрд▓ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП rustc рдФрд░ mk/platform.mk рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ, рдПрдХ рдХреНрд░реЙрд╕-рдХрдВрдкрд╛рдЗрд▓ рдЯреВрд▓рдЪреЗрди рддреИрдпрд╛рд░ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ libcore.rlib рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИ
  • рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдХрд░ liballoc рд╕реЗ рдирд┐рдкрдЯреЗрдВ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ emscripten-рдкреНрд░рджрддреНрдд) malloc, рдлрд┐рд░ рдЕрдиреНрдп рд░рдирдЯрд╛рдЗрдо-рдлреНрд░реА рдХреНрд░реЗрдЯред

рдпрд╣ рдХрд╛рдлреА рдЕрдЪреНрдЫреА рд╢реБрд░реБрдЖрдд рд╣реИ!

рдареАрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЪрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛, рдФрд░ рдЬрд╛рд╣рд┐рд░ рддреМрд░ рдкрд░ рдмрд▓реНрд▓реЗ рд╕реЗ рд╣реА рд╕рдорд╕реНрдпрд╛рдПрдВ рдЖрдИрдВред

рдореИрдВрдиреЗ libcore рдХреЛ --emit bc рд╕рд╛рде рдмрд┐рдЯрдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛, рдФрд░ рдЗрд╕реЗ emcc -O0 рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп, рдореБрдЭреЗ рдорд┐рд▓рддрд╛ рд╣реИ:

/Users/arcnor/emscripten-fastcomp/build/bin/llvm-nm: /tmp/tmpfTkmfj/core_0.o: Invalid CMPXCHG record.
/Users/arcnor/emscripten-fastcomp/build/bin/opt: /tmp/tmpfTkmfj/core.bc: error: Invalid CMPXCHG record
Traceback (most recent call last):
  File "/Users/arcnor/emscripten/emcc", line 1573, in <module>
    shared.Building.llvm_opt(final, link_opts)
  File "/Users/arcnor/emscripten/tools/shared.py", line 1335, in llvm_opt
    assert os.path.exists(target), 'Failed to run llvm optimizations: ' + output
AssertionError: Failed to run llvm optimizations:

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ, рдпрд╛ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП rustc --emit рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХрд╛ рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реИ...

рдореИрдВрдиреЗ libnum рд╕рд╛рде рднреА рдХреЛрд╢рд┐рд╢ рдХреА, рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рд╕рд░рд▓, рдФрд░ bc рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ emcc рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдЧрд▓рдд рдЯреНрд░рд┐рдкрд▓ рдФрд░ рдкрд░рд┐рдгрд╛рдореА . js рдореЗрдВ libnum рдЕрдВрджрд░ рдХреЛрдИ рднреА рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рдмрд╣реБрдд рдмреЗрд╡рдХреВрдл рд╣реВрдВ :)

@Arcnor рдЖрдк рдЙрди рд▓реЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ рд╕реЗ рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реЗ рдЕрдкрдиреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ emscripten рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рдкрд░реАрдХреНрд╖рдг рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдП рд╣реИрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВред

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

libcore рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рддреНрд░реБрдЯрд┐ рдЗрд╕ emscripten рд╕рдорд╕реНрдпрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИред libcore рдХреЛ llvm рдмрд╛рдЗрдЯрдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ llvm рдкрд░рдорд╛рдгреБ рдирд┐рд░реНрджреЗрд╢ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди emscripten рдкрд░рдорд╛рдгреБ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЬрдВрдЧ рдХреА рддрд░рдл рд╕реЗ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдореНрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯрди рдореБрджреНрджреЗ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд░рдорд╛рдгреБ рдореЗрдВ рдПрдореНрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

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

рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рдирд╣реАрдВ рд╣реВрдВ, рддреЛ рдПрдорд╕реНрдХреНрд░рд┐рдкреНрдЯрди рдХрд╛ рдирдпрд╛ "рдлрд╛рд╕реНрдЯрдХреЙрдореНрдк" рдмреИрдХрдПрдВрдб рдПрд▓рдПрд▓рд╡реАрдПрдо рдХрд╛ рдПрдХ рдХрд╛рдВрдЯрд╛ рд╣реИ (рдЬрдмрдХрд┐ рдкрд┐рдЫрд▓рд╛ рдмреИрдХрдПрдВрдб рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рдКрдкрд░ рд╕рд┐рд░реНрдл рдПрдХ рдкрд░рдд рдерд╛), рдЗрд╕рд▓рд┐рдП рдлрд╛рд╕реНрдЯрдХреЙрдореНрдк рдХреЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЕрдкрдЧреНрд░реЗрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдмрд╛рд░ рдмрд╛рд░ред

рдпрд╣ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реЛрдЧрд╛ рдпрджрд┐ рдЗрд╕реЗ рдЬрдВрдЧ рдХреЗ рдЙрддреНрдкрд╛рджрди рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЕрднреА Fastcomp рдХрд╛ LLVM рд╕рдВрд╕реНрдХрд░рдг 3.3 рд╣реИ, рдЬрдмрдХрд┐ Rust рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ LLVM 3.4 рд╣реИред

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдордп рдХреЗ рд▓рд┐рдП рдПрдорд╕реНрдХреНрд░рд┐рдкреНрдЯрди рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХрдорд╛рддреНрд░ рд╡реНрдпрдХреНрддрд┐ рд╣реИред

рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА рдЪреАрдЬреЗрдВ рдпрд╣рд╛рдВ рджреА рдЧрдИ рд╣реИрдВ:

  • рдмрд╛рдпрдЯреЗрдХреЛрдб рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ (рд░рд╕реНрдЯ рдХреЗ рдПрд▓рдПрд▓рд╡реАрдПрдо 3.4 рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди) рдФрд░ рдЗрд╕реЗ рдлрд╛рд╕реНрдЯрдХреЙрдореНрдк (рдПрд▓рдПрд▓рд╡реАрдПрдо 3.3 рдХрд╛ рдХрд╛рдВрдЯрд╛) рдореЗрдВ рдкрд╛рд╕ рдХрд░рдирд╛; Fastcomp рдХреНрд░реИрд╢ рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ
  • IR рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛, рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ LLVM 3.3 рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рди рд╣реЛ рдЬрд╛рдП рдФрд░ рдЗрд╕реЗ fastcomp рдореЗрдВ рдкрд╛рд╕ рдХрд░ рджреЗрдВ; рдмрд╣реБрдд рдЬрдЯрд┐рд▓, рдХрд┐рд╕реА рднреА рдЧреИрд░-рддреБрдЪреНрдЫ рдХреЛрдб рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реА рдЪреАрдЬреЗрдВ
  • рд░рд╕реНрдЯ рд╕реНрдЯреЗрдЬ1 рдХреЛ --llvm-root рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ emscripten's fastcomp рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ; рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдЖрд░рдПрдо/рдПрдордЖрдИрдкреАрдПрд╕/рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣рдЯрд╛ рджрд┐рдпрд╛ рдерд╛ред рдЙрдирдХреЗ рдХрд╛рдВрдЯреЗ рдореЗрдВ (рдореБрдЭреЗ рдореЗрдХрдлрд╝рд╛рдЗрд▓ рд╕реЗ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓ рд░рд╣реА рд╣реИрдВ рдФрд░ рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ рд▓рд┐рдВрдХреЗрдЬ рдХреЗ рджреМрд░рд╛рди)
  • 3.3 рдпреБрдЧ рд╕реЗ рдПрдХ рдкреБрд░рд╛рдиреА рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдВрдЧ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ LLVM git рд╕рдмрдореЙрдбреНрдпреВрд▓ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ; LLVM рдореЗрдВ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ segfault рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛
  • --llvm-root рд╕рд╛рде рд░рд╕реНрдЯ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдПрдХ рдкреВрд░реНрд╡-рд╕рдВрдХрд▓рд┐рдд LLVM 3.3 (рдЖрдзрд┐рдХрд╛рд░рд┐рдХ ubuntu рд░реЗрдкреЛ рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ) рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИ; рдЪрд░рдг 1 рдХреЗ рд╕рдВрдХрд▓рди рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рджрд╛рд╡рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╡рд┐рдлрд▓ рд╣реЛ рдЧрдпрд╛ рдФрд░ рдЙрддреНрдкрд╛рджрд┐рдд рд░рд╕реНрдЯрд╕реА рдмрд╛рдЗрдирд░реА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

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

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд░рдо рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд╕реЙрд░реНрдЯрд╛; рд╢рд╛рдпрдж рдпрд╣ рдорджрдж рдХрд░реЗрдЧрд╛

рдорд╛рдореВрд▓реА рдЕрджреНрдпрддрди: emscripten-fastcomp рдХреЛ LLVM 3.4 рдореЗрдВ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдмрд╛рдж рдореЗрдВ LLVM 3.5 рдореЗрдВ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

@tomaka рдХреНрдпрд╛ рдЖрдкрдиреЗ 3.4 рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИ? рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рд░рдо рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛, рд▓реЗрдХрд┐рди рдЕрдирдЬрд╛рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдФрд░ рд╡рд┐рдлрд▓ рд░рд╣рд╛ред

@ibdknox 3.4 3.5 . рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИ
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рднреА рдПрдХ рдЕрд╕рдлрд▓ рджрд╛рд╡рд╛ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ: LLVM ERROR: 0 && "some i64 thing we can't legalize yet"

рд╣рдореНрдоред рдореИрдВ rustc --emit ir foo.rust рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рд▓реЗрдиреЗ рдФрд░ рдЗрд╕реЗ emscripten-incoming рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред рдХреНрдпрд╛ LLVM 3.5 рдкрд░ рдЕрдм рдЬрдВрдЧ рд▓рдЧ рдЧрдИ рд╣реИ?

рд░рд╕реНрдЯ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ LLVM 3.5 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЖрдк рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреБрдЫ рднреА рдЕрд╕рдВрдЧрдд рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдареАрдХ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ:

#[start]
fn main(_: int, _: *const *const u8) -> int {}

рдпрд╣ рдЕрд╕рдВрдЧрдд IR рдХреЗ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИ:

fn main() { println!("hello world"); }

@ibdknox http://www.reddit.com/r/rust_gamedev/comments/2n0x08/emscripten_experiments/
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рддрдирд╛ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдЙрд╕рд╕реЗ рдХрдо рдЕрд╕рдВрдЧрддрддрд╛рдПрдВ рд╣реИрдВред

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

Value:   %28 = call fastcc { i8, [0 x i8], [0 x i8] } @_ZN3fmt5write20h2c56fdda0b308d94DFAE({ i8*, void (i8*)** }* noalias nocapture dereferenceable(8) %arg.i, %"struct.core::fmt::Arguments[#3]"* noalias nocapture readonly dereferenceable(24) %__args31), !noalias !22
LLVM ERROR: Unrecognized struct value
Traceback (most recent call last):
  File "/Users/chris/Downloads/emsdk_portable/emscripten/incoming/emcc", line 1259, in <module>
    shared.Building.llvm_opt(final, link_opts)
  File "/Users/chris/Downloads/emsdk_portable/emscripten/incoming/tools/shared.py", line 1401, in llvm_opt
    assert os.path.exists(target), 'Failed to run llvm optimizations: ' + output
AssertionError: Failed to run llvm optimizations:

рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреИрд╕реЗ рд╕рдВрдХрд▓рди рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:

rustc --target i686-apple-darwin -C lto --emit ir foo.rust
emcc -v foo.ll -o test.html

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреЛ рдЪреАрдЬреЗрдВ fmt рдореЗрдВ рдирд╣реАрдВ рдЖрддреА рд╣реИрдВ, рд╡реЗ рдЖрдо рддреМрд░ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд▓рдЧрддреА рд╣реИрдВред

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

рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЬреЛ рдХреБрдЫ рд╕реАрдЦрд╛ (рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдзреНрдпрд╛рди рджреЗрдиреЗ рдореЗрдВ рдХреБрдЫ рд╢рд╛рдореЗрдВ рд▓рдЧреАрдВ) рдЙрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рд╡рд╛рд▓реА рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд░рд╕реНрдЯ рдЬреБрд▓рд╛рдИ рдореЗрдВ рдПрд▓рдПрд▓рд╡реАрдПрдо 3.6 рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ред рддреЛ Rust рдФрд░ emscripten-fastcomp рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдЕрд╕рдВрдЧрдд рд╣реИрдВред

рдореИрдВрдиреЗ рдЬрдВрдЧ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА --llvm-root рдХреЗ рд╕рд╛рде emscripten-fastcomp 1.29.2 рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реБрдП рдФрд░ рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА:

rustc: x86_64-apple-darwin/stage2/lib/rustlib/x86_64-apple-darwin/lib/libcore
error: internal compiler error: unexpected panic
note: the compiler unexpectedly panicked. this is a bug.
note: we would appreciate a bug report: http://doc.rust-lang.org/complement-bugreport.html
note: run with `RUST_BACKTRACE=1` for a backtrace
thread 'rustc' panicked at 'assertion failed: self.raw.hash != self.hashes_end', /Users/zen/Code/rust/src/libstd/collections/hash/table.rs:776


make: *** [x86_64-apple-darwin/stage2/lib/rustlib/x86_64-apple-darwin/lib/stamp.core] Error 101

рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ emscripten-fastcomp рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдФрд░ рдмрдирд╛рдпрд╛ рд╣реИ

../configure --enable-optimized --disable-assertions --enable-targets=host,js,arm,aarch64,mips

рдПрдореНрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯрди рдЧрд╛рдЗрдб рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреЗ рдмрдЬрд╛рдп

../configure --enable-optimized --disable-assertions --enable-targets=host,js

рд╣рд╛рд▓рд╛рдВрдХрд┐ рд░рд╕реНрдЯ рдХреЛ рд╕рднреА рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдореЗрд╢рд╛ рд╕рднреА рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд CPU рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде LLVM рдХреЗ рд╡рд┐рд░реБрджреНрдз рд▓рд┐рдВрдХ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬрд┐рд╕реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЙрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рд╣рдореЗрд╢рд╛ emscripten-fastcomp рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЬрдВрдЧ рдПрд▓рдПрд▓рд╡реАрдПрдо 3.6 рдореЗрдВ рдЪрд▓реА рдЧрдИ рд╣реИ рддреЛ рдореИрдВрдиреЗ рдЬрдВрдЧ-рд▓реИрдВрдЧ/рдПрд▓рдПрд▓рд╡реАрдПрдо рдкрд░ рдЖрдЦрд┐рд░реА рд╢рд╛рдЦрд╛ рджреЗрдЦреА рдЬреЛ рдПрд▓рдПрд▓рд╡реАрдПрдо 3.5 рдереАред https://github.com/rust-lang/llvm/tree/rust-llvm-2014-07-24 рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп emscripten-fastcomp рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛, рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдирд┐рдХрд▓реЗрдЧрд╛ред рдореБрдЭреЗ рд╡рд╣реА рд╕рдЯреАрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реА рдЬрдм рдПрдореНрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯрди-рдлрд╛рд╕реНрдЯрдХреЙрдореНрдк рдХреЗ рд╣рд╛рд▓рд┐рдпрд╛ рдХрджрдо рдХреЛ рдПрд▓рдПрд▓рд╡реАрдПрдо 3.5 рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдореИрдВ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд▓реЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЬрдВрдЧ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдЕрдм рдПрд▓рдПрд▓рд╡реАрдПрдо 3.5 рдХреЗ рд╕рд╛рде рдЕрд╕рдВрдЧрдд рд╣реИ рдФрд░ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдиреНрдпрдерд╛ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рддрд╛ред

рддреЛ рдЕрдм рд╣рдо рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдпрд╛ LLVM 3.6 :wink рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП emscripten-fastcomp рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:

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

рдореИрдВрдиреЗ рд░рд╕реНрдЯ-рд▓реИрдВрдЧ/рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЛ рдПрдореНрд╕реНрдХреНрд░рд┐рдкреНрдЯреЗрди-рдлрд╛рд╕реНрдЯрдХреЙрдореНрдк рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░рдиреЗ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реАред рдЙрд╕ рд╕рдордп 43 рдлрд╛рдЗрд▓реЛрдВ рдкрд░ 117 рдкрд░рд╕реНрдкрд░ рд╡рд┐рд░реЛрдзреА рдзрд╛рд░рд╛рдПрдВ рдереАрдВред

рдореИрдВрдиреЗ рд▓рд┐рдВрдХрд┐рдВрдЧ рдЪрд░рдг рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП Rust 0.11 рдФрд░ emcc 1.29.2 рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рдгрд╛рдо рд╣реИ:

$ emcc -v hello.ll -o hello.js
INFO     root: (Emscripten: Running sanity checks)
WARNING: Linking two modules of different data layouts: '/Users/zen/.emscripten_cache/libc.bc' is 'e-p:32:32-i64:64-v128:32:128-n32-S128' whereas '/tmp/tmpv_yB8E/hello_0.o' is 'e-p:32:32-f64:32:64-f80:128-n8:16:32'
WARNING: Linking two modules of different target triples: /Users/zen/.emscripten_cache/libc.bc' is 'asmjs-unknown-emscripten' whereas '/tmp/tmpv_yB8E/hello_0.o' is 'i686-apple-darwin'
warning: incorrect target triple 'i686-apple-darwin' (did you use emcc/em++ on all source files and not clang directly?)
warning: unresolved symbol: _ZN2io5stdio12println_args20h0caae70b0e2eb347Iol7v0_11_0E
warning: unresolved symbol: _ZN10lang_start20h70f93b7d0a75f99atre7v0_11_0E

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ emcc/fastcomp рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗ рд╕рд╛рде рдкреНрд░рддреАрдХреЛрдВ рдореЗрдВ рдбреЙрдЯреНрд╕ рдХреА рдЬрдЧрд╣ рд▓реЗрддрд╛ рд╣реИ рдЬрдмрдХрд┐ рд░рд╕реНрдЯ рджреВрд╕рд░реЗ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗ рд╕рд╛рде рдЙрдкрд╕рд░реНрдЧ рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВред i686-рдРрдкреНрдкрд▓-рдбрд╛рд░реНрд╡рд┐рди рдмрд┐рд▓реНрдб рдореЗрдВ libstd рдореЗрдВ рдкрд╣рд▓рд╛ рдЕрдирд╕реБрд▓рдЭрд╛ рдкреНрд░рддреАрдХ __ZN2io5stdio12println_args20h0caae70b0e2eb347Iol7v0.11.0E рд░реВрдк рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЕрдЧрд░ рдореИрдВ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП emcc рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдирд┐рд░реНрдорд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдЗрд╕ рдкреНрд░рддреАрдХ рдХреЛ рдХреИрд╕реЗ рдЦреЛрдЬрд╛ рдЬрд╛рдП, рддреЛ рдореИрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ libs рдореЗрдВ рдорд╢реАрди рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ рдЬрдмрдХрд┐ emcc рдХреЛ LLVM рдмрд╛рдЗрдЯ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рдПрдорд╕реНрдХреНрд░рд┐рдкреНрдЯрди рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рдЙрд╕рдХреА рдЬрд░реВрд░рдд рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдЧрд╛ред

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

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

    • mk/cfg/asmjs-рдЕрдЬреНрдЮрд╛рдд-emscripten.mk

    • rt/arch/asmjs/{morestack.S,record_sp.S} (рдЦрд╛рд▓реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?)

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

    • librustc_trans/trans/cabi_asmjs.rs

    • librustc_trans/trans/cabi.rs

      рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЕрдиреБрдорд╛рди рд╣реИред

    • librustc_back/target/asmjs_unknown_emscripten.rs

    • librustc_back/asmjs.rs

    • librustc_syntax/abi.rs

    • librustc_back/back/write.js config_llvm ()

    • librustc_llvm/lib.rs static_link_hack_this_sucks ()

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

рдЖрдИрдУ рднреАред рд╢рд╛рдпрдж рдЕрдиреНрдп рднрд╛рдЧреЛрдВ рд╕реЗ рдореИрдВ рдЕрдирдЬрд╛рди рд╣реВрдБред

"рд░рд╕реНрдЯ-рд▓реИрдВрдЧ/рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЛ рдПрдореНрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯрди-рдлрд╛рд╕реНрдЯрдХреЙрдореНрдк рдореЗрдВ рдорд┐рд▓рд╛рдПрдВ"

рдЖрдк рд╢рд╛рдпрдж рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВ - Emscripten pnacl-llvm/pnacl-clang рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдкреИрдЪ рдкрд░ рдкреИрдЪ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рдВрдЯрд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рд╢рд╛рдпрдж рджрд░реНрджрдирд╛рдХ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк r33 -> r34 рд╕реЗ https://github.com/kripken/emscripten-fastcomp/issues/51#issuecomment -62323164 рдкрд░ рдПрдореНрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯрди рдорд░реНрдЬ рдХреЗ рд▓рд┐рдП рдХрд┐рдП рдЧрдП рдЬрд╛рдВрдЪ рдореЗрдВ рдмреНрд░рд╛рдВрдЪрд┐рдВрдЧ рдХреЗ рдХреБрдЫ рд╡рд┐рд╡рд░рдг рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред .

рдореИрдВрдиреЗ рд╕реБрдирд╛ рд╣реИ рдХрд┐ pnacl рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдХреЛ рдереЛрдбрд╝рд╛ рдХрд░реАрдм рд╕реЗ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ pnacl рдЗрд╢реНрдпреВ рдЯреНрд░реИрдХрд░ рдореЗрдВ 3.6 рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреБрдЫ рд╕рдордп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖рдХрд░ 3.6 рдХреЗрд╡рд▓ 5 рджрд┐рди рдкрд╣рд▓реЗ рдмреНрд░рд╛рдВрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛!)ред ..рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдореБрджреНрджрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ Emscripten рдХрд╛рдВрдЯреЗ рдХреЗ рд╡рд┐рд░реБрджреНрдз рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рджреЛ рд╡рд┐рдХрд▓реНрдк рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ - pnacl рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдпрд╛ Emscripten рдХреЛ pnacl рд╕реЗ рдФрд░ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдкрд░ рдЬрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдирд╛ред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: 'рдЕрднреА' рдХреЛ 'рдирд╣реАрдВ' рдореЗрдВ рд╕рд╣реА рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЕрдВрддрд░ред

рдореИрдВ 1.0 рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЯреНрд░рд╛рдЗрдПрдЬ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдЗрдЪреНрдЫрд╛-рд╕реВрдЪреА рд╡рд╛рд▓реА рд╕рд╛рдордЧреНрд░реА рдХреЛ RFCs рд░реЗрдкреЛ рдХреА рддрд░рд╣ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣реАрдВ рдкрд░ рдкреНрд░рдореБрдЦ рдирдИ рдЪреАрдЬреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛/рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ RFCs рд░реЗрдкреЛ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ: rust-lang/rfcs#604

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

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

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

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

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

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

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