рдбреА 2 рднрд╛рд╖рд╛ рдФрд░ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ: рд╡рд╛рдЗрдбрд░ рдФрд░ рд╡реАрдбрд░

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

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

рд▓рдХреНрд╖реНрдп рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рдХрдо рд╢рдмреНрджреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рджреГрд╢реНрдп рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред

рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рдЙрдкрдХрд░рдг


рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реИ

рд╕рдВрдХрд▓рди рд╕рдордп рдкрд░ рдмреВрд▓рд┐рдпрди рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдЙрдкрдХрд░рдг рд╣реИред рдЗрд╕рдХрд╛ рдирд╛рдо, рд╢рд╛рдпрдж, рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд╣реАрдВ рдЪреБрдирд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рднреНрд░рд╛рдордХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рддреБрд▓рдирд╛ рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
void main() { //     assert( !is(garbage[id]) ); assert( !is(x) ); alias int x; assert( is(x) ); //     assert( is(x : long) ); assert( !is( x : string ) ); //     assert( is( x == int) ); assert( !is( x == long) ); //    + pattern matching + alias declaration alias long[char[]] AA; static if( is( AA T : T[U], U : const char[]) ) alias T key; else alias void key; assert( is(key == long) ); } 

рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдг рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ - рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмрд╛рд░ рдЬреЛ рдЖрдк рджреЗрдЦрддреЗ рд╣реИрдВ рд╡рд╣ рд╣реИ (рдЯрд╛рдЗрдкреЛрдлрд╝ (...)) рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВред рдЯрд╛рдЗрдкреЛрдл рдХреА рдмрд╛рдд:

рдЯрд╛рдЗрдкреЛрдлрд╝ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐

рдЯрд╛рдЗрдкреЛрдлрд╝ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ - рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ, рдпрджрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╢рдмреНрджрд╛рд░реНрдерд╡рд╛рджреА рд░реВрдк рд╕реЗ рд╕рд╣реА рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдкреНрд░рдХрд╛рд░ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдПрдХ рд╕рдВрдХрд▓рди-рд╕рдордп рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ, рдереЛрдбрд╝рд╛ рдЕрд╕реНрдкрд╖реНрдЯ рдкреНрд░рднрд╛рд╡ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ - рдЯрд╛рдЗрдкреЛрдлрд╝ рдХреЗ рдЕрдВрджрд░ рдХреА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ рдкреНрд░рдХрд╛рд░ рдХреА рд╡реИрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рд╣реЛрддреА рд╣реИ, рдФрд░ рд╕рднреА рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджрдмрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдПрдХ рдордирдорд╛рдирд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рд╢рдмреНрджрд╛рд░реНрде рд╢реБрджреНрдзрддрд╛ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рд╕реНрдерд┐рд░ рдореБрд╣рд╛рд╡рд░рд╛ D2 рдирд┐рдХрд▓рддрд╛ рд╣реИред рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХреА рдХрдореА рдереА, рдЬреЛ C ++ 11 рдорд╛рдирдХ рдореЗрдВ рдирд╣реАрдВ рдереАред
 int func(); void main() { //  ,     alias typeof(func()) ret_type; assert( is( ret_type == int ) ); double func_prim() { //  ,       assert( is( typeof(return) == double ) ); return 0; } //    is   constraint "      <" void template_func(T)( T t ) if ( is(typeof( T.init < T.init )) ) { } template_func(20); // struct S {} // template_func(S.init); // error } 

рд▓рдХреНрд╖рдг / std.traits

рдКрдкрд░ рдХрд╣рд╛ рдЧрдпрд╛ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдЪреНрдЫрд╛, рд╕реБрдВрджрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рд┐рдЦрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рдЯреВрд▓рдХрд┐рдЯ рд╣реЛрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреНрдпрд╛ рд╣реИред рдФрд░ рдпрд╣ рджреЛ рдкреНрд░рддрд┐рдпреЛрдВ рдореЗрдВ рд╣реИ:
рд▓рдХреНрд╖рдг - рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрддреНрдорд╕рдВрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рдХ рдХреЛ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдПрдХ рд╕реЗрдЯред рдпрд╣рд╛рдБ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ:
 abstract class C { } class B { int a; } void main() { assert( __traits(isAbstractClass, C ) ); assert(! __traits(isAbstractClass, B ) ); assert(! __traits(isAbstractClass, int ) ); assert( __traits(hasMember, B, "a") ); assert( !__traits(hasMember, C, "a") ); // offtopic:      [ ] - allMembers   ,         auto a = [ __traits(allMembers, B) ]; assert( a == ["a", "toString", "toHash", "opCmp", "opEquals", "Monitor", "factory"] ); } 

std.traits - рд╕рдорд╛рди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЙрдбреНрдпреВрд▓, рдЬреЛ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдП рдЧрдП рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдХреБрдЫ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛рд░реНрдп рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, mangledName:
 import std.traits; import std.stdio; void func1(); extern ( C ) void func2(); void main() { // _D9stdtraits5func1FZv writeln( mangledName!(func1) ); // func2 writeln( mangledName!(func2) ); } 


рдЯрд╛рдЗрдк рдХрд░реЗрдВ

D2 рдорд╛рди рдФрд░ рдкреНрд░рдХрд╛рд░ рджреЛрдиреЛрдВ рдХреЗ tuples рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдмрд╛рдж рдореЗрдВ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдореИрдВ рдЯрдЯреЛрд▓рдиреЗ рдХрд╛ рдЙрдкрдХрд░рдг рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЯреБрдкрд▓реНрд╕ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╕рдВрдХрд▓рдХ рд╕реЗ рд╡рд┐рд╢реЗрд╖ рд╕рдорд░реНрдерди рд╣реИ, рдЖрдк рдЖрдЧреЗ рд╕рдВрдХрд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА std.traits рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдкреНрд░рд╛рдкреНрдд tuples рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
 import std.typetuple; import std.traits; import std.stdio; //     void func1( int, double, string ) { } //      " " alias TypeTuple!( int, double, string ) tp_same; // ,     ,   func1! void func2( tp_same tp ) { assert( is( typeof(tp[0]) == int ) ); assert( is( typeof(tp[1]) == double ) ); assert( is( typeof(tp[2]) == string ) ); } //    ,     ? alias ParameterTypeTuple!(func1) tp_func1_copy; // ...      . void func3( tp_func1_copy tp ) { foreach( i; tp) { writeln(typeid( typeof(i) ), " ", i); } // : // int 2 // double 2 // immutable(char)[] 2 } void main() { //        func1( 2, 2.0, "2"); func2( 2, 2.0, "2"); func3( 2, 2.0, "2"); // ! assert( is( typeof(func1) == typeof(func2) ) ); assert( is( typeof(func2) == typeof(func3) ) ); } 

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

рд╕реАрдЯреАрдИрдИ рдЕрдирд▓реЗрдбреЗрдб


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

рд╕рдЦреНрддреА рд╕реЗ рдмреЛрд▓ рд░рд╣рд╛ рд╣реВрдБ, рдмрд╕ред рд▓реВрдкреНрд╕, рдбрд╛рдпрдиреЗрдорд┐рдХ рдореЗрдореЛрд░реА рдПрд▓реЛрдХреЗрд╢рди, рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд╕рд╣рдпреЛрдЧреА рд╕рд░рдгрд┐рдпрд╛рдВ - рдпрд╣ рд╕рдм рд╕рдВрдХрд▓рди рдХреЗ рджреМрд░рд╛рди рдЕрдиреБрдордд рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреВрд░реНрдгрд╛рдВрдХ рдХреА рдкреВрд░реНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реАрдорд╛ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЧрдореВрд▓ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХреА рдЧрдгрдирд╛ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 import std.math; enum PrecomputedSqrtIndex { Min = 1, Max = 10 } // pure, nothrow  in , ,  ,         :) pure nothrow double[int] precompute_sqrt_lookup( in int from, in int to ) { double[int] result; foreach( i; from..to+1 ) result[i] = sqrt(i); return result; } enum sqrt_lookup = precompute_sqrt_lookup( PrecomputedSqrtIndex.Min, PrecomputedSqrtIndex.Max ); void main() { } 

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

рд▓реЗрдХрд┐рди рд░рд┐рдпрд▓ рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ CTFE рдХрд╛ рдХреНрдпрд╛? рдореИрдВ рдЖрдкрдХреЛ рдорд┐рдХреНрд╕рд┐рди рд╕реЗ рдорд┐рд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЙрдирдХреЗ рдкрд╛рд╕ рд▓реМрдЯреВрдВрдЧрд╛ред

Mixin


рдЯреЗрдореНрдкрд▓реЗрдЯ рдорд┐рд╢реНрд░рдг

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

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

рдпрд╣рд╛рдБ рдХреЛрдб рдХрд╛ рдПрдХ рд▓рдВрдмрд╛ рдЯреБрдХрдбрд╝рд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреЗ рд╕рдорд╛рди рд╣реИ:
 import std.range : isForwardRange; import std.stdio : writeln; import std.typecons : Tuple; // "" mixin,      mixin template AddForwardRangeMethods( alias data_container, alias order_container ) // ,      data_container if ( is(typeof( data_container.length ) : int ) && // ...  order_container     data_container is(typeof( data_container[ order_container[0] ] )) //    - ,     - :) ) { // ..             ,  //         . private struct Result { //       private int last_index; //    -   ,    //     typeof(data_container) ref_data; typeof(order_container) ref_order; alias typeof(order_container[0]) Key_t; static if ( is( typeof(data_container) T : T[U], U : Key_t ) ) { alias T Value_t; } else static assert(0, "Wrong data_container / order_container data_container types" ); this(typeof(data_container) data, typeof(order_container) order) { last_index = 0; ref_data = data; ref_order = order; } //  ,  forward range bool empty() { return last_index >= ref_data.length; } Tuple!(Key_t, Value_t) popFront() { //    scope   , ,  //        scope (exit) last_index++; return front(); } Tuple!(Key_t, Value_t) front() { return typeof(return)( ref_order[last_index], ref_data[ref_order[last_index]] ); } Result save() { return Result( ref_data, ref_order ); } } public Result fwdRange() { return Result( data_container, order_container ); } } //  ,  mixin class A { private int[int] a; private int[] order; this() { a = [ 2 : 4, 4 : 16, 3 : 9 ]; order = [ 2, 4, 3 ]; } //   ! mixin AddForwardRangeMethods!(a, order); } void main() { //    -    forward range,  duck typing assert(isForwardRange!(A.Result)); auto a = new A(); auto r = a.fwdRange; foreach( i; r ) writeln( i ); // Tuple!(int,int)(2, 4) // Tuple!(int,int)(4, 16) // Tuple!(int,int)(3, 9) } 


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

рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд┐рд╢реНрд░рдг

рдФрд░ рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ D2 рдореЗрдЯрд╛рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рд╕рдмрд╕реЗ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рдЕрд╕реНрдкрд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдорд┐рд▓рд╛ред рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдкрд░, рдЖрдк рдЯрд╛рдЗрдк рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЦреЛ рджреЗрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдкрдХреЛ рд╕реА рдореИрдХреНрд░реЛрдЬрд╝ рдХреЗ рдирд░рдХ рдХреЗ рдХрд░реАрдм рдПрдХ рдХрджрдо рдорд┐рд▓рддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдЖрдкрдХреА рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рд▓рдЧрднрдЧ рдЕрд╕реАрдо рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред
рд╕реНрдЯреНрд░рд┐рдВрдЧ рдорд┐рдХреНрд╕рд┐рдВрдЧ рдХреБрдЫ рдорд╛рдпрдиреЛрдВ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдирд┐рдХрд╛рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЗрд╕рдХрд╛ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:
 mixin("some string here") 

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

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

рдПрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдЧ рдЖрдП рд╣реБрдП рд▓реЗрдЦ рдХреЛ рдЕрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдбреИрдирд┐рдпрд▓ рдХреА рдПрдХ рдордЬреЗрджрд╛рд░ рдЯреНрд░рд┐рдХ рдХрд╛ рд▓рд┐рдВрдХ рдкреНрд░рджрд╛рди рдХрд░реВрдВрдЧрд╛: www.prowiki.org/wiki4d/wiki.cgi?Danielneep/shfmt
рдпрджрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреИрдирд┐рдпрд▓ PHP рдХреА рд╢реИрд▓реА рдореЗрдВ рд╕рдВрднрд╡ рд╣реЛ рддреЛ:
 int a = 3; writeln("a = $a"); 

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

рдПрдХ рдЙрдкрд╕рдВрд╣рд╛рд░ рдХреЗ рдмрдЬрд╛рдп


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

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

рдЯрд╛рдЗрдкреЛрд╕ рдФрд░ рд╢реИрд▓реАрдЧрдд рдЧрд▓рддрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреГрдкрдпрд╛ рдирд┐рдЬреА рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВред

рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг dmd рд╕рдВрд╕реНрдХрд░рдг 2.057 рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

Source: https://habr.com/ru/post/In135670/


All Articles