Rust: рдПрдХ lib рдХреЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдкреНрд░рддреАрдХреЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ C рд╢реАрд░реНрд╖рд▓реЗрдЦ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 17 рдирд╡ре░ 2013  ┬╖  11рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: rust-lang/rust

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,

#[crate_type="lib"];

pub struct Foo { x: i16 }

#[no_mangle]
pub extern "C" fn bar(x: u64) -> Foo { ... }

pub fn ignored() { ... } // wrong ABI

рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛

#ifndef FILENAME_H
#define FILENAME_H

#include<stdint.h>

struct Foo {
    int16_t x;
}

struct Foo bar(uint64_t);

#endif

рддрд╛рдХрд┐ C рд╕реЗ рд░рд╕реНрдЯ рдХреЛ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

(рдпрд╣ рд╕реА рд╣реЗрдбрд░ рдХреЛ рдПрдХ рдРрд╕реЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП libclang рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд #[header="stdio.h"] mod stdio; рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрд▓рдЯрд╛ рд╕рдВрдЪрд╛рд▓рди рд╣реИ рдЬрд┐рд╕реЗ rustc рд╕рдордЭрддрд╛ рд╣реИ: https://github.com/mozilla/rust/issues/2124)

A-ffi C-enhancement

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

рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╣рд░ рдХреЛрдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдЧрд░реВрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдХреА рдХрд▓рд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдЬрдВрдЧ рдЦрд╛рдП-рдЪреЗрдбрд░ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ: https://github.com/Sean1708/rusty-cheddar

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

рдЗрд╕реА рдХреЗ рд╕рд╛рде, рдореИрдВрдиреЗ рд╕реБрдирд╛ рд╣реИ рдХрд┐ rust.h рдЬреИрд╕реА рдЪреАрдЬрд╝реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛:

typedef struct {
  void *data;
  uintptr_t len;
} RustSlice;

typedef struct {
  uintptr_t len;
  uintptr_t alloc;
  uint8_t data[0];
} RustString;

рдФрд░ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рд╕рдВрдХрд▓рдХ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБред

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

:+1:

рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг https://gist.github.com/alexcrichton/4ea33d9a8b19ed15a65a рдкрд░ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдирдВрдЧреЗ рд╣рдбреНрдбрд┐рдпреЛрдВ рдХрд╛ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рд╣реИред

@alexcrichton рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рдЖрдк рдкреВрд░реНрдгрд╛рдВрдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП stdint.h typedefs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЪреМрдбрд╝рд╛рдИ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ char рдХреА рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд-рдиреЗрд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред

/рд╕реАрд╕реА рдореБрдЭреЗ

рдмрд╛рдЗрдВрдбрдЬреЗрди рдЗрд╕рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди rust.h рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬрдВрдЧ рдореЗрдВ рдПрдлрдПрдлрдЖрдИрдЗрдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдУрд╣, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдмрд╛рдЗрдВрдбрдЬреЗрди рдиреЗ рджреЛрдиреЛрдВ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж @ huonw

(рдСрдлрдЯреЙрдкрд┐рдХ, рдкреНрд░рдХрд╛рд░: Bindgen рдПрдХ рдЙрдЪрд┐рдд рд░рд╕реНрдЯ рдЯреЛрдХрд░рд╛ рднреА рдирд╣реАрдВ рдерд╛, рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдЬрдм рдореИрдВрдиреЗ рдЬрд╛рдБрдЪ рдХреА рдереА, рдФрд░ рдЗрд╕реЗ рдбреЗрдмрд┐рдпрди рдкрд░ рдмрдирд╛рдирд╛ рдПрдХ рджрд░реНрдж рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдерд╛ рдХрд┐ рдореБрдЭреЗ рдЕрдкрдиреА FFI рдЬрд╝рд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдорд╛рд░реНрдЧ рдЪреБрдирдирд╛ рдкрдбрд╝рд╛ред рдмрд╛рдЗрдВрдбрдЬреЗрди-рдЬреИрд╕реА рдЗрдЪреНрдЫрд╛ рдЬрдВрдЧ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдЗрд╕реЗ рд╣рд░ рдЬрдЧрд╣ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЙрдЪрд┐рдд рдХрд╛рд░реНрдЧреЛ dev-dependencies рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдмрд╛рдЗрдВрдбрдЬреЗрди рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ build.rs рд╕реЗ рд╕реА рд╣реЗрдбрд░ рд╕реЗ рдЬрдВрдЧ рд╕реНрдЯрдмреНрд╕ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред

рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣рд╛рдВ рдХреБрдЫ рдбрдмреНрд▓реНрдпреВрдЖрдИрдкреА рд╕рд╛рдорд╛рди рд╣реИред https://github.com/tomjakubowski/custard/tree/dev рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдЦрд┐рд░реА рдмрд╛рд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рдпрд╣ рдПрдХ рд░рд┐рдлреИрдХреНрдЯрд░ рдХреЗ рдмреАрдЪ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

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

рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╣рд░ рдХреЛрдИ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдЧрд░реВрдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдХреА рдХрд▓рд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдЬрдВрдЧ рдЦрд╛рдП-рдЪреЗрдбрд░ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ: https://github.com/Sean1708/rusty-cheddar

рдЙрди рджрд┐рдиреЛрдВ рдЬрдВрдЧ рд▓рдЧреЗ рдЪреЗрдбрд░ рдФрд░ рдЬрдВрдЧ рд▓рдЧреЗ рдмрд╛рдЗрдВрдбрд░ рдмрд╣реБрдд рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рдереЗред рдХреНрдпрд╛ рд░рд╕реНрдЯ-рд▓рдВрдЧ-рдирд░реНрд╕рд░реА рджреНрд╡рд╛рд░рд╛ рд░рд╕реНрдЯ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдпрд╛ рдРрд╕реЗ? @рдПрд▓реЗрдХреНрд╕рдХреНрд░рд┐рдЪрдЯрди

рд╕рдорд╛рдкрди; рдЗрд╕реЗ рдПрдХ рдмрд╛рд╣рд░реА рдЙрдкрдХрд░рдг рджреНрд╡рд╛рд░рд╛ рдирд┐рдкрдЯрд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

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

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

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

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

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

lambda-fairy picture lambda-fairy  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ