Rust: рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдбрд┐рдмрдЧ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЬреЛрдбрд╝реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 19 рдЬрдире░ 2012  ┬╖  28рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: rust-lang/rust

рдЕрджреНрдпрддрди рд╡рд┐рд╡рд░рдг

рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╕реНрддреБрдПрдВ ( ~T рдФрд░ @T рдЬрд╣рд╛рдВ T рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ) рдРрд╕реА рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ рдЬреЛ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЫрд┐рдкрд╛рддреА рд╣реИрдВ рдФрд░ рдПрдХ рдЖрднрд╛рд╕реА рд╡рд┐рдзрд┐ рдкреНрд░реЗрд╖рдг рддрд╛рд▓рд┐рдХрд╛ (рдпрд╛рдиреА vtable) рд▓реЗ рдЬрд╛рддреА рд╣реИрдВред

рддреЛ, рджреЛ рдмрд╛рддреЗрдВ:

  1. рдбрд┐рдмрдЧрд░реНрд╕ рдЕрдореВрд░реНрдд рдмрд╛рдзрд╛ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдФрд░ рдЫрд┐рдкреЗ рд╣реБрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред
  2. рд╡реЗ vtable рджреЗрдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рднреА рд╕рдВрднрд╛рд╡рдирд╛ рд░рдЦрддреЗ рд╣реИрдВред

    • рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЬреАрдбреАрдмреА рдХреЗ рд▓рд┐рдП рдбреАрдмрдЧ рдкреНрд░рд╛рд░реВрдк рдХрд┐рддрдирд╛ рд▓рдЪреАрд▓рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЬреАрдбреАрдмреА рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рд╕реА ++ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╡реАрдЯреЗрдмрд▓ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ ( info vtbl рдпрд╛ рд╢рд╛рдпрдж info vtable )ред рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдЕрдкрдиреА рдбреАрдмрдЧ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдорд╛рд▓рд┐рд╢ рдХрд░ рд╕рдХреЗрдВ рддрд╛рдХрд┐ рдЬреАрдбреАрдмреА рд╣рдорд╛рд░реЗ vtables рдХреЛ рднреА рдЙрд╕реА рддрд░рд╣ рдкреНрд░рд┐рдВрдЯ рдХрд░ рд╕рдХреЗред

рдореВрд▓ рд╡рд┐рд╡рд░рдг

рд╡рд╣рд╛рдВ рдХреЛрдИ рдирд╣реАрдВ рд╣реИред

A-debuginfo C-feature-request P-low T-compiler

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

рдЖрдЬ рдкрд╣рд▓реА рд╕рдлрд▓рддрд╛:

(gdb) p tu
$1 = traitobjtest::&T {pointer: 0x7fffffffe047 "\027\070\340\377\377\377\177\000", vtable: 0x5555555c34e8 <vtable> "\360\253UUUU\000"}
(gdb) p *tu
$2 = 23

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

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

@jdm рдХреНрдпрд╛ рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ @Trait рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рд╣реИ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рд╛рдБ, рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ рд╣рдо рдбрд┐рдмрдЧрд░ рдХреЗ рд▓рд┐рдП vtable рдХрд╛ рдкрд░реНрджрд╛рдлрд╛рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ?) рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдореИрдВ рдмрдЧ рд╢реАрд░реНрд╖рдХ рдФрд░ рд╡рд┐рд╡рд░рдг рдХреЛ рд╕рд╛рдлрд╝ рдХрд░ рджреВрдВрдЧрд╛ред

рд╣рд╛рдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╕реНрддреБрдУрдВ (~ рдФрд░ @ рдХрд┐рд╕реНрдо рдХреЗ) рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕реНрдХреЛрдк рдХрд░рдирд╛ рдареАрдХ рд╣реЛрдЧрд╛ред

middle/trans/debuginfo.rs : cx.sess.span_note(span, "debuginfo for trait NYI");

рдпрд╛рдиреА рдпрд╣ рдЕрднреА рднреА рдорд╛рдиреНрдп рд╣реИ, рдареАрдХ рд╕реЗ рдЯреИрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдореАрд▓ рдХрд╛ рдкрддреНрдерд░ рд╣реИ, 2013-06-19ред

рдЯреНрд░рд╛рдЗрдПрдЬ рдХрд╛ рджреМрд░рд╛; @michaelwoerister рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗрддреЗ рд╣реБрдПред

рдЯреНрд░рд╛рдЗрдПрдЬ рдХрд╛ рджреМрд░рд╛; @michaelwoerister рдХрд╛ рд╣рд╡рд╛рд▓рд╛ рджреЗрддреЗ рд╣реБрдПред

рдпрд╣ рдЕрднреА рднреА NYI рд╣реИ рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╣реАрдиреЗ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдирд┐рдкрдЯрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:

рдкреАрдЖрд░ #9168 рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдмреБрдирд┐рдпрд╛рджреА рд╕рдорд░реНрдерди рд╣реИред рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╕рд╣реА рдЖрдХрд╛рд░ (рджреЛ рдкреЙрдЗрдВрдЯрд░реНрд╕) рдФрд░ рд╕рд╣реА рдирд╛рдо ({sigil}{mutability}{trait name}) рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕рд╣реА рдиреЗрдорд╕реНрдкреЗрд╕ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ "рд╡рд╕рд╛ рд╕реВрдЪрдХ" рдХреЗ рдЗрдВрдЯреАрд░рд┐рдпрд░ рдХрд╛ рдЕрднреА рдФрд░ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рдЧрд╛рдпрдм рд╣реИред рдореБрдЭреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

1.0 рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЙрдЪреНрдЪ

@michaelwoerister : рд╡реИрд╕реЗ, рдирдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд▓реЗрдЖрдЙрдЯ [drop_glue, method, method2, method3, ...] ред рдореБрдЭреЗ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ рдЬрдм рд╕реБрдкрд░рдЯреНрд░реЗрдЯ рд╡рд┐рдзрд┐рдпрд╛рдВ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╕реНрддреБрдУрдВ рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред

рдпрд╣ рдбреАрдПрд╕рдЯреА рдХреЗ рд╕рд╛рде рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ Fat<Trait> рдЬреИрд╕реА рд╡рд╕реНрддреБрдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдЬрд╣рд╛рдВ Fat рдПрдХ рдбреАрдПрд╕рдЯреА рд╕рдВрд░рдЪрдирд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрдм рдХреЛрдб рдереЛрдбрд╝рд╛ рдФрд░ рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдареАрдХ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╕реНрдЯрдм рд╣реИред рдореИрдВрдиреЗ рд╡рд╣рд╛рдВ рдПрдХ FIXME рдЫреЛрдбрд╝рд╛ред

рдЯреНрд░рд╛рдЗрдПрдЬ рдмрдВрдк: рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╣реИ рдХрд┐ рдЖрдЬ рдЗрд╕рдХреА рдХреНрдпрд╛ рд╕реНрдерд┐рддрд┐ рд╣реИред

рдЕрднреА рднреА рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ

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

(реи) рд╡рд┐рд╢реЗрд╖рддрд╛ рдкреЙрдЗрдВрдЯрд░реНрд╕ ( &Trait et al) рдХреЛ (*(), *OpaqueVTable<Trait>) рдкреНрд░рдХрд╛рд░ рдХреЗ рдЯреБрдкрд▓реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд░реЗрдВред

(рей) рдкрд╛рдпрдерди рдореЗрдВ рдХрд╕реНрдЯрдо GDB/LLDB рдХрдорд╛рдВрдб рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдЬреЛ рдПрдХ рдлреИрдЯ рдкреЙрдЗрдВрдЯрд░ рджрд┐рдП рдЬрд╛рдиреЗ рдкрд░, рдкреЙрдЗрдВрдЯрд░ рд╡реИрд▓реНрдпреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ vtable рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рдЯрд╛рдЗрдк рдХрд░реЗрдВред

рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ рд▓реЗрдХрд┐рди рдЙрдкрд▓рдмреНрдз рдореМрдЬреВрджрд╛ рд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред vtable рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреНрд░рддреАрдХ рдирд╛рдореЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░рдирдЯрд╛рдЗрдо рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╕реНрддреБ рдХреЛ рднреА рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдЯреНрд░рд╛рдЗрдПрдЬ: рдЕрднреА рднреА рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред cc @Manishearth @tromey P-low

рдпрд╣ рдЕрдм P-low рдФрд░ P-medium рд╣реИ

рдкреА-рдорд╛рдзреНрдпрдо рдХреЛ рд╣рдЯрд╛рдирд╛

рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕ рдкрд░ рдереЛрдбрд╝рд╛ рдЧреМрд░ рдХрд┐рдпрд╛ред рдореБрдЭреЗ рдЬреЛ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ рд╡рд╣ рд╣реИ:

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

рдлрд┐рд░ рдПрдХ рдбрд┐рдмрдЧрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИ: рдпрджрд┐ рдХрд┐рд╕реА рдорд╛рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдПрдХ vtable рд╣реИ, рддреЛ рдирд┐рдореНрди рд╕реЗ vtable рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, vtable рдкреНрд░рдХрд╛рд░ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП DWARF рдореЗрдВ vtable рдХрд╛ рдкрддрд╛ рджреЗрдЦреЗрдВ, рдФрд░ рдлрд┐рд░ рдареЛрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдкреЗрд▓реЛрдб рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдбреАрдХреЛрдб рдХрд░реЗрдВред

рдореИрдВ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ LLVM рдкреИрдЪ рд╣реИ рдЬреЛ rustc рдХреЛ рдПрдХ рдЫреЛрдЯрд╛ DWARF рдПрдХреНрд╕рдЯреЗрдВрд╢рди ( DW_AT_containing_type ) рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ; vtable (рдкрддрд╛ рдФрд░ рдпреБрдХреНрдд рдкреНрд░рдХрд╛рд░, рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдирд╣реАрдВ) рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ rustc рдкреИрдЪ, рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ gdb рдкреИрдЪ рдЗрд╕реЗ рдкрдврд╝рдиреЗ рдФрд░ print рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдЖрдЬ рдкрд╣рд▓реА рд╕рдлрд▓рддрд╛:

(gdb) p tu
$1 = traitobjtest::&T {pointer: 0x7fffffffe047 "\027\070\340\377\377\377\177\000", vtable: 0x5555555c34e8 <vtable> "\360\253UUUU\000"}
(gdb) p *tu
$2 = 23

рдЙрддреНрддреЗрдЬрд┐рдд рдХрд░рдиреЗрд╡рд╛рд▓рд╛!

LLVM рдкреИрдЪ рдпрд╣рд╛рдБ рд╣реИ: http://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-20171016/495458.html

рдлреИрдмреНрд░рд┐рдХреЗрдЯрд░ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛; рд╡рд╣рд╛рдВ рднреА рдЕрдиреБрд╕рд░рдг рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: https://reviews.llvm.org/D39503

рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП gdb рдкреИрдЪ рдпрд╣рд╛рдБ рд╣реИ: https://sourceware.org/ml/gdb-patches/2017-11/msg00289.html

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

рдЬреАрдбреАрдмреА рдкреИрдЪ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг 2 рдпрд╣рд╛рдВ рд╣реИ: https://sourceware.org/ml/gdb-patches/2017-11/msg00369.html

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

@tromey "vtable рдХрд╛рд░реНрдп" рдХреЗ рд▓рд┐рдП gdb рдкрд░рд┐рд╡рд░реНрддрди рдпрд╛ рдХреЗрд╡рд▓ rustc рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

@tromey "vtable рдХрд╛рд░реНрдп" рдХреЗ рд▓рд┐рдП gdb рдкрд░рд┐рд╡рд░реНрддрди рдпрд╛ рдХреЗрд╡рд▓ rustc рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?

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

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

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

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

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

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

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

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