Rust: (рдореЙрдбреНрдпреВрд▓) рдПрдХ рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ `рдХреНрд░реЗрдЯ` рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 6 рдЕрдЧре░ 2018  ┬╖  91рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: rust-lang/rust

рдпрд╣ RFC рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдк-рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рд╣реИ "рдкрде рдФрд░ рджреГрд╢реНрдпрддрд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВ" (рд░рд╕реНрдЯ-рд▓реИрдВрдЧ/rfcs#2126)
рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ crate рдХреЗ рдкреНрд░рд╢реНрди рд╕реЗ рдирд┐рдкрдЯрдирд╛ред

рдЕрдирд╕реБрд▓рдЭреЗ рдкреНрд░рд╢реНрди:

  • [ ] рд╣рдо struct Foo(crate ::bar) рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ?
A-visibility B-RFC-approved B-RFC-implemented B-unstable C-tracking-issue T-lang

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

рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ pub(crate) рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реВрдВ, рдЗрд░рд╛рджрд╛ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИред
@johnthagen рджреНрд╡рд╛рд░рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЗрдЦрдиреЗ рдореЗрдВ рджрд░реНрджрдирд╛рдХ рд╣реИ ( crate рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ):

use crate::menu::{Sound, Volume};

crate mod color;

...

/// A type for storing text and an associated color it should
/// be drawn as.
crate struct ColoredText {
    crate color: types::Color,
    crate text: &'static str,
}

crate mod color; рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдкрд░ рдереЛрдбрд╝рд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред

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

рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ crate рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ:

рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛

рдЕрдкреНрд░рд╛рдХреГрддрд┐рдХ / рднреНрд░рдо / рд╕реБрдзрд╛рд░ рдирд╣реАрдВ

рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░

рдЗрд╕рдХреЗ рдмрдЬрд╛рдп pub(extern)

рдмрд╛рдЗрдХ рд╢реЗрдб

рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди

рд╕рдорд░реНрдкрд┐рдд рдзрд╛рдЧрд╛

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ crate рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВ рдФрд░ рдореИрдВ рдпрд╣рд╛рдВ @stepancheg рдХреА рдЯрд┐рдкреНрдкрдгреА рд╕рд╛рдЭрд╛ рдХрд░рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЫреЛрдЯреА рдФрд░ рд╕рдЦреНрдд рджреГрд╢реНрдпрддрд╛ рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ crate рдмрд╕ рдпрд╣реА рдХрд░рддрд╛ рд╣реИред

рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ pub(crate) рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реВрдВ, рдЗрд░рд╛рджрд╛ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИред
@johnthagen рджреНрд╡рд╛рд░рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЗрдЦрдиреЗ рдореЗрдВ рджрд░реНрджрдирд╛рдХ рд╣реИ ( crate рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ):

use crate::menu::{Sound, Volume};

crate mod color;

...

/// A type for storing text and an associated color it should
/// be drawn as.
crate struct ColoredText {
    crate color: types::Color,
    crate text: &'static str,
}

crate mod color; рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдкрд░ рдереЛрдбрд╝рд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдЗрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рд╕реА- static -esque- рд╕рд╣рдЬ рд░реВрдк рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВред

@johnthagen рдХреЗ рдХрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рдореЗрд░реЗ рд▓рд┐рдП рдЦрд░рд╛рдм рдирд╣реАрдВ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рд╕рдорд░реВрдкрддрд╛ рдкрд╕рдВрдж рд╣реИред рдпрд╣ рдПрдХ рддрд░рд╣ рд╕реЗ рдЦреВрдмрд╕реВрд░рдд рд╣реИред

рдпрджрд┐ рдХреА рдкрдардиреАрдпрддрд╛:

crate struct ColoredText {
    crate color: types::Color,
    crate text: &'static str,
}

рдПрдХ рд╕рдорд╕реНрдпрд╛ рдмрди рдЬрд╛рддреА рд╣реИ; рдлрд┐рд░ рдПрдХ рдЖрдИрдбреАрдИ/рд╕рдВрдкрд╛рджрдХ рдЬреЛ рдЬрдВрдЧ рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╕рдордЭрддрд╛ рд╣реИ, рдЕрд▓рдЧ-рдЕрд▓рдЧ рд░рдВрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ crate рдЯреЛрдХрди рдХреЛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдВрддрд░ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рд╛рдлрд╝ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

crate рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдЬреАрдм рд╣реИ: рдпрд╣ рдПрдХ рдРрд╕реА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЬрдВрдЧ-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЬрдВрдЧ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдЯрд▓рд┐рди рдФрд░ рд╕реА# internal рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ pub рдХреЛ crate-visible рдХреЗ рд▓рд┐рдП рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдФрд░ рджреБрдирд┐рдпрд╛ рдХреЗ рджреГрд╢реНрдпрдорд╛рди рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдбрд░рд╛рд╡рдирд╛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреИрд╕реЗ pub* рдпрд╛ pub! ред

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

  1. crate рдПрдХ рд╕рдВрдЬреНрдЮрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ pub(crate) рд▓рдВрдмрд╛ рдФрд░ рдЕрдЬреАрдм рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдХреБрдЫ рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд┐рд╢реЗрд╖рдг рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рдерд╛, рдЗрд╕рд▓рд┐рдП рд╡реНрдпрд╛рдХрд░рдгрд┐рдХ рд░реВрдк рд╕реЗ рдпрд╣ рдмреЗрд╣рддрд░ рдкреНрд░рд╡рд╛рд╣рд┐рдд рд╣реБрдЖред
  2. crate рдЕрдм "рдЗрд╕-рдХреНрд░реЗрдЯ" рдЖрдпрд╛рдд рдХреЗ рд▓рд┐рдП рдПрдВрдХрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ "рдЬрд╣рд╛рдБ рднреА рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдЗрд╕ рдЯреЛрдХрд░реЗ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ" рд╕реЗ рдХреБрдЫ рдЕрд▓рдЧ рд╣реИред
// Here `crate` means the root of this crate.
use crate::menu::{Sound, Volume};

// Here, `crate` means: export crate::game::color
// The `crate` is referring to `color`, not the root.
crate mod color;

...

/// A type for storing text and an associated color it should
/// be drawn as.
// Same potential confusion as `crate mod color`
crate struct ColoredText {
    crate color: types::Color,
    crate text: &'static str,
}

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдХреЛрдЯрд▓рд┐рди/рд╕реА# рд╕реЗ @matklad рдХреЗ internal рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред

use crate::menu::{Sound, Volume};

internal mod color;

...

/// A type for storing text and an associated color it should
/// be drawn as.
internal struct ColoredText {
    internal color: types::Color,
    internal text: &'static str,
}

рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ internal рд╕рд╣реА рдХреАрд╡рд░реНрдб рд╣реИ (рд░рд╕реНрдЯ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрддрд╛рдХреНрд╖рд░ рд╣реИ, рдФрд░ int рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ C/C++/Java рднреНрд░рдо рд╕реЗ рднрд░рд╛ рд╣реИ), рд▓реЗрдХрд┐рди рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕реЛрдЪрддрд╛ рд╣реВрдВ рдХрд┐ рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг рддреБрд░рдВрдд рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реИред

рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ crate рджреГрд╢реНрдпрддрд╛ рдХреАрд╡рд░реНрдб рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рд░рд╕реНрдЯ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реЛрдЧрд╛ред рдЕрдЧрд░ рд╣рдо рдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЗрди рдзрд╛рдЧреЛрдВ рдкрд░ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╕реНрдЯ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдХрд▓реНрдкрдирд╛ рдХрд░рдиреА рд╣реЛрдЧреА рдХрд┐ рдпрд╣ рд░рд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдирдП рд▓реЛрдЧреЛрдВ рдХреА рднреА рдпрд╛рддреНрд░рд╛ рдХрд░реЗрдЧрд╛ред

pub(crate) рдХрд╛ рдереЛрдбрд╝рд╛ рд▓рдВрдмрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЗрддрдирд╛ рдмрдбрд╝рд╛ рд╕реМрджрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ pub рдЖрдЗрдЯрдо рдЬреЛ рдХреНрд░реЗрдЯ рдХреЗ рдмрд╛рд╣рд░ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИрдВ, рдХреЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдиреА/рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рдмрди рд░рд╣реЗ рдереЗред рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ pub(crate) struct Foo { ... } рд╣реЛрддрд╛, рддреЛ рд╕рдВрдХрд▓рдХ рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдХрд┐ $#$4 impl Foo #$ рдореЗрдВ рд╕рднреА pub fn s рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд░рд╕реНрдЯ 2015 рдореЗрдВ рд╕рд┐рд░реНрдл рд╡реНрдпрд╕реНрдд рдХрд╛рдо рд╣реИ рдпрджрд┐ рдореИрдВ рдХрднреА рднреА pub struct Foo рд╕реЗ pub(crate) struct Foo рддрдХ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рд╕рдВрдХрд▓рдХ рдХреИрд╕реЗ рд╕рднреА рдЬрдЧрд╣реЛрдВ рдкрд░ рдЪрд┐рд▓реНрд▓рд╛рддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЕрдиреНрдп pub fn s рдЕрдЪрд╛рдирдХ pub(crate) рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдореМрдЬреВрдж рд╣реИ, рдЬрдм рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рджреВрд╕рд░рд╛ рдкреНрд░рдХрд╛рд░ рднреА pub(crate) рд╣реИред

рдореБрдЭреЗ pub рдХреЛ рдХреНрд░реЗрдЯ-рдкрдмреНрд▓рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ export рдпрд╛ рд╡рд┐рд╢реНрд╡-рджреГрд╢реНрдпрдорд╛рди рдирд┐рд░реНрдпрд╛рдд рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ @matklad рдХрд╛ рд╡рд┐рдЪрд╛рд░ рднреА рдорд┐рд▓рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрдбрд╝рд╛ рдЕрдВрддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

pub рдХреЛ рдХреНрд░реЗрдЯ-рдкрдмреНрд▓рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдФрд░ рд╡рд┐рд╢реНрд╡-рдЬрдирддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рджреГрд╢реНрдпрддрд╛ рдЬреЛрдбрд╝рдирд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдерд╛ред рдореМрдЬреВрджрд╛ рд╢рдмреНрджрд╛рд░реНрде рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡ рдХреЛ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рднреА рдмрд╣реБрдд рдХрдареЛрд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рдерд╛, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ pub рдЕрдм рдЗрд╕рдХрд╛ рд╡рд░реНрддрдорд╛рди рдЕрд░реНрде рд░рдЦ рд░рд╣рд╛ рд╣реИред

рдЬреЛ рдХрдо рдЪрд░реНрдЪрд╛ рдФрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, pub рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ рд▓рд┐рдВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреБрдирд░реНрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд░рд╣рд╛ рдерд╛ред рд╢рд╛рдпрдж рд╣рдо рд▓рд┐рдВрдЯ рдХреЛ " pub рдкрд░ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдВ рдЬреЛ рдЯреЛрдХрд░реЗ рдХреЗ рдмрд╛рд╣рд░ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИ" рд╕реЗ " pub рдкрд░ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдВ рдЬреЛ рдЯреЛрдХрд░рд╛ рдХреЗ рдмрд╛рд╣рд░ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рд╣реИ " рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ pub(extern) рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ export рдХреАрд╡рд░реНрдбред рдпрд╣реА рд╣реИ, рдХрд┐рд╕реА рднреА рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рди рдмрджрд▓реЗрдВ, рдмрд╕ рдПрдХ рд▓рд┐рдВрдЯ-рд╕рд╛рдЗрд▓реЗрдВрд╕рд┐рдВрдЧ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЬреЛрдбрд╝реЗрдВред

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХрдо рд╡рд┐рдШрдЯрдирдХрд╛рд░реА рд╣реЛрдЧрд╛, рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐ рдЯреЛрдХрд░рд╛-рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд╕реНрддреБрдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рд╡рд┐рд╢реНрд╡-рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВред рдпрд╣ рджреГрд╢реНрдпрддрд╛ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд╕рд╛рде рд╕рднреА рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп pub рдХреЗ рд╕рд╣рдЬ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕реВрдХреНрд╖реНрдо рд░реВрдк рд╕реЗ рдЧрд▓рдд) рдЕрд░реНрде рдХреЛ "рд╡рд░реНрддрдорд╛рди рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд" рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░реЗрдЧрд╛ред

рд░рд╕реНрдЯ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрддрд╛рдХреНрд╖рд░ рд╣реИ, рдФрд░ int рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ C/C++/Java рднреНрд░рдо рд╕реЗ рднрд░рд╛ рд╣реИ

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рджреЛ рд╡рд░реНрдгреЛрдВ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ, рдЕрдЧрд░ рд╣рдо internal рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ "рд╕рд╣реА" рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рд╕рдВрднрд╡рддрдГ, extern рдЕрд▓ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛, intern рд╣реЛрдЧрд╛ред рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИ рдХрд┐ рд╡рд╣ рднреА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рдордЭреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА, рднрд┐рдиреНрди рдЕрд░реНрде рд╡рд╛рд▓реА рд╕рдВрдЬреНрдЮрд╛ рд╣реИред рдУрд╣ рдЕрдЪреНрдЫрд╛ред

@glaebhoerl intern рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ! тЭдя╕П

extern рдХреЗ рд╕рд╛рде рд╕рдорд░реВрдкрддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫреА рд╣реИ, рдФрд░ рдЖрдИрдПрдордУ intern рдХреЗ рд╕рдВрдЬреНрдЮрд╛ рд░реВрдк рдХреЗ рд╕рд╛рде рд╕рдВрднрд╛рд╡рд┐рдд рднреНрд░рдо рдХреЛ рдмрд╣реБрдд рдХрдо рдХрд░ рджреЗрдЧрд╛ред

рдпрд╣ рдЫреЛрдЯрд╛ рд╣реИ, ( crate рд╕реЗ рдХреЗрд╡рд▓ 1 рдЕрдзрд┐рдХ рд╡рд░реНрдг) рдФрд░ use crate:: рд╕реЗ рдЯрдХрд░рд╛рддрд╛ рдирд╣реАрдВ рд╣реИред

рдЕрджреНрдпрддрди рдЙрджрд╛рд╣рд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

use crate::menu::{Sound, Volume};

intern mod color;

...

/// A type for storing text and an associated color it should
/// be drawn as.
intern struct ColoredText {
    intern color: types::Color,
    intern text: &'static str,
}

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рдВрдЬреНрдЮрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ?

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: рдРрд╕реЗ рдмрд╣реБрдд рд╕реЗ рд╕рдВрдЬреНрдЮрд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рд╢реЗрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред рдПрдХ рдШрд░реЗрд▓реВ рдмрд┐рд▓реНрд▓реА, рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рдорд╛рдЙрд╕, рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рдбреЗрд╕реНрдХ, рдЖрджрд┐... рд╡рд┐рд╢реЗрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА _рдЕрдВрдЧреНрд░реЗрдЬреА рд╕рдВрдЬреНрдЮрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ Google рдЦреЛрдЬ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рднреА рд╕рдВрдЬреНрдЮрд╛рдПрдВ рд╡рд┐рд╢реЗрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВред

рдЪрд▓реЛ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:

_рдХреНрд░реЗрдЯ рдореЙрдб рд╣реИрд▓реЛ;_ рд╣реИрд▓реЛ рдирд╛рдо рдХрд╛ рдПрдХ рдХреНрд░реЗрдЯ рдореЙрдбреНрдпреВрд▓, рдареАрдХ рд▓рдЧрддрд╛ рд╣реИред
_рдХреНрд░реЗрдЯ fn рд╡рд░реНрд▓реНрдб() {}_ рд╡рд░реНрд▓реНрдб рдирд╛рдо рдХрд╛ рдПрдХ рдХреНрд░реЗрдЯ рдлрдВрдХреНрд╢рди, рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред
_рдХреНрд░реЗрдЯ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдлреВ;_ рдлреВ рдирд╛рдо рдХрд╛ рдПрдХ рдХреНрд░реЗрдЯ рд╕реНрдЯреНрд░рдХреНрдЪрд░, рдареАрдХ рд▓рдЧрддрд╛ рд╣реИред
_рдХреНрд░реЗрдЯ рдПрдирдо рдмрд╛рд░ {}_ рдмрд╛рд░ рдирд╛рдо рдХрд╛ рдПрдХ рдХреНрд░реЗрдЯ рдПрдирдо, рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред
_рдХреНрд░реЗрдЯ рдЯреНрд░реЗрдЯ рдмрд╛рдЬрд╝ {}_ рдмрд╛рдЬрд╝ рдирд╛рдо рдХреА рдХреНрд░реЗрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛, рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред

_рдХреНрд░реЗрдЯ рдпреВрдЬрд╝ рд╕реЗрд▓реНрдл::рд▓реЛрдХрд▓::рдлреВ;_ рдПрдХреЗ, рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛, рдПрдХ рдЯреЛрдХрд░рд╛ рдЙрдкрдпреЛрдЧ? рдЖрдк рдЗрд╕реЗ рдлреВ рдирд╛рдордХ рдЯреЛрдХрд░рд╛ рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдкреИрдЯрд░реНрди рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИред

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

рдЬрдмрдХрд┐ рдЯреЛрдХрд░рд╛ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ 'рд╕рдВрдЬреНрдЮрд╛ рд╣реЛрдирд╛' рдПрдХ рдирд┐рд░реНрдгрд╛рдпрдХ рдХрд╛рд░рдХ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рд╣реА рдЕрд╕рд╛рдорд╛рдиреНрдп рд╣реИред рдХреЛрдИ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдЬреНрдЮрд╛рдУрдВ рдХреЛ рдЯрд╛рдЗрдк рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

@рд╕реЗрдВрдЯреНрд░рд┐рд▓

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

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

@epage рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ crate рдПрдХ рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ; рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рд╕реБрдЭрд╛рд╡ рджреЗ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рдирд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╢рдорди рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдХрд┐рд╕реА рднреА рд╕рдВрдкрд╛рджрдХ рдХреЗ рд▓рд┐рдП crate:: рдХреЛ crate field рд╕реЗ рдЕрд▓рдЧ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рдирд╛ рдХрд╛рдлреА рдорд╛рдореВрд▓реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдкреВрд░реНрд╡ рд╣рдореЗрд╢рд╛ crate + :: рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЬрд╛рдВрдЪрдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ for crate ::foo::bar рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ (рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдлреА рджреБрд░реНрд▓рдн рд╣реЛрдЧрд╛ ..)ред

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

рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ dom (рдпрд╛рдиреА: рдШрд░реЗрд▓реВ) рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реИред

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

pub struct MyStruct {
    dom num: i32,
    pub msg: String,
}

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рд╣реИ?

рдЗрд╕ рдкрд░ рдПрдХ рдХреЛрдг рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╕рд╛рд░рд╛рдВрд╢ рдореЗрдВ рдирд╣реАрдВ рдорд┐рд▓рд╛ (рдЙрд╕ рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!) рдпрд╣ рд╣реИ рдХрд┐ рд╢реЙрд░реНрдЯрдХрдЯ рдореМрдЬреВрджрд╛ pub() рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред

рдпрджрд┐ pub рдФрд░ <something> (рдЬреИрд╕реЗ crate ) рдХрд╛ рд╡рд┐рд╢реЗрд╖ рдЕрд░реНрде рд╣реИ, рддреЛ рдпрд╣ рджреГрд╢реНрдпрддрд╛ рдХреЛ рдФрд░ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдкрд░рд┐рдЪрд┐рддрддрд╛ рджреНрд╡рд╛рд░рд╛, pub(<something>) ред рд╣рдо рдЬрд┐рд╕ рднреА рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдЬрд╛рддреЗ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕реЗ рдореМрдЬреВрджрд╛ рдорд╢реАрдирд░реА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдЙрд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рди рдХрд┐ рдПрдХ рдФрд░ред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо crate рдпрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

  • рдХреНрдпрд╛ crate рдХреЛ рд╕реНрдХреЛрдкрд┐рдВрдЧ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ (рдЬреИрд╕реЗ crate(<something>) ) рдХреЛ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?
  • рдХреНрдпрд╛ рд╣рдореЗрдВ pub() рдкрджрд╛рд╡рдирдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП pub рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЕрд░реНрде рд╣реИ?

рдЗрд╕реЗ рдФрд░ рд▓рдХреНрд╖реНрдп рдХреА рдореЗрд░реА рд╕рдордЭ (рдЖрдВрддрд░рд┐рдХ рдПрдкреАрдЖрдИ рд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░реЗрдВ) рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ @vitral рдХреЗ pub(extern) рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред

  • рдореМрдЬреВрджрд╛ рдорд╢реАрдирд░реА рдХреЗ рднреАрддрд░ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ
  • imo рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп pub рдХреЛ pub(<something>) рдХрд╛ рд╢реЙрд░реНрдЯрдХрдЯ рдмрдирд╛рдХрд░ рдореМрдЬреВрджрд╛ рдорд╢реАрдирд░реА рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИ
  • рдпрджрд┐ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдирд┐рдЬреА рдПрдкреАрдЖрдИ рд╕реЗ рдХрд╛рдлреА рдЫреЛрдЯрд╛ рд╣реИ, рддреЛ рд╣рдордиреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рднрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред
  • рд▓реЗрдХрд┐рди рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ public рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдкрд░ рдЖрд░рдИ рдкреНрд░рднрд╛рд╡

рдореМрдЬреВрджрд╛ pub рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдПрдХ рд▓рд╛рдн рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рд╣реИред рдЖрд╕рд╛рди рд░рд╛рд╕реНрддрд╛ рдПрдкреАрдЖрдИ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ-рд╕реНрддрд░ рдКрдкрд░ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рд╣реИред рдЗрд╕рд╕реЗ рдЯреЛрдХрд░реЗ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЗ рд▓рд┐рдП рдЪреАрдЬреЛрдВ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдкреВрд░реА рд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рдирд┐рдЬреАред

рдЬрдмрдХрд┐ рдЕрднреА рднреА pub(super) рд╣реЛрдЧрд╛, pub(crate) рдХреЗ рд▓рд┐рдП рд╢реЙрд░реНрдЯрдХрдЯ рд╣реЛрдиреЗ рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдЖрдЧреЗ рдмрдврд╝рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЛрдЧреЛрдВ рдХреЛ рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдХреЛ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЫреЛрдЯреЗ рдмрдХреНрд╕реЗ рдХреА рд╕рдВрд╕реНрдХреГрддрд┐ рдХреЗ рдХрд╛рд░рдг рдпрд╣ рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИред

рд▓реЗрдХрд┐рди рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рдпрд╣ рдореБрдЭреЗ pub(extern) . рдкрд░ рдореЗрд░реА рдЙрдкрд░реЛрдХреНрдд рдЯрд┐рдкреНрдкрдгреА рдкрд░ рдПрдХ рдФрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рджреЗрддрд╛ рд╣реИ

  • pub pub(super) . рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реЙрд░реНрдЯрдХрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
  • рдЖрдкрдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ API рдХреЗ рд▓рд┐рдП pub(extern) рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рд╕рдВрдХреНрд░рдордг рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреА рдЪрд┐рдВрддрд╛ рдХреЛ рд╕рд╛рдордиреЗ рд▓рд╛рдпрд╛ рдерд╛ред рдпрд╣ рдЙрдирдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рддрд╛ рд╣реИред

  • рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ public рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕реЗ рдЕрдзрд┐рдХ рдирд┐рдХрдЯрддрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ
  • рдХреБрдЫ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рддрдВрддреНрд░ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЙрдирдХреЗ рд▓рд┐рдП рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрдореЛ рдпрд╣ рд╕рднреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИред рддреЛ рдЗрд╕реЗ рдЕрд▓рдЧ рдХрд░реЗрдВ рдФрд░ рдореБрдЭреЗ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВ рдХрд┐ рдХреНрдпреЛрдВ рдирд╣реАрдВ :)

рдореБрдЭреЗ рдЕрднреА рднреА pub(foo) рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ рдирдлрд░рдд рд╣реИред рдЕрддрд┐рд╢рдпреЛрдХреНрддрд┐рдкреВрд░реНрдг рд░реВрдк рд╕реЗ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рддрдп рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рдпрд╣ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рд╣реИ рдпрд╛ рдПрдХрд╛рдзрд┐рдХ рдХреАрд╡рд░реНрдб рдХрд╛ рдореИрд╢рдЕрдк рд╣реИред рд╣рдо let(mut) рдпрд╛ for(in) рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╕реМрджрд╛ рд╣реИ?

@parasyte pub<foo> рдЬреАрдд рдХреЗ рд▓рд┐рдП! рдЖрдЦрд┐рд░рдХрд╛рд░, рдХреНрдпрд╛ рдпрд╣ _рдкреНрд░рдХрд╛рд░ рдХреА рджреГрд╢реНрдпрддрд╛_ рдирд╣реАрдВ рд╣реИ?

pub<crate> рдпрд╛ pub(crate) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреЗрд╣рддрд░ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВред

рд╢рд┐рд╡рд┐рд░ рдмрджрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░:

рдкрд╣рд▓реЗ рддреЛ рдореИрдВ crate рдХрд╛ рдмрд╣реБрдд рд╡рд┐рд░реЛрдз рдХрд░рддрд╛ рдерд╛ рдФрд░ рд╕реЛрдЪрддрд╛ рдерд╛ рдХрд┐ "рдпрд╣ рдЕрдЪреНрдЫреЗ pub рдХреЛ рдмрд░реНрдмрд╛рдж рдХрд░ рд░рд╣рд╛ рд╣реИ"ред

рдлрд┐рд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рдЕрдкрдиреА рдХреБрдЫ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рд╕рд╛рде-рд╕рд╛рде рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдЗрд╕реЗ рдбреВрдмрдиреЗ рджрд┐рдпрд╛ред

рд╕рдЪ рдХрд╣реВрдБ рддреЛ, рдХреБрдЫ рджрд┐рдиреЛрдВ рдХреЗ рдмрд╛рдж рдореИрдВ pub(X) рдХреЛ рдФрд░ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдерд╛, рдпрд╣ рддреБрд▓рдирд╛ рдореЗрдВ рднрджреНрджрд╛ рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдкрдврд╝рдиреЗ рдореЗрдВ рдХрдард┐рди рд╣реЛрддрд╛ рд╣реИред

рд╢реБрд░реВ рдореЗрдВ рдореБрдЭреЗ рдбрд░ рдерд╛ рдХрд┐ (рджреГрд╢реНрдп) рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ; рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╕рд╛рде рд╡рд┐рдкрд░реАрдд рд╣реБрдЖ: рдЕрдЧрд░ рдореБрдЭреЗ рдЕрдм crate рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ "рдЯреЛрдХрд░рд╛ рд╕рд╛рдорд╛рди" рд╣реИред рдЪрд╛рд╣реЗ рд╡рд╣ рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реЛ рдпрд╛ рджреГрд╢реНрдпрддрд╛ рдШреЛрд╖рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реЛред рд╕рдВрджрд░реНрдн рд╕реЗ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ (рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреА рддрд░рд╣)ред

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

рдЙрд╕ рдХреЛрдг рд╕реЗ crate - intern (рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рд╡рд┐рд╖рдорддрд╛) рднреА рдПрдХ рдХрджрдо рдкреАрдЫреЗ рдХреА рддрд░рд╣ рдорд╣рд╕реВрд╕ рд╣реЛрдЧрд╛ред

рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ред рдЕрдЧрд░ рдореБрдЭреЗ рдХрд┐рд╕реА рдПрдХ рдХреЛ рдЪреБрдирдирд╛ рд╣реЛрддрд╛, рддреЛ " crate ::foo::bar рдЬрд╕реНрдЯ рд╡рд░реНрдХреНрд╕" рдХреЗ рдЗрд░реНрдж-рдЧрд┐рд░реНрдж рдПрдХ рдЕрдЪреНрдЫреА рдХрд╣рд╛рдиреА рдХреЗ рдмрдЬрд╛рдп " crate рдХрд╛ рдЕрд░реНрде рдХреНрд░реЗрдЯ рд╕реНрдЯрдл" рдХреЗ рдЖрд╕рдкрд╛рд╕ рдПрдХ рдЕрдЪреНрдЫреА рдХрд╣рд╛рдиреА рд╣реЛрддреАред

рдореЗрд░реЗ рджреЛ рд╕реЗрдВрдЯ рд╣реИрдВ:

  • рдореИрдВ crate mod , crate struct , crate fn , ... рдХрд╛ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдпрд╣ рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА рд▓рдЧрддрд╛ рд╣реИред
  • рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдирд╛рдо рдХреИрд╕реЗ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ ( crate , pub(crate) , ...) рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рд▓рдВрдмрд╛ рди рд╣реЛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдЗрд╕реЗ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред

рдпрджрд┐ рдпрд╣ рдореЗрд░реЗ рдКрдкрд░ рд╣реЛрддрд╛, рддреЛ рдореИрдВ рдХреАрд╡рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ vis рдФрд░ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ рджреГрд╢реНрдпрддрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП vis(pub) , vis(crate) , рдЖрджрд┐ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрдзрд┐рдХ рдмрдирд╛рддрд╛ рд╣реИ рдореЗрд░реЗ рд▓рд┐рдП рднрд╛рд╡рдирд╛ред

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "рджреГрд╢реНрдпрддрд╛ рд╡рд┐рдирд┐рд░реНрджреЗрд╢рдХ" рдХреЗ рд░реВрдк рдореЗрдВ pub рдХреЗ рд╕рд╛рде рдлрдВрд╕ рдЧрдП рд╣реИрдВ, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ crate рдкрд╕рдВрдж рд╣реИред pub(crate) рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рддрд╛ рд╣реИ, рдЯреЛрдХрд░рд╛ рдХреЗ рд▓рд┐рдП рдирд┐рдЬреА - рдореБрдЭреЗ рдпрд╣рд╛рдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдФрд░ рдирд┐рдЬреА рджреЛрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред

рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдирдП рдЦреЛрдЬрд╢рдмреНрджреЛрдВ рдФрд░ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЦреЛрдЬрд╢рдмреНрджреЛрдВ рдЖрджрд┐ рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрдирд╛ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╕рд┐рдЦрд╛рдирд╛ рдХрд┐ рджреЛ рджреГрд╢реНрдпрддрд╛ pub рдФрд░ crate рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреА рд╣реИ, рдФрд░ рдПрдХ рдХрд╛ рдЕрд░реНрде рд╣реИ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ, рдФрд░ рджреВрд╕рд░реЗ рдХрд╛ рдЕрд░реНрде рдЯреЛрдХрд░рд╛ рдХреЗ рд▓рд┐рдП рдирд┐рдЬреА рд╣реИ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдореБрдЭреЗ рдЗрд╕рдХреА рдЖрджрдд рд╣реЛ рдЧрдИ рд╣реИ crate рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд┐рдЫрд▓реЗ рджреЛ рд╣рдлреНрддреЛрдВ рдХреЗ рджреМрд░рд╛рдиред

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдХреАрд╡рд░реНрдб рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ (рдпрд╛рдиреА: crate ) рдЕрд░реНрдереЛрдВ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВ рддрд░реНрдХ рджреВрдВрдЧрд╛ рдХрд┐ рд╕рдВрджрд░реНрдн рд╢рдмреНрдж рд╕реЗ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдорд╕реНрддрд┐рд╖реНрдХ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ (рд╕рдВрдХрд▓рдХ рдЗрд╕реЗ рдХреИрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдорд╛рдорд▓рд╛ рд╣реИ): рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо for for x in y рдФрд░ impl X for Y рдореЗрдВ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ .

рд╕рдорд╛рди рд░реВрдк рд╕реЗ, crate рдХреЛ рдПрдХ рджреГрд╢реНрдпрддрд╛ рдХреНрд╡рд╛рд▓реАрдлрд╛рдпрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреЗрд╢ рдХрд░рдиреЗ рд╕реЗ рд╕рдВрднрд╡рддрдГ рднреНрд░рдо рдкреИрджрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХрд╛ рдЕрд░реНрде, рдХрд┐рд╕реА рд╕рджрд╕реНрдп рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреНрд╡рд╛рд▓реАрдлрд╛рдпрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдЙрд╕ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, crate fn my_func(); "рдпрд╣ рдПрдХ рдЯреЛрдХрд░рд╛ рд╣реИ" рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдкрдврд╝рддрд╛ рд╣реИ, рдпрд╣ "рдпрд╣ рдПрдХ рдЯреЛрдХрд░рд╛-рджреГрд╢реНрдпрдорд╛рди рдХрд╛рд░реНрдп рд╣реИ" рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рддрд╛ рд╣реИред

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

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

рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд┐рд╕рдиреЗ crate рдХреЛ pub(crate) рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ @aturon рдХреА рдирд╡реАрдирддрдо рдкреЛрд╕реНрдЯ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рд╡реНрдпрдХреНрдд рдХреА рд╣реИ:

рдПрдХ рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣рд╛рдпрдХ рдЯреЛрдХрд░рд╛ (рдпрд╣рд╛рдВ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ 138ред рдЕрдм рддрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЬрдВрдЧ 2018 рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ ред

рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рд╕реНрдкрд╖реНрдЯ рд╣реВрдВ рдХрд┐ рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ pub(crate) рдХреЛ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рд╕реЗ рдмрджрд▓рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВ (рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдордд рд╣реИ)ред

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

  1. intern (рдпрд╛ рдХреБрдЫ рдЕрдиреНрдп рд╕рдорд╛рди рдирдП рдХреАрд╡рд░реНрдб)
  2. crate
  3. pub(crate)

рдЕрдЧрд░ рдХреЛрд░ рдЯреАрдо рдХреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ intern рдпрд╛ рдРрд╕рд╛ рд╣реА рдХреБрдЫ рдЕрдВрддрддрдГ рдХрднреА рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рддреЛ рдореИрдВ crate рд╕реЗ рдкреАрдЫреЗ рд╣реЛ рдЬрд╛рдКрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ pub(crate) рдкрд░ рдПрдХ рдмрдбрд╝рд╛ рд╕реБрдзрд╛рд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ @Centril рдФрд░ рдЕрдиреНрдп рдиреЗ рдЗрд╕рдХреЗ рдХрд╛рд░рдгреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИред

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

@рд░рд╛рд▓реНрдлрдмреАрдбрд░реНрдЯ

рд╢реБрд░реВ рдореЗрдВ рдореБрдЭреЗ рдбрд░ рдерд╛ рдХрд┐ (рджреГрд╢реНрдп) рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ; рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╕рд╛рде рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реБрдЖ: рдЕрдЧрд░ рдореИрдВ рдЕрдм рдЯреЛрдХрд░рд╛ рджреЗрдЦрддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ "рдЯреЛрдХрд░рд╛ рд╕рд╛рдорд╛рди" рд╣реИред рдЪрд╛рд╣реЗ рд╡рд╣ рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реЛ рдпрд╛ рджреГрд╢реНрдпрддрд╛ рдШреЛрд╖рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реЛред рд╕рдВрджрд░реНрдн рд╕реЗ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдЕрдзрд┐рдХрд╛рдВрд╢ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ (рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреА рддрд░рд╣)ред

@zesterer

рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдХреАрд╡рд░реНрдб рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ (рдпрд╛рдиреА: рдХреНрд░реЗрдЯ) рдЕрд░реНрдереЛрдВ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВ рддрд░реНрдХ рджреВрдВрдЧрд╛ рдХрд┐ рд╕рдВрджрд░реНрдн рд╢рдмреНрдж рд╕реЗ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдорд╕реНрддрд┐рд╖реНрдХ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ (рд╕рдВрдХрд▓рдХ рдЗрд╕реЗ рдХреИрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдорд╛рдорд▓рд╛ рд╣реИ): рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреЗ рд▓рд┐рдП рдХреЗ рд▓рд┐рдП y рдореЗрдВ x рдФрд░ impl X рдХреЗ рд▓рд┐рдП рд╡рд╛рдИ рдХреЗ рдЕрд░реНрдердкреВрд░реНрдг рдЕрд░реНрде рдХреЛ рднреНрд░рдорд┐рдд рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдореЗрд░рд╛ рдорддрд▓рдм рдЖрдк рджреЛрдиреЛрдВ рдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдмреБрд▓рд╛рдирд╛ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдмрджрд▓рд╛рд╡ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред

рдЬрдмрдХрд┐ рдореБрдЭреЗ рдпрд╣ рдЕрдЬреАрдм рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рдореЗрд░реА рд╕рдмрд╕реЗ рдмрдбрд╝реА рдЪрд┐рдВрддрд╛ рдЧреИрд░-рдЬрдВрдЧрд▓реА рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╣реИред

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

рдореБрдЭреЗ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдЗрд╕ рдкрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЕрдзреНрдпрдпрди рдХрд░ рд╕рдХреЗрдВ рддрд╛рдХрд┐ рдпрд╣ рдкрддрд╛ рдЪрд▓ рд╕рдХреЗ рдХрд┐ рдЗрди рдЪрд┐рдВрддрд╛рдУрдВ рдХрд╛ рдХрд┐рддрдирд╛ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИред

@epage , рдмрд╣реБрдд рд╕рд╣рдордд рд╣реИрдВ, рдЬрдВрдЧ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдпреВрдПрдХреНрд╕ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрднреА рдпрд╣реА рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рд╣рдо рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдореЗрдВ рд╣реИрдВред

рдЙрд╕рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рд╕реЗ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ:

рдореИрдВ рдЕрдкрдиреЗ рд╡рд┐рднрд╛рдЧ рдореЗрдВ "рд░рд╕реНрдЯ рдПрдбрд╡реЛрдХреЗрдЯ" рд╣реВрдВ, 3 рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╕рднреА рдХреА рд╕реА # рдореЗрдВ рдПрдХ рдареЛрд╕ рдкреГрд╖реНрдарднреВрдорд┐ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдВрдЧ рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдирдП рд╣реИрдВред рджреВрд╕рд░реЗ рджрд┐рди рдореИрдВрдиреЗ " crate -stuff" рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рд╢реЛрдз рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ Rust 2018 рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ред

рдЬрдм рд╣рдордиреЗ рдХреЛрдб рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд┐рдпрд╛, рддреЛ рдмрд╛рддрдЪреАрдд рд▓рдЧрднрдЧ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реБрдИ:

"рддреЛ рдпрд╣рд╛рдБ рдХреБрдЫ рдЕрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрди рд╣реИрдВ рдЬреЛ рдореИрдВрдиреЗ рдХрд┐рдП; рдирдИ рдЖрдпрд╛рдд рдкреНрд░рдгрд╛рд▓реА; рд╕рдВрд╢реЛрдзрдХред"

"рдпрд╣ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ?" ( use crate::object рдФрд░ crate x: object рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддреЗ рд╣реБрдП)

"рдЗрд╕ рдЯреЛрдХрд░реЗ рд╕реЗ рдЖрдпрд╛рдд рдХрд░реЗрдВред" рдФрд░ "рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХред"

"рдЖрд╣, рдареАрдХ рд╣реИред рдХреБрдЫ рдФрд░ рдЬреЛ рдмрджрд▓ рдЧрдпрд╛?"

рдЪрд░реНрдЪрд╛ рдХрд╛ рдЕрдВрддред

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

рдЕрдЧрд▓реА рдмрд╛рд░ рдЬрдм рд╣рдо рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ рддреЛ рдЕрдЧрд░ рдореИрдВ рдХреБрдЫ рдФрд░ рд╕реБрдиреВрдВрдЧрд╛ рддреЛ рдореИрдВ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рджреВрдВрдЧрд╛ред

@ralfbiedert рдЗрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

@epage , рдмрд╣реБрдд рд╕рд╣рдордд рд╣реИрдВ, рдЬрдВрдЧ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдпреВрдПрдХреНрд╕ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрднреА рдпрд╣реА рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдФрд░ рд╣рдо рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдореЗрдВ рд╣реИрдВред

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

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

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

рддреЛ, рдореЗрд░реЗ рд▓рд┐рдП, $#$2$# pub рдХреЗ рдмрдЬрд╛рдп crate рдпрд╛ рдЙрд╕ рдкреНрд░рдХреГрддрд┐ рдХреЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╕ рдЦреБрдЬрд▓реА рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реИ: рдпрджрд┐ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реЛрдирд╛ рдЧреИрд░-рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИ, рддреЛ рдЯреЛрдХрд░рд╛ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдФрд░ рднреА рд╡рд┐рд╢реЗрд╖ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП . рдпрд╛рдиреА рдХреНрд░реЗрдЯ рдХреЗ рдПрдкреАрдЖрдИ рдХреЛ рдЦрд╛рд╕ рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд░реВрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕рд▓рд┐рдП, рдореИрдВ @epage рд╕реЗ рддрд╣реЗ рджрд┐рд▓ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ, pub рдХреЛ рд╡рд╣реА рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ pub(extern) рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреЛрд╖реНрдардХ рдореЗрдВ рджрд┐рдП рдЧрдП рдХреАрд╡рд░реНрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╛рд▓реЛрдВ рд╡рд╛рд▓реЗ рд▓рдЧрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕рдорд░реНрдкрд┐рдд рдХреАрд╡рд░реНрдб рдХреЗ рд▓рд╛рдпрдХ рд╣реЛред crate рдХреАрд╡рд░реНрдб рдЙрд╕ рдЕрд░реНрде рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдореИрдВ рдЗрд╕рдХрд╛ рдЕрд░реНрде рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ "рдпрд╣ рдПрдХ рдирд┐рд░реНрдпрд╛рддрд┐рдд рдХреНрд░реЗрдЯ рд╕рджрд╕реНрдп" рд╣реИред рдпрд╛ export рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рд╕рд╛рд░реА рдмрд╛рдд рдмрд┐рдХ рдЧрдИ рд╣реЛ, рдФрд░ рдпрд╣ рд╕рдм "рдХреАрд╡рд░реНрдб рд╕рд╣реА рдирд╣реАрдВ рд╣реИрдВ" рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рд▓реЗрдХрд┐рди pub рдЗрддрдирд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ (рдЯреЛрдХрд░рд╛-рдирд┐рд░реНрдпрд╛рдд рдПрдкреАрдЖрдИ) рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореИрдВрдиреЗ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдХреЗ рдЕрдВрдд рдореЗрдВ RustConf рдореЗрдВ рдПрдХ рд╡рд╛рд░реНрддрд╛ рджреЗрдЦреА, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХреЗ рдХреЛрдб рдирдореВрдиреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ pub(crate) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЗрд╕рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╛рджреЗ рдкреБрд░рд╛рдиреЗ crate рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣рд╛ред рдореИрдВ рдЕрднреА рднреА рдореВрд▓ рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╣реБрдд рд╕рдорд░реНрдердХ рд╣реВрдВред

@steveklabnik

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

рдХреНрдпрд╛ рдЗрд╕ рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рд╕рдВрджрд░реНрдн рдЬреНрдпрд╛рджрд╛рддрд░ RustConf рд╕реЗ рд╣реИ рдпрд╛ рдХреНрдпрд╛ рдпрд╣ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рдЕрд╕рд╣рдорддрд┐ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддрд╛ рд╣реИ? рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ pub(crate) рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмрд▓реНрдХрд┐ pub рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЪрд▓рд╛рдиреЗ рд╡рд╛рд▓реА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЛрдЧреЛрдВ рдХреА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдЧрд╛ред

рджреЗрдЦреЛ

@ рд╕реБрдкрд░рд╕реАрдб

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

рдЖрд░рдИ "рдХреЛрд╖реНрдардХ рдЖрдХрд╛рд░ рд╡рд╛рд▓реЗ рдХреАрд╡рд░реНрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╛рд▓реЛрдВ рд╡рд╛рд▓реЗ рд▓рдЧрддреЗ рд╣реИрдВ"

рдЬрдмрдХрд┐ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдЬрдм рдореБрдЭреЗ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рддреЛ рд╡реЗ рд╕рд╛рдл-рд╕реБрдерд░реЗ рдереЗ (рд╕рднреА-рдпрд╛-рдХреБрдЫ рднреА friend рд╕реЗ рдмрд╣реБрдд рдмреЗрд╣рддрд░), рдореЗрд░реА рдмрдбрд╝реА рдЪрд┐рдВрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдирд╣реАрдВ рдмрдирд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╛ рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬреЛ рдХреБрдЫ рднреА рд╣реИ рдЙрд╕реЗ рдЧрд▓реЗ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдпрд╛ рдкрд╛рддреЗ рд╣реИрдВ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рдиред

рджреВрд╕рд░реА рдУрд░...

рдЖрд░рдИ рдпрд╛ export рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ,

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ export рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА crate рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИред рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ, export рдХреЛ рджреГрд╢реНрдпрддрд╛ рд╕реЗ рднрд┐рдиреНрди рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред export рдХрд╛ рдЕрд░реНрде рд╣реЛрдЧрд╛ pub(crate) ред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рд╢рд┐рдХреНрд╖рдг рдореЗрдВ рдЬреНрдпрд╛рджрд╛ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред

рдореИрдВ рдЕрдкрдиреЗ рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдЗрд╕ рд╡рд┐рд╕реНрддрд╛рд░ рдкрд░ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реВрдВред

@ рд╕реБрдкрд░рд╕реАрдб

pub [...] рджреГрд╢реНрдпрддрд╛ "рдПрдХ рд╕реНрддрд░ рд╕реЗ рдКрдкрд░"ред
crate рдХреАрд╡рд░реНрдб рдЙрд╕ рдЕрд░реНрде рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдореИрдВ рдЗрд╕рдХрд╛ рдЕрд░реНрде рджреЗрдЦ рд╕рдХрддрд╛ рд╣реВрдВ "рдпрд╣ рдПрдХ рдирд┐рд░реНрдпрд╛рддрд┐рдд рдХреНрд░реЗрдЯ рд╕рджрд╕реНрдп" рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрди рджреЛ рдЦреЛрдЬрд╢рдмреНрджреЛрдВ рдХреЗ рдЕрд░реНрде рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреА рд╕рдордЭ рдпрд╣рд╛рдБ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХреЗ рдареАрдХ рд╡рд┐рдкрд░реАрдд рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬреЛ рдпрд╣ рд╣реИ рдХрд┐ pub рдХрд╛ рдЕрд░реНрде рд╕рднреА рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИ рдЬрдмрдХрд┐ crate рдХрд╛ рдЕрд░реНрде рдПрдХ рд╣реА рдЯреЛрдХрд░реЗ рд╕реЗ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

@epage

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

@SimonSapin

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдФрд░ рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЗрд╕реЗ рд╕рдордЭрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди crate - рдПрдХ рд╕рдВрдЬреНрдЮрд╛ рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ - рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдпрд╛ рддреЛ рдПрдХ рдЯреЛрдХрд░рд╛ (?) рдпрд╛ рдЯреЛрдХрд░рд╛ рдХреА рд╕рдВрдкрддреНрддрд┐ рдШреЛрд╖рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдФрд░ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдЬреЛрд░ред

рдФрд░ public / pub рдПрдХ рдРрд╕рд╛ рд╕рд░реНрд╡рд╡реНрдпрд╛рдкреА рдХреНрд╡рд╛рд▓реАрдлрд╛рдпрд░ рд╣реИ, рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ (рдореЗрд░реЗ рд▓рд┐рдП!) рдЬреИрд╕реЗ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП "рдпрд╣ рдЯреЛрдХрд░рд╛ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ"ред рдЗрд╕рдХрд╛ рдЕрд░реНрде рдпрд╣ рд╣реИ рдХрд┐ "рдпрд╣ рдореЗрд░реЗ рд╕рдВрджрд░реНрдн рдХреЗ рдареАрдХ рдмрд╛рд╣рд░ рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣рд╛ рд╣реИ", рдЬреИрд╕рд╛ рдХрд┐ struct рд╕рджрд╕реНрдп рджреГрд╢реНрдпрддрд╛ рдХреЛ рдЕрд░реНрд╣рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИ (рдФрд░ рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ рддреЛ рдореБрдЭреЗ рд╕рд╣реА рдХрд░реЗрдВ рд▓реЗрдХрд┐рди рдореИрдВ рдирд╣реАрдВ рдХрд░рддрд╛ ' рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╢рдмреНрджрд╛рд░реНрде рдмрджрд▓ рд░рд╣реЗ рд╣реИрдВ)ред

рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ/рдкрдм рдПрдХ рдРрд╕рд╛ рд╕рд░реНрд╡рд╡реНрдпрд╛рдкреА рдХреНрд╡рд╛рд▓реАрдлрд╛рдпрд░ рд╣реИ, рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ (рдореЗрд░реЗ рд▓рд┐рдП!) рдЬреИрд╕реЗ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП "рдпрд╣ рдЯреЛрдХрд░рд╛ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ"ред рдЗрд╕рдХрд╛ рдЕрд░реНрде рдпрд╣ рд╣реИ рдХрд┐ "рдпрд╣ рд╕рд┐рд░реНрдл рдЙрд╕ рд╕рдВрджрд░реНрдн рдХреЗ рдмрд╛рд╣рд░ рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рд╣реВрдВ", рдЬреИрд╕рд╛ рдХрд┐ рдХреНрд╡рд╛рд▓реАрдлрд╛рдЗрдВрдЧ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рд╕рджрд╕реНрдп рджреГрд╢реНрдпрддрд╛ рдореЗрдВ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИ (рдФрд░ рдЕрдЧрд░ рдореИрдВ рдЧрд▓рдд рд╣реВрдВ рддреЛ рдореБрдЭреЗ рд╕рд╣реА рдХрд░реЗрдВ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЕрд░реНрдерд╢рд╛рд╕реНрддреНрд░ рд╣реИрдВ рд╣реИрдВ рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ)ред

pub рдХрд╛ рдЕрд░реНрде рд╣рдореЗрд╢рд╛ "рдпрд╣ рдЯреЛрдХрд░рд╛ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ" - рдпрд╣ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдРрд╕рд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рд▓реЛрдЧ рдЕрдиреНрдпрдерд╛ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпреЛрдВ pub(crate) рджреГрд╢реНрдпрддрд╛ рд╕реНрддрд░ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдзрдХреНрдХрд╛ рджрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред

рдкрдм рдХрд╛ рд╣рдореЗрд╢рд╛ рдорддрд▓рдм рд╣реЛрддрд╛ рд╣реИ "рдЗрд╕реЗ рдЯреЛрдХрд░рд╛ рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ"

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

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

@rpjohnst рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХрд╛ рд╣рдореЗрд╢рд╛ рдорддрд▓рдм рд╣реЛрддрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рдЯреЛрдХрд░реЗ рдХреЗ рдКрдкрд░ рд╕реЗ " super рд╕реЗ рджреГрд╢реНрдпрдорд╛рди" рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдирд╣реАрдВ рдереА, рдЬрд┐рд╕рдиреЗ рдПрдХ рддрддреНрд╡ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛, рдФрд░ рдкрддреНрддреА рддрддреНрд╡ рдХреЛ рд╕реНрд╡рдпрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдпреЛрдЧреНрдп рдирд╣реАрдВ рдмрдирд╛рдпрд╛ pub ?

рдирд╣реАрдВ, рдпрд╣ рдкреВрд░реА рдХрд╣рд╛рдиреА рдирд╣реАрдВ рд╣реИ, рдФрд░ @seanmonstar рдХрд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдмрд╛рдХреА рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдЕрдкрд╡рд╛рдж reexports рд╣реИ- рдЖрдк pub use рдХреБрдЫ рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдореВрд▓ рдореЙрдбреНрдпреВрд▓ рдирд┐рдЬреА рд╣реИрдВред рдПрдХ рдЕрдЬреАрдм рдЙрджрд╛рд╣рд░рдг рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реИ , рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ pub рдЖрдЗрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рднрд▓реЗ рд╣реА рдЙрд╕рдХреЗ рдореВрд▓ рдореЙрдбреНрдпреВрд▓ рдирд┐рдЬреА рд╣реЛрдВред

рдФрд░ рджреВрд╕рд░реА рджрд┐рд╢рд╛ рдореЗрдВ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, pub(crate) рдФрд░ рдХрдо рджреГрд╢реНрдпрддрд╛ рдХреЛ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ- рдЖрдк pub use рдХреБрдЫ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ pub рдирд╣реАрдВ рд╣реИ, рднрд▓реЗ рд╣реА pub use рдЦреБрдж рдЯреЛрдХрд░реЗ рдХреЗ рдмрд╛рд╣рд░ рд╕реЗ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реИред

рддреЛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рдЕрдкрдиреА рджреГрд╢реНрдпрддрд╛ рд╕реАрдзреЗ рдЙрд╕рдХреА super рдХреА рджреГрд╢реНрдпрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреА "рдКрдкрд░реА рд╕реАрдорд╛" рдХрд╣реАрдВ рднреА рджреГрд╢реНрдпрддрд╛ рд╣реИред

рдУрд╣ рдареАрдХ рд╣реИ, рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореЗрд░реЗ рдорди рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рднреЛрд▓реА рдореЙрдбрд▓ рдереАред рдпрд╣ "рдкрдм рдХреЗ рд╡рд░реНрддрдорд╛рди рдЕрд░реНрде" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рд╣рдордиреЗ рдЖрдЬ @rust-lang/lang рдмреИрдардХ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА:

  • рд╣рдо рдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдХреАрд╡рд░реНрдб рдХреА рдкрд╕рдВрдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрджреЗрд╣ рд╣реИ, рдФрд░ рдХреНрдпрд╛ рдпрд╣ crate::foo::bar рдкрдереЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд рд╣реЛрдиреЗ рдкрд░ рднреНрд░рдо рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
  • рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдпрд╣ рддрдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ struct Foo ( crate :: foo :: Bar ) рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рддрд░реАрдХрд╛ рд╣реИ -- рдХреНрдпрд╛ рдпрд╣ (crate::foo::Bar) рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХ рдирд┐рдЬреА рдХреНрд╖реЗрддреНрд░ рд╣реИ рдпрд╛ рдпрд╣ crate рдлрд╝реАрд▓реНрдб рд╣реИ рдкреНрд░рдХрд╛рд░ ::foo::Bar ?

    • рдореБрдЭреЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдЖрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ

рдЙрддреНрддрд░: рд╣рдо рдЗрд╕реЗ рдПрдХ рдкрде (рдЦреЗрд▓ рдХрд╛ рдореИрджрд╛рди ) рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ .. рд╢рд╛рдпрдж рдореЗрд░реЗ рд▓рд┐рдП рдареАрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ ::foo::bar рдкрде рддреЗрдЬреА рд╕реЗ рджреБрд░реНрд▓рдн рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред

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

@nikomatsakis рдХреНрдпрд╛ рд╣рдореЗрдВ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЛрдЯреНрд╕ рдпрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдорд┐рд▓рддреЗ рд╣реИрдВ? рдЗрд╕ рд╕реВрддреНрд░ рдХреЗ рднреАрддрд░, рдореИрдВрдиреЗ рдЕрдкрдиреА рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЪрд┐рдВрддрд╛ [0] рдкрд░ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХреА рд╣реИ рдФрд░ рди рд╣реА рдХрд╛рдЙрдВрдЯрд░ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдкрд░ рдЕрдзрд┐рдХ рдЪрд░реНрдЪрд╛ рдХреА рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ [0] рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдЖрдВрддрд░рд┐рдХ рдзрд╛рдЧреЛрдВ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реЛ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдХреБрдЫ рд╣реИред

[0] рдПрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рджреГрд╢реНрдпрддрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдмрдирд╛рдХрд░ pub(...) рдХреЛ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдореЗрдВ рдзрдХреЗрд▓рддреЗ рд╣реБрдП рдЗрд╕ рднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдХрд┐ рд╣рдореЗрдВ pub(...) рдХреЛ рд╣рдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдЧрд▓реЗ рд▓рдЧрд╛ рд▓реЗрдирд╛ рдЪрд╛рд╣рд┐рдП

@epage

@nikomatsakis рдХреНрдпрд╛ рд╣рдореЗрдВ рдкрдХрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЛрдЯреНрд╕ рдпрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдорд┐рд▓рддреЗ рд╣реИрдВ?

рдХреЛрдИ рдЦреЗрдж рдирд╣реАрдВ; рд╣рдордиреЗ рдЗрд╕ рдкрд░ рдмрд╣реБрдд рд▓рдВрдмреЗ рд╕рдордп рддрдХ (рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдХреБрдЫ рдорд┐рдирдЯ) рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХреА рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдореАрдЯрд┐рдВрдЧ рдиреЛрдЯ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ред

@eddyb рдиреЗ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ my рдХреЛ рдПрдХ рдЫреЛрдЯреЗ рдФрд░ рдЕрдзрд┐рдХ рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдмрддрд╛рдпрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛ mine рд▓реЗрдХрд┐рди my рдФрд░ рднреА рдЫреЛрдЯрд╛ рд╣реИ, рдкреНрдпрд╛рд░рд╛!
(рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП, рдореИрдВ рдмреИрдардХ рдореЗрдВ рдЖрдзрд╛ рдордЬрд╛рдХ рдХрд░ рд░рд╣рд╛ рдерд╛)

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ : рдпрджрд┐ my рдЯреЛрдХрд░рд╛-рд╕реНрдерд╛рдиреАрдп рд╣реИ, рддреЛ рдХреНрдпрд╛ рд╣рдо pub рдХреЛ our рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ? рдЙрджрд╛рд╣рд░рдг:

our struct Foo(my FooImpl);

(рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП, рдореИрдВ рдмреИрдардХ рдореЗрдВ рдЖрдзрд╛ рдордЬрд╛рдХ рдХрд░ рд░рд╣рд╛ рдерд╛)
рдЕрдЧрд░ my рдХреНрд░реЗрдЯ-рд▓реЛрдХрд▓ рд╣реИ, рддреЛ рдХреНрдпрд╛ рд╣рдо pub рдХреЛ our рд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ?

рдкрд░реНрд▓: рдЪреБрдЯрдХреБрд▓реЛрдВ рдХреЛ рд╣рдХреАрдХрдд рдмрдирд╛рдирд╛ред
https://perldoc.perl.org/functions/my.html
https://perldoc.perl.org/functions/our.html

my рдЕрдЪреНрдЫрд╛ рд╣реИ (рдФрд░ рдкрд╣рд▓реЗ рдЖрдпрд╛ рд╣реИ), рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ local , internal , рдпрд╛ рдЬреЛ рдХреБрдЫ рднреА (рдпрд╛ рдореЗрдВ) рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдЗрд╕рдХрд╛ рдорд╛рдорд▓рд╛, рдЬрд┐рд╕рдХрд╛ ), рдЬреЛ рдкреВрд░реА рд╕рдорд╕реНрдпрд╛ рд╣реИред

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

рдФрд░ crate рдХреАрд╡рд░реНрдб рд╡рд╣ рд╣реИ рдЬреЛ рдЗрд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ , рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд╛рдо рдореЗрдВ рд╕рд╣реА рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджрд╛рдпрд░рд╛ рдХреНрдпрд╛ рд╣реИ - рдпрд╣ рдЯреЛрдХрд░рд╛ рд╣реИред рд▓реЗрдХрд┐рди (рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк "рдореИрдВ рдЗрд╕реЗ рдЬрд╛рдирддрд╛ рдерд╛ !" рдХреЛ рддреЛрдбрд╝ рджреЗрдВ), рдЗрд╕рдХреА рдХреАрдордд рдпрд╣ рд╣реИ рдХрд┐ рдЕрдм рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рд╣реИ ред "рдкрдм" "рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ" рдХреЗ рд▓рд┐рдП рдЫреЛрдЯрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХреЛрдИ рднреА рд╕рдордЭ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдореЗрдВ "рдЯреЛрдХрд░рд╛" (рдЙрд╕ рдирд╛рдо рдХреЗ рд╕рд╛рде) рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рд╣реИ; crate struct рдХрд╛ рдХреЛрдИ рдЕрд░реНрде рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдХреЛрдИ рдЖрд╢рд╛ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрдирд╛ рд╣реЛрдЧрд╛ред 1 рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ "рднрд╛рд╖рд╛ рд╡рд┐рдЪрд┐рддреНрд░рддрд╛ рдмрдЬрдЯ" рд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рдирд┐рдХрд╛рд╕реА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд░рд╛рдп рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╢реЗрд╖ рд░рд╛рд╢рд┐ рдЕрднреА рднреА рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реИред

рдЗрд╕ рдмреАрдЪ pub(crate) рджреЛрдиреЛрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рд╣реИ, рдФрд░ рдпрд╣ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рджрд╛рдпрд░рд╛ рдХреНрдпрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдмрджрд▓реЗ рдореЗрдВ рдпрд╣ рд▓рдВрдмрд╛ рдФрд░ рдЕрдЬреАрдм рд╣реИред

рддреЛ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рд╡рд┐рдзреЗрдп рдХрд╛ рдЖрдХрд╛рд░ рд╣реИред

1 (рдКрдкрд░ рдХрд┐рд╕реА рдиреЗ рдПрдХ рдмрд╛рддрдЪреАрдд рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬреЛ рдЪрд▓рд╛ рдЧрдпрд╛, "рдЙрдиреНрд╣реЛрдВрдиреЗ рдкреВрдЫрд╛ рдХрд┐ crate рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рдореИрдВрдиреЗ рдЙрдиреНрд╣реЗрдВ рдмрддрд╛рдпрд╛ рдХрд┐ рдпрд╣ рдПрдХ рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рд╣реИ, рдФрд░ рдпрд╣ рдЗрд╕рдХрд╛ рдЕрдВрдд рдерд╛ред рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд, рдФрд░ рд╕рдВрднрд╡рддрдГ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп, рд╕реНрдерд┐рддрд┐ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдмрдЧрд▓ рдореЗрдВ рдХреЛрдИ рд░реБрд╕реНрддрд╕рд┐рдпрди рдмреИрдард╛ рд╣реЛред)

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдореИрдВ рдХреНрд░реЗрдЯ-рд╕реНрдерд╛рдиреАрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП our рдпрд╛ my рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рд╣реВрдВред
our рдПрдХ рддреАрди-рдЕрдХреНрд╖рд░ рд╡рд╛рд▓рд╛ рдХреАрд╡рд░реНрдб рд╣реИ рдФрд░ pub ~ рдФрд░ рдкрд░реНрд▓ ~ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдВрд░реЗрдЦрд┐рдд рд╣реИред
рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдмрд╣реБрдд рдЕрдиреМрдкрдЪрд╛рд░рд┐рдХ рд▓рдЧрддреЗ рд╣реИрдВ (рдореВрд▓ рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП?)?

рд▓реЛрдЧ intern рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕рд╛ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ? рдпрд╣ crate рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмрд╛ рдПрдХ рд╡рд░реНрдг рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд░рд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдирдП рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП crate рд╕реЗ рдЕрдзрд┐рдХ рд╕рд╣рдЬ рд╣реЛрдЧрд╛ рдФрд░ extern рдХреАрд╡рд░реНрдб рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдЪреНрдЫреА рд╕рдорд░реВрдкрддрд╛ рд╣реИред

IMO our рдФрд░ my рдореЗрдВ local рдФрд░ internal рдЬреИрд╕реА рд╣реА рдХрдордЬреЛрд░реА рд╣реИ: рд╡реЗ рдЕрдкрдиреЗ рджрд╛рдпрд░реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВред local рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд╛рдлреА рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рджрд╛рдпрд░рд╛ рд╕реНрдерд╛рдиреАрдп рдЪрд░реЛрдВ рд╕реЗ рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рднрд┐рдиреНрди рд╣реЛрдЧрд╛, рдЬрд╣рд╛рдВ рд╕реНрдерд╛рдиреАрдп рдХрд╛ рдЕрд░реНрде рдирд┐рдЬреА рд╕реЗ рд╕рдВрд▓рдЧреНрди рджрд╛рдпрд░реЗ рдореЗрдВ рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐рд╕реА рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ рд╣реЛрдЧрд╛, рдЯреЛрдХрд░рд╛ рдирд╣реАрдВред рдореБрдЭреЗ internal рдереЛрдбрд╝рд╛ рдЕрд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИред рдХрд┐рд╕ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ? рдореЙрдбреНрдпреВрд▓? рдкреНрд░рд╛рд░реВрдк? рдЯреЛрдХрд░рд╛? рдпрд╣ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрди рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдЖрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛред our рдФрд░ my рдФрд░ рднреА рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИрдВред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд crate рджрд╛рдпрд░реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИред

pub(extern) рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдкреНрд░рд╢реНрди рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдХрднреА рднреА extern "C" fn foo() {} pub рдХреЗ рдмрд┐рдирд╛ рд╣реЛрдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рд╣реИ? рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╣рдо рдЕрдкрдиреЗ рдирд┐рдпрдорд┐рдд, рдЧреИрд░ "рд╕реА" рдЕрдмреА рд░рд╕реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рднреА extern fn foo() {} рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдПрдХреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рд╣рд░реА рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рдПрдлрдПрдлрдЖрдИ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдирд╣реАрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ extern рдЕрдм desugars pub(extern) , pub рдЖрдЬ рдХреА рддрд░рд╣ рд╣реА рд░рд╣рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЬрдм рдЖрдЗрдЯрдо рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рддреЛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдПрдмреАрдЖрдИ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ pub рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдЯ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ pub(extern) рдпрд╛ extern рдХреЗ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред

extern fn foo() {
    println!("Just called a Rust function from Rust!");
}

#[no_mangle]
extern "C" fn foo_from_c() {
    println!("Just called a Rust function from C!");
}

рдореИрдВрдиреЗ рдпрд╣ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдЬреЛ рдзрд╛рдЧреЗ рдкрдврд╝реЗ рд╣реИрдВ рдЙрдирдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдЧрд░ рдЗрд╕ рдкрд░ рдкрд╣рд▓реЗ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ рддреЛ рдХреНрд╖рдорд╛ рдХрд░реЗрдВ!

рдХреНрдпрд╛ рд╕рд╛рдордиреЗ рдкрдм рдХреЗ рдмрд┐рдирд╛ extern "C" fn foo() {} рд╣реЛрдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рд╣реИ?

рд╣рд╛рдВ- рдХрднреА-рдХрднреА рдЖрдк рдХреЗрд╡рд▓ foo рдХрд╛ рдЙрдкрдпреЛрдЧ рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд┐рдВрдЯреИрдХреНрд╕ extern fn foo() {} рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреБрди: рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ extern рдмрд┐рдирд╛ "C" рд╕реА рдПрдмреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣рд╛рдВ рдПрдХ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ рдЖрдпрд╛ рдерд╛ - рд╢рд╛рдпрдж рдЕрдм рд╣рдо рдЗрд╕реЗ рдПрдХ рдФрд░ рдореМрдХрд╛ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдирдП рдореЙрдбреНрдпреВрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХреБрдЫ рдкрд╣рд▓реБрдУрдВ рдХреЛ рдХреНрд░рд┐рд╕реНрдЯрд▓реАрдХреГрдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?

// Public to the world.
pub struct Foo;

// Private to the crate.
priv struct Foo;

// Basically not visible at all (only inside the module).
struct Foo;

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдЕрдЧрд░ рдХреЛрдИ рд╕реЛрдЪрддрд╛ рд╣реИ:

  • "рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ" рдХреЗ рд░реВрдк рдореЗрдВ "рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ"
  • "рдирд┐рдЬреА" рдХреЗ рд░реВрдк рдореЗрдВ "рдЯреЛрдХрд░рд╛ рдХреЗ рд▓рд┐рдП рдирд┐рдЬреА"
  • "рдХреЛрдИ рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рдирд╣реАрдВ" рдХреЗ рд░реВрдк рдореЗрдВ "рдореВрд▓ рд░реВрдк рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рднреА рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реИ"

priv рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдмрдВрдзрд╛рддреНрдордХ рдирд╣реАрдВ рд╣реЛрдиреЗ рдкрд░ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреА рдШреБрдЯрдиреЗ-рдЭрдЯрдХреЗ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдереА, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЛ рдмрд┐рдВрджреБ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:

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

  2. рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛ рдиреЗ private рдХреА рдЧрд▓рддреА рдХреА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ "рдХрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдирд┐рдЬреА" рдФрд░ рдХреЛрдИ рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ "рдкреИрдХреЗрдЬ рдХреЗ рдЕрдВрджрд░ рджреГрд╢реНрдпрдорд╛рди"ред рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдмрдВрдзрд╛рддреНрдордХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдВрд╢реЛрдзрдХ (рдпрд╛рдиреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ) рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

@stjepang рдореИрдВ рддрд░реНрдХ рджреВрдВрдЧрд╛ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреНрдп рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ "рдирд┐рдЬреА" рдХрд╛ рдПрдХ рдЕрд╕рдореНрдмрджреНрдз рд░рд╛рдЬреНрдп рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдмрдВрдзрд╛рддреНрдордХ рдЕрд░реНрде рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рдирд┐рдЬреА-рдбрд┐рдлрд╝реЙрд▓реНрдЯ-рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╕реНрдкреЗрдХреНрдЯреНрд░рдо рд╕рд╛рдорд╛рдиреНрдп рдЕрд░реНрдереЛрдВ рдореЗрдВ рд╕рдВрд░рдХреНрд╖рд┐рдд-рдЙрдкрд▓рдмреНрдз-рд╡рд┐рдЬреНрдЮрд╛рдкрд┐рдд рдХреЗ рд╕рдорд╛рди рд╣реИред

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

рдПрдХ рдЕрдиреБрднрд╡рд╣реАрди рднрд╛рд╖рд╛ рд╕реАрдЦрдиреЗ рд╡рд╛рд▓реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдпрд╣ рднреА рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рдХрд┐ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреАрд╡рд░реНрдб рдХрдИ рд╕рдВрджрд░реНрдн-рдирд┐рд░реНрднрд░ рдЕрд░реНрдереЛрдВ рд╡рд╛рд▓реЗ рдПрдХрд▓ рдХреАрд╡рд░реНрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдПрдХ рд╕рдВрдЬреНрдЮрд╛рдирд╛рддреНрдордХ рдмреЛрдЭ рд╕реЗ рдХрдо рд╣реИред рджреЗрдЦреЗрдВ рдХреЙрд╕реНрдЯреЗрд▓реЛ, рдПрд▓ рдФрд░ рдПрдмреЙрдЯ, рдмреА "рд╣реВ рдЗрдЬ рдСрди рдлрд░реНрд╕реНрдЯ", 1938ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ my рдФрд░ our рдореЗрдВ рдРрд╕реЗ рдЕрд░реНрде рд╣реЛрдВрдЧреЗ рдЬреЛ рд╣рдо рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЗрдиреНрд╣реЗрдВ рдХреАрд╡рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдХрдард┐рдирд╛рдИ рдХреЛ рдЕрд▓рдЧ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╡реЗ рдПрдХ рдордиреЛрд░рдВрдЬрдХ рдордЬрд╛рдХ рдмрдирд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╣рдореЗрдВ рдЙрд╕ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд▓реЛрдЧ рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ crate рджреГрд╢реНрдпрддрд╛ рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдХреЛрдб рд╕реЗ рдЖрддреА рд╣реИ рдЬрд┐рд╕реЗ рдкрдврд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

crate struct S(crate crate::Foo);

crate struct S(crate ::Foo);

рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╢реЛрд╕реНрдЯреЙрдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛, рд▓реЗрдХрд┐рди рд╡реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдпрд╣рд╛рдВ рд╡реИрдз рдЪрд┐рдВрддрд╛рдПрдВ рд╣реИрдВред

рд╕реНрдХреИрд▓рд╛ рднрд╛рд╖рд╛ рдореЗрдВ pub(path) рдХрд╛ рд╕рдорд╛рдирд╛рдВрддрд░ рд╣реИ, рдЬреЛ private[path] рд╣реИ, рдЬреЛ рдХрд╛рдлреА рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдкрдврд╝рддрд╛ рд╣реИ, "рдпрд╣ рдЖрдЗрдЯрдо рдирд┐рдЬреА рд╣реИ, рдХреЗрд╡рд▓ рд▓реЛрдЧреЛрдВ рдХреЛ $path рдХреЗ рднреАрддрд░ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреА рдЗрдЬрд╛рдЬрдд рджреЗрддрд╛ рд╣реИ"ред рд▓реЗрдХрд┐рди рд╕реНрдХрд╛рд▓рд╛ рдореЗрдВ рдХреБрдЫ рдирд┐рдЬреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдиреЛрдЯреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд░рд╕реНрдЯ рдореЗрдВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдореЗрд░реЗ рд╕рд╛рде рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ friend s рдХреА C++ рдЕрд╡рдзрд╛рд░рдгрд╛ рднреА рдЙрджрд╛рд╣рд░рдг рдХреЗ рдПрдХ рдЕрдиреНрдп рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ pub(path) рдХреЗ рд╕рдорд╛рди рд╣реИред

рдЕрдВрдд рдореЗрдВ, рдореБрджреНрджреЗ рд╣реИрдВ:

  1. crate рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд╛рдкреЗрдХреНрд╖ рдкрде рдЖрдпрд╛рдд рдФрд░ рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ,
  2. crate рдХреАрд╡рд░реНрдб pub(...) рдЬреИрд╕реЗ рдПрдХреАрдХреГрдд рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ,
  3. рдХреБрдЫ pub(crate) рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдирд╛рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ (рдмрд╣реБрдд рд▓рдВрдмрд╛, рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ)ред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧрд╣рд░реА рд╕реЛрдЪ рдХреЗ 5 рдорд┐рдирдЯ рдХреЗ рдмрд╛рдж, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рд╕рд╛рде рдЖрдпрд╛... :P

рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд╕рд┐рдВрдЯреИрдХреНрд╕

_(рдЙрджрд╛рд╣рд░рдг рдХреЗ рддреМрд░ рдкрд░ @ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП)_

<strong i="18">@pub</strong> use crate::Foo;

<strong i="19">@crate</strong> struct Bar;

рдореБрдЭреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдпрд╣ рдХрд╛рдлреА рдмрджрд╕реВрд░рдд рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдореИрдВ рдпрд╛ рддреЛ @crate рдпрд╛ pub(crate) рдЯрд╛рдЗрдк рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рд╡рд┐рд╢рд┐рд╖реНрдЯ рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рдХреАрд╡рд░реНрдб

рдЪреВрдВрдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирдВрдЧреЗ pub рдФрд░ extern рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ crate рдХреАрд╡рд░реНрдб рдХрд╛рдлреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ (рд╕рд╛рдорд╛рдиреНрдп public , protected рдХреЗ рд╕рд╛рде рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдЖрдиреЗ рдкрд░ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдирд╣реАрдВ рд╣реИ private рдХреАрд╡рд░реНрдб)ред

crate struct Foo;

crate fn path() -> PathBuf { ... }

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

use crate::utils;

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ crate рдХрд╛ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдЕрд░реНрде рдирд╣реАрдВ рд╣реИред

рдШреЛрд╖рдгрд╛рддреНрдордХ рдореИрдХреНрд░реЛрдЬрд╝ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕реЗ рдмрдбрд╝реА рдкреНрд░реЗрд░рдгрд╛ рдХреЗ рд╕рд╛рде, рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдПрдХреАрдХреГрдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЦреЛрдЬрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдореНрди рд╣реЛрдЧрд╛:

use std::io;
use std::path::Path;

use log::info;

use $crate::utils;

crate fn hello() -> io::Result<()> {
    utils::rm_rf(Path::new("/"))?;
    info!("Goodbye, World!");
}

( self , super рдФрд░ crate рдкрде рдЖрдпрд╛рдд рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рдПрдВрдХрд░реЛрдВ рдХреЛ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, $crate , рдЬреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╡рд┐рд╢реЗрд╖ рд╣реИрдВ рдФрд░ рдЪрд░ рдХреА рддрд░рд╣ рджреЗрдЦреЛ)

рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг:

crate struct Foo(crate crate::Bar);

рдмрди рдЬрд╛рддрд╛ рд╣реИ:

crate struct Foo(crate $crate::Bar);

рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рд╣реИ: https://github.com/rust-lang/rust/issues/45388 ред
рдЙрд╕реА рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЙрд╕реЗ рдмрдВрдж рдХрд░рдирд╛ред

рдХреНрдпрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд░рд╕реНрдЯрд╕реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдбреЙрдЧрдлреВрдб рдХрд░ рд░рд╣рд╛ рд╣реИ? crate fn pub(crate) fn рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЕрд╕реНрдерд┐рд░ рд╕реБрд╡рд┐рдзрд╛ AFAICT рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИред

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

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, crate рдХрд╛ рдЙрдкрдпреЛрдЧ Clippy рдФрд░ rustc рдореЗрдВ рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ pub(crate) рд╕реЗ рдмреЗрд╣рддрд░ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдЯреНрд░реИрдХрд┐рдВрдЧ рдореБрджреНрджреЗ рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдЕрдзрд┐рдХрд╛рдВрд╢ рдореБрджреНрджреЗ рдЧреИрд░ рд╣реИрдВ - рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдореБрджреНрджреЗред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ https://github.com/rust-lang/rust/issues/53120#issuecomment -413466129, https://github.com/rust-lang/rust/issues/53120#issuecomment -414392549, рдФрд░ https:/ /github.com/rust-lang/rust/issues/53120#issuecomment -413498376 рдпрд╣ рднреА рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ рдХрд┐ рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ crate рдмрд╛рд╣рд░ рднреА рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЪреВрдВрдХрд┐ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЪреВрдВрдХрд┐ рднрд╛рд╖рд╛ рдЯреАрдо рдореЗрдВ рд╣рдо рдореЗрдВ рд╕реЗ рдХрдИ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ , рдФрд░ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрд░рдПрдлрд╕реА рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ , рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ crate рдХреЛ рдПрдХ рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд┐рд░ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ рд╣рдореЗрдВ struct Foo ( crate :: foo :: Bar ) рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреИрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдкрде рдХреЗ рд░реВрдк рдореЗрдВ, рдФрд░ рд╢рд╛рдпрдж рдпрд╣ рд╕рд╣реА рд╣реИ )ред

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдореИрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╛рд░реНрдЧреЛ-рдПрди 64 рдореЗрдВ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд░рд╣рд╛ рд╣реИ!

рдореИрдВ рд╣рд░ рд╕рдордп rustc рдореЗрдВ crate рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЫреЛрдЯрд╛ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ pub(crate) рдЬреИрд╕реЗ рдХреЛрд╖реНрдардХ рдирд╣реАрдВ рд╣реИрдВред
рдореБрдЭреЗ рдЕрднреА рднреА рдпрд╣ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдкрдврд╝рддрд╛ рд╣реИред
рдЗрд╕рдореЗрдВ 3 рдЕрдХреНрд╖рд░ рднреА рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП pub <-> crate рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрд╡рд░реВрдкрдг рдкрд░рд┐рд╡рд░реНрддрди рдПрдХ рд╕рд╛рде рд╣реЛрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рдЕрдм рднреА our рдПрдХрддрд░рдлрд╛ рдкрд╕рдВрдж рд╣реИред

@petrochenkov рдЖрдкрдиреЗ рдЬреЛ рд▓рд┐рдЦрд╛ рд╣реИ рдЙрд╕рдХреА рдореЗрд░реА рд╕рдордЭ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк crate рдХреЛ pub(crate) рд╕реЗ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди crate рд╕реЗ рднреА рдмреЗрд╣рддрд░ рдХреБрдЫ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рдЖрдХрд▓рди рд╣реИ?

рдПрдлрдбрдмреНрд▓реНрдпреВрдЖрдИрдбрдмреНрд▓реНрдпреВ, рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ intern рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред

  • рдХреЛрдИ рдХреЛрд╖реНрдардХ рдирд╣реАрдВ
  • pub(crate) рд╕реЗ рдЫреЛрдЯрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рд╡рд░реНрдг crate рд╕реЗ рдЕрдзрд┐рдХ рд▓рдВрдмрд╛ рд╣реИ)
  • crate рд╕реЗ рдмреЗрд╣рддрд░ (IMO) рдкрдврд╝рддрд╛ рд╣реИ (рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрде рдЬреИрд╕реА рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреИрд╕реЗ crate::foo::bar )
  • рдореМрдЬреВрджрд╛ extern . рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рд╕рдорд░реВрдкрддрд╛ рд╣реИ
  • рдкрд░рд┐рдЪрд┐рдд, рдЬреИрд╕рд╛ рдХрд┐ рдЕрдиреНрдп рднрд╛рд╖рд╛рдПрдВ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВ ( internal )ред рдХреЛрдЯрд▓рд┐рди, рд╕реА #, рдЖрджрд┐ред

рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдореИрдВ рдпрд╣ рднреА рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ pub(crate) рдХреЛ рдХреБрдЫ рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдареАрдХ рд╣реИ рддреЛ рдпрд╣ рддрдп рд╣реЛ рдЧрдпрд╛ рд╣реИ-- рддреАрди рдЕрдХреНрд╖рд░ рдЕрдЪреНрдЫреЗ рд╣реИрдВ, рдФрд░ "рдЗрдВрдЯрд░реНрди" рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП... int ред ;)

рдХреНрдпрд╛ рд╣рдо рдХреГрдкрдпрд╛ crate ::T (рдПрдХ рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде) рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

@Centril рд╣рдо рдореЗрдВ рд╕реЗ рдХреБрдЫ #rocket рдкрд░ рдЖрдЧреЗ рдХреЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рдереЗред рдЖрдкрдХреЗ рд╣рд╛рд▓ рдХреЗ-рдИрд╢ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдХреНрдпрд╛ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ FCP рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ?

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

рддреЛ, рдореИрдВ рд╕рд┐рд░реНрдл рдореБрджреНрджреЛрдВ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝ рдХрд░ рд░рд╣рд╛ рдерд╛, рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдвреВрдВрдв рд░рд╣рд╛ рдерд╛, рдФрд░ рдпрд╣ рдкрд╛рдпрд╛ред

рдЕрдм рдЬрдмрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ pub(crate) рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рд╕реНрдерд┐рд░ рд╣реИ, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ, рдХреНрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рд▓реИрдВрдЧ-рдЯреАрдо рдмреИрдардХ рдореЗрдВ рд╕рд╛рдордиреЗ рдЖрдпрд╛, рдЬрд╣рд╛рдВ рдЗрд╕ рдкрд░ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рдореБрджреНрджреЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдЬрд┐рд╕реЗ рд╣рдо рдкреБрдирд░реНрдЬреАрд╡рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдмреЛрд▓рддреЗ рд╣реБрдП, рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдлрд╝реАрд▓реНрдб рдФрд░ рдЙрд╕ рддрд░рд╣ рдХреА рдЪреАрдЬрд╝реЛрдВ рдкрд░ crate fn рдФрд░ crate foo: T рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рд╕реЗ рдЪреВрдХ рдЬрд╛рддрд╛ рд╣реВрдВред рдпрд╣ pub(crate) рд╕реЗ рдПрдХ рдмрдбрд╝рд╛ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛рддреНрдордХ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдмрдирд╛рддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЙрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдореЗрдВ рдЬрд┐рдирдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд╖реЗрддреНрд░ рд╣реИрдВред рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЙрдЪрд┐рдд рд╕рд╣рд╛рдпрдХ, рд╕рд░рд▓реАрдХреГрдд "рдЧреЛрдкрдиреАрдпрддрд╛ рдореЙрдбрд▓" рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреЗрддрд╛ рд╣реИ -

  • structs, рдлрд╝реАрд▓реНрдб рдпрд╛ рддреЛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рд╣реИрдВ (рдмрд╣реБрдд рд╕рдВрдХреАрд░реНрдг рддрд░реНрдХ)
  • рдпрд╛ рд╡реЗ рд╡рд░реНрддрдорд╛рди рдЯреЛрдХрд░реЗ рдХреЗ рднреАрддрд░ рдХрд╣реАрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ ( crate , рдЪрд╛рд░реЛрдВ рдУрд░ рдЪреАрд░-рдлрд╛рдбрд╝ рдХрд░рдиреА рд╣реЛрдЧреА)
  • рдпрд╛ рд╡реЗ рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИрдВ ( pub )

рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ, рдЗрд╕ рдХреАрд╡рд░реНрдб рдФрд░ https://github.com/rust-lang/rust/issues/48054 рдореЗрдВ рдкрд░рд┐рдХрд▓реНрдкрд┐рдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмреАрдЪ рдХреБрдЫ рдЕрдВрддрд░ рд╣реИ, рдФрд░ рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕рд╛рде рдЕрдкрдирд╛рдПрдВред рдореИрдВ рд╡рд┐рд╡рд░рдг рднреВрд▓ рдЬрд╛рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдореЙрдбрд▓ рдХреЛ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдереАрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдкрд╣рд▓рд╛ рдХрджрдо рдпрд╣ рд╣реЛрдЧрд╛ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЗрддрд┐рд╣рд╛рд╕ рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗ рдХрд┐ рд╣рдордиреЗ рдЙрди рд╕рднреА рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЙрдард╛рдИ рдЧрдИ рдереАрдВред

рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪрд┐рдВрддрд╛ рдЬреЛ рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рд╡рд╣ рд╣реИ рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛

struct Foo(crate ::x)

рдЖрдЬ, рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ crate ::x рдкрде crate::x рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╡рддрдГ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдорддрд▓рдм crate рдкрде рдХреЗ рд░реВрдк рдореЗрдВ ::x рдХреЗ рд╕рд╛рде рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдерд╛ .

рдореИрдВ crate рд╕рдВрд╢реЛрдзрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреЗрд╢ рдХрд░рдиреЗ рдФрд░ рдЙрдкрд░реЛрдХреНрдд рдорд╛рдорд▓реЗ рдХреА рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЛ рдЖрдЬ рдХреА рддрд░рд╣ рд╣реА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдЪреНрдЫреБрдХ рд╣реВрдВред рдЬрдВрдЧ 2018 рдХреЗ рдмрд╛рдж рд╕реЗ, ::foo рдкрде рдХрд╛рдлреА рд╣рдж рддрдХ рдмрд╣рд┐рд╖реНрдХреГрдд рдХрд░ рджрд┐рдП рдЧрдП рд╣реИрдВ - рд╡реЗ рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реИрдВ рдФрд░ рдореИрдХреНрд░реЛрдЬрд╝ рдЬреИрд╕реЗ рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рд╢рдмреНрдж рдЕрдм рд╣рдо рдкреВрд░реНрдг рдкрде рдХреЛ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ crate_name::b рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ crate_name рдпрд╛ рддреЛ рдХреАрд╡рд░реНрдб crate рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреНрд░реЗрдЯ рдХрд╛ рдирд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рддреЛ рдпрд╣ рдХрд╛рдлреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ crate::x (рд╡реНрд╣рд╛рдЯреНрд╕рдПрдк рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛) рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрде рдХреЗ рд░реВрдк рдореЗрдВ рдерд╛ рдФрд░ рдЗрд╕рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕рд╣реА рд╣реИред

рдпрджрд┐ рд╣рдо рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рднреНрд░рдо рдХреЛ рджреВрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕-рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд▓рд┐рдВрдЯ рдПрдХ рдЙрдЪрд┐рдд рд╡рд┐рдЪрд╛рд░ рд╣реИред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, struct Foo(crate ::x) рдЪреЗрддрд╛рд╡рдиреА рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди struct Foo(crate::x) рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпреЗ рджреЛрдиреЛрдВ рд╕реНрд╡реАрдХреГрдд рдФрд░ рд╕рдордХрдХреНрд╖ рд╣реИрдВред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рдПрдХреАрдХреГрдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдФрд░ рд╕рд░рд▓ рд▓реБрдХрд╣реЗрдб (1) рдкрд╛рд░реНрд╕рд░ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ; рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдЯреЛрдХрд░рд╛ рдПрдХ рдЯреЛрдХрд░рд╛ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рд╡рд╣рд╛рдБ рдкрд░ crates.io рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЙрди рд╕рднреА рдЪреАрдЬреЛрдВ рдХрд╛ рджреГрд╢реНрдпрддрд╛ _directly_ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ - рдХреЗрд╡рд▓ pub(_) рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВред

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

@nikomatsakis рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП intern рдкрд░ рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдерд╛ (рдпрд╛ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдПрдХ рдирдП рдХреАрд╡рд░реНрдб рдХреЛ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ?)

рдХреБрдЫ рд╡рд░реНрд╖реЛрдВ рдХреЗ рдмрд╛рдж, рдореЗрд░реА рднрд╛рд╡рдирд╛ рдЕрднреА рднреА рд╡рд╣реА рд╣реИ: рдкрдардиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреЛрдб рдХреЛ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдкрдврд╝рддрд╛ рд╣реВрдВред рдФрд░ рдЗрд╕рд▓рд┐рдП, рдореЗрд░реА рд░рд╛рдп рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП pub(scope) рдкрдврд╝рдирд╛ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдЬреЛ pub , pub(crate) , pub(super) , pub(in proto::h1) рд╣реЛ рд╕рдХрддрд╛ рд╣реИред .


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

рдореБрдЭреЗ рдпрд╣ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЙрдЪрд┐рдд рд╕рд╣рд╛рдпрдХ, рд╕рд░рд▓реАрдХреГрдд "рдЧреЛрдкрдиреАрдпрддрд╛ рдореЙрдбрд▓" рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреЗрддрд╛ рд╣реИ -

  • structs, рдлрд╝реАрд▓реНрдб рдпрд╛ рддреЛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рд╣реИрдВ (рдмрд╣реБрдд рд╕рдВрдХреАрд░реНрдг рддрд░реНрдХ)
  • рдпрд╛ рд╡реЗ рд╡рд░реНрддрдорд╛рди рдЯреЛрдХрд░реЗ рдХреЗ рднреАрддрд░ рдХрд╣реАрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ ( crate , рдЪрд╛рд░реЛрдВ рдУрд░ рдЪреАрд░-рдлрд╛рдбрд╝ рдХрд░рдиреА рд╣реЛрдЧреА)
  • рдпрд╛ рд╡реЗ рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИрдВ ( pub )

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ pub(super) рдХреЛ рдкрджрд╛рд╡рдирдд рдХрд░рдирд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдиреБрдХрд╕рд╛рди рд╣реЛрдЧрд╛ред


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

рдЯреЛрдХрд░реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рд╣рдо рдирд┐рдкрдЯрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдореЗрдВ рдПрдХ рдЖрдЗрдЯрдо рдкрд░рд┐рднрд╛рд╖рд╛ рдЬреЛ crate рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рдПрдХ рдирдпрд╛ рдЯреЛрдХрд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИред

рдПрдХ рдЫреЛрдЯреА рд╕реА рдирдИ рдЬрд╛рдирдХрд╛рд░реА:

рдЬрдВрдЧ-рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдкреВрд░реНрдгрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ pub(crate) рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрддрд╛ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ (рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рд░реВрдк рд╕реЗ) рддреАрди рдХреАрд╕реНрдЯреНрд░реЛрдХ рдкрд░ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдмрд╣реБрдд рдХрдо рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИред

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

рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд╕рдВрдкреВрд░реНрдгрддрд╛ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рджреЗрдЦрдиреЗ рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @nikomatsakis рдХреА рд╣рд╛рд▓рд┐рдпрд╛ рдЯрд┐рдкреНрдкрдгреА рдЪреАрдЬреЛрдВ рдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдмрддрд╛рддреА рд╣реИред intern рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдЫ рдЪреБрдирд┐рдВрджрд╛ рд▓реЛрдЧреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, crate рд╕рдмрд╕реЗ рддрд╛рд░реНрдХрд┐рдХ рд▓рдЧрддрд╛ рд╣реИ (рдФрд░ RFC 2126 рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред рдПрдХрдорд╛рддреНрд░ рд╕рд╣реА рдорд╛рдпрдиреЗ рдореЗрдВ рдмрдХрд╛рдпрд╛ рдореБрджреНрджрд╛ рдпрд╣ рд╣реИ рдХрд┐ fn foo(crate ::bar) рдХреЛ рдХреИрд╕реЗ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдПрдХ рдЪреЗрддрд╛рд╡рдиреА-рджрд░-рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕-рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд▓рд┐рдВрдЯ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рддрд╛рд░реНрдХрд┐рдХ рд╕реНрдерд╛рди рд▓рдЧрддрд╛ рд╣реИред crate ::bar рдХреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдкрде рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд░рд╕реНрдЯ 2015 рдФрд░ 2018 рджреЛрдиреЛрдВ рдореЗрдВ рдРрд╕рд╛ рд╣реА рд░рд╣рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдХрд▓реНрдкрдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдореНрдореАрджрд╡рд╛рд░ рд╣реЛрдЧрд╛ред

crate ::bar рдорд╛рдорд▓рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╣рддреНрд╡рд╣реАрди рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╛рдХреА рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рд▓рдЧрд╛рддрд╛рд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд▓рдЧрд╛рддрд╛рд░ рдЪрд░реНрдЪрд╛ рдХрд╛ рдХреЗрдВрджреНрд░ рд░рд╣рд╛ рд╣реИ, рдХреГрдкрдпрд╛ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рди рджреЗрдВред

рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕ рдкреНрд░рд╕реНрддрд╛рд╡ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдпрд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдореИрдВ рдЗрд╕реЗ рдЕрдзрд░ рдореЗрдВ рд▓рдЯрдХреЗ рд░рд╣рдиреЗ рд╕реЗ рдердХ рдЧрдпрд╛ рд╣реВрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдХреЗ рд▓рд┐рдП рд╡реЛрдЯ рджреВрдВрдЧрд╛ред
рдореИрдВ rustc рдореЗрдВ pub(crate) $ рдХреЗ рдмрдЬрд╛рдп рд▓рдЧрд╛рддрд╛рд░ crate рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЫреЛрдЯрд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдпрд╣ рдЕрднреА рднреА рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рдордп рд╕реЗ рдмрд╛рд╣рд░ рджрд┐рдЦрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЦреЗрддреЛрдВ рдпрд╛ рдЖрдпрд╛рдд рдкрд░, рдФрд░ crate рдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд░рдирд╛ pub(crate) рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рджреЛ рдмреБрд░рд╛рдЗрдпреЛрдВ рдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд░рдирд╛ рд╣реИ рдЬрдмрдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рд╕реА рдХрдо рд╣реИред

рд╣рд╛рдВред рдЬреЛ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ @SimonSapin рдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ crate bar рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдирдП рдЯреЛрдХрд░реЗ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж рдпрд╣ рдкрдврд╝рддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рдХрд░рддрд╛ рд╣реИред

@petrochenkov рдЖрдкрдХреЛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдПрдХ рд▓рд┐рдВрдЯ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ? рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдЕрдЧрд░ рдореИрдВрдиреЗ рдЗрд╕ рдЪрд░реНрдЪрд╛ рдХреЛ рджреЗрдЦреЗ рдмрд┐рдирд╛ crate ::bar рджреЗрдЦрд╛, рддреЛ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ pub(crate) ::bar рдЬреИрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ _at all_ рдкрдереЛрдВ рдореЗрдВ рд╡реНрд╣реЙрдЯреНрд╕рдПрдк рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред

@jhpratt рдкрде рдЦрдВрдбреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдлреЗрдж рдЬрдЧрд╣ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкрд╛рд░реНрд╕рд░реНрд╕ рдЯреЛрдХрди рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЗрд╕рдХреА рдкреНрд░рдХреГрддрд┐ рдХреЗ рдХрд╛рд░рдгред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ рдЙрджреНрдзрд░рдг !, syn рдФрд░ рдХрдИ рдЕрдиреНрдп рдЬреИрд╕реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдкрд╛рдЧрд▓ рд░рд╛рд╢рд┐ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рднреА рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реВрдВрдЧрд╛ред рдореИрдВрдиреЗ рдЗрд╕ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдЕрд░реНрде рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдП рдЧрдП рдкрд░реНрдпрд╛рдкреНрдд рднреНрд░рдо рдХреЛ рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рд▓рд╛рдн рдкрдардиреАрдпрддрд╛ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдиреБрдХрд╕рд╛рди рдХреЗ рд▓рд╛рдпрдХ рд╣реИред

рдпрд╣ "рдмрдбрд╝рд╛" (рд▓реЗрдХрд┐рди рдмрдВрдж) рдЯреНрд░реИрдХрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ #44660 рдореЗрдВ рдмреЗрд╣рддрд░ рдлрд┐рдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реАрдзреЗ рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдФрд░ #44660 рдХреЗ рдЕрдиреНрдп рдЙрдк-рдореБрджреНрджреЛрдВ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реИ:

рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░ рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдерд╛ рдХрд┐ pub(path) рдЕрдм рдХрд╛рдиреВрдиреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, pub(in path) рдлреЙрд░реНрдо рдХреЛ рдмрджрд▓рдХрд░ рдФрд░ pub(crate) рдФрд░ pub(super) рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ pub(...) рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рд░рд▓реАрдХрд░рдг рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ crate рд╕реЗ рднрд┐рдиреНрди рджрд┐рд╢рд╛ рдореЗрдВ, рдЬрд┐рд╕ рдкрд░ рд╣рдо рд╡рд┐рдЪрд╛рд░ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ... struct S(pub(path) Type) рдЕрд╕реНрдкрд╖реНрдЯ рд╣реИ (рдПрд▓рдПрд▓-рдПрд╕реНрдХ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП) struct S(pub (Type,)) рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рд╕рд╛рдеред

рдЗрд╕рд▓рд┐рдП рдореИрдВ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рдорд╣реАрдиреЛрдВ рд╕реЗ рдпрд╣реА рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ "рдХрд░реАрдм" рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖ рдЧрдпрд╛ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

  • "рджреГрд╢реНрдпрддрд╛ рдХреЗ рддреАрди рд╕реНрддрд░" (рдореЙрдбреНрдпреВрд▓, рдЯреЛрдХрд░рд╛, рджреБрдирд┐рдпрд╛) рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╣реИ, рдЬреЛ рдЖрдХрд░реНрд╖рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдпрд╛рдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред pub(super) , рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдлреА рд╕рд╛рдорд╛рдиреНрдп рд▓рдЧрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрддрд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдпрд╛рдиреА, pub(crate::foo) )ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдХреНрд╕рд░ рдРрд╕реЗ рдореЙрдбреНрдпреВрд▓ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬрд┐рдирдореЗрдВ рдЙрдк-рдореЙрдбреНрдпреВрд▓ рд╣реЛрдВ, рдФрд░ рдЙрди рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЯреЛрдХрд░рд╛ рджреГрд╢реНрдпрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЗ рдЗрдЪреНрдЫрд┐рдд рд╕реНрддрд░ рдХреЛ рд╕рдВрдкреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред
  • "рдЯреЛрдХрд░рд╛ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп, рдпрд╛ рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ" рдХрд╛ рдореЙрдбрд▓ рднреА рдЕрд╡рдзрд╛рд░рдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕рд░рд▓ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдЙрди рд╕рднреА рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
  • pub(crate) fn , рдЬрдмрдХрд┐ рдХреЗрд╡рд▓ crate fn рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╛рдлреА рдХрдо рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИ, рдЗрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдкреНрдпрд╛рд░рд╛ рд╣реИ рдХрд┐ pub(crate) рддрдХ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реИ pub(crate::foo) , рдЬреЛ рдореБрдЭреЗ рдХрднреА-рдХрднреА рдорд┐рд▓рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ (рдпрд╛рдиреА, рдПрдХ рдЯреЛрдХрд░рд╛ рдХреЗ рднреАрддрд░ "рдмрдбрд╝рд╛" рдореЙрдбреНрдпреВрд▓), рд▓реЗрдХрд┐рди рдпрд╣ рдЗрддрдирд╛ рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╣реИ рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╢рд╛рдпрдж рд╣реА рдХрднреА рд╣реЛрдЧрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХрд╛рдлреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЙрди рдмрдбрд╝реЗ рдореЙрдбреНрдпреВрд▓ рд╡реИрд╕реЗ рднреА рд╕рдмрдХреНрд░реЗрдЯреНрд╕ рдореЗрдВ рдлреИрд▓реЗ рд╣реБрдП рдмреЗрд╣рддрд░ рд╣реЛрдВрдЧреЗ ...
  • рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЗ рдорд┐рд╢реНрд░рд┐рдд рд╕реНрддрд░" рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╕рдмрд╕реЗ рдмрдбрд╝реА рдПрд░реНрдЧреЛрдиреЛрдорд┐рдХ рдмрд╛рдзрд╛рдПрдВ рд▓рд┐рдВрдЯреНрд╕ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдЖрдИ рд╣реИрдВ рдЬреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реА рд╣реИрдВ рдХрд┐ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП) pub(x) fn рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдЙрдкрдпреБрдХреНрдд рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЗ рдереЗред рд╣рдордиреЗ рдЙрди рдирд┐рдпрдореЛрдВ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдм рдЙрди рдЭреБрдВрдЭрд▓рд╛рд╣рдЯреЛрдВ рдХреЛ рдирд╣реАрдВ рдЭреЗрд▓ рд░рд╣рд╛ рд╣реВрдВ - рдФрд░ рдЕрдЧрд░ рдРрд╕реА рдФрд░ рдЭреБрдВрдЭрд▓рд╛рд╣рдЯ рд╕рд╛рдордиреЗ рдЖрддреА рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЙрдиреНрд╣реЗрдВ рднреА рд╕рдВрдмреЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

    • рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдлрд╝реАрд▓реНрдб рдкрд░ pub рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ "рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ", рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЕрдм crate fn рдирд╣реАрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЗ рддреАрди рд╕реНрддрд░" рдореЙрдбрд▓ рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреНрд░реЗрдЯ рдХреЗ рднреАрддрд░ "рд╣рд▓реНрдХреЗ, рдЗрдирд▓рд╛рдЗрди рдХреНрд░реЗрдЯ" рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИред рдпрд╛рдиреА, рдЕрдЧрд░ рдЯреЛрдХрд░рд╛ рдХреЗ рднреАрддрд░ рдПрдХ рд╕рдмрдореЙрдбреНрдпреВрд▓ рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ рдПрдХ рдирд┐рдЬреА рдЯреЛрдХрд░рд╛ рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ (рд╕рдмрд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╢рд╛рдпрдж, рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреАрдПрдЬреА рдЬреИрд╕рд╛ рд╕рдВрдмрдВрдз)ред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рд▓реНрдХреЗ, рдЗрдирд▓рд╛рдЗрди рдХреНрд░реЗрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╡реЗ pub(super) рдЬреИрд╕реЗ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдФрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдХрднреА рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдП, рддреЛ рдореИрдВ crate fn рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЪрд░реНрдЪрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд╛рдлреА рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА/рд╕рд╛рдорд╛рдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдореИрдВ рд╕рдВрдХрд▓рдХ рд╕реЗ crate рджреГрд╢реНрдпрддрд╛ рд╕реНрддрд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рдлреАрдЪрд░ рдЧреЗрдЯ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред

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

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

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

рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо "рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдкрдм" рд▓рд┐рдВрдЯ ( mod private { pub fn f() {} } ) рдХреЛ рднреА рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ?

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

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

pub(crate) рд░рдЦрдиреЗ рдФрд░ рдЙрдкрдирд╛рдо рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ pubc ? рдпрд╣ рдХрд╛рдлреА рд╕рдорд╛рди рдкрдврд╝рддрд╛ рд╣реИ, рдХрд┐рд╕реА рднреА рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рдХреЛрд╖реНрдардХ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ (рдЬреЛ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рддреЗрдЬ рдмрдирд╛рддрд╛ рд╣реИ)ред
рдпрд╣ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдореЗрдВ рджреГрд╢реНрдпрддрд╛ рдХреЗ рд▓рд┐рдП pubs рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдореИрдВ рд╕рдВрдХрд▓рдХ рд╕реЗ crate рджреГрд╢реНрдпрддрд╛ рд╕реНрддрд░ рдХреЛ рд╣рдЯрд╛рдиреЗ рдФрд░ рдлреАрдЪрд░ рдЧреЗрдЯ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реВрдВред

рдЬрдм рдореИрдВ рдХреЛрдб рдкрдврд╝ рд░рд╣рд╛ рд╣реЛрддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ pub(crate) рдПрдХ рддрд░рд╣ рдХреА рдЖрдВрдЦреЛрдВ рдХреА рд░реЛрд╢рдиреА рдФрд░ рд╢реЛрд░ рд▓рдЧрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп crate рджреГрд╢реНрдпрддрд╛ рд╕рдВрд╢реЛрдзрдХ рд╣реЛрдирд╛ рд╡рд╛рдХрдИ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЕрдм crate fn рдирд╣реАрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рдЧреЛрдкрдиреАрдпрддрд╛ рдХреЗ рддреАрди рд╕реНрддрд░" рдореЙрдбрд▓ рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреНрд░реЗрдЯ рдХреЗ рднреАрддрд░ "рд╣рд▓реНрдХреЗ, рдЗрдирд▓рд╛рдЗрди рдХреНрд░реЗрдЯ" рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рд╣реИред рдпрд╛рдиреА, рдЕрдЧрд░ рдЯреЛрдХрд░реЗ рдХреЗ рднреАрддрд░ рдПрдХ рд╕рдмрдореЙрдбреНрдпреВрд▓ рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ рдПрдХ рдирд┐рдЬреА _crate_ рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ (рд╕рдмрд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╢рд╛рдпрдж, рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреАрдПрдЬреА рдЬреИрд╕рд╛ рд╕рдВрдмрдВрдз)ред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рд▓реНрдХреЗ, рдЗрдирд▓рд╛рдЗрди рдХреНрд░реЗрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╡реЗ pub(super) рдЬреИрд╕реЗ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдФрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдХрднреА рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдП, рддреЛ рдореИрдВ crate fn рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЪрд░реНрдЪрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд╛рдлреА рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА/рд╕рд╛рдорд╛рдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

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

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

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

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

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

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

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

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