Julia: рдкрд╛рдЧрд▓ рд╡рд┐рдЪрд╛рд░: `рдЯрд╛рдЗрдк` рдХреАрд╡рд░реНрдб рдмрджрд▓реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 29 рдЕрдХреНрддреВре░ 2016  ┬╖  167рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: JuliaLang/julia

рд╕рдордп рдХреЗ рд╕рд╛рде, рдЗрд╕ рдЦреЛрдЬрд╢рдмреНрдж рдиреЗ рдореБрдЭреЗ рдкрд░реЗрд╢рд╛рди рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдХрдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:

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

рдпрд╣рд╛рдВ рдХреБрдЫ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреАрд╡рд░реНрдб рд╕реБрдЭрд╛рд╡ рджрд┐рдП рдЧрдП рд╣реИрдВ:

  • mutable - immutable рд╡рд┐рдкрд░реАрдд!
  • struct - рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ
  • reftype - "рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░" рдХреЗ рд▓рд┐рдП, рдЬреЛ рдЗрд╕рдХреЗ рдХреБрдЫ рдкреНрд░рдореБрдЦ рдЧреБрдгреЛрдВ рдХреЛ рднреА рдмрддрд╛рддрд╛ рд╣реИ

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

рдореБрдЭреЗ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП mutable рд╣реИред

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

рдЕрдиреНрдп рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ type рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╢рдмреНрдж рдорд╣рд╛рди рд╣реЛрдЧрд╛ред

рдореБрдЭреЗ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП mutable рд╣реИред

рдпрджрд┐ рдРрд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ ASAP рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдЗрд╕реЗ 0.6 рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ

рдпрджрд┐ рдРрд╕рд╛ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рд░ рдХреЛрдИ рд╕реЛрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ: struct

рдореБрдЭреЗ рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ type рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм рд╣реИред рдЬрдм рдореИрдВ рдЗрд╕реЗ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рдордЭрд╛рддрд╛ рд╣реВрдВ рддреЛ рдореИрдВ рдЖрдорддреМрд░ рдкрд░ "рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреА рддрд░рд╣" рдХрд╣рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдЙрд╕рдХреЗ рд▓рд┐рдП +1 рд╣реЛред

рдпрджрд┐ рдРрд╕рд╛ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рд░ рдХреЛрдИ рд╕реЛрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ: struct

рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ immutable рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреА рддрд░рд╣ рдерд╛?

+1 mutable

immutable рдореЗрдВ C рд╕рдВрд░рдЪрдирд╛ рдХреА рдореЗрдореЛрд░реА рд▓реЗрдЖрдЙрдЯ рд╣реЛрддреА рд╣реИ
type рдореЗрдВ C рд╕рдВрд░рдЪрдирд╛ рдХреА рдкрд╛рд░рд╕реНрдкрд░рд┐рдХрддрд╛ рд╣реИ

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдВрд░рдЪрдирд╛ рджреЛрдиреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ mutable struct рдмрдЬрд╛рдп рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИред

рдХреЛрдИ рднреА рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╣реИред рдЙрд╕ рд▓реЗрдмрд▓ рдХреЛ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд░реВрдк рд╕реЗ рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╛рдо (рдПрдХ struct ) рдХреЗ рд▓рд┐рдП рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╣реИред

рдлреЛрд░рдЯреНрд░рд╛рди рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдХреАрд╡рд░реНрдб type рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╣реИред
C рдХреАрд╡рд░реНрдб рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП struct рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реЛрдЧрд╛ред
immutable рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП, рд╡рд┐рдкрд░реАрдд рдХреАрд╡рд░реНрдб mutable рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд╣реЛрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рд╣рдореЗрдВ рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред

struct{mutable}
struct{immutable}

рдпрд╛

record{mutable}
record{immutable}

рдпрджрд┐ рдЕрдзрд┐рдХ рд╡рд░реНрдгрдирд╛рддреНрдордХ рд░реВрдк рд╡рд╛рдВрдЫрд┐рдд рд╣реИред

рдЕрдЧрд░ рд╣рдо struct рддреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ immutable struct ( struct рдХрдо рд╕реЗ рдХрдо рд╢реБрд░реВ рдореЗрдВ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде) рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдлреЛрд░рдЯреНрд░рд╛рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ "рд╕рдВрд░рдЪрдирд╛" рд╢рдмреНрдж рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред

рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рдХрд╛рд░рдг mutable ред рдпрджрд┐ struct рдЪреБрдиреЗ рдЬрд╛рддреЗ, рддреЛ рдХреНрдпрд╛ рд╕реНрдерд┐рд░рддрд╛ const struct рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ struct рдФрд░ immutable struct рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛; struct рдПрдХ рдмрд╣реБрдд рд╣реА рдкрд░рд┐рдЪрд┐рдд рд╢рдмреНрдж рд╣реИ рдФрд░ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдирдпрд╛ рдХреАрд╡рд░реНрдб рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред mutable struct рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рд╕реЗ рднреА рд╕рдордЭрджрд╛рд░реА рдЖ рд╕рдХрддреА рд╣реИ, рднрд▓реЗ рд╣реА рдЗрд╕рдХреА рдХрдбрд╝рд╛рдИ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛред

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

struct immutable struct рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд▓рд╛рдЗрди-рд╢реЛрд░ рдЬреБрдбрд╝ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдУрдЯреЛрд╣, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдлреЛрд░рдЯреНрд░рд╛рди рдХрд╛ рдПрдХ type рдХреАрд╡рд░реНрдб рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдЬреИрд╕рд╛ рдХреБрдЫ рдХрд░рддрд╛ рд╣реИ рд╡реИрд╕рд╛ рд╣реА рдХреБрдЫ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХрд╛ рд╡рд┐рд░реЛрдз рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред

@KristofferC рдХреЗ рдКрдкрд░ рдпрд╣ рдЕрдзрд┐рдХрд╛рд░ рд╣реИ: рдореИрдВ рдпрд╣ рдмрддрд╛рддреЗ рд╣реБрдП рднреА "рд╕рдВрд░рдЪрдирд╛" рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИред рдЖрдВрддрд░рд┐рдХ рдЪрд░реНрдЪрд╛рдУрдВ рдореЗрдВ рднреА type рдХреА рд╕рдорд╕реНрдпрд╛ рд░рд╣реА рд╣реИ; рдХреЛрдИ рдХрд╣реЗрдЧрд╛ рдХрд┐ "рдорд╛рди рд▓реАрдЬрд┐рдП x рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ", рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЕрд░реНрде " type рдХреАрд╡рд░реНрдб" рдпрд╛ "рдкреНрд░рдХрд╛рд░" рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рдЕрдиреНрдп рдЕрд░реНрде рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЕрдЧрд░ рдпреЗ рдирд╛рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрдЬ рдкрд░ рд╣реИрдВ ( s/type/new name/ рдереЛрдбрд╝рд╛ рдЕрдкреНрд░рд┐рдп рд▓рдЧрддрд╛ рд╣реИ), рддреЛ рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рд╣рдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдШреЛрд╖рдгрд╛ рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЕрд╡рд╕рд░ рдХрд╛ рдЕрдзрд┐рдХрддрдо рд▓рд╛рдн рдЙрдард╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рддреЛ struct рдХреА рдЬрдЧрд╣ рд▓реЗрдВрдЧреЗ immutable , рдФрд░ mutable [struct] рдХреА рдЬрдЧрд╣ рд▓реЗрдВрдЧреЗ type.

рдПрдХ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд╢рдмреНрдж Ref рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдПрдХ рдЕрдиреНрдп рд╕рдВрднрд╛рд╡рд┐рдд рдирд╛рдо composite , рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп CS рд╢рдмреНрдж рдПрдХ рд╕рдВрдпреБрдХреНрдд рдкреНрд░рдХрд╛рд░ рд╣реИ ред рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА mutable Foo рдФрд░ immutable Foo рд╕реЗ mutable struct Foo рдФрд░ immutable struct Foo - struct (рдпрд╛ composite , рдпрд╛ class , рдпрд╛ рдЬреЛ рднреА рд╣реЛ) рдЕрддрд┐рд╢рдпреЛрдХреНрддрд┐рдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИред

: +1: рд╕рдВрдЬреНрдЮрд╛ рдХреЗ рд▓рд┐рдП

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

рдореИрдВ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП "рд╕рдВрд░рдЪрдирд╛" рднреА рдмрддрд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ

рдПрдХ рдирд╡рд╛рдЧрдВрддреБрдХ рдХреЛ struct T рд▓рд╛рдиреЗ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ T::DataType рдФрд░ рдЖрдк рдЬреВрд▓рд┐рдпрд╛ рдХреЗ "рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА" рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддреЗ рд╣реБрдП ::Type{T} рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рд╕рдбрд╝рдХ рдХреЗ рдиреАрдЪреЗ рдмрд╛рд▓реНрдЯреА рдХреЛ рд▓рд╛рдд рдорд╛рд░ рд░рд╣рд╛ рд╣реИред

рд╕рдВрдЬреНрдЮрд╛ рд╣реЛрдирд╛ рдПрдХ рдлрд╛рдпрджрд╛ рд╣реИ

: +1: рд╕рдВрдЬреНрдЮрд╛ рдХреЗ рд▓рд┐рдП

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

рдЕрдВрдд рдореЗрдВ, рдЪреВрдВрдХрд┐ рд╡рд┐рд╖рдп "рдкрд╛рдЧрд▓ рд╡рд┐рдЪрд╛рд░" рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпреЗ рдХреАрд╡рд░реНрдб рдЕрдзрд┐рдХ-рдпрд╛-рдХрдо рдПрдХ рдирдП DataType рддреЛ рдХреНрдпрд╛ рд╣рдо рдХреАрд╡рд░реНрдб рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╕ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

# Similar-ish to current
MyType = DataType(
    a::Int,
    b::Float64
)

# A DataFrame-like constructor
MyType = DataType(a = Int, b = Float64)

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ (рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ) ccall рддрд░рд╣ рдкрд╛рд░реНрд╕ рд╣реЛрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдЕрдм рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдКрдкрд░ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред (рдпрд╣ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдореЗрдВ рд╕рднреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Mutable <: DataType рдФрд░ Immutable <: DataType рдФрд░ BitsType <: DataType рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдФрд░ рд╢рд╛рдпрдж const рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП)ред

рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреА рддрд░рд╣ рдерд╛?

рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдореЗрдВ C рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдореЗрдореЛрд░реА рд▓реЗрдЖрдЙрдЯ рд╣реИ
рдкреНрд░рдХрд╛рд░ рдореЗрдВ C рд╕рдВрд░рдЪрдирд╛ рдХреА рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓рддрд╛ рд╣реИ

рдареАрдХ рд╣реИ ... рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕реНрд╡рд┐рдлреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛, рдЬрд╣рд╛рдВ:

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

рдЬреЛ immutable рдмрдирд╛рдо type , рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рд╕рдВрджрд░реНрдн рд╣реИ рдЬреЛ рдЬреВрд▓рд┐рдпрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓рддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

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

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рд╡рд┐рд╢реЗрд╖рдг рд╕рдВрдЬреНрдЮрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреЛрдИ рдХрд╣ рд╕рдХрддрд╛ рд╣реИ рдЬреИрд╕реЗ "рдпрд╣ рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИ"ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЕрдкрд░реНрдпрд╛рдкреНрдд рд╡рд░реНрдгрдирд╛рддреНрдордХ рд╣реИрдВред рдЖрдкрдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХрд┐ рдХреНрдпрд╛ рдЪреАрдЬ _is_ рд╣реИ, рдпрд╣ рдЖрдкрдХреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЬреЛ рдХреБрдЫ рднреА рд╣реИ, рдЖрдк рдЗрд╕реЗ рдореНрдпреВрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ / рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ structure рдФрд░ mutable structure рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╕рдВрдж рд╣реИред рд╢рд╛рдпрдж рдЪрд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП a = 1 рдФрд░ mutable a = 1 ред рдирд┐рд░рдВрддрд░рддрд╛, рдХреЛрдИ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдФрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛ рдХреЗ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рджреВрд░ рдЬрд╛рдирд╛ред

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╢рд╛рдпрдж constant рдХреЗ рдмрдЬрд╛рдп const рдЕрд╕реНрдерд┐рд░рддрд╛ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЗ рдорд╛рдорд▓реЗ рд╕реЗ

рдпрд╛ рдПрдХ рдРрд╕рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд┐рд╕рдореЗрдВ рдХрдо рдХреАрд╡рд░реНрдб рд╣реЛрддреЗ рд╣реИрдВ, рд╡рд╣ struct рдмрдирд╛рдо const struct ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рднреА рдЪрд░ рдХрд╛рдВрд╕реНрдЯреЗрдмрд▓ рдмрдирд╛рдирд╛ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдмрд╣реБрдд рд╡рд┐рдШрдЯрдирдХрд╛рд░реА рд╣реЛрдЧрд╛ рдЬреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред

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

рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ рд╣реИ - рд▓реЗрдХрд┐рди рдореИрдВ рд╕рдВрджрд░реНрднрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдмрдирд╛рдо "рдорд╛рди" рд╡реНрдпрд╡рд╣рд╛рд░ _much_ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдЧрд╛ рдФрд░ рдпрд╣ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ "рдХреНрдпрд╛ рдпрд╣ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдпрд╛ рдПрдХ рдмрд┐рдЯрд╕реНрдЯрд╛рдЗрдк рд╣реИ?" (рдЬреНрдпрд╛рджрд╛рддрд░ рдХреНрдпреЛрдВрдХрд┐ bitstype рдмрд╣реБрдд рдмрд╛рд░ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВ - рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЧрдП рдкреНрд░рддреНрдпреЗрдХ рдЬреВрд▓рд┐рдпрд╛ рдкреНрд░рдХрд╛рд░ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реИ)ред рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛ рдХреЗрд╡рд▓ рдмрд╛рдзреНрдпрдХрд╛рд░реА рдЕрд░реНрде рдФрд░ рдкрд╛рд╕-рдмрд╛рдп-рд╡реИрд▓реНрдпреВ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред

struct bitstype рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ @quinnj рд╕реЗ рднреА рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдерд╛

immutable 32 Int32 <: Integer

рдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрд┐рдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрди-рдПрдбрд░реНрдб рдлрд╝реАрд▓реНрдб рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ

immutable Int32 <: Integer
   32
end

рдЬреЛ (рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдирд╛рдорд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд╛рде рдорд┐рд╢реНрд░рд┐рдд рд╣реЛрдиреЗ рдкрд░) рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдкреИрдбрд┐рдВрдЧ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдлрд┐рд░ рдпрд╣ рдПрдХ рдорд╛рди рдкреНрд░рдХрд╛рд░ (рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИ) рдмрдирд╛рдо рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ (рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреНрдпрд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рд╣реИ) рдХреЗ рдмреАрдЪ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ - рд▓реЗрдХрд┐рди рд╕рдВрднрд╡рддрдГ рднрд╡рд┐рд╖реНрдп рдореЗрдВ const рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдЬреЛ рдЗрд╕реЗ mutable рди рдХрд╣реЗ рдЬрд╛рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рдХрд╛рд░рдг рд╣реИ рдореВрд▓реНрдп рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП struct рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рд┐рдлреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░реЗрдЧрд╛ ...

рдпрд╣ рд╕рдЪ рд╣реИ рдХрд┐ bitstype рд╕рднреА рдЧрд╛рдпрдм рд╣реЛ рдЧрдП рд╣реИрдВ, рд▓реЗрдХрд┐рди immutable рдХреЛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд▓реЗрдХрд┐рди рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдо рдмрд┐рдЯреНрд╕ рд╕реЗ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рднреА рдЪреАрдЬреЗрдВ рд╣реИрдВ: рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рд╛рд░ рдкреНрд░рдХрд╛рд░, рдЯреНрдпреВрдкрд▓реНрд╕ (рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рднреА рд╣реИрдВ) рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд░рд┐рдХреЙрд░реНрдб рд╣реИрдВред

рд╣рдордиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ immutable рдЙрдард╛рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рд▓рдЧрд╛ рдХрд┐ рдЕрдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд рдпрд╣ рд╕рдмрд╕реЗ рджреГрд╢реНрдпрдорд╛рди рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрдЧреА: рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡реЗ _not_ рд╣рдореЗрд╢рд╛ рдореВрд▓реНрдп рд╕реЗ рдкрд╛рд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ; рдЕрдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓рддрд╛ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдк рдЕрдВрддрд░ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддреЗред рдХреБрдЫ immutable рд╕рд░рдгрд┐рдпреЛрдВ рдФрд░ рдЕрдиреНрдп рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд░реНрдорд┐рдд рд╣реИрдВ, рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рд╣реИрдВред рдЕрдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓рддрд╛ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЕрдВрддрд░ рд╕рд╛рджреЗ рдЬреВрд▓рд┐рдпрд╛ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ; рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдореБрджреНрджрд╛ рдмрди рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдореЗрдореЛрд░реА рд▓реЗрдЖрдЙрдЯ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реА рдЗрдВрдЯрд░реЛрдк рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡реЗ _not_ рд╣рдореЗрд╢рд╛ рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ

рдЕрдЪреНрдЫреА рдмрд╛рдд! рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╣рд╛рдБ рд╣реИ рдХрд┐, рдмрджрд▓рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ?

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

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

"рдкрд╛рд╕ рдмрд╛рдп рд╡реИрд▓реНрдпреВ" рдХреА рдзрд╛рд░рдгрд╛ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджреНрджреЗрд╢реНрдп рдЙрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдирд╛ рд╣реИ рдЬрдм f(x) (рдХрд┐рд╕реА рдЕрд░реНрде рдореЗрдВ) x рд╕рдВрд╢реЛрдзрд┐рдд рд╣реЛрддрд╛ рд╣реИ: рдХреНрдпрд╛ рдпрд╣ рдЙрд╕реА x рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддрд╛ рд╣реИ?

рд╡реИрд╕реЗ рднреА, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ immutable рдФрд░ mutable рдЦреЛрдЬрд╢рдмреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред

рдпрд╣ рд╕рдЪ рд╣реИ рдХрд┐ рдмрд┐рдЯрд╕реНрдЯрд╛рдЗрдк рд╕рднреА рд╣реИ рд▓реЗрдХрд┐рди рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреЗрд╢ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж рд╕реЗ рдЧрд╛рдпрдм рд╣реЛ рдЧрдпрд╛ рд╣реИ

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

FWIW, рдЪреВрдВрдХрд┐ рдЪреАрдЬреЛрдВ рдХреЛ рди рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдорд░реНрдерди type рдФрд░ immutable рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╣реИрдВ рдЬреИрд╕реЗ рд╡реЗ рд╣реИрдВред

( do рд╕рд┐рдВрдЯреИрдХреНрд╕ рдореБрдЭреЗ рдмрдЧ, рд╣рд╛рд▓рд╛рдВрдХрд┐ ... ;-)

рд╕рдм рдХреБрдЫ "рд╕рд╛рдЭрд╛ рдХрд░рдХреЗ рдкрд╛рд╕" рд╣реИред

рдореИрдВ рдЗрд╕рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ - рдФрд░ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рд╕рдм рдХреБрдЫ "рд╕рд╛рдЭрд╛ рдХрд░рдХреЗ рдкрд╛рд╕" рд╣реИред

рдЙрд╕ рдиреЛрдЯ рдкрд░, рдмрд╕ рдПрдХ рдЕрд╡рд▓реЛрдХрди - рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ const рдХреАрд╡рд░реНрдб рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛рдУрдВ рдореЗрдВ рд╣реИрдВ, рддреЛ immutable рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ:

type Complex{T}
    const re::T
    const im::T
end

(рдХрдВрдкрд╛рдЗрд▓рд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рдХрд╛рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╣ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ const рдкреНрд░рдХрд╛рд░ рд╣рдореЗрдВ рддреЗрдЬ рдХреЛрдб рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ)ред рддрдм type рдпрд╛ struct рдХрдорд╛рдПрдБред рдорд┐рд╢реНрд░рд┐рдд рдорд╛рдорд▓реЗ рдореЗрдВ setfield! рдХреЛ const рдлрд╝реАрд▓реНрдб рдкрд░ рдЕрдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

type рдФрд░ const type рдХреНрдпрд╛? - рдЯрд╛рдЗрдк рдХреАрд╡рд░реНрдб рдореЗрд░реЗ рд▓рд┐рдП рд╕рдВрд░рдЪрдирд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдореИрдВ рдПрдХ рддрдХрдиреАрдХреА рдореЗрдореЛрд░реА рд▓реЗрдЖрдЙрдЯ рдХреЗ рд╕рд╣рдпреЛрдЧреА рдХреА рддрд░рд╣ рд╣реЛрддрд╛ рд╣реИ рди рдХрд┐ рдПрдХ ~ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреИрд╕реЗ рдХрд┐ рдЗрдирд░ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ред рдЬреИрд╕рд╛ рдХрд┐ рдХрдВрдкреЛрдЬрд┐рдЯ рдЯрд╛рдЗрдк рд╣реИ '... рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдЕрдм рддрдХ рдХрд╛ рд╕рдмрд╕реЗ рдЬреНрдпрд╛рджрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рдпреВрдЬрд░-рдбрд┐рдлрд╛рдЗрдиреНрдб рдЯрд╛рдЗрдк ...', 'рдЯрд╛рдЗрдк рд╡рди рдЯрд╛рдЗрдк рд╣реИ рддреЛ рдХреНрдпрд╛ рдпрд╣ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ?' 'рдорд┐рд╢реНрд░рд┐рдд рдкреНрд░рдХрд╛рд░' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕рдВрдЪрд╛рд░ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ рдХрд┐ рдореИрдВ 'рд╕рд╛рд░ рдкреНрд░рдХрд╛рд░' рдХрд╣реВрдБрдЧрд╛ред рд▓рд╛рдЗрди-рд╢реЛрд░ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ, 'рдХрд╛рдВрд╕реНрдЯ рдкреНрд░рдХрд╛рд░' 'рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп' рд╕реЗ рднреА рдмрджрддрд░ рдирд╣реАрдВ рд╣реИред

рдореИрдВ рдЪрд░ (рдмрдирд╛рдо) рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде const рдХреЗ рдЕрд░реНрде рдореЗрдВ (рдорд╛рдореВрд▓реА) рдЕрдВрддрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВред - рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдФрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдиреЗ рд╣рдореЗрд╢рд╛ рдореБрдЭреЗ рдПрдХ рдЫреЛрдЯреА рдорд╛рдирд╕рд┐рдХ рд╣рд┐рдЪрдХреА рджреАред рдпрд╣рд╛рдБ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИ!

struct рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реЛрдЧреА рдХрд┐ рд▓реЛрдЧ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдРрд╕реА рдзрд╛рд░рдгрд╛рдПрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реЗ C / C ++ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЬрд░реВрд░реА рдирд╣реАрдВ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рд╕рдЪ рд╣реЛрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддреА рдорд┐рд╢реНрд░рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЛ рдХрд┐рд╕реА рд╕рд░рдгреА рдореЗрдВ рдорд╛рди рджреНрд╡рд╛рд░рд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИ

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

рдЙрдирдХреЗ рдкреНрд░реЗрд╖рдг / рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдВрджреБ рдХреЗ рдмрдЬрд╛рдп рдЙрдирдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдмрд┐рдВрджреБ рдкрд░ рдкреНрд░рдХрд╛рд░ рдХреЛ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рдХреНрдпреЛрдВ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (C ++ рдореЗрдВ const )? рдорд┐рд╢реНрд░рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ type / struct / composite рдХрд░рдХреЗ, рд╣рдо рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП Immutable{T} рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

type CompositeType end
f(x::Immutable{CompositeType}) = x
a = f(CompositeType())
b = f(a)

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, abstract рдФрд░ bitstype рдкрд░рд┐рд╡рд░реНрддрди рдпрд╣рд╛рдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? AFAICT "рдЕрдореВрд░реНрдд" рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рд╢реЗрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рд╕рдВрдЬреНрдЮрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВред рдЯрд╛рдЗрдк рдХреАрд╡рд░реНрдбреНрд╕ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рднрд╛рд╖рд╛рдИ рд╕реНрдерд┐рд░рддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП: рд╕рднреА рд╕рдВрдЬреНрдЮрд╛, рд╕рднреА рд╡рд┐рд╢реЗрд╖рдг, рдЖрджрд┐ bitstype рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ bits рдпрд╛ primitive ред

рдХреГрдкрдпрд╛, рдЬреВрд▓рд┐рдпрд╛ рдХреАрд╡рд░реНрдб рдХреА рд╡рд░реНрддрдиреА (рдпрд╛ рд╢рдмреНрджрд╛рд░реНрде) рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдПрдХ рдЦреБрд▓реЗ рдзрд╛рдЧреЗ рдореЗрдВ рди рдмрджрд▓ рджреЗрдВред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рдЬрд╣рд╛рдЬ type рдФрд░ immutable рдХреЗ рдореВрд▓ _behavior_ рдкрд░ рд░рд╡рд╛рдирд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдпрд╣рд╛рдБ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╕рд╡рд╛рд▓ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣рдо type рдФрд░ immutable рд╡рд░реНрддрдиреА рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдмреЗрд╣рддрд░ рд░реВрдк рд╕реЗ рдЙрдирдХреА рд╕рдорд╛рдирддрд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред

рдореИрдВ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рджреЛ рд╕рдмрд╕реЗ рдЙрдЪрд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ mutable рдмрдирд╛рдо immutable рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реВрдВред рдФрд░ рдХреБрдЫ рднреА рд╡реНрдпрд░реНрде рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

@ рдХреИрдВрдбреАрдлреЗрд░рд┐рд╕ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ; struct рдФрд░ const рдХреБрдЫ рд╕рдВрдпреЛрдЬрди рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдпрджрд┐ рд╣рдо рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рднреА const struct рдпрд╛ const type , (1) рд╣рд░ рдХреНрд╖реЗрддреНрд░ рдкрд░ const рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдБ, (2) ) рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдкреНрд░рддрд┐-рдлрд╝реАрд▓реНрдб рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛ рдХреА рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рддреБрд░рдВрдд рдЬреЛрдбрд╝рдирд╛ рдирд╣реАрдВ рд╣реИред рдЕрдЧрд░ рд╣рдо рдХрднреА рднреА рдЙрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рд▓рдЧрд╛рддрд╛рд░ рд╢рдмреНрджрд╛рд╡рд▓реА рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рд╕рдВрдЪрд╛рд░ рдореЗрдВ 'рдорд┐рд╢реНрд░рд┐рдд рдкреНрд░рдХрд╛рд░' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

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

рдЙрдирдХреЗ рдкреНрд░реЗрд╖рдг / рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдВрджреБ (C ++ рдореЗрдВ рдЕрдзрд┐рдХ рдХреА рддрд░рд╣) рдХреЗ рдмрдЬрд╛рдп рдЙрдирдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рдмрд┐рдВрджреБ рдкрд░ рдЯрд╛рдЗрдк рдХреЛ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рдХреНрдпреЛрдВ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдпрд╣ рдЖрд╕рд╛рди рд╣реИ: рд╡реИрд╢реНрд╡рд┐рдХ рдЧрд╛рд░рдВрдЯреА рдкреНрд░рджрд╛рди рдХрд░рдирд╛ред C ++ рдореЗрдВ "рдХреЙрдиреНрд╕реНрдЯ" рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрднреА рднреА рдЖрдкрдХреЗ рдЕрдзреАрди рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХрд╛ рдЧреИрд░-рдХреЙрдиреНрд╕реНрдЯреЗрдВрд╕ рд╕рдВрджрд░реНрдн рд╣реИред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреНрдпрд╛ рдЕрдореВрд░реНрдд рдФрд░ рдмрд┐рдЯрд╕реНрдЯрд╛рдЗрдк рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЛ рдпрд╣рд╛рдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

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

immutable -> const type рднреА рдореБрдЭреЗ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИред type -> composite рдпрд╛ struct рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд рдЕрдЧрд░ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ type рдореБрдХреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдореИрдВ рдХреЛрдб рдХреЗ рд╕рднреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдкрд░ рдЦреБрд╢ рдирд╣реАрдВ рд╣реВрдБ рдХрд┐ рдпрд╣ рдХрд╛рд░рдг рд╣реЛрдЧрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ @compat рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЕрдЧрд░ рд╣рдореЗрдВ рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдиреНрдирдпрди рдкрде рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (1) 0.6 рдореЗрдВ рдирдП рдХреАрд╡рд░реНрдб рд╕рдорд╛рдирд╛рд░реНрдереА рд╢рдмреНрдж рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВ рд▓реЗрдХрд┐рди _d't_ deprecate рдкреБрд░рд╛рдиреЗ рд╡рд╛рд▓реЗ ( @compat рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг), рддреЛ (2) рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХрд░реЗрдВ 0.7 рдореЗрдВ рдкреБрд░рд╛рдиреЗред

bitstype , рдпрд╣ primitive рдкреНрд░рдХрд╛рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ? an isbits composite type рд╕рдорд╛рдирддрд╛ рдХреЗ рдХрд╛рд░рдг рд╡рд░реНрддрдорд╛рди рдирд╛рдо рдереЛрдбрд╝рд╛ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ

рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИ рдХрд┐ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЬреВрд▓рд┐рдпрд╛ рдиреЗ рдЕрдХреНрд╕рд░ рдХреБрдЫ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ "рдбрд┐рдл / рдлрдВрдХ / рдПрд▓рд┐рдл" -рд╕реНрдЯрд╛рдЗрд▓ рд╕рдВрдХреНрд╖рд┐рдкреНрддреАрдХрд░рдг рд╕реЗ рдмрдЪрд╛ рд╣реИред (Dn w abbrevs, kthxред) рддреЛ mutable рдореЗрд░реЗ рд▓рд┐рдП struct рд╕реЗ рдЕрдзрд┐рдХ рдЬреАрддрддрд╛ рд╣реИред

FWIW, OCaml рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдФрд░ рд╡реЗрд░рд┐рдПрдВрдЯ (рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдпреВрдирд┐рдпрдиреЛрдВ) рдФрд░ рдЙрдкрдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП type рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдорд╛рдирдХ ML datatype рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред

рд╕рдорд░реВрдкрддрд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ mutable рдЕрдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╡рд░реНрдгрдирд╛рддреНрдордХ рд▓рдЧрддрд╛ рд╣реИ; immutable рднреА, рдЙрд╕ рдмрд╛рдд рдХреЗ рд▓рд┐рдП (рдореБрдЭреЗ const type рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рд╣реИ)ред

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

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

+1 composite / const composite ред

рдореБрдЭреЗ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдХрд┐ primitive vs composite рдПрдХ рдорд╣рд╛рди рд╡рд┐рднреЗрджрдХ рд╣реИ, const рдХреАрд╡рд░реНрдб рдЖрд╡рд╢реНрдпрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рд╣реИрдВред

рдХреНрдпрд╛ рд╣рдореЗрдВ рдХреБрдЫ рдмрд┐рдЯреНрд╕ рд╕реЗ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП const primitive рд╣реИ рдЬреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ (рдФрд░ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП)? рдЗрд╕рд▓рд┐рдП рд╕рдордорд┐рдд рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реЛрдЧрд╛

primitive        # something new... 
const primitive  # bitstype
composite        # type
const composite  # immutable

рдПрдХ рдкрд░рд╕реНрдкрд░ рдЖрджрд┐рдо рдкреНрд░рдХрд╛рд░ рд╣реЛрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ ... (рдмреЗрд╢рдХ рдпрд╣ рд╕рдВрднрд╡рддрдГ рдмрд╛рдж рдХреА рддрд╛рд░реАрдЦ рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо bitstype -> const primitive _now_ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрджрд┐ рд╡рд╣ рдЬрд╛ рд░рд╣рд╛ рдерд╛ рдПрдХ рдЪреАрдЬрд╝ рдмрдирдиреЗ рдХреЗ рд▓рд┐рдПред рд╕рд░рд▓ рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ "рдЕрднреНрдпрд╛рд╕" рд▓рдХреНрд╖реНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕реНрдЯреИрдХ рдХреЗ рд▓рд┐рдП рдореНрдпреВрдЯреЗрдмрд▓ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрд╕ рдкрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реВрдВ)ред

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

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

рдореЗрд░реЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рдареАрдХ рд╣реИред

рдореИрдВрдиреЗ composite рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рджреЗрдЦрд╛ рдФрд░ рдкрд╛рдпрд╛ рдХрд┐ рдХрдо рд╕реЗ рдХрдо Ada рдФрд░ Visual Basic рднреА рдЗрд╕рдХреЗ рдЕрдВрддрд░реНрдЧрдд рд╕рд░рдгреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЧреНрд░рд╣рдг рдХрд░рддреЗ рд╣реИрдВред (рдЕрдиреНрдпрдерд╛, рдереЛрдбрд╝рд╛ рдмреЗрддрд░рддреАрдм рдврдВрдЧ рд╕реЗ, рдкрд╛рдпрд╛ рдЧрдпрд╛: рд╣рд╛рд╕реНрдХреЗрд▓: рд╕реВрдЪрд┐рдпрд╛рдБ рдФрд░ рдЯреБрдкрд▓реНрд╕ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рдПрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рдкреВрдЫреА рдЧрдИ рд╣реИ); рдкрд╛рдпрдерди: рд╕реВрдЪрд┐рдпрд╛рдБ, рдЯреБрдкрд▓реНрд╕, рдбрд┐рдХреНрд╕реЗрд╕; рд▓рд┐рд╕реНрдк: рд╕реВрдЪрд┐рдпрд╛рдБ, рд╡реЗрдХреНрдЯрд░, рд╣реИрд╢ рдЯреЗрдмрд▓, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрдХреНрд╖рд╛рдПрдВ, рд╕рдВрд░рдЪрдирд╛)ред

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдореИрдВ рдЕрдм рд╕реЛрдЪрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рдорд╛рди type рд▓рд┐рдП рдХрдВрдкреЛрдЬрд┐рдЯ рдХрд┐рддрдирд╛ рд╕рдЯреАрдХ рд╣реИ? (рд▓реЗрдХрд┐рди рдореИрдВ рдХреЛрдИ рдХрдВрдкреНрдпреВрдЯрд░ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдирд╣реАрдВ рд╣реВрдБ, рдореБрдЭреЗ рд╢рдмреНрджрд╛рд╡рд▓реА / рд╡реНрдпрд╛рдкрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдХрдореА рд╣реИ)ред

рд╣рдореНрдо, рдпрд╣ рд╕рд╣реА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╣рдореЗрд╢рд╛ рдПрдХ рд╕рдВрд░рдЪрдирд╛, рд╕рдВрд░рдЪрдирд╛ рдпрд╛ рд░рд┐рдХреЙрд░реНрдб (рдпрд╛ рд╡рд░реНрдЧ рдпрд╛ рд╡рд╕реНрддреБ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ "рд╕рдордЧреНрд░" рдПрдХ рд╡реНрдпрд╛рдкрдХ рд╢рдмреНрдж рд╣реИред Http://rosettacode.org/wiki/Compound_data_type рдкрд░ рдХрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ

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

const рдХреАрд╡рд░реНрдб рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд╛рдлреА рд╕рдореНрдореЛрд╣рдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрддрд░ рдкрд░ const рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрдиреЗ рдХреЗ рд╕рд╛рде const рдЗрдорд┐рдЧреНрд░реИрдмрд▓реНрд╕ рдХреЗ рдЕрдВрджрд░ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЗ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдкрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдПрдХреАрдХрд░рдг рдФрд░ immutable рд╕реЗ рдмреЗрд╣рддрд░ рдирд╛рдордХрд░рдг рдЬреИрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП type , struct рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ (рдореИрдВ рдЕрдХреНрд╕рд░ рд╡рд╛рдХреНрдпрд╛рдВрд╢реЛрдВ рдХреЛ "рдПрдХ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддреА рдкреНрд░рдХрд╛рд░" рдФрд░ "рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рдХрд╛рд░" рдзреНрд╡рдирд┐ рднреА рд╕рдорд╛рди рд▓рдЧрддрд╛ рд╣реИ)ред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ:

struct A
    a::Float64
end

const struct B
    b::Float64
end

рдПрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред

рдореИрдВ рдЗрд╕ рднрд╛рд╡рдирд╛ рдХреЛ рдкреНрд░рддрд┐рдзреНрд╡рдирд┐рдд рдХрд░рддрд╛ рд╣реВрдВред

рдЕрдЧрд░ рд╣рдо рдирд╛рдо рдмрджрд▓рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╡рдВрдЪрд┐рддреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рд╛ рдЬрд╛рдПрдЧрд╛? рдХреНрдпрд╛ type рдФрд░ immutable рдЕрднреА рднреА 0.6 рдореЗрдВ рдорд╛рдиреНрдп рд╣реЛрдВрдЧреЗ рдФрд░ рд╢рд╛рдпрдж 1.0 рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде? Compat.jl рдЗрд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА рд░реВрдк рд╕реЗ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдиреЗрдЯ рдкрд░ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╕рд╛рд╣рд┐рддреНрдп (рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ, рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓, рдЖрджрд┐) рдПрдХ рдирд╡рд╛рдЧрдВрддреБрдХ рдХреЗ рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдиреА - рдорд╛рдореВрд▓реА рдЭреБрдВрдЭрд▓рд╛рд╣рдЯ рджрд┐рдЦрд╛рдПрдВрдЧреЗред

рд╣рдо рдЕрднреА рднреА type рдФрд░ immutable рдЕрдзрд┐рдХ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЖрдорддреМрд░ рдкрд░ рд╕рдВрдХреНрд░рдордг рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдо рдкреВрд░реНрд╡ 1.0 рд╣реИрдВ: рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХрд╛ рд╕рдордп рдЕрднреА рдпрд╛ рдХрднреА рдирд╣реАрдВ рд╣реИред рдкреБрд░рд╛рдирд╛ рдХреАрд╡рд░реНрдб рдЕрдм рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдВрдХреНрд░рдордг рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реИред рдореИрдВ рджрд░реНрдж рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд╛рдордХрд░рдг рдкрд░ рдЪрд░реНрдЪрд╛ рдХреЛ рдирд╣реАрдВ рдорд┐рд▓рд╛рдКрдВрдЧрд╛ рдХрд┐ рд╕рдВрдХреНрд░рдордг рдХрд╛ рдЕрд░реНрде рд╣реЛрдЧрд╛ред

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдореИрдВ рдЗрд╕реЗ struct рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реВрдВред рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рдмрд╛рдж

рдореИрдВ рджрд░реНрдж рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд╛рдордХрд░рдг рдкрд░ рдЪрд░реНрдЪрд╛ рдХреЛ рдирд╣реАрдВ рдорд┐рд▓рд╛рдКрдВрдЧрд╛ рдХрд┐ рд╕рдВрдХреНрд░рдордг рдХрд╛ рдЕрд░реНрде рд╣реЛрдЧрд╛ред

рдпрджрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдмрд╣реБрдд рджрд░реНрджрдирд╛рдХ рд╣реИ, рддреЛ рдореИрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рдЦрд┐рд▓рд╛рдл рдорддрджрд╛рди рдХрд░реВрдВрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рдмрджрд▓рд╛рд╡ рдкреНрд░реА 1.0 рдиреНрдпрд╛рдпрд╕рдВрдЧрдд рд╣реИ, рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рд╡реНрдпрд╡рдзрд╛рди рдХреЗ рдХрд╛рд░рдг рддреМрд▓рдирд╛ рдЖрдИрдПрдордУ рдХреЛ рд╕рд╣реА рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред

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

рдореИрдВ рдЖрдЧреЗ рдЬрд╛рдКрдВрдЧрд╛ рдФрд░ struct рд▓рд┐рдП рд╡реЛрдЯ рдбрд╛рд▓реВрдВрдЧрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ рдмрд╣реБрдд рд╕рд╛рд░реА рдЪрд░реНрдЪрд╛ рдФрд░ рд╢рд┐рдХрд╛рдпрддреЗрдВ рдкреИрджрд╛ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрдХреБрд▓ / рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛрдб рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдард┐рди рдирд╣реАрдВ рд╣реИ ... рдмрд╕ рдЗрд╕реЗ рдХрд░реЗрдВ рдФрд░ рд▓реЛрдЧ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗред

immutable -> const type рдХрдо рд╕реЗ рдХрдо рдкреНрд░рддрд┐рд░реЛрдз рдХрд╛ рдорд╛рд░реНрдЧ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ IMO рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЪреАрдЬреЛрдВ рдХреЛ рдмрд╣реБрдд рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭрд╛рддрд╛ рд╣реИред

type -> composite рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╣реИ type рд▓реЗрдХрд┐рди рдХрдо рд╕реЗ рдХрдо рд╕рдЯреАрдХ struct , рдЬрдмрдХрд┐ рдХрдо рд╣реЛрдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╢рдмреНрджрдЬрд╛рд▓-y struct (рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд░)ред рдпрд╣ рдЬреЗрдл рдХреЗ 'рдПрдХ рдиреМрд╕рд┐рдЦрд┐рдпрд╛ рдХреЛ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рдХреНрдп рд▓рд┐рдЦрддрд╛ рд╣реИ "рдкрд░реАрдХреНрд╖рд╛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ type рдХреАрд╡рд░реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдкрд░, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ composite рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдоред рдЕрдХреЗрд▓реЗ рдЬрд╛ рд░рд╣реЗ рд╣реЛред

type -> struct рд╕рдмрд╕реЗ рд╕рдЯреАрдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╡рддрдГ structure рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рд╕реЗ рдЕрдзрд┐рдХ рд╕реБрдВрджрд░ рд╣реЛрдЧрд╛ (рдореИрдВ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рдореЗрдВ struct рд░реВрдк рдореЗрдВ рдмрджрд╕реВрд░рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ) рднрд╛рд╖рд╛ рдореЗрдВ eye() рдПрдХ рдЕрдВрдЧреНрд░реЗрдЬреА рднрд╛рд╖рд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдПрдХ рдмрд╣реБрдд рд╣реА рдШреГрдгрд┐рдд рдкрд░рдВрдкрд░рд╛ рд╣реИ)ред

bitstype -> primitive рдорддрд▓рдм рд╣реИ рдЕрдЧрд░ type рдмрджрд▓рд╛ рдЧрдпрд╛ рд╣реИред

@tbreloff рд╕рд╣реА рд╣реИ - рдХреЛрд░

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

  • immutable -> struct
  • type -> mutable

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

рдореБрдЭреЗ bitstype -> primitive рд░реВрдк рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ ...

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ const рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдХреВрд▓рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдирд╣реАрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред

+1 struct рдФрд░ const struct ред

composite рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рд╡рд░реНрдгрдирд╛рддреНрдордХ рд╣реИ, рд▓реЗрдХрд┐рди struct рдХрдо рд╣реИ, рдФрд░ рдмрд╣реБрдд рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдПрдХ рд╕рдордЧреНрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╢рдмреНрдж рдирд╣реАрдВ рдЪреБрд░рд╛рдКрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╢рд╛рдпрдж рд╣реА рдХрднреА bitstype рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реЛред рд╢рд╛рдпрдж primtype рдпрд╛ primitivetype ?

рдпрджрд┐ рд╣рдо bitstype рдХреЛ primitive рдЬреИрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмреЗрд╣рддрд░ рдирд╛рдо рдореЗрдВ рдмрджрд▓рдиреЗ рдирд╣реАрдВ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЫреЛрдбрд╝рдирд╛ рд╢рд╛рдпрдж рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред

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

-1 рд╕реЗ const ред рд╕реА рдмрд┐рд▓реНрдХреБрд▓ рдХрдо рд╕реЗ рдХрдо рдХреАрд╡рд░реНрдб рд░рдЦрдиреЗ рдХреА рдЗрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛, рдФрд░ рдЕрдм рд╣рдо рдХрдИ рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рд╕рдВрджрд░реНрдн-рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЕрд░реНрдереЛрдВ рдХреЗ рд╕рд╛рде рдлрдВрд╕ рдЧрдП рд╣реИрдВред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ const рдЗрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдкреНрд░рдореБрдЦ рд╕рдВрдкрддреНрддрд┐ рд╣реИ, рдмрд▓реНрдХрд┐ рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рд╣реИрдВ (рд╕рдВрджрд░реНрдн рдХреЗ рд╡рд┐рдкрд░реАрдд)ред

рдПрдХ рдФрд░ рджрд┐рд╢рд╛ рдореЗрдВ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЦреЛрдЬрд╢рдмреНрдж new рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ?

new abstract Abstract
new value Value <: Abstract
    Value() = new()
end
new primitive 8 BitsByte <: Abstract
new record Object <: Abstract
    Object() = new()
end
new function WhyNot # equivalent to `function WhyNot end`

"рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░" рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рднрд╛рд╖рд╛ рдореЗрдВ рдХрд╛рдлреА рдЧрд╣рд░реЗ рд▓реЛрдЧ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВред рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рддрдереНрдп рдХрд┐ рдлрд╝реАрд▓реНрдб рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВ, _semantic_ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рддреБрд░рдВрдд рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ; рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рд╣реИред рдЗрд╕рд▓рд┐рдП рдореИрдВ const рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВред

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

struct рдмрд╣реБрдд рдЖрдо рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реИ; рд░реЛрд╕реЗрдЯреЗрдХреЛрдб рдХреЛ рджреЗрдЦ рдХрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдЕрд▓реНрдЧреЛрд▓, рд╕реА, рд╕реА #, рд╕реА ++, рд▓рд┐рд╕реНрдк, рдбреА, рдЕрдореГрдд, рдЖрдЧреЗ, рдЧреЛ, рдореИрдХреНрд╕рд┐рдорд╛, рд░реИрдХреЗрдЯ, рд░рд╕реНрдЯ, рд╕реАрдб 7, рд╕реНрд╡рд┐рдлреНрдЯ, рд╡рд┐рдЬреБрдЕрд▓ рдмреЗрд╕рд┐рдХ ( structure )

record рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

ada, clojure, delphi, pascal, erlang, icon, modula-2, рдХреБрдЫ рдпреЛрдЬрдирд╛рдПрдБ

record рдкреБрд░рд╛рдиреА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдкрд╕рдВрдж рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ; рдЗрди рджрд┐рдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрдзрд┐рдХ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛ рдЧрдпрд╛ рд╣реИ рдпрд╣ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд░рд┐рдХреЙрд░реНрдб рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред

рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рд╣рд╛рд▓рд╛рдВрдХрд┐ seed7 new struct рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

struct рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рд╕рд╛ рджреБрдЦреА рд╣реЛрдирд╛ (рд╢рдмреНрдж рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреБрд░рд╛ рдорд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рддреАрди рдЕрдХреНрд╖рд░ рд╣реИрдВ?) рдЗрд╕реЗ рдПрдХ рдРрд╕реА рднрд╛рд╖рд╛ рдореЗрдВ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдм рддрдХ function рдмрдЬрд╛рдп func , рдФрд░ рдЗрд╕реА рддрд░рд╣ред рдпрд╣ рдРрд╕рд╛ рдХреБрдЫ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдХреЛрдИ рднреА рднрд╛рд╖рд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реА рд╣реЛ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА ...

structure рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ PL / I рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдмреЗрд╕рд┐рдХ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред VB рдореЗрдВ structure immutable ред рд╣рд╛рд▓рд╛рдВрдХрд┐ struct рдЗрддрдирд╛ рдЖрдо рд╣реИ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд▓рдЧрднрдЧ рдПрдХ рдирдпрд╛ рд╢рдмреНрдж рдмрди рдЧрдпрд╛ рд╣реИред

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рдпрд╣рд╛рдВ рднреА рджреЗрд╢реА рдмреЛрд▓рдиреЗ рдХрд╛ рдореБрджреНрджрд╛ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП рдЬреЛ рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ struct рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рд╡рд╣ structure рд╣реИ рдЬреЛ рдЕрдзрд┐рдХ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИред рдЙрд╕реА рдХрд╛рд░рдг рд╕реЗ func рднрдпрдВрдХрд░ рд▓рдЧрддрд╛ рд╣реИ рдФрд░ function рдкреНрд░рд╛рдХреГрддрд┐рдХред

рдХреНрдпрд╛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг struct рдПрдХ рд╕реНрд╡-рдирд┐рд╣рд┐рдд рд╢рдмреНрдж рдирд╣реАрдВ рд╣реИ? рд╢рдмреНрдж structure (рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЬрд░реНрдорди рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рдХреЗ рд░реВрдк рдореЗрдВ) рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рд╛рд░ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐ рдЯрд╛рдЗрдк рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд "рд╕рдВрд░рдЪрдирд╛" рд╣реЛрддреА рд╣реИред

func рдореЗрд░реЗ рд▓рд┐рдП рдХреЛрдИ рд╕реНрд╡-рдирд┐рд╣рд┐рдд рд╢рдмреНрдж рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рд┐рд░реНрдл рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рд╣реИред

func рдореЗрд░реЗ рд▓рд┐рдП рдХреЛрдИ рд╕реНрд╡-рдирд┐рд╣рд┐рдд рд╢рдмреНрдж рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рд╣реИред

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

рд╡реИрд╕реЗ рднреА, рдореИрдВ mutable рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ _too_ рдХреА рдЧрд╣рд░рд╛рдИ рд╕реЗ рдкрд░рд╡рд╛рд╣ рдирд╣реАрдВ рдХрд░рддрд╛ рдЕрдЧрд░ рдпрд╣ рд╕рдВрд░рдЪрдирд╛ рдпрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИред рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрдиреАрдп const рдЬреЛ рдЕрдм immutable рд╣реИ рдЙрд╕рдХреЗ рд▓рд┐рдП рд╣рд░ рд╕рдордп рд▓рд┐рдЦрдиреЗ рд╕реЗ рдмрдЪрдирд╛ рд╣реЛрдЧрд╛ред

рд▓реЗрдХрд┐рди, рднрд▓реЗ рд╣реА рдпрд╣ struct рдпрд╛ strct рдпрд╛ stct рдпрд╛ strctr рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рди рд╣реЛ, рдпрд╣ рдмрд╣реБрдд рдХрдо рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЬреВрд▓рд┐рдпрд╛ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдмрджрд▓ рджреВрдВ рдореЗрд░рд╛ рдХрд╛рдо, рдЗрд╕рд▓рд┐рдП ... :)

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рдпрджрд┐ рдпрд╣ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ: рд▓реЗрдХрд┐рди struct construct рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рдирд╣реАрдВ рд╣реИред рдХрдо рд╕реЗ рдХрдо рдЬрд░реНрдорди рдореЗрдВ Konstrukt рд╢рдмреНрдж рдПрдХ рд╕рдордЧреНрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдпрд╣ рдмрддрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ construct рдПрдХ рд╕рдВрдЬреНрдЮрд╛ рд╣реИ рдпрд╛ рдХреНрд░рд┐рдпрд╛ рдиреЗ рд╕рдВрднрд╡рддрдГ рдЕрдВрдЧреНрд░реЗрдЬреА-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИ :) рдЕрдкрд░рдХреЗрд╕ рдХрд╛ рдЬрд░реНрдорди рдЙрдкрдпреЛрдЧ рд╡рд╣рд╛рдВ рд╕рд╣рд╛рдпрдХ рд╣реИред

struct рдХрд╛ рдЕрдкрдирд╛ рдПрдХ рд╣реА рд╢рдмреНрдж рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ TV, ASAP рдФрд░ LOL рд╢рдмреНрдж рд╣реИрдВред рдореИрдВрдиреЗ рд╢рд╛рдпрдж рд╣реА рдХрднреА рд▓реЛрдЧреЛрдВ рдХреЛ "рд╕рдВрд░рдЪрдирд╛" рдХрд╣рддреЗ рд╕реБрдирд╛ рд╣реИред рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ, рд╢рдмреНрдж "рд╕рдВрд░рдЪрдирд╛" рд╣реИ, рдЬреЛ рдмреЛрд▓рд╛ рдФрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред

BTW: Matlab struct рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЕрдЧрд░ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд╝рд░реНрдХ рдкрдбрд╝рддрд╛ рд╣реИред

OTOH, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, C # рдФрд░ рд╕реНрд╡рд┐рдлреНрдЯ struct рдПрдХ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ ( class рд╡рд┐рдкрд░реАрдд) рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рддреЛ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдФрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрди рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд▓реЛрдЧреЛрдВ рдХреЛ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреАред рдпрдХреАрди рдирд╣реАрдВ рд╣реЛрддрд╛ рдХрд┐ рдХреНрдпрд╛ рдирд┐рд░реНрдгрд╛рдпрдХ рдмрд╛рдд рд╣реИ ...ред

mutable / immutable рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдкрд╕рдВрдж рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рдЬреЛ рдирдП рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

struct рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рднрд┐рдиреНрди рднрд╛рд╖рд╛рдУрдВ рдХреА рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЙрд╕ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╢рдмреНрджрд╛рд░реНрде рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдореБрдЭреЗ type рдФрд░ const type рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ type рдХреАрд╡рд░реНрдб рдХреЛ рдореБрдХреНрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ type рд▓рд┐рдП рдХреНрдпрд╛ рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдХрд┐рддрдиреА рдмрдбрд╝реА рд▓рд╛рдЧрдд рд╣реИред

рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ type рд╣рд┐рд╕реНрд╕рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА abstract рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ, рд╢рд╛рдпрдж mutable рдФрд░ immutable рдХрд░рдХреЗ рдЦреБрдж рдХреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдФрд░ рдЗрд╕рдХреА рдХрдо рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд┐ immutable struct рдФрд░ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдмрджрд▓рд╛рд╡ (рдЯрд╛рдЗрдк -> рдореНрдпреВрдЯреЗрдмрд▓)ред

рд╢рдмреНрдж рд╕рдВрд░рдЪрдирд╛ (рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЬрд░реНрдорди рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рдХреЗ рд░реВрдк рдореЗрдВ) рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рд╛рд░ рд╣реИред

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

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

рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рдЧ рд░рд╣рд╛ рд╣реИ struct ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░рдг рдХреЗ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рд╢рдмреНрдж рдкреЗрд╢ рдХрд░реЗрдВрдЧреЗред

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

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

рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдпрд╛ рддреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд╕реНрдерд┐рд░ рд╣реИрдВ (рд╣рдо const рд▓реЗрдХрд┐рди constant рднреА рдмрд╣реБрдд рдкреНрдпрд╛рд░рд╛ рд╣реИ)ред рдЗрд╕реА рддрд░рд╣, рдПрдХ рд╕рдордЧреНрд░ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдВрджрд░ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреА рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдпрд╛ рддреЛ рдмрджрд▓ рд╕рдХрддреА рд╣реИ рдпрд╛ рд╕реНрдерд┐рд░ рд╣реЛрддреА рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ const рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдерд╛ - рдЗрд╕рдиреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рд╕реНрдкрд╖реНрдЯ (рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдП) рдХрд░ рджрд┐рдпрд╛ред

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

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

рдпрд╣ рдЖрдо рд▓рд┐рд╕реНрдк рдореЗрдВ рднреА рд╣реИ; defstruct ред

рд╕рдВрднрд╡рддрдГ рдпрд╣рд╛рдВ рдЕрдиреНрдп рдЕрдзрд┐рдХрд╛рдВрд╢ рдмрд┐рдВрджреБрдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рддреБрдЪреНрдЫ, рд▓реЗрдХрд┐рди рдЬрдм рддрдХ рд╣рдо рдмрд┐рдХреЗрд╢рд┐рдВрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ: рдЬрдм рдЬреЛрд░ рд╕реЗ рдмрд╛рдд рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╡рд╛рдХреНрдпрд╛рдВрд╢ immutable object рдФрд░ a mutable object рдзреНрд╡рдирд┐ рдХрд╖реНрдЯрдкреНрд░рдж рд╕рдорд╛рди рд╣реЛрдВред рдпрд╣ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рддрдЪреАрдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛрдЧрд╛, рдЬрд┐рддрдирд╛ рдХрд┐ рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ

+1 рд╕реЗ type -> struct рдФрд░ immutable -> const struct ред рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореИрдВ рдХрднреА рдХрд┐рд╕реА рд╕реЗ рдорд┐рд▓рд╛ рд╣реВрдВ, рдЬреЛ рдЗрд╕рд╕реЗ рднреНрд░рдорд┐рдд рд╣реЛ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рд╕рд░рд╕рд░реА рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рдмрд╛рджред

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

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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, "рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп" рдФрд░ "рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрд┐рдд" рдмрд╣реБрдд рдЕрдзрд┐рдХ рдиреЗрддреНрд░рд╣реАрди рд╣реИрдВред рд╣рдо рдмреЗрд╣рддрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


  immutable ComplexNumber ... end

  alterable MethodTable   ... end

@JeffreySarnoff рд╕рдореБрджрд╛рдп рдХреЗ рдорд╛рдирдХреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЬреВрд▓рд┐рдпрд╛ рдХреЛ "рдЗрд╕реЗ" рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рдмрд╕ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВрдВрдЧрд╛ред ЁЯЩВ

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

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

рдзрдиреНрдпрд╡рд╛рдж

Thu, Nov 3, 2016 рдХреЛ рд╢рд╛рдо 4:29 рдмрдЬреЗ, рд╕реНрдЯреАрдлрди рдХрд░рдкрд┐рдВрд╕реНрдХреА рд╕реВрдЪрдирд╛рдПрдВ @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

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

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/JuliaLang/julia/issues/19157#issuecomment -25256464,
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABmqxopTX8oWKbwnLxfCBtIv-Ih7l-nXks5q6kRFgaJpZM4KkN_g
ред

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

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

рд▓реЗрдХрд┐рди рдХреАрд╡рд░реНрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ --- рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ Tuple{Int} рднреА рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреА рд╣реИред рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ type рд╕рд╛рде рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЧрдИ рдЪреАрдЬреЛрдВ рдХреЛ рд╣рдореЗрд╢рд╛ struct s рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рд╕реЗ рдХреЛрдИ рднреНрд░рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ Real рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдФрд░ Union{Int8,Int16} рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЖрджрд┐ред

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

Thu, Nov 3, 2016 рдХреЛ рд╢рд╛рдо 4:38 рдмрдЬреЗ, рдПрд▓реЗрдХреНрд╕ рдЕрд░реНрд╕рд▓рд╛рди рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рд▓рд┐рдЦрд╛ рдерд╛:

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

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/JuliaLang/julia/issues/19157#issuecomment -258266857,
рдпрд╛ рдзрд╛рдЧрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABmqxsZ_rXkn6GpVFxhd6TZnkkao9plWks5q6kZggaJpZM4KkN_g
ред

рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ type рд╕рд╛рде рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЧрдИ рдЪреАрдЬрд╝реЛрдВ рдХреЛ рд╣рдореЗрд╢рд╛ struct s рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рд╕реЗ рдХреЛрдИ рднреНрд░рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ Real рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдФрд░ Union{Int8,Int16} рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЖрджрд┐ред

рдХреНрдпрд╛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рднреНрд░рдо рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╢рд╛рдпрдж рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рд╕реЗ рдЪреВрдХ рдЧрдпрд╛ рд╣реВрдВред

@ararslan : type рдХрд╛ рд╢рдмреНрдж рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо type рдХреАрд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдЬреЛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рдПрдХ рдРрд╕реА рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдордЧреНрд░ рдкреНрд░рдХрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рднреАрддрд░ рдХрдИ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рд╣реИрдВ рдЬреЛ type рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд╣реАрдВ рдмрдирд╛рдП рдЧрдП рд╣реИрдВред

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

рдареАрдХ рд╣реИ, рдЕрдЪреНрдЫреА рдмрд╛рдд рд╣реИред

рдФрд░ рдпреВрдирд┐рдпрди {Int8, Int16} рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ

рдЖрд╣ред рдореИрдВ рднреВрд▓ рдЧрдпрд╛ рдерд╛ рдХрд┐ Union рднреА рдореМрдЬреВрдж рд╣реИред рдЬреЛ struct ( Struct ?) рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕рдореНрдореЛрд╣рдХ, IMO рдХрд╛ рддрд░реНрдХ рджреЗрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрднреА рднреА mutable рдФрд░ immutable рдирд╣реАрдВ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ _struct_ рдЖрдЧреНрдиреЗрдп рдФрд░ рд╕рдЪ рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдХреЛ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдордп рдХреЗ рд╕рд╛рде, рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЬрд┐рдЯрдЬрд┐рд╕реНрдЯ рдХреЛ рдиреАрдЪреЗ рдХреА рдУрд░ рдЦреАрдВрдЪрдирд╛ рд╣реЛрдЧрд╛ред рд╕рд┐рджреНрдзрд╛рдВрдд рдЧрддрд┐ рдореЗрдВ рдмрд┐рдЯреНрд╕ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдмреАрдЪ рдПрдХ рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕ рд╣реИ рдФрд░ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдореЗрдмреНрд╕ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЙрдЪреНрдЪ-рдХреНрд░рдо рдХреЗ рдкрд┐рдШрд▓рдиреЗ рдФрд░ рдЧрд╣рд░реЗ рдЗрд╢рд╛рд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реИред struct рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рдЗрд╕ рдмрд╛рдд рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХрд╛ рдореМрдХрд╛ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧрд╛ рдХрд┐ рдПрдХ рдмрд┐рдВрджреБ рдХрд┐рд╕рдХреЗ рдкрд╛рд╕ рд╣реИред ... рдореБрдЭреЗ рдЕрддрд┐ рдХрд░рдиреЗ рджреЛ ...

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


рдЕрдЧрд░ _struct_ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдореНрдореЛрд╣рдХ рдорд╛рдорд▓рд╛ рд╣реИ, рддреЛ рдХрд┐рд╕реА рдПрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░ рдорд╛рдорд▓рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

рдПрдХ structure рднрд╛рдЧреЛрдВ рдХрд╛ рдПрдХ рд╕рд╛рд░реНрдердХ рдЕрдВрддрд░реНрд╕рдВрдмрдВрдз рд╣реИ, рдПрдХ рд╕реВрдЪрд┐рдд рд░рдЪрдирд╛
construct рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛рдУрдВ рдХреА рдПрдХ рдЙрдкрдпреЛрдЧреА рд╕рдВрд░рдЪрдирд╛ рд╣реИ, рдПрдХ рдореВрд▓реНрдп-рд╡рд░реНрдзрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рд╣реИ

рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп structure рдПрдХ рдХрдард┐рди рдХрдореНрдкреЛрдЬрд┐рдЯ рд╣реИ
рдПрдХ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрдиреАрдп structure рдПрдХ рдЕрдкреНрд░рдХрд╛рд╢рд┐рдд рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд╣реИ
рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп construct рдПрдХ рд╕реНрдерд╛рдкрд┐рдд рдШрдЯрдирд╛ рд╣реИ
рдПрдХ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддреА construct рд╕рдВрджрд░реНрдн рдкрд░ рдПрдХ рдЬрд╛рдирдмреВрдЭрдХрд░ рдмрд╛рдзрд╛ рд╣реИ


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

class рдФрд░ immutable рдХреНрдпрд╛?

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

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

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

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

type struct , рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ abstract , Union{} , typealias рдФрд░ рдЗрддрдиреЗ рдкрд░ Tuple{} рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдПрдХ рдирдпрд╛ рдкреНрд░рдХрд╛рд░ рдпрд╛ рдмрд╕ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░) рд╣реЛрдиреЗ рдкрд░ рдпрдХреАрдирди рддрд░реНрдХрдкреВрд░реНрдг рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ _user- рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрдВрдХреНрд░реАрдЯ рдЯрд╛рдЗрдк_ bitstype , type рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред immutable ред рдЗрди рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЕрдЪреВрдХ wrt рдЕрдореВрд░реНрдд рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ рдХрд┐ рд╡реЗ рдбреЗрдЯрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЕрдореВрд░реНрдд рд╡рд╛рд▓реЗ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред immutable рд╕реЗ const type рдмрджрд▓рдиреЗ рд╕реЗ рдореБрдЭреЗ рд╕реНрдерд┐рддрд┐ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧреАред

рдореИрдВ рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рддрдХрдиреАрдХреА рд╢рдмреНрдж struct рдкреНрд░рдЪрд╛рд░ рдХреЗрд╡рд▓ рдкрд░рдВрдкрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдХрд░рддрд╛ рд╣реВрдВ, рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЖрдо рдЖрджрдореА рдХреА рд╢рд░реНрддреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬрд╣рд╛рдВ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рдЬрдм рдореИрдВ Symmetric{Matrix{T}} рдЬреИрд╕реЗ рдПрдХ рдЖрд╡рд░рдг рдкреНрд░рдХрд╛рд░ рдмрдирд╛рддрд╛ рд╣реВрдВ - рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рдореЗрд░реА рдЪрд░реНрдЪрд╛рдПрдВ рд╣реЛрдВ, "рдореИрдВрдиреЗ рдЗрд╕ struct рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рдмрдирд╛рдпрд╛ рдХреМрди рд╕рд╛ ... "рдЬрдм рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ" рдореИрдВрдиреЗ Symmetric рд░реИрдкрд░ type Matrix "(рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЙрд╕ рд╡рд╛рдХреНрдп рдХрд╛ рдЖрдзрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ)ред рдПрдХ "рдЖрд╡рд░рдг рд╕рдВрд░рдЪрдирд╛"? рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИ - рдФрд░ рдХреМрди рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддрд╛ рд╣реИ? рдЙрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХреНрд╖реЗрддреНрд░ рд╡рд╛рд▓реЗ рдПрдХрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? types рдФрд░ immutables рдПрдХ рдмрдбрд╝рд╛ рдЕрдВрд╢ рдХрд┐рд╕реА рднреА (рдЧреИрд░-рддреБрдЪреНрдЫ) рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд░реИрдкрд░ рдФрд░ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЗ рд╕рд╛рде рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдкреНрд░рдХрд╛рд░ рдФрд░ рдкреНрд░реЗрд╖рдг рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡реНрдпрдХреНрдд рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред IMO рдпрд╣ рдЬреВрд▓рд┐рдпрд╛ рдХрд╛ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк, рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рдЕрднрд┐рд╡реНрдпрдВрдЬрдХ рдкрд╣рд▓реВ рд╣реИ (рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рд╕рдВрдпреБрдХреНрдд рд╣реИ рдХрд┐ рдпрд╣ _fast_ рд╣реИ)ред

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

"рдХрд┐рдб" рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рдХрд╛рдлреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрдХрдиреАрдХреА рдЕрд░реНрде рд╣реИред

рдпрджрд┐ рд▓рдХреНрд╖реНрдп / рд▓рд╛рдн type рдХреЛ рдореБрдХреНрдд рдХрд░рдирд╛ рд╣реИ рддреЛ рдХреИрд╕реЗ:

const datatype  # immutable
datatype        # type

рд╡реЗ рдареЛрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ рдЗрд╕рд▓рд┐рдП рдЙрдирдореЗрдВ рд╕рдВрднрд╡рддрдГ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ DataType рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рдХрдИ (рдПрдХ) рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред

"рдХрд┐рдб" рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рдХрд╛рдлреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрдХрдиреАрдХреА рдЕрд░реНрде рд╣реИред

рд╡рд┐рдХреА рдХрд╛ рдкрд░рд┐рдЪрдп рдмрд┐рд▓рдХреБрд▓ Type{} (рдЬреЛ DataType рдФрд░ TypeConstructor , Union , рдЖрджрд┐) рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ (EDIT: рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рд╣реИред рд╡рд┐рдШрдЯрди рдХреЗ рд▓рд╛рдпрдХ рд╣реИ)

kind рдпрд╣рд╛рдБ рд╕рд╣реА рд╢рдмреНрдж рдирд╣реАрдВ рд╣реИред

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

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

рдлреЗрдпрд░ рдкреЙрдЗрдВрдЯ, рдЬреЗрдлред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВ _do_ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ const struct рдФрд░ struct immutable type рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛ (рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЦреЛрдЬ рдирд╣реАрдВ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдХреБрдЫ рдФрд░ рднреА рдмреЗрд╣рддрд░)ред

рдЬрдм рдЖрдк рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрд░рдЪрдирд╛ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИ рдпрд╛ рдПрдХ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд░реВрдк рдореЗрдВ, рди рддреЛ рдпрд╛ рджреЛрдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ?

@ рдХреИрдВрдбреАрдлреНрд░реАрдЬ рдиреЗ рдореЗрд░реА 'рдХреНрд▓рд╛рд╕' рдФрд░ 'рд░рд┐рдлрд╝реЙрд╕реНрдЯрд╛рдЗрдк' рдЯрд┐рдкреНрдкрдгреА рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдореИрдВ 'рдХрд╛рд╕реНрдЯ рдЯрд╛рдЗрдк' рднреА рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдпрд╛ рдЙрд╕ const struct рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдФрд░ struct рдПрдХ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛ред 'рдХреЙрдиреНрд╕реНрдЯ' рд╕реЗ рдмрдЪрдирд╛, 'рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп' рдХреЛ рдмрдЪрд╛рдП рд░рдЦрдирд╛ рдФрд░ 'рд╕реНрдЯреНрд░рдХреНрдЪрд░' рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ (рдЬрдм рдпрд╣ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрддрд╛ рдерд╛, рддреЛ рдпрд╣ рдХрд╣рдирд╛ рд╕рд╣реА рд╣реЛрдЧрд╛ рдХрд┐ 80plus% рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдареАрдХ рд╣реИ) ред

fieldtype (рдпрд╛ fieldstype ) рдХреИрд╕реЗ? рдпрд╣ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рд╣реИ bitstype рдФрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд fieldnames() ред

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

class рдареАрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ; рд╣рдордиреЗ рдореВрд▓ рд░реВрдк рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдЕрдВрджрд░ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧ-рдЖрдзрд╛рд░рд┐рдд OO рдХреЗ рд╕рд╛рде рдЗрд╕рдХреЗ рдЬреБрдбрд╝рд╛рд╡ рдХреЗ рдХрд╛рд░рдг рдЗрд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ред рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ struct рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╣реИред

рдореИрдВ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП struct рдХрдо рдирд╣реАрдВ рджреЗрдЦрддрд╛; рдпрд╣ рд╕рд┐рд░реНрдл рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреБрдЫ рд╣рдж рддрдХ рдордиреЛрд░рдВрдЬрдХ, рд▓рд┐рд╕реНрдк рдореЗрдВ cons , рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ construct рд▓рд┐рдП рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд▓реЛрдЧ рдпрд╣ рднреВрд▓ рдЧрдП рдХрд┐ рдмрд╣реБрдд рдЬрд▓реНрджреА рдФрд░ рдмрд╕ "рдХреЙрдиреНрд╕ рд╕реЗрд▓" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред

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

рдореБрдЭреЗ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП struct рдХрдо рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЪрд┐рдВрддрд╛ рд╣реИ рдХрд┐ C рдХреЗ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рдирд┐рд╣рд┐рдд рд╕рдВрджрд░реНрдн рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдХрд╛ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧрд╛, рдЬреЛ рд╡реЗ рдирд╣реАрдВ рд╣реИрдВ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИред рдЗрд╕ рд╕рдордп рддрдХ, рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ record рдУрд░ рдереЛрдбрд╝рд╛ рд╕рд╛ рдЭреБрдХ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЕрднреА рддрдХ рддрддреНрдХрд╛рд▓ рдХрдо рдЕрдиреБрдорд╛рди рд╣реИрдВред

рдПрдХ рдмрд┐рдВрджреБ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ const record рдпрд╛ const struct рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХреЗрд╡рд▓ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╣реИ рдпрджрд┐ рдЗрд╕реЗ рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ const рдореИрдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯрд╛ рд╣реЛрдиреЗ рдХреЗ рдЕрд░реНрде рдореЗрдВ рд╕рдордЭрд╛ рдЬрд╛рдПред , рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдХрд┐ рд╣рдо рд╡реНрдпрдХреНрддрд┐рдЧрдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ const рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рддреЛ рдореИрдВ рдЬреЛ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдпреЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

record T0
    f::A
    g::B
end

record T1
    const f::A
    g::B
end

record T2
    f::A
    const g::B
end

record T3
    const f::A
    const g::B
end

const record T4
   f::A
   g::B
end

рдпрд╣рд╛рдБ T3 рдФрд░ T4 рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорддреБрд▓реНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ - рдЕрд░реНрдерд╛рдд const record рд▓рд┐рдЦрдирд╛, рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП const рд╢реЙрд░реНрдЯрд╣реИрдВрдб рд╣реИред рдпрджрд┐ рдпрд╣ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдмреНрдЬ рдХреЗ рд╕рд╛рде рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛ рдХрд╛ рдЕрдиреБрдорд╛рди рдЦрддрд░рдирд╛рдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡реИрдЪрд╛рд░рд┐рдХ рднреНрд░рдо рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрд░реЛрдд рд╣реИ рдФрд░ рдЕрдЧрд░ рд╣рдо рдЙрд╕ рд╢рдмреНрджрд╛рд╡рд▓реА рднреНрд░рдо рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдирд╣реАрдВ рд╣реИрдВред

рдпрд╣рд╛рдБ T3 рдФрд░ T4 рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорддреБрд▓реНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ - рдЕрд░реНрдерд╛рдд рдХреЙрдиреНрд╕реНрдЯ рд░рд┐рдХреЙрд░реНрдб рд▓рд┐рдЦрдирд╛ рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рд╢реЙрд░реНрдЯрд╣реИрдВрдб рд╣реИред

рдЕрдЧрд░ рд╣рдо const record рдорддрд▓рдм рдХреНрдпрд╛ immutable рдорддрд▓рдм рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред const record рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рдлрд╝реАрд▓реНрдб рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЬрдмрдХрд┐ рд╡рд░реНрддрдорд╛рди immutable рдПрдХ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рд╣реИред

Https://github.com/JuliaLang/julia/issues/19157#issuecomment -257942059 рдФрд░ record рдХреА рдХреБрдЫ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВред

@vtjnash рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдРрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЕрдм рд╣реЛрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ immutable рдПрдХ "рд╕рдВрджрд░реНрдн" рдкреНрд░рдХрд╛рд░ рдмрди рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЗрд╕рдореЗрдВ рдХреЛрдИ рд╕рдВрджрд░реНрдн рд╣реЛред

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

рдХреИрд╕реЗ nuple ? "рдирд╛рдорд┐рдд рдЯрдкрд▓" рдХреЗ рд▓рд┐рдП рд▓рдШреБ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗред

рдореБрдЭреЗ рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕реБрдЭрд╛рд╡ рдкрд╕рдВрдж рд╣реИрдВ

const datatype  # immutable
datatype        # type

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

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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╢рдмреНрджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд▓рд╛рдн рд╕рдВрднрд╡ рднрд╡рд┐рд╖реНрдп const abstract рдФрд░ const bitstype рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдореБрдХреНрдд рд╣реЛрддрд╛ рд╣реИред

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

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

рдХреНрдпрд╛ рдореИрдВ _still_ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд╕реНрддрд░ рдХреЗ рд╢рдмреНрджрд╛рд░реНрдереЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреНрд░рдорд┐рдд рд╣реВрдВ, рдпрд╛ рдХреНрдпрд╛ рдЖрдк рдпрд╣рд╛рдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреА рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдиреБрдкрд▓реЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ? "рдирд╛рдорд┐рдд рдЯрдкрд▓" рдХреЗ рд▓рд┐рдП рд▓рдШреБ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗред

рд╕рд╛рде рд╣реА record , рд╕рд╣реА рдХреЗ рд╕рд╛рде рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд╛рдорд┐рдд рдЯрдкрд▓ рдПрд░рд▓рдВрдЧ рдореЗрдВ record рд╣реИред рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рднреАред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЬреВрд▓рд┐рдпрд╛ рдХреЗ рдкрд╛рд╕ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдУрд╡рд░рд▓реИрдк рд╣реИ рдЬреЛ C рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ struct рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред

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

рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЙрдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдореИрдВ composite type рдХреА рдУрд░ рдЭреБрдХ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рдЬреЗрдлрд╝ рдХреЛ "рдПрдХ рд╡рд╛рдХреНрдп рдирд┐рдпрдо" рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЗрддрдиреЗ рдирдХрд╛рд░рд╛рддреНрдордХ рд╡реЛрдЯ рдирд╣реАрдВ рдорд┐рд▓реЗ рд╣реИрдВред рдпрд╣ рд╢рдмреНрдж рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЗрддрдирд╛ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИ, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдпрд╣ рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИред рдФрд░ composite рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдмрд╕реЗ рд╡рд░реНрдгрдирд╛рддреНрдордХ рд╢рдмреНрдж рд╣реИ рдЬрд┐рд╕реЗ рдХреЛрдИ рднреА рдЙрд╕рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рд╕рдХрддрд╛ рд╣реИред рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рд▓реЗрдЦрди рдЗрди рдмрд╛рддреЛрдВ рдХреЛ composite types рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдлреЛрд░рдЯреНрд░рд╛рди рд╕реЗ рдЖ рд░рд╣рд╛ рд╣реИ рдореБрдЭреЗ рдЕрднреА рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЦреЛрдЬрд╢рдмреНрдж type рд╕рд┐рд░реНрдл рдареАрдХ рд╣реИ,
рдФрд░ рдПрдХ рдиреНрдпреВрдирддрдо рд╕рдордЭрджрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди immutable -> const type ред

рд▓реЗрдХрд┐рди рдЕрдЧрд░ type рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд╛рдирд╛ рд╣реИ,
composite рдФрд░ const composite рдЕрдЧрд▓реЗ рд╕рд░реНрд╡реЛрддреНрддрдо рд╡рд┐рдХрд▓реНрдк рдкреНрд░рддреАрдд рд╣реЛрддреЗ рд╣реИрдВред

immutable -> const type рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд▓рдЧрддрд╛ рд╣реИ: рдпрд╣ рдПрдХ рд╕рд╛рде рд╡рд┐рдШрдЯрди рд╕реЗ рдмрдЪрддрд╛ рд╣реИ, рдПрдХ рдХреАрд╡рд░реНрдб рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИ, рдФрд░ рднрд╛рд╖рд╛ рдореЗрдВ рд╕реНрдкрд╖реНрдЯрддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред

рдпрд╣ type рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рджреБрдЦреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рд╡рд╣ Type рд╡реИрд╕реЗ рднреА рд╣реИред рдореЗрд░реЗ рджрд╕ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдиреМ рдмрд╛рд░ рд╕реНрдерд┐рд░ рдкреНрд░реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ рди рдХрд┐ рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП DataType рдЪрд░ (рдЕрдкрд╡рд╛рдж рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдп)ред рдЬреЛ рд▓реЛрдЧ inference.jl рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдХрд░реЗрдВрдЧреЗ рддреЛ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рднрд╛рд╖рд╛ рдХреЗ "рд▓рдХреНрд╖рд┐рдд рджрд░реНрд╢рдХ" рдирд╣реАрдВ рд╣реИрдВред

рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╢реНрди: рдХреНрдпрд╛ рдпрд╣ type рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдмрд╕реЗ рдКрдкрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ (рдЬрд╣рд╛рдВ рдпрд╣ рд╣рдореЗрд╢рд╛ рдЕрдорд╛рдиреНрдп рд╣реИ, рд╡рд░реНрддрдорд╛рди рдореЗрдВ) рдЗрд╕реЗ рдПрдХ рдЪрд░ рдирд╛рдо рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ? рдпрд╛ рдЗрд╕рд╕реЗ рднреА рдЖрдЧреЗ, рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдмрд╣реБрдд рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ ... рдХреНрдпрд╛ рд╣рдо рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ (рдпрд╛ рдлрд╝рдВрдХреНрд╢рдВрд╕) рдХреЛ type рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╕рдордп рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ?

рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдВрдЯреИрдХреНрд╕ рд░рдЦрддреЗ рд╕рдордп рдХреНрдпрд╛ рд╣рдо рдХреАрд╡рд░реНрдб рд╡реНрдпрд╡рд╣рд╛рд░ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ?

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

@ c42f :

рдХреНрдпрд╛ рдореИрдВ рдЕрднреА рднреА рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдХреЗ рдЗрдЪреНрдЫрд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд╕реНрддрд░ рдХреЗ рд╢рдмреНрджрд╛рд░реНрдереЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрд▓рдЭрди рдореЗрдВ рд╣реВрдБ, рдпрд╛ рдЖрдк рдпрд╣рд╛рдБ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХреА рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

рдирд╣реАрдВ, рдЖрдк рдирд╣реАрдВ рд╣реИрдВ - рдореИрдВ рдореИрд▓рд╛ рд╣реЛ рд░рд╣рд╛ рдерд╛ред Immutables рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ C рдХреЗ рд╕рдорд╛рди рд╢рд░реНрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡реЗ рд╣реИрдВред

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

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

_although_

рдЪреВрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдерд┐рддрд┐ рдпрд╣ рд╣реИ рдХрд┐ рд╕реА

рдЕрднреНрдпрд░реНрдереА рдХреА рд╢рд░реНрддреЛрдВ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрдХрдбрд╝ рд▓реЗрддрд╛ рд╣реИ, struct рдореЗрд░рд╛ рд╕рдмрд╕реЗ рдХрдо рдкрд╕рдВрджреАрджрд╛ рд╣реИ

рдпрд╣рд╛рдВ рдореИрдВ рдХрд╣рд╛рдиреА рдмреЗрдЪ рд░рд╣рд╛ рд╣реВрдВ: "рд╕реА рдФрд░ рдЬреВрд▓рд┐рдпрд╛ рджреЛрдиреЛрдВ рдореЗрдВ, рдПрдХ struct рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рдирд╛рдореЛрдВ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реЗрдЯ рдореИрдк рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдЗрди рдЪрд╛рд░реЛрдВ рдУрд░ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕реА рдкрд╛рд╕ рд╣реЛрддрд╛ рд╣реИред -рддрдм рдореВрд▓реНрдп рдФрд░ рдЬреВрд▓рд┐рдпрд╛ рдкрд╛рд╕-рдкрд╛рд╕-рд╕рд╛рдЭрд╛ рд╣реИред "

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

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

рдЦреИрд░, рдореИрдВ рдХрд┐рд╕реА рдХреЗ рдореБрдВрд╣ рдореЗрдВ рд╢рдмреНрдж рдирд╣реАрдВ рдбрд╛рд▓рдирд╛ рдЪрд╛рд╣рддрд╛; рдореИрдВ рд╕рд┐рд░реНрдл рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ struct рдХреЛ" рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ "рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рднреНрд░рдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ immutable рдХреЛ рдПрдХрд▓-рд╢рдмреНрдж рдХреАрд╡рд░реНрдб рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ const type рдпрд╛ const struct рдпрд╛ immutable struct ред рдореИрдВ immutable рдмрд╣реБрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрди рдШреЛрд╖рдгрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдлреА рдЕрдЬреАрдм рд╣реЛрдЧрд╛ рдЬрдм рджреЛ рдЪреАрдЬреЗрдВ рдмрд╛рдХреА рд╕рдм рдПрдХ рд╢рдмреНрдж рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдВрдЧреАред рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдЕрд░реНрде рдореЗрдВ рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЪрд┐рдВрддрд╛ рдирд╣реАрдВ рд╣реИ; рд▓реЗрдХрд┐рди рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рдХрд┐ "рдЯреИрдЧ" рдХреА рддрд░рд╣ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реЛрдиреЗ рд╕реЗ рдпрд╣ рджреВрд╕рд░реЗ рджрд░реНрдЬреЗ рдХрд╛ рд▓рдЧрддрд╛ рд╣реИред

@TotalVerb рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рдВрдЧрдд рд╣реИ

type MyType
    const field::Int
end

рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП

immutable MyType
    field::Int
end

рдЕрдм рдХрд░рддрд╛ рд╣реИред

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐, const type (рдпрд╛ const struct , const composite , рдпрд╛ рдЬреЛ рднреА рд╣реЛ) рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ const рдХрд╛ рдкреНрд░рд╕рд╛рд░рдг рдПрдХ рд╢реЙрд░реНрдЯрдХрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЙрдкрдпреЛрдЧреА рд▓рдЧрддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕рдЦреНрддреА рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ) рд╕реБрд╡рд┐рдзрд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдпрд╣ рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдкрдиреЗ рдХрд┐рд╕рдХреЛ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рд╣реИ (рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рдордиреЗ const type рдпрд╛ const - рдкреВрд░реНрд╡ рдкрд╛рд░реНрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдмрд╛рдж рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ)ред рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░, рдХреНрдпреЛрдВ immutable ?

рдПрдХ "рдЯреИрдЧ" рдХреА рддрд░рд╣ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реЛрдиреЗ рд╕реЗ рдпрд╣ рджреВрд╕рд░реЗ рджрд░реНрдЬреЗ рдХрд╛ рд▓рдЧрддрд╛ рд╣реИред

рдЕрдЧрд░ рдореИрдВ рдЬреЗрдл рдФрд░ рд╕реНрдЯреАрдлрди рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ, immutable рдХреЗрд╡рд▓ рдПрдХ рдЯреИрдЧ рд╣реИ рдЬреЛ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдирд┐рд░рдВрддрд░ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╣реИрдВред рдирд┐рд░рдВрддрд░ (_really_ рд╕реНрдерд┐рд░, C рдХреА рддрд░рд╣ рдирд╣реАрдВ) рд╣реЛрдиреЗ рд╕реЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИ, рдФрд░ рдпрджрд┐ рдлрд╝реАрд▓реНрдб рд╕реНрд╡рдпрдВ рд╕реНрдерд┐рд░рд╛рдВрдХ рдпрд╛ рдЖрджрд┐рдо рд╣реИрдВ рддреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА (рдпрд╛рдиреА isbits ) рдпрд╣ рдФрд░ рднреА рдЕрдзрд┐рдХ рдЕрдиреБрдХреВрд▓рди рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╢рдмреНрджрд╛рд░реНрде рдмрд╛рдВрдзрдиреЗ рд╕реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЙрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕реБрдзрд╛рд░рдирд╛ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

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

рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ _optimization_ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ

immutable Complex{T} ... end

рдХреЗ рдмрдЬрд╛рдп

type Complex{T} ... end

рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рджреГрд╢реНрдпрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдХрдИ рдкрд╣рд▓реВ рдмрджрд▓рддреЗ рд╣реИрдВ: === , рдбрд┐рдлрд╝реЙрд▓реНрдЯ == , objectid , hash , рдЖрджрд┐ред рдпрд╣ рдХрд╣рдирд╛ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рдХрд╛рд░ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдмрд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ; рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдмрд╣реБрдд рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЧрд╛рд░рдВрдЯреА рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд╕рдореБрджрд╛рдп const рдФрд░ struct рдкрд░ рдмрд╕рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рд╕рд┐рд░реНрдл constant рдФрд░ structure рд▓рд┐рдП рдПрдХ рдФрд░ рдкреНрд▓рдЧ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

1) рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╢рдмреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд┐рд░реНрдл рддреАрди рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдХреНрд╖рд░!
2) рджрд╛рд╡реЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ struct рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рд╣реЛ рдЧрдпрд╛ рд╣реИ
2a) рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЬреЛ R (рдореЗрд░реА рддрд░рд╣) рд╕реЗ рдорд╛рдЗрдЧреНрд░реЗрдЯ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
2 рдмреА) рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдирдпрд╛ рд╣реИ (рдЬрд┐рдиреНрд╣реЗрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рд╣рд╛рдпрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

рдмрд╕ рдордЬрд╝реЗ рдХреЗ рд▓рд┐рдП, рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд╢рдмреНрдж рдЬреЛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд▓рд┐рдП рднреНрд░рдорд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
рдЕрдХреНрд╖рдпрддрд╛
рдУрдмреНрд╕реНрдЯрд░рд╛рдХрдерд┐рдпрдирд┐рдЬрд╝реНрдо
рдЙрддреНрддрд░-рд╕рдВрд░рдЪрдирд╛рд╡рд╛рдж
рдЕрдзрд┐рд░рдЪрдирд╛ (рдУрд╣ рд╣рд╛рдп рдорд╛рд░реНрдХреНрд╕)

рдФрд░ рд╕реНрддрд░:
рдХрд╛рдВрд╕реНрдЯреЗрдВрдЯрд┐рдиреЛрдкрд▓
CONSTELLATION
рдмреЛрдЖ рдХрдВрд╕реНрдЯреНрд░рд┐рдХрдЯрд░
рдЕрд╕рдВрд╡реИрдзрд╛рдирд┐рдХ

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

рд╡рд╣реА рдкреНрд░рд╢реНрди, рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ:

рдлрд┐рд▓рд╣рд╛рд▓, рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдХреЛрдк рдореЗрдВ рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реИ рдФрд░ рдЪрд╛рд░реЛрдВ рдУрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП trick рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рджрд┐рд╢ рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореВрд▓реНрдп рдХреЛ рд▓рдкреЗрдЯрдирд╛ рд╣реИред рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ const рдкреНрд░рд╕рд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред const рдХрд╛ рдПрдХ рдкреНрд░рд╕рд╛рд░рдг рд╕рдВрд╕реНрдХрд░рдг рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛? рд╡реЗрдХреНрдЯрд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХреЗ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рд╣реА рд╡реЗрдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рдирд┐рд░рдВрддрд░рддрд╛ред рдЗрд╕реА рдкреНрд░рдХрд╛рд░, рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдЬрд┐рд╕рдореЗрдВ рдлрд╝реАрд▓реНрдб рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЙрди рдорд╛рдиреЛрдВ рдХреЛ рдкрдХрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ рдпрд╛ рд╕рдВрд▓рдЧреНрди рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рдХрд╛рд░ рдЕрдм рдЕрдкрдиреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдкрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдФрд░ рдРрд╕рд╛ рдХреЛрдИ рдореВрд▓реНрдп рдирд╣реАрдВ рдЬреЛ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд░реВрдк рд╕реЗ рдЙрд╕рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рддрдХ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд╕рдХреЗ)ред Afaik рдПрдХ рд▓рд╛рд▓рд┐рддреНрдп рдФрд░ рд╕рд╣рд╛рдпрдХ рдХреНрд╖рдорддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдХреАрд╡рд░реНрдб рдХреЗ рдкреНрд░рд╕рд╛рд░рдг рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ "рдПрдХ рдмрд╛рд░ рдирд┐рд░реНрдорд┐рдд / рдЗрд╕ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдорд╛рди [рдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ] рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ [рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ]" ред

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

рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕реЛрдЪрдиреЗ рдкрд░, рдПрдХрдорд╛рддреНрд░ рдкрд░рд┐рд╡рд░реНрддрди рдЬреЛ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореВрд▓реНрдп рдЯреВрдЯрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ bitstype -> primitive , рдЬреНрдпрд╛рджрд╛рддрд░ рдЗрд╕ рдмрд╛рдд рдХреЗ рд▓рд┐рдП рдХрд┐ isbits рдХреБрдЫ рдХреЙрд▓ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИред

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

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

@JeffreySarnoff рдпрд╣ рдорддрд▓рдм рдореБрд╢реНрдХрд┐рд▓ рд╣реИ const рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рдд рдЖрдк рдПрдХ рд╕рдВрджрд░реНрдн рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╛рдиреА рд╕реВрдЪрдХ) рдХреЛ рд╕рддреНрддрд╛ред рдЬреВрд▓рд┐рдпрд╛ рдХреЗ "рд╕рд╛рдЭрд╛рдХрд░рдг" рд╢рдмреНрджрд╛рд░реНрде рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдЬреЛ рд╕рд╣реА рдорд╛рдпрдиреЗ рдореЗрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕рд╛рдмрд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЬрдм рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЛ const type ( immutable ) рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдмрд╛рдБрдзрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдХреЛрдИ рдкреНрд░рдорд╛рдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрджрд░реНрдн рдХрд╣реАрдВ рдФрд░ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рд╕рдмреВрдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд╡рд╣ рд╕реНрдерд┐рд░ рд╣реИред

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

@ рдХреИрдВрдбреАрдлрд░рд┐рд╕ рдЙрд╕ рд╕реНрдкрд╖реНрдЯ рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ const рдпрд╛ constant рдмрдЬрд╛рдп fixed рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ? рдореЗрд░реЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо, рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╡рд░реНрдгрди рд▓рдЧрддрд╛ рд╣реИред

рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ const рдпрд╛ constant рдЬреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╣реИ рдЬреЛ рд╕реНрдерд╛рдпреА рд╣реИ, рдФрд░ рдирд╣реАрдВ (рдЖрд╡рд╢реНрдпрдХ) рдХрд┐ рдмрд╛рдзреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдЕрдВрджрд░ рдбреЗрдЯрд╛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред fixed рдЙрд╕ рдУрд░ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ (рддрдм рдлрд┐рд░ рд╕реЗ, рдореИрдВрдиреЗ рдЬреВрд▓рд┐рдпрд╛ рдХреЛ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдмрд╛рдзреНрдпрдХрд╛рд░реА / рд╕рд╛рдЭрд╛ рдЕрд░реНрде рднреА рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ)ред

рд╢рд╛рдпрдж bind (рдЬреИрд╕реЗ bind x = 2 ) рдХреБрдЫ ... рдерд┐рд╕реЙрд░рд╕ glue рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ ... рдпрд╣ рдмрд╣реБрдд рд╕рдЯреНрдЯрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ ...

const рдХреЛ рдХреБрдЫ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдХреЗ рд╕рд╛рде рдмрджрд▓рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдореЛрд╣рдХ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдордЭрджрд╛рд░реА рд╕реЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдФрд░ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЪрд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рджреЛрдиреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛред fixed struct рдХреБрдЫ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ рдЬреЛ рдХрд┐ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдХреЗ рдмрдЬрд╛рдп рддрдп рдХрд┐рдП рдЧрдП рд╣реИрдВред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ bound struct ( tied struct ?) рдмрдЬрд╛рдп рдЕрд╕реНрдкрд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИред рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, const рдПрдХ рдкреНрд░рдХрд╛рд░ рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдкрд░ рдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИред

рд╣рдо рдЗрд╕реЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдФрд░ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЪрд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рджреЛрдиреЛрдВ рдкрд░ рд╕рдордЭрджрд╛рд░реА рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрд╛рджрдХ рд╣реЛрдЧрд╛

type A
    const x::Int  # fixed, bind, bound, tied, glue
end

рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред type , struct рд╕рд╛рдордиреЗ рдПрдХ рд╢реЙрд░реНрдЯрдХрдЯ рд╣реЛрдиреЗ рдпрд╛ рдЬреЛ рдХреБрдЫ рднреА рдПрдХ рд╢реЙрд░реНрдЯрдХрдЯ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдЙрдкрд░реЛрдХреНрддред

рдпрд╣ рдЗрд╕реЗ рдПрдХ рдореИрдХреНрд░реЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдЬрд╛рд╡рдЯ рдЬреЛ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЗ рдЪрд░рд┐рддреНрд░ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ @generated ред рдпрд╣ рдЕрднреА рддрдХ рдПрдХ рдФрд░ рдХреАрд╡рд░реНрдб рд╣рдЯрд╛ рджреЗрдЧрд╛ ...

+1 type -> composite , рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ type рд╕реЗ рдХреЛрдИ рднреА рдкрд░рд┐рд╡рд░реНрддрди рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред

рдХрд╛рд╢ рдореИрдВ рдереНрд░реЗрдб рдкрд░ рдПрдХ рдирдИ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рдирд╛ GitHub рдореБрджреНрджреЛрдВ рдкрд░ рд╡реЛрдЯ рдХрд░ рд╕рдХрддрд╛ ... рдореЗрд░рд╛ рд╡реЛрдЯ mutable рдФрд░ immutable , рдпрд╣ рдмрд╣реБрдд рд╕рд╛рдл рдФрд░ рд╕реНрд╡рдЪреНрдЫ рд╣реИред struct рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рднрд╛рдЧ рдкрд░ рдЬреЛрд░ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред

рдкреБрдирд╢реНрдЪ: рдХреНрдпрд╛ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ GitHub рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреЗ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдПрдХ рд╡реЛрдЯрд┐рдВрдЧ рд╕реБрд╡рд┐рдзрд╛ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИ? рдореИрдВрдиреЗ рдЙрдирд╕реЗ "рд╣рдорд╕реЗ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВ" рдкреЗрдЬ рдореЗрдВ рдкреВрдЫрд╛, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдИрдореЗрд▓ рд╢рд╛рдпрдж рдЦреЛ рдЧрдпрд╛ рдерд╛ред

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

рдЬреВрд▓рд┐рдпрд╛ рдореЗрдВ рдореЗрд░реА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЙрдореНрдореАрдж рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реА type рдПрдХ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╕реА-рд╢реИрд▓реА struct рдпрд╛ рдкрд╛рдпрдерди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдиреЗ рдХреА рд░рд╣реА рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдПрдХ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реИрд▓реА рдФрд░ рдЧрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред
рдореИрдВ рдЕрднреА рднреА type ... рдФрд░ immutable... рд╢рдмреНрджреЛрдВ рдореЗрдВ рдЕрд╕рдордорд┐рддрддрд╛ рд╕реЗ рднреНрд░рдорд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди DataType рд╕реЗ typeof(SomeType) рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдпрд╛ 'рдмрд┐рдЯрдореИрдк' рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрд░реНрде ', рдФрд░ рдПрдХ рд╕рд░рд▓ Alias = DataType рд╡рд┐рд╡рд░рдг рдХреЗ рдмрдЬрд╛рдп typealias рдХреАрд╡рд░реНрдб рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛ред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореИрдВ datatype рд╡реЛрдЯ рджреВрдВрдЧрд╛, рдЬреЛ typeof(SomeType) == DataType рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛, рдФрд░ ::Type{} рд╕рд╛рде рдЪрд┐рдбрд╝рдЪрд┐рдбрд╝рд╛рдкрди рд╕рдорд╛рдирддрд╛ рдХреЛ рддреЛрдбрд╝ рджреЗрдЧрд╛ред composite [datatype] рд╕рд╛рде рдкрд░рд╕реНрдкрд░ рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рдЬрд╛рдиреЗ рд╕реЗ рдореМрд▓рд┐рдХ 'рдмрд┐рдЯрд╕реНрдЯрд╛рдЗрдкреНрд╕' рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЗрд╕рдХреА рд╡рд┐рд╢реЗрд╖ рдФрд░ рд╕рдВрднрд╡рддрдГ рдЕрдзрд┐рдХ рдорд╣рдВрдЧреА рдкреНрд░рдХреГрддрд┐ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

C / C ++ рдХреЗ рд╕рднреА рднреНрд░рдорд┐рдд рдХреЙрдиреНрд╕реЗрдкреНрдЯ-рдиреЗрд╕ рдореБрджреНрджреЛрдВ рдореЗрдВ рдЦреАрдВрдЪ

рдЗрд╕ рдХреАрд╡рд░реНрдб рдХрд╛ рдХреЛрдИ рднреА рдирд╛рдордХрд░рдг рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдЙрди рдореБрджреНрджреЛрдВ рдХреЛ рд╕реНрдЯреЗрдЯрд┐рдХ рдЪреЗрдХрд┐рдВрдЧ рдФрд░ рдХрд╛рд╕реНрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╣реИ, рдЬреЛ рдпрд╣рд╛рдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВред

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

рдореИрдВ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рд╕рдордЭрддрд╛ред рдпрджрд┐ рдХреЛрдИ рд╡рд╕реНрддреБ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИ, рддреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдорд╛рди рдпрд╛ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореВрд▓реНрдп / рд╕рдВрджрд░реНрдн рднреЗрдж рдореМрд▓рд┐рдХ рдХреИрд╕реЗ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

datatype рдПрдХ рдмреБрд░рд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ datatype рдмрдирд╛рдо composite datatype рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ рдХрд┐ рдЖрдкрд╕ рдореЗрдВ рд╕рд╛рдордВрдЬрд╕реНрдп рдмрд┐рдЧрд╛рдбрд╝ рд╕рдХреЗрдВред

@JeffBezanson , C-like const-ness рдХреЗ рд╕рд╛рде рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдВрднрд╡рддрдГ рдирд┐рд╣рд┐рдд рдЕрдкреЗрдХреНрд╖рд╛ рд╣реИ рдХрд┐ C / C ++ рдореЗрдВ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛ: рдХреЗрд╡рд▓ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп, рд╡реИрд╕реЗ рднреА рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп, рдХрднреА-рдХрднреА рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рдкрд░ рдкреНрд░рднрд╛рд╡ рдХреЗ рдмрд┐рдирд╛ред рд╡рд╛рдкрд╕реА рдХреЗ рдкреНрд░рдХрд╛рд░ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЬрдм рдХреАрд╡рд░реНрдб рдЪреБрдирдирд╛ рд╢рд╛рдпрдж C / C ++ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреГрдкрдпрд╛ const struct ред

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

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

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬрд╣рд╛рдБ рд╕реЗ @mjw рдЖ рд░рд╣реЗ рд╣реИрдВ, рдореИрдВ рд╡рд╣рд╛рдБ рдЧрдпрд╛ рд╣реВрдБ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк C / C ++ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреЛ рдХреБрдЫ рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ, рдЙрд╕реЗ рдЕрдирд▓рд┐рдорд┐рдЯреЗрдб рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдпрд╣рд╛рдВ, рдпрд╣ const рд╣реИ рдЬреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИ рдФрд░ рдХреНрдпрд╛ рдХреБрдЫ рд╕реНрдЯреИрдХ рдпрд╛ рдбрд╛рдпрдирд╛рдорд┐рдХ рд░реВрдк рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдХреНрдпрд╛ рдпрд╣ рд╕рдВрджрд░реНрдн рдпрд╛ рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рднрд┐рдиреНрди рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдХрд▓реНрдк рд╣реЛрдВрдЧреЗред рдЖрдк рдПрдХ рдРрд╕реА рднрд╛рд╖рд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЬреВрд▓рд┐рдпрд╛ рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рддрд░реАрдХрд╛ рд╣реИ (рдмреЙрдХреНрд╕рд┐рдВрдЧ рдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП - рдпрд╣ рдЕрдЬреНрдЮрд╛рдд рд╣реЛрдиреЗ рдкрд░ рднреА "рд╕рд╛рдЭрд╛ рдХрд░рдХреЗ рдкрд╛рд╕" рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ)ред рдЖрдк (рд╣рдо рдФрд░ рдмрд╛рдХреА рд▓реЛрдЧ) рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдЫреЛрдЯреЗ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдЗрд╕рд▓рд┐рдП рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рд╣реЛрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣реА рд╡рд╣ рд╕реНрдерд╛рди рд╣реИ рдЬрд╣рд╛рдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдиреБрдХреВрд▓рди рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВред рдпрд╣ immutable рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╢рдмреНрджрд╛рд░реНрдереЛрдВ рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИред

рд▓реЗрдХрд┐рди, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдмрдбрд╝реЗ рдЗрдореНрдпреВрдЯреЗрдмрд▓реНрд╕ рдХреЛ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рд╢рд╛рдпрдж рд╕реНрдЯреИрдХ рдкреЙрдЗрдВрдЯрд░реНрд╕ рджреНрд╡рд╛рд░рд╛, рдЬрд╣рд╛рдВ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрднрд╡рддрдГ NTuple{1_000_000} рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ) рдФрд░ рдЬреНрдЮрд╛рдд рдЖрдХрд╛рд░ рдХреЗ рдЫреЛрдЯреЗ рдореНрдпреВрдЯреЗрдВрдЯ рд╕реНрдЯреИрдХ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ (рдлрд┐рд░ рд╕реЗ, рдЬрд╣рд╛рдВ рд╕рдВрднрд╡ рд╣реЛ)ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрдЪрд░рд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдвреЗрд░-рд╕реНрдерд╛рди рдХреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЫреЛрд░реЛрдВ рдХреЗ рдЕрдВрджрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рдЕрд╡рд╕рд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрди рдЪрд┐рддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рднрд╛рдЧрдиреЗ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдФрд░ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рднрд╛рд╖рд╛ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдмрд╕ рдкреНрд░рджрд░реНрд╢рди)ред

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

рдореЗрд░рд╛ рдорддрд▓рдм рдерд╛ рдХрд┐ рдЬреВрд▓рд┐рдпрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрднрд╡рддрдГ рд╕рдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ C / C ++ рдореЗрдВ рд╣реИ

рдпрд╣ рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП const -> constant рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рдкрд░реНрдпрд╛рдкреНрдд рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдордп const рд╣рдорд╛рд░рд╛ рдПрдХрдорд╛рддреНрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХреАрд╡рд░реНрдб рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рд╡реИрд╕реЗ рднреА рдПрдХ рд╡рд┐рд╖рдо рдмрдирд╛рддрд╛ рд╣реИред

рдПрдХ рд╕рд░рд▓ Alias = DataType рдмрдпрд╛рдиред

рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдареАрдХ рд╣реИ рдЬрд╣рд╛рдВ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛, рдЬреИрд╕реЗ typealias RealMatrix{T<:Real} Matrix{T} , рдФрд░ рди рд╣реА рдпрд╣ (рдпрд╣ рдПрдХ рд╕рд░рд▓ рдмрдВрдзрди рд╣реИ, рдПрдХ рдирдпрд╛ Type рдирд╣реАрдВ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП TypeVar s рдХреЗ рд╕рд╛рде)ред рдЬрдм рддрдХ рдЖрдк рдЗрд╕реЗ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ: RealMatrix = Matrix{T <: Real} рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдХрд░реЗрдВ рдХрд┐ apply TypeVar рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ (рдпрд╛рдиреА TypeConstructor рдмрдирд╛рддрд╛ рд╣реИ) ... рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдЪрд╛рд░ рд╣реИ (рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдореБрджреНрджреЗ рд╣реИрдВ, рдпрд╣реА рд╡рдЬрд╣ рд╣реИ рдХрд┐ typealias рдЕрдЪреНрдЫрд╛ рд╣реИ ...)ред

@ рдХреИрдВрдбреАрдлреЗрд░рд┐рд╕ , рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 'рдЕрдирдЬрд╛рди' рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП 'рдХреНрдпреЛрдВ рдЬреВрд▓рд┐рдпрд╛ рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рд╡рдЬреВрдж рдЗрддрдиреА рдзреАрдореА рд╣реИ' рдкрд░

@mjw рдЧреНрд░реЗрдЯ, рдФрд░ рдореИрдВ рдЙрди рд╕рднреА рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред :)

рдЖрдкрдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐, рд╣рдо рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреА GitHub рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирд┐рдХрдЯрддрдо рдЪреАрдЬрд╝ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ emojisред

рдпрд╣рд╛рдБ рдореИрдВрдиреЗ рд╕рд╛рд░рдгреАрдмрджреНрдз рдХрд┐рдпрд╛ рд╣реИ, _ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдХреНрд░рдо_ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рд╕реБрдЭрд╛рд╡ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рдЙрд╕ рд╕реБрдЭрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╡реЛрдЯ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЗрдореЛрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрдВред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдбреЗрд╕реНрдХрдЯреЙрдк рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ GitHub рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ; AFAIK рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ emojis рдореЛрдмрд╛рдЗрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЗ рдКрдкрд░реА рджрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рдЪреЗрд╣рд░рд╛ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдЗрдореЛрдЬреАрдЬрд╝ рдХреЗ рдореЗрдиреВ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдПред

| type | immutable | рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ |
| : -: | : -: | : -: |
| struct | const struct | | (+1) |
| mutable | immutable | | (-1) |
| type | immutable | ) (рд╣рдВрд╕рддреЗ рд╣реБрдП) |
| composite | const composite | : рдЯрд╛рдбрд╛: (рд╣реБрд░реНрд░реЗ) |
| datatype | const datatype | ) (рдЙрд▓рдЭрди рдореЗрдВ) |
| type | const type | | (рджрд┐рд▓) |

рд╡реЛрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛ nuple рд▓рд┐рдП рдПрдХ рдирд┐рд╣рд┐рдд рд╡реЛрдЯ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИред :рдЯреНрд░реЙрд▓ рдлрд╝реЗрд╕:

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

рдлреЗрдпрд░ рдкреЙрдЗрдВрдЯ, @TotalVerbред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдерд╛, рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╢рдХреНрддрд┐рдпрд╛рдВ рд╣реЛрдВрдЧреА, рдЬреЛ рд╣рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдзрд╛рдЧрд╛ рдереЛрдбрд╛ рдХрдо рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╡реЛрдЯрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ @juliohm рдХреА рдмрд╛рдд рдЙрдЪрд┐рдд рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдореИрдВ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдзреНрдпрд╛рди

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореБрдЭреЗ рджреЛ рд╢рдмреНрдж рд╕реМрдВрджрд░реНрдпрд╢рд╛рд╕реНрддреНрд░реАрдп рд░реВрдк рд╕реЗ рдкрд╕рдВрдж рд╣реИрдВ ( const type )ред рдпрд╣ рдереЛрдбрд╝рд╛ рд╢рдмреНрджрд╛рд░реНрде рднреА рд▓рдЧрддрд╛ рд╣реИред рдЬрдм рд╣рдо const x = 1 ред рд╣рдорд╛рд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ x рд╕реНрдерд┐рд░ рд╣реИред рдЬрдм рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ const type; x; end рдХрд╛ рдЕрд░реНрде рд╣реЛрдЧрд╛ рдХрд┐ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рд╕реАрдзреЗ рдкреНрд░рдХреНрд╖реЗрдк рд╕реЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдХрд╣рдирд╛ рдПрдХ рдирд┐рд░рдВрддрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд░ рд╕реНрд╡рдпрдВ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ (рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдм рд╣реИ)ред рдпрд╣ рд╕рднреА рджреЗрдЦреЗрдВ:

type foo
end
const bar = foo

рддреЛ bar рд╣реИ рдФрд░ рдпрд╣ рд╣рдореЗрд╢рд╛ foo рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдпрд╣ const type ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ const (рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдкрд░ рд▓рд╛рдЧреВ) рдХреЗ рдореМрдЬреВрджрд╛ рд╢рдмреНрджрд╛рд░реНрдереЛрдВ рдХреЗ рд▓рд┐рдП wrt, рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдирд╛рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рд╕реНрдЯ рд╣реИрдВред

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рдХреАрд╡рд░реНрдб рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╣реИрдВ, рдЗрдЪреНрдЫрд┐рдд рд╢рдмреНрджрд╛рд░реНрдереЛрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЪрд░ рдирд╛рдореЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдВрдЫрдиреАрдп рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╢рдмреНрджрд╛рд╡рд▓реА рдЗрди рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЗ рд╕рдмрд╕реЗ рдХрд░реАрдм рд╣реИ mutable datatype , immutable datatype , рдФрд░ abstract datatype рддреАрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдШреЛрд╖рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдПред

рдореИрдВ type рдФрд░ immutable рдЕрд▓рд╛рд╡рд╛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рдерд╛ред
рдореИрдВрдиреЗ рдореБрджреНрджреЛрдВ рдкрд░ рдХреБрдЫ рдЪрд░реНрдЪрд╛рдПрдБ рджреЗрдЦреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕ рд╕рдордп рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ (рдЕрдЧрд░ рдореБрдЭреЗ рдХреБрдЫ рдХрд░рдирд╛ рд╣реИ рддреЛ рдореБрдЭреЗ рд╕рд╣реА рдХрд░реЗрдВ):

immutable T
    a::Int
    b::Float64
    ...
end

t = Vector{T}(10)
t[2].a = 5    # error here
# instead
c = t[2]
t[2] = T(5, c.b, ...)   # works  

рдХреЛрдб рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ sizeof(T) * 10 рдПрдХ рд╕рд╛рдл рд╕рд░рдгреА рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдлрд╝реАрд▓реНрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реЗ T(...) рдХреЛ рдкреБрди: рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ 3-5 рдлрд╝реАрд▓реНрдб рд▓рдВрдмреА рд╣реЛрддреА рд╣реИред
рддреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдореЗрд░реЗ 5 рд╕реЗрдВрдЯ:
type - GC рдиреЗ рд╕рдВрджрд░реНрдн рдПрдХрддреНрд░ рдХрд┐рдпрд╛
immutable - рдореВрд▓реНрдп (рд╕реНрдЯреИрдХ рдЖрд╡рдВрдЯрд┐рдд) рдкреНрд░рдХрд╛рд░ рдЬреЛ рдмрджрд▓рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ
mutable - рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рдЬреЛ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЦрд╛рд╕рдХрд░ рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ

рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рдЬреЛ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реИ

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

рд╢рд╛рдпрдж рдЖрдк рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ: # 11902

рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдФрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдмреЗрд╣рддрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЕрдЧрд░ рд╣рдо рдореВрд▓реНрдпреЛрдВ рдФрд░ рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ ред

abstract Node{T}
immutable Link{T} <: Node{T}
    value :: T
    next :: ref{Link{T}} # next :: Link{T} will be an error: Recursive type
end

рдореВрд▓реНрдпреЛрдВ рдФрд░ рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рдмреАрдЪ рдПрдХ рдХреГрддреНрд░рд┐рдо рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде рднрд╛рд╖рд╛ рдХреЛ рдУрд╡рд░рдХреНрд▓рдВрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдФрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рдХрд╛рд░ рд╢рдмреНрджрд╛рд░реНрде рдмрд╣реБрдд рд╕рд░рд▓ рд╣реЛрддреЗ рд╣реИрдВ; рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдкреНрд░рдХрд╛рд░ рдПрдХ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рдХреЗрд╡рд▓ рдПрдХ рдЕрдиреБрдХреВрд▓рди рд╣реИред

@ рдХреЗрдиреЛ рдПрдХ рдЕрдЪреНрдЫреА рдмрд╛рдд рдХрд░рддрд╛ рд╣реИ

рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореБрдЭреЗ рджреЛ рд╢рдмреНрдж рд╕реМрдВрджрд░реНрдпрд╢рд╛рд╕реНрддреНрд░реАрдп рд░реВрдк рд╕реЗ рдкрд╕рдВрдж рд╣реИрдВ (рдХрд╛рд╕реНрдЯ рдЯрд╛рдЗрдк)ред рдпрд╣ рдереЛрдбрд╝рд╛ рд╢рдмреНрджрд╛рд░реНрде рднреА рд▓рдЧрддрд╛ рд╣реИред рдЬрдм рд╣рдо const x = 1. рдХрд╣рддреЗ рд╣реИрдВ рддреЛ рд╣рдорд╛рд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ x рд╕реНрдерд┐рд░ рд╣реИред рдЬрдм рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХрд╛рдВрд╕реНрдЯ рдкреНрд░рдХрд╛рд░; рдПрдХреНрд╕; рдЕрдВрдд рд╣рдорд╛рд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рд╕реАрдзреЗ рдкреНрд░рдХреНрд╖реЗрдк рд╕реЗ рдРрд╕рд╛ рдорд╣рд╕реВрд╕ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдХрд╣рдирд╛ рдПрдХ рдирд┐рд░рдВрддрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкреНрд░рдХрд╛рд░ рд╕реНрд╡рдпрдВ рдирд╣реАрдВ рдмрджрд▓рддрд╛ (рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдм рд╣реИ)

рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ "рд╕рд╣реА" рд╢рдмреНрджрд╛рд░реНрде рджреНрд╡рд╛рд░рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ

type Complex{T}
    const re::T
    const im::T
end
z = Complex(1,2)

рдпрд╣рд╛рдБ z.re рд╡реНрдпрд╡рд╣рд╛рд░ рддрдм рд╣реА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╣рдо const z.re = 1 рдХреБрдЫ рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдЕрд░реНрдердкреВрд░реНрдг рднреНрд░рдо рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреМрди рд╕рд╛ рдмрдВрдзрди const ред

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

<strong i="19">@const</strong> type Complex{T}
   re::T
   im::T
end

рд╡рд░реНрддрдорд╛рди рддрд░реАрдХрд╛ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рдореИрдХреНрд░реЛ рдПрдПрд╕рдЯреА рдореЗрдВ type рд╕реЗ immutable рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдпрджрд┐ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд╕реНрдерд┐рд░ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореИрдХреНрд░реЛ рдЕрднреА рднреА рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ const рдЬреЛрдбрд╝рдХрд░ рдПрдПрд╕рдЯреА рдХреЛ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рд╕рднреА рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдХреНрд╖реЗрддреНрд░ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рд╣реИ рдЬреЛ рдирд┐рд░рдВрддрд░ рд╣реИрдВред рдПрд╕реНрдереЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ, рдпрд╣ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рджреЛ рдЦреЛрдЬрд╢рдмреНрджреЛрдВ рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИ - рд╣рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ ( @generated , @inline , @proagate_inbounds , рдЖрджрд┐)ред

@const рдЖрд╕рд╛рдиреА рд╕реЗ @immutable рдпрд╛ рдХреБрдЫ рд╕рдорд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ( <strong i="31">@immutable</strong> type Val{T}; end рдареАрдХ рдкрдврд╝рддрд╛ рд╣реИ, IMO) рдФрд░ рдореИрдХреНрд░реЛ рд╡рд┐рдЪрд╛рд░ struct , composite рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╣реИ , рдФрд░ рдЗрд╕реА рддрд░рд╣ред

@ be5invis рд╣рд╛рдБ, рдпрд╣ рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП C # рдореЗрдВ struct , рдЬреЛ рдХрдИ рддрд░рд╣ рд╕реЗ immutable рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ: рдпрд╣ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрдкреА рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ arrays ( class | type рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ GC- рдкреНрд░рдмрдВрдзрд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд╣реАрдВ)ред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ _mutable_ рд╣реИ, рдФрд░ рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рдХрд┐рд╕реА рдПрдХ рдХреНрд╖реЗрддреНрд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореБрдЭреЗ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ immutable рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ 2 рдЧреБрдгреЛрдВ рдХрд╛ рдорд┐рд╢реНрд░рдг рд╣реИ:

  1. рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛ (рдЙрдЪрд┐рдд рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП)
  2. рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдкрд░ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛

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

@johnmyleswhite # рдЖрдкрдХрд╛ рдзрдиреНрдпрд╡рд╛рдж, рдлрд┐рд░ рднреА рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

@wgreenr рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдХрдИ рдмрд╛рд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, рдпрд╣ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИред

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

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ; рд▓реЗрдХрд┐рди C / C ++ 'рд╕рдВрд░рдЪрдирд╛' рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд▓реЗрдЖрдЙрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдХреБрдЫ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░, рдмреЗрд╣рддрд░ рдореЗрдореЛрд░реА рд▓реЗрдЖрдЙрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдХреНрд╕рд░ рд╕рдВрд░рдЪрдирд╛ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рд╕рд╛рд░реНрдердХ рд╣реИред рдпрджрд┐ рдЖрдк рд╡рд╛рдХреНрдп-рд░рдЪрдирд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдХрд┐рд╕реА 'рдореИрдХреЗрдирд┐рдЬреНрдо' (рдСрд░реНрдбрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ -> рд╕реА рдЗрдВрдЯрд░реЛрдк) рдФрд░ 'рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп (рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ) рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рд╣реЛрдирд╛ рд╕рд╛рд░реНрдердХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

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

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

рдЕрднреА рддрдХ рдПрдХ рдФрд░ рд╕реБрдЭрд╛рд╡ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореБрдЭреЗ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ:

  • рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВ struct рдХреЗ рдмрдЬрд╛рдп immutable ред

  • struct! рдмрдЬрд╛рдп type ред рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рддреЗ рд╕рдордп, рдЗрд╕реЗ "рдореНрдпреВрдЯреЗрдмрд▓ рд╕реНрдЯреНрд░рдХреНрдЪрд░" рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

    • (рд╢рд╛рдпрдж) рдПрдХ рдХреЗ рдЕрдВрджрд░ рд╕реЗ рдХреБрдЫ рдлрд╝реАрд▓реНрдб рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВ struct! рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ const ред

рдХреБрдЫ рдФрдЪрд┐рддреНрдп рдФрд░ рд╡рд┐рдЪрд╛рд░:

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

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

3) рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рдЧрднрдЧ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдХреБрд╢рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╢рд╛рдпрдж рдПрдХ рд╢рд░реНрдд рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╕рдВрдХрд▓рдХ рдХреЛ рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдмрдбрд╝реЗ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдорд╛рд░реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрджреНрдпрддрди : рдореИрдВ record рдмрдЬрд╛рдп struct , рд▓реЗрдХрд┐рди record! рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХреА рддрд░рд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╣реИред рдХреБрдЫ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ: newtype , typedef (рдЬреЛ рдХрд┐ 10 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП C рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реНрд╕ рдХреЛ рднреНрд░рдорд┐рдд рдХрд░реЗрдЧрд╛), composite , рдпрд╛ concrete рдХрд┐рд╕реА рдХреЗ рдКрдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реБрдЭрд╛рдП рдЧрдП ред

рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ v0.6 рдлреАрдЪрд░ рдлреНрд░реАрдЬ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕ рдЬрдЧрд╣ рдореЗрдВ рдХреБрдЫ рд╣реЛрдЧрд╛?

рд╢рд╛рдпрдж рдирд╣реАрдВ, рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдХреЛрдИ рдирд┐рд░реНрдгрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ) рдФрд░ рд╣рдо рдлреНрд░реАрдЬ рд╕реЗ рд╕рд┐рд░реНрдл 10 рджрд┐рди рджреВрд░ рд╣реИрдВред

рдореИрдВрдиреЗ рдзреНрдпрд╛рди рд╕реЗ рдЗрд╕рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдпрд╣ тАЛтАЛрд╣реИ рдХрд┐ рдпрджрд┐ / рдЬрдм рдпрд╣ рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реА рдмрд╛рд░ рдЕрдкрдорд╛рдирдЬрдирдХ рдлрд╝рд╛рдЗрд▓ / рд▓рд╛рдЗрди рдирдВрдмрд░ рдХреА рдЕрдЪреНрдЫреА рд░рд┐рдкреЛрд░реНрдЯрд┐рдВрдЧ рд╣реИред рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдореЙрдбреНрдпреВрд▓; 0.5 рдореЗрдВ рдпрд╣ рдЕрднреА рднреА рдХрднреА-рдХрднреА рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдкреИрдХреЗрдЬ рдореЗрдВ @deprecate d _binding ред

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

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

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

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

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

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

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