Rust: рдЬрдВрдЧ рдХреЗ рдХрд╛рд░реНрдп рдЬрд┐рдиреНрд╣реЗрдВ C . рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 2 рдлрд╝рд░ре░ 2012  ┬╖  16рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: rust-lang/rust

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

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

рд╕реА-рдЯреВ-рд░рд╕реНрдЯ (рдХреНрд░рд╕реНрдЯ) рдХрд╛рд░реНрдпреЛрдВ рдХреА рдШреЛрд╖рдгрд╛:

crust fn callback(a: *whatever) {
}

C ABI рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╕реВрдЪрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛:

let callbackptr: *u8 = callback;

рд╣рдо рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдВрдХрд▓рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:

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

  • рдШреЛрд╖рд┐рдд рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ C ABI рдлрд╝рдВрдХреНрд╢рди рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ
  • рдПрдХ рд╢рд┐рдо рдлрд╝рдВрдХреНрд╢рди рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ рдЬреЛ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╕реА рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ
  • рд╕реА рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХреЛрдВ рдХреЛ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рднрд░ рджреЗрддрд╛ рд╣реИ
  • рд╕реА рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХреЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдФрд░ рд╢рд┐рдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрддреЗ рдХреЗ рд╕рд╛рде upcall_call_shim_on_rust_stack рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ
  • рдШреЛрд╖рд┐рдд рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЬрдВрдЧ рдПрдмреАрдЖрдИ рдлрд╝рдВрдХреНрд╢рди рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ
  • рд╢рд┐рдо рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХреЛрдВ рдХреЛ рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ рдФрд░ рд░рд╕реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ

рд░рдирдЯрд╛рдЗрдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдирдЯрд╛рдЗрдо рдХреЛ рдХреБрдЫ рддрд░реАрдХреЛрдВ рд╕реЗ рдмрджрд▓рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ:

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

рдЕрд╕рдлрд▓рддрд╛:

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

рдЙрдкрдЬ:

C рд╕реНрдЯреИрдХ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд┐рдирд╛ рд╣рдо C рдХреЛрдб рд╕реЗ рд░рд╕реНрдЯ рд╕реНрдЯреИрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд░рд╕реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╢реЗрдбреНрдпреВрд▓рд░ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗред рдореБрдЭреЗ рджреЛ рд╕рдорд╛рдзрд╛рди рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ:

1) рд░рд╕реНрдЯ рд╕реНрдЯреИрдХ рдФрд░ рдмрд╕ рдмреНрд▓реЙрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЙрдкрдЬ рдЕрд▓рдЧ рд╣реИред рдХрд╛рд░реНрдп рдЬреЛ рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЙрдирдХрд╛ рдЕрдкрдирд╛ рд╢реЗрдбреНрдпреВрд▓рд░ (#1721) рд╣реИред
2) рд╢реЗрдбреНрдпреВрд▓рд░ рдХреЗ рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореВрд▓ рдХреЛрдб рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдХрд╛рд░реНрдп рдкреНрд░рддреНрдпреЗрдХ рд╢реЗрдбреНрдпреВрд▓рд░ рдореЗрдВ рд╕реНрдерд┐рдд рдкреВрд▓ рд╕реЗ рд╕реА рд╕реНрдЯреИрдХ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗред рд╣рд░ рдмрд╛рд░ рдЬрдм рдХреЛрдИ рдХрд╛рд░реНрдп рд╕реА рд╕реНрдЯреИрдХ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдЙрд╕рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЕрдиреНрдпрдерд╛ рдпрд╣ рд╢реЗрдбреНрдпреВрд▓рд░ рд╕реЗ рдПрдХ рдирдпрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдЧрд╛ред рдпрд╣ рд░рд╕реНрдЯ рдХреЛрдб рдХреЛ рдЕрдиреБрд╕реВрдЪрдХ рдХреЛ рдмрд╛рдВрдзреЗ рдмрд┐рдирд╛ рд╣рдореЗрд╢рд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рдореБрдЭреЗ рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдкрд╕рдВрдж рд╣реИред

рдпрд╣ рднреА рджреЗрдЦреЗрдВ #1508

A-debuginfo A-runtime A-typesystem E-easy

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

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

#[no_mangle]
pub extern fn hello_rust() -> *const u8 {
    "Hello, world!\0".as_ptr()
}
#include "stdio.h"
const char *hello_rust(void);
int main(void) {
    printf("%.32s\n", hello_rust());
}

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

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

рдЗрд╕рд▓рд┐рдП рдореИрдВ рдПрдХ рдРрд╕рд╛ рд╕рдорд╛рдзрд╛рди рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдЬреЛ рддреЗрдЬрд╝ рд╣реЛ, рднрд▓реЗ рд╣реА рдпрд╣ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рд╣реЛ рдХрд┐ рд░рд╕реНрдЯ рд╕рд╛рдЗрдб рдкрд░ рдХреНрдпрд╛ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╕рд╛рде рд╣реА, рдХреНрдпрд╛ "рдХреНрд░рд╕реНрдЯ рдПрдлрдПрди" рдХреЗ рд╕реНрдерд╛рди рдкрд░ "рджреЗрд╢реА рдПрдлрдПрди" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдпрд╛ рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдХреЛрдИ рдЕрдиреНрдп рдирд┐рдпреЛрдЬрд┐рдд рдЕрд░реНрде рд╣реИ?

@beoran рдЖрдкрдХреЗ рдкрд╛рд╕ рдпрд╣ рдкрд┐рдЫрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рд╣рдо рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ C рдХреЙрд▓рд┐рдВрдЧ рд░рд╕реНрдЯ рдХреАред рд░рд╕реНрдЯ рд╕реЗ C рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИ (рдЗрд╕реЗ рдХреБрдЫ рддреЗрдЬрд╝ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред

рдареАрдХ рд╣реИ рдореИрдВ рд╕рдордЭрд╛ред рдХреНрдпрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рдЬрдВрдЧ рд╕реЗ C рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

@beoran рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдпрд╣ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░рд╣ рдХрд╛ рдСрд░реНрдереЛрдЧреЛрдирд▓ рд╣реИ ... :)

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

рдХреНрдпрд╛ рд╣рдо рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реАрдзреЗ рд░рд╕реНрдЯ рд╕реНрдЯреИрдХ рдкрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рддрд░реНрдХреЛрдВ рдХреА рдкреНрд░рддрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд░рд╕реНрдЯ-> рд╕реА рдХреЙрд▓ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВ?

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

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рд╕реА рдХреЙрд▓ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЬрдВрдЧ рдХреЗ рдвреЗрд░ рдкрд░ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рддрд░реНрдХреЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЙрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕реА рд╕реНрдЯреИрдХ рдкрд░ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВред

@pcwalton Rust- >C рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕реАрдзреЗ C рд╕реНрдЯреИрдХ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ i386 рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИред рдореИрдВ 64-рдмрд┐рдЯ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдкреНрд░рджрд░реНрд╢рди рдХреА рдХреАрдордд рдкрд░ рднреА, рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдХреЙрд▓рд┐рдВрдЧ рд╕рдореНрдореЗрд▓рди рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рд╕реЗ рдмрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдЕрдм рд╕рдордЭ рдореЗрдВ рдЖ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ --- рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ # 1402 рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдПрд▓рдПрд▓рд╡реАрдПрдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЙрд▓рд┐рдВрдЧ рд╕рдореНрдореЗрд▓рдиреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓ рдирд╣реАрдВ рдкрд╛рддрд╛ рд╣реИ _anyway_)

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

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

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЬрдВрдЧ рдХреЗ рдвреЗрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣рдо рдорд╛рд░рдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП rust_task рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдИрд╡реЗрдВрдЯ рд▓реВрдк рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡реЗ рдХреБрдЫ рдореЙрдирд┐рдЯрд░ рдкреЛрд░реНрдЯ рдкрд░ рдПрдХ рд╕рдВрджреЗрд╢ рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд░рдирдЯрд╛рдЗрдо рд╡рд┐рдлрд▓ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрдирд╛рдпрдд рд╕реЗ рдХреИрд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

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

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

рдореИрдВ рдЗрд╕реЗ рдХрд┐рдпрд╛ рд╣реБрдЖ рдХрд╣ рд░рд╣рд╛ рд╣реВрдБред рдереЛрдбрд╝реА рд╕рдлрд╛рдИ рд╣реБрдИ рд╣реИ, рдФрд░ рдореИрдВрдиреЗ рд╢реЗрд╖ рдореБрджреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмрдЧ рджрд╛рдпрд░ рдХрд┐рдП рд╣реИрдВред

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

#[no_mangle]
pub extern fn hello_rust() -> *const u8 {
    "Hello, world!\0".as_ptr()
}
#include "stdio.h"
const char *hello_rust(void);
int main(void) {
    printf("%.32s\n", hello_rust());
}
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

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

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

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

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

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

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