ΠΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ c: ΠΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² C++ / Π₯Π°Π±Ρ
ΡΠ΅ΡΠ΅Π· ΡΡΡΠ°Π΄Π°Π½ΠΈΡ ΠΊ ΠΏΡΠΎΡΠ²Π΅ΡΠ»Π΅Π½ΠΈΡ / Π₯Π°Π±Ρ
#define variant_TL1( T1 ) detail::typelist< T1, detail::nulltype >
#define variant_TL2( T1, T2) detail::typelist< T1, variant_TL1( T2) >
#define variant_TL3( T1, T2, T3) detail::typelist< T1, variant_TL2( T2, T3) >
#define variant_TL4( T1, T2, T3, T4) detail::typelist< T1, variant_TL3( T2, T3, T4) >
#define variant_TL5( T1, T2, T3, T4, T5) detail::typelist< T1, variant_TL4( T2, T3, T4, T5) >
#define variant_TL6( T1, T2, T3, T4, T5, T6) detail::typelist< T1, variant_TL5( T2, T3, T4, T5, T6) >
#define variant_TL7( T1, T2, T3, T4, T5, T6, T7) detail::typelist< T1, variant_TL6( T2, T3, T4, T5, T6, T7) >
#define variant_TL8( T1, T2, T3, T4, T5, T6, T7, T8) detail::typelist< T1, variant_TL7( T2, T3, T4, T5, T6, T7, T8) >
#define variant_TL9( T1, T2, T3, T4, T5, T6, T7, T8, T9) detail::typelist< T1, variant_TL8( T2, T3, T4, T5, T6, T7, T8, T9) >
#define variant_TL10( T1, T2, T3, T4, T5, T6, T7, T8, T9, T10) detail::typelist< T1, variant_TL9( T2, T3, T4, T5, T6, T7, T8, T9, T10) >
#define variant_TL11( T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) detail::typelist< T1, variant_TL10( T2, T3, T4, T5, T6, T7, T8, T9, T10, T11) >
#define variant_TL12( T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) detail::typelist< T1, variant_TL11( T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12) >
#define variant_TL13( T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) detail::typelist< T1, variant_TL12( T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13) >
#define variant_TL14( T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) detail::typelist< T1, variant_TL13( T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14) >
#define variant_TL15( T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) detail::typelist< T1, variant_TL14( T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15) >
#define variant_TL16( T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) detail::typelist< T1, variant_TL15( T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16) >
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅?
ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌ, ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ Π·Π½Π°Π½ΠΈΡΠΌΠΈ ΠΎ ΡΠ΅Π±Π΅ ΠΈΠ»ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ±ΠΎΠΉ.
Π² ΡΠ°ΠΊΠΈΡ ΡΠ·ΡΠΊΠ°Ρ , ΠΊΠ°ΠΊ C#, ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΡΠΌΠΎΠΉ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΡΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ΅Π±Π΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎΠ·Π²ΡΠ°Ρ ΡΠΏΠΈΡΠΊΠ° Π²ΡΠ΅Ρ ΡΠ²ΠΎΠΉΡΡΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
Π² ΡΠ°ΠΊΠΈΡ ΡΠ·ΡΠΊΠ°Ρ , ΠΊΠ°ΠΊ ActionScript, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΠ΅Π½ΠΈΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ eval(«x» + i).DoSomething () ΠΏΠΎΠ²Π»ΠΈΡΠ΅Ρ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ x1, ΠΊΠΎΠ³Π΄Π° i ΡΠ°Π²Π½ΠΎ 1 ΠΈ x2, ΠΊΠΎΠ³Π΄Π° i ΡΠ°Π²Π½ΠΎ 2.
Π½Π°ΠΊΠΎΠ½Π΅Ρ, Π΅ΡΠ΅ ΠΎΠ΄Π½Π° ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½Π°Ρ ΡΠΎΡΠΌΠ° ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ — ΡΡΠΎ ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΌΠ΅Π½ΡΡΡΡΡ Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. LISP Ρ ΠΎΡΠΎΡΠΎ ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΡΡΠΈΠΌ ΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΠΎΠ» ΠΡΡΠΌ ΠΎΡΡΡΠ°ΠΈΠ²Π°Π» ΠΎΠΊΠΎΠ»ΠΎ Π΄Π΅ΡΡΡΠΈ Π»Π΅Ρ Π½Π°Π·Π°Π΄. ΠΠ½Π΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π΅Π³ΠΎ ΡΡΡΠ΅. ΠΠΎ ΠΈΠ΄Π΅Ρ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ Π΄ΡΡΠ³ΡΡ ΡΠ°ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΡΠΎΠ²Π΅Π½Ρ Π³ΠΈΠ±ΠΊΠΎΡΡΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ ΡΠ·ΡΠΊΠΈ ΡΠ΅Π³ΠΎΠ΄Π½Ρ.
ΡΠ°ΠΊΠΆΠ΅ ΡΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π² ΡΡΠ°ΡΡΠ΅ Π΄ΠΎΠ±ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΏΡΡΠΌΠΎΠΉ ΡΠ±ΠΎΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ ΡΠ΅Π±Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, Π±ΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ ΠΈ ΠΎΡΠ΅Π½Ρ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Ρ.
ΠΈΠ· ΡΡΡΠ΅ ΠΠΎΠ»Π° ΠΡΡΠΌΠ° «Π§ΡΠΎ Π‘Π΄Π΅Π»Π°Π»ΠΎ Lisp ΠΡΡΠ³ΠΈΠΌ»:
ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ·ΡΠΊΠΈ ΠΈΠΌΠ΅ΡΡ ΡΠΎ, ΡΡΠΎ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ
ΠΌΠ°ΠΊΡΠΎΡ. ΠΠΎ ΠΌΠ°ΠΊΡΠΎΡΡ Lisp ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½Ρ. Π
Ρ ΠΎΡΠΈΡΠ΅ Π²Π΅ΡΡΡΠ΅, Ρ ΠΎΡΠΈΡΠ΅ Π½Π΅Ρ, Π½ΠΎ ΠΎΠ½ΠΈ
ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΠΊΡΡΠ³Π»ΡΠΌΠΈ ΡΠΊΠΎΠ±ΠΊΠ°ΠΌΠΈ. ΠΡΠΎΡ
Π΄ΠΈΠ·Π°ΠΉΠ½Π΅ΡΡ Lisp Π½Π΅ Π·Π°Π±ΡΡΡ
ΠΊΡΡΠ³Π»ΡΠ΅ ΡΠΊΠΎΠ±ΠΊΠΈ Π² ΡΠ·ΡΠΊΠ΅ ΠΏΡΠΎΡΡΠΎ
ΠΎΡΠ»ΠΈΡΠ°ΡΡΠΈΠΉΡΡ. Π ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Blub,
ΠΠΎΠ΄ Lisp Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΡΡΠ°Π½Π½ΠΎ. ΠΠΎ ΡΡΠΈ
ΡΠΊΠΎΠ±ΠΊΠΈ ΡΠ°ΠΌ Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΡΠ°ΠΊ.
ΠΠ½ΠΈ ΡΠ²Π»ΡΡΡΡΡ Π²Π½Π΅ΡΠ½ΠΈΠΌ ΡΠ²ΠΈΠ΄Π΅ΡΠ΅Π»ΡΡΡΠ²ΠΎΠΌ
ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½Π°Ρ ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΠΈΡΠΏΠΎΠΌ
ΠΈ Π½Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ .ΠΊΠΎΠ΄ Lisp ΡΠ΄Π΅Π»Π°Π½ ΠΈΠ· Π΄Π°Π½Π½ΡΡ Lisp
ΠΎΠ±ΡΠ΅ΠΊΡΡ. Π Π½Π΅ Π² ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎΠΌ ΡΠΌΡΡΠ»Π΅
ΡΡΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ
ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΈ ΡΡΡΠΎΠΊΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ·
ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ , ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΡΠ΅ ΡΠ·ΡΠΊΠΎΠΌ.
ΠΠΎΠ΄ ΠΠΈΡΠΏΠ°, ΠΏΠΎΡΠ»Π΅ Π΅Π³ΠΎ ΡΠΈΡΠ°Π΅Ρ
Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ, ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΡΡΡΠΊΡΡΡ Π΄Π°Π½Π½ΡΡ
ΡΡΠΎ ΡΡ ΠΌΠΎΠΆΠ΅ΡΡ ΠΏΡΠΎΠΉΡΠΈ.ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΡΡΠ°Π²ΠΈΡΠ΅Π»ΠΈ,
Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π½Π΅ ΡΠ°ΠΊ ΡΠΆ ΠΌΠ½ΠΎΠ³ΠΎ.
ΡΡΠΎ ΠΠΈΡΠΏ ΠΈΠΌΠ΅Π΅Ρ ΡΡΡΠ°Π½Π½ΡΠΉ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ, ΡΡΠΎ
ΠΠΈΡΠΏΠ° Π½Π΅Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°. ΠΡ ΠΏΠΈΡΠ΅ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
Π² Π΄Π΅ΡΠ΅Π²ΡΡΡ ΡΠ°Π·Π±ΠΎΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ
Π²Π½ΡΡΡΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°, ΠΊΠΎΠ³Π΄Π° Π΄ΡΡΠ³ΠΎΠ΅
Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΡΡΡΡ ΡΠ·ΡΠΊΠΈ. ΠΠΎ ΡΡΠΈ ΡΠ°Π·Π±ΠΎΡ
Π΄Π΅ΡΠ΅Π²ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅
ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠΌΠΈ. Π Lisp, ΡΡΠΈ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΌΠ°ΠΊΡΠΎΡ. ΠΠ½ΠΈ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΈΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΈΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ? ΠΠΎΠ³Π΄Π°
ΡΡ Π±Ρ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ Π·Π°Ρ ΠΎΡΠ΅Π» ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ? ΠΠ΅
ΠΎΡΠ΅Π½Ρ ΡΠ°ΡΡΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ Π΄ΡΠΌΠ°Π΅ΡΠ΅ Π² Cobol. ΠΡΠ΅
Π²ΡΠ΅ΠΌΡ, Π΅ΡΠ»ΠΈ Π΄ΡΠΌΠ°ΡΡ ΡΠ΅ΠΏΠ΅Π»ΡΠ²ΠΎ. ΠΠ½
Π±ΡΠ»ΠΎ Π±Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ Π΅ΡΠ»ΠΈ Π±Ρ Ρ ΠΌΠΎΠ³
ΠΏΡΠΈΠ²Π΅Π΄ΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠΎΡΠ½ΠΎΠ³ΠΎ ΠΌΠ°ΠΊΡΠΎΡΠ°,
ΠΈ ΡΠΊΠ°ΠΆΠΈ ΡΠ°ΠΌ! ΠΊΠ°ΠΊ Π½Π°ΡΡΠ΅Ρ ΡΡΠΎΠ³ΠΎ? ΠΠΎ Π΅ΡΠ»ΠΈ
Π― ΡΠ΄Π΅Π»Π°Π», ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΊΠ°ΠΊ
ΡΠ°ΡΠ°Π±Π°ΡΡΠΈΠ½Π° Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΠΊΡΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ
Π¨Π΅ΠΏΠ΅Π»ΡΠ²ΠΈΡΡ; Π·Π΄Π΅ΡΡ Π½Π΅Ρ ΠΌΠ΅ΡΡΠ° ΠΎΠ±ΡΡΡΠ½ΡΡΡ.
Π²ΡΠ΅, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π·Π½Π°ΡΡ, ΡΡΠΎΠ±Ρ
ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ Π·Π½Π°ΡΠΈΡ. Π Ansi
Common Lisp Ρ ΠΏΡΡΠ°Π»ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΡΡ Π²Π΅ΡΠΈ
ΡΠ°ΠΊ Π±ΡΡΡΡΠΎ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠ³, ΠΈ Π΄Π°ΠΆΠ΅ ΡΠ°ΠΊ.
Π― Π½Π΅ ΠΌΠ°ΠΊΡΠΎΡΡ, ΠΏΠΎΠΊΠ° ΡΡΡΠ°Π½ΠΈΡΠ° 160.Π½ΠΎ Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΠΌΠΎΠ³Ρ Π΄Π°ΡΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ΄Π°
Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ±Π΅Π΄ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ. ΠΡΠΎΡ
ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ° Viaweb Π±ΡΠ»
Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΎΠΊΠΎΠ»ΠΎ 20-25% ΠΌΠ°ΠΊΡΠΎΡΡ. ΠΠ°ΠΊΡΠΎΡΡ
ΡΡΡΠ΄Π½Π΅Π΅ ΠΏΠΈΡΠ°ΡΡ, ΡΠ΅ΠΌ ΠΎΠ±ΡΡΠ½ΡΠΉ Lisp
ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈ ΡΡΠΈΡΠ°Π΅ΡΡΡ, ΡΡΠΎ
ΠΏΠ»ΠΎΡ ΠΎΠΉ ΡΡΠΈΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡ , ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π½Π΅
Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ. Π’Π°ΠΊ ΡΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠ°ΠΊΡΠΎΡ Π² ΡΡΠΎΡ ΠΊΠΎΠ΄
Π΅ΡΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ. Π§ΡΠΎ?
ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ 20-25%
ΠΊΠΎΠ΄ Π² ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π΄Π΅Π»Π°Π΅Ρ
Π²Π΅ΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΡ Π»Π΅Π³ΠΊΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π² Π»ΡΠ±ΠΎΠΌ
Π΄ΡΡΠ³ΠΎΠΉ ΡΠ·ΡΠΊ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΠΊΠ΅ΠΏΡΠΈΡΠ΅ΡΠΊΠΈ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΡΠ΅Π²Π΅ΡΡ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΠΎ ΠΌΠΎΠ΅ΠΌ
ΠΏΡΠ΅ΡΠ΅Π½Π·ΠΈΠΈ Π½Π° ΡΠ°ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠΈΠ»Ρ
Π¨Π΅ΠΏΠ΅Π»ΡΠ²ΠΈΡ, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ Ρ Π½Π΅Π³ΠΎ Π»ΡΠ±ΠΎΠΏΡΡΡΡΠ²ΠΎ.
ΠΡ Π½Π΅ ΠΏΠΈΡΠ°Π»ΠΈ ΡΡΠΎΡ ΠΊΠΎΠ΄ Π΄Π»Ρ Π½Π°ΡΠΈΡ
ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΠ°Π·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅. ΠΡ Π±ΡΠ»ΠΈ ΠΊΡΠΎΡΠ΅ΡΠ½ΡΠΌ ΡΡΠ°ΡΡΠ°ΠΏΠΎΠΌ.,
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ΅ΠΌ ΡΠ°ΠΊ ΡΡΠ΅ΡΠ΄Π½ΠΎ, ΠΊΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠΎΠΆΠ΅ΠΌ.
ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π²ΠΎΠ·Π²Π΅Π΄Π΅Π½ΠΈΡ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡ Π±Π°ΡΡΠ΅ΡΠΎΠ²
ΠΌΠ΅ΠΆΠ΄Ρ Π½Π°ΠΌΠΈ ΠΈ Π½Π°ΡΠΈΠΌΠΈ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΡ.ΠΏΠΎΠ΄ΠΎΠ·ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΡΠ°ΡΡ
ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, Π±ΡΠ»Π° Π»ΠΈ ΠΊΠ°ΠΊΠ°Ρ-ΡΠΎ ΠΊΠΎΡΡΠ΅Π»ΡΡΠΈΡ?
Π·Π΄Π΅ΡΡ. ΠΠΎΠ»ΡΡΠΎΠΉ ΠΊΡΡΠΎΠΊ Π½Π°ΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°
Π΄Π΅Π»Π°ΡΡ Π²Π΅ΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ΅Π½Ρ ΡΡΡΠ΄Π½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ
Π½Π° Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ . Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΄Π΅Π»Π°Π»ΠΎ ΡΠΎ, ΡΡΠΎ Π½Π°ΡΠΈ ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΡ
ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠ³Π»ΠΎ ΡΡΠΎΠ³ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ. ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΡΠ°ΠΊ ΠΎΠ½ΠΎ ΠΈ Π±ΡΠ»ΠΎ.
ΠΊΠ°ΠΊΠ°Ρ-ΡΠΎ ΡΠ²ΡΠ·Ρ. Π― ΠΏΠΎΠΎΡΡΡΡ
Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΡΡΠΎΠΉ Π½ΠΈΡΠΈ. ΠΠΎΠ³ΡΡ
Π±ΠΎΠ»Π΅Π΅ ΡΡΠΎ ΡΡΠ°ΡΠΈΠΊ ΠΊΠΎΠ²ΡΠ»ΡΠ΅Ρ ΡΠ΅Π±Π΅
Π½Π° ΠΊΠΎΡΡΡΠ»ΡΡ , ΡΠ΅ΠΌ ΠΊΠ°ΠΆΠ΅ΡΡΡ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄.
ΠΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ β ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΡ
ΠΠ°ΡΠ΅ΡΠΈΠ°Π» ΠΈΠ· ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ β ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠΉ ΡΠ½ΡΠΈΠΊΠ»ΠΎΠΏΠ΅Π΄ΠΈΠΈ
ΠΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅Β β Π²ΠΈΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠ°ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ[1] (Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π½Π° ΡΡΠ°Π΄ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°), Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠ΅Π½ΡΡΡ ΡΠ΅Π±Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (ΡΠ°ΠΌΠΎΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΡΡΠΈΠΉΡΡ ΠΊΠΎΠ΄).[ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π½Π΅ ΡΠΊΠ°Π·Π°Π½ 3387 Π΄Π½Π΅ΠΉ] ΠΠ΅ΡΠ²ΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΈ ΠΌΠ΅Π½ΡΡΠΈΡ Π·Π°ΡΡΠ°ΡΠ°Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ ΡΡΠΈΠ»ΠΈΠΉ Π½Π° ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΡΠ΅ΠΌ Π΅ΡΠ»ΠΈ Π±Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΠΏΠΈΡΠ°Π» ΠΈΡ Π²ΡΡΡΠ½ΡΡ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ, Π²ΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ»ΡΡΡΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠΎΠ΄Π° (ΡΠ°Π·ΠΌΠ΅Ρ ΠΈ Π±ΡΡΡΡΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅).
ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠ΄Π°
ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π΅ ΠΏΠΈΡΠ΅ΡΡΡ Π²ΡΡΡΠ½ΡΡ, Π° ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ-Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΎΠΌ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΡΠΈΠΎΠ±ΡΠ΅ΡΠ°Π΅Ρ ΡΠΌΡΡΠ», Π΅ΡΠ»ΠΈ ΠΏΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π²ΡΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° (Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΡ, Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ Π²Π½Π΅ΡΠ½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΡΡΠ΅ΡΠ΅ΠΎΡΠΈΠΏΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΏΡ.). ΠΡΠΈ ΡΡΠΎΠΌ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° (ΠΈΠ»ΠΈ Π΄Π°Π½Π½ΡΡ ) ΡΠ΅ΡΡΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠΌΡΡΠ» ΠΈ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π»ΠΈΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΡΠ΅ΡΠΊΠΈΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠ°Π²ΠΈΠ». ΠΠΎΠ³Π΄Π° ΡΡΠ° ΡΠ°ΡΡΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΌΡΡΠ»Ρ Π·Π°Π΄Π°Π²Π°ΡΡ Π²ΡΡΡΠ½ΡΡ Π»ΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠ°ΡΡΡ, Π° ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. ΠΡΠΎ ΠΈ ΠΏΡΠΎΠ΄Π΅Π»ΡΠ²Π°Π΅Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ.
Π Π°Π·Π»ΠΈΡΠ°ΡΡΡΡ Π΄Π²Π° ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π²ΠΈΠ΄Π° ΠΊΠΎΠ΄ΠΎΠ³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ:
- Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ, Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π½Π° ΡΠ΅Π»Π΅Π²ΠΎΠΌ ΡΠ·ΡΠΊΠ΅.
- ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΡΠ·ΡΠΊ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ·ΡΠΊΠΎΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ°, ΡΠ°ΠΊ ΡΡΠΎ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Ρ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅.
ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΠΌ ΠΈ Π½Π°Π³Π»ΡΠ΄Π½ΡΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°Ρ ΡΠ²Π»ΡΡΡΡΡ GUI ΠΏΠΎΡΡΡΠΎΠΈΡΠ΅Π»ΠΈ, Π³Π΄Π΅ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π°ΡΠ΅Π»Π΅Π½Π° Π½Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅[en], ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ Π½Π΅ΡΠ²Π΅Π΄ΡΡΠΈΠΌ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠ°ΠΌ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΡΡΠ³ΠΎΠ½ΠΎΠΌΠΈΠΊΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΡΠ°ΡΡΠΈΠ΅ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ². Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π·Π°Π²Π΅Π΄ΠΎΠΌΠΎ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ, ΠΊΡΡΠΏΠ½ΠΎΠΉ ΠΈ ΡΡΡΠ΄ΠΎΡΠΌΠΊΠΎΠΉ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅, ΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅ΠΌΡΠΉ Π΅Ρ ΠΊΠΎΠ΄, ΠΈ Π΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΠΏΡΠ°Π²Π΄ΡΠ²Π°Π΅ΡΡΡ ΡΠ°ΡΡΠΎΡΠΎΠΉ Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ[ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π½Π΅ ΡΠΊΠ°Π·Π°Π½ 1010 Π΄Π½Π΅ΠΉ] (Π½ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ), ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΈΡΡΡΡΡ Π½Π° ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΡΠ·ΡΠΊΠ°Ρ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΆΠ΅ ΡΠ·ΡΠΊΠ°Ρ , ΠΈ ΠΏΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ Π² ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅. ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠΌ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π½ΠΎΠ²ΡΡ , Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ.
ΠΡΡΠ³ΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΡΠ²Π»ΡΡΡΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈ Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ², ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Lex, YACC, ANTLR, bison.
ΠΡΠΎΡΠΎΠΉ ΡΠ»ΡΡΠ°ΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π²ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠ·ΡΠΊΠ° ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΡΡΠ΅ΠΌΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ c ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ°ΠΊΡΠΎΡΡΠ΅Π΄ΡΡΠ² ΡΠ·ΡΠΊΠ° ΠΈΠ»ΠΈ ΡΠΈΡΡΡΠΌ Π²ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π°ΡΠ°Π±ΠΎΡΠΊΠΈ, Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½ΡΠ΅ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΌΠΎΠ³ΡΡ ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½ΠΎΠ²ΡΡ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ[2].
ΠΡΡΠ³ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ:
- Π Perl ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΏΠΎΠ½ΡΡΠΈΠ΅ Β«source filtersΒ» (Β«ΡΠΈΠ»ΡΡΡΠΎΠ² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°Β»)Β β ΠΌΠ΅ΡΠΎΠ΄Π° ΠΏΠ΅ΡΠ΅ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΌΠ΅Π½ΡΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΈ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΡ ΡΠ·ΡΠΊΠ°. ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ Lingua::Romana::Perligata, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ Perl Π½Π° Π»Π°ΡΡΠ½ΠΈ.[3]
- Π Π€ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Π² ΡΠ·ΡΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΠΈ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ. ΠΡΠΎ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ ΠΈ ΠΏΠΎΠ»Π½ΡΠΌ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΅Ρ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ .
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΈΠ»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡΡ ΡΠ΅Π±Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ. Π₯ΠΎΡΡ ΡΠ°ΠΊΠ°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π»Π° ΡΠΆΠ΅ Π΄Π°Π²Π½ΠΎ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΌΠ°ΡΠΈΠ½Π½ΡΡ ΠΊΠΎΠ΄ΠΎΠ² (ΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠ½ΡΡ Π²ΠΈΡΡΡΠΎΠ²), Ρ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ²ΡΠ·ΡΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Π² Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΡΠ·ΡΠΊΠΈ.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ:
- ΠΠΎΠΌΠΎΠΈΠΊΠΎΠ½Π½ΠΎΡΡΡΒ β ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΠΎ ΡΠ°ΠΌΠΎΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡΡ Π½Π° ΡΠΎΠΌ ΠΆΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅, ΡΡΠΎ ΠΈ ΡΠ°ΠΌ ΠΊΠΎΠ΄.
- ΠΠ½ΡΡΠΎΡΠΏΠ΅ΠΊΡΠΈΡΒ β ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ ΡΡΡΡΠΊΡΡΡ ΡΠ·ΡΠΊΠ° Π² Π²ΠΈΠ΄Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΡΠΈΠΏΠΎΠ² Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π½ΠΈΠΌ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ Π‘++ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠ° ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ²).
- ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ, ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ², ΡΡΠ΅ΠΊ Π²ΡΠ·ΠΎΠ²ΠΎΠ², ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌΠΎΠΌΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΈ ΠΏΡ.
- ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½
System.Reflection
ΠΈ ΡΠΈΠΏSystem.Type
Π² .NET; ΠΊΠ»Π°ΡΡΡClass, Method, Field
Π² Java; ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ ΡΠΈΠΏΠΎΠ² ΡΠ΅ΡΠ΅Π· Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ Π² Python; ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π² Π€ΠΎΡΡ ΠΏΠΎ Π΄ΠΎΡΡΡΠΏΡ ΠΊ ΡΠ΅ΡΡΡΡΠ°ΠΌ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ; ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ² ΠΏΠΎΡΡΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ECMAScript (Ρ ΠΎΠ³ΠΎΠ²ΠΎΡΠΊΠ°ΠΌΠΈ).
- ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½
- ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ.
- Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π²ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΡ
ΡΠ·ΡΠΊΠΎΠ² (Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ
eval
Π±ΡΠ»Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Lisp, Π° ΡΠΎΡΠ½Π΅Π΅, Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ Π½ΠΈΠΌ, ΡΡΠ°Π²ΡΠΈΠΌ Π΅Ρ ΠΏΠ΅ΡΠ²ΡΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ). - ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Tiny C ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Β«Π½Π° Π»Π΅ΡΡΒ» ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡ ΠΊΠΎΠ΄ Π½Π° ΡΠ·ΡΠΊΠ΅ C, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².
- ΠΠ»Ρ Π€ΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΈΠ· ΡΡΡΠΎΠΊΠΈ EVALUATE.
- Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π²ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΡ
ΡΠ·ΡΠΊΠΎΠ² (Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ
Π ΡΠ·ΡΠΊΠ΅ ΠΡΠΎΠ»ΠΎΠ³ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ ΠΈ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ (ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠ²ΠΎΠΉΡΡΠ²) ΠΡΠΎΠ»ΠΎΠ³-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΠΡΠΎΠ»ΠΎΠ³Π΅ ΠΊΠ°ΠΊ ΡΠ΅ΡΠΌΡ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ, ΡΡΡΠΎΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΡΠΎΠ»ΠΎΠ³-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ[4].
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ
Π‘ΡΡΠ»ΠΊΠΈ
ΠΠ΅ΡΡΡΡ ΠΏΡΠΈΡΠΈΠ½ ΠΈΠ·Π±Π΅Π³Π°ΡΡ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ | ΠΠ°ΠΏΠΈΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°
Π Π»ΡΠ±ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΡΠ°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅Π΄Π°Π²Π½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°Π» ΠΊΠ½ΠΈΠΆΠΊΡ ΠΏΠΎ Lisp ΠΈΠ»ΠΈ ΠΎΡΠΈΠ»ΠΈΠ» Template Haskell ΠΈ ΠΏΠΎΡΠΎΠΌΡ Π΅ΠΌΡ Π½Π΅ ΡΠ΅ΡΠΏΠΈΡΡΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΠΌΠ°ΠΊΡΠΎΡΡ ΠΈΠ»ΠΈ ΡΠ°Π±Π»ΠΎΠ½Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΡΠ΅ΠΌ ΡΠ΅ΡΠ°ΡΡ. Π ΡΡΠΎΠΉ Π·Π°ΠΌΠ΅ΡΠΊΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΠ°ΠΊ.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: ΠΠ°Π»Π΅Π΅ ΠΏΠΎΠ΄ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌΠΈ ΠΈ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌΠΈ Ρ Π±ΡΠ΄Ρ ΠΈΠΌΠ΅ΡΡ Π² Π²ΠΈΠ΄Ρ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π½Π΅ ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΡΠ΅ ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌΡ ΡΠ·ΡΠΊΡ. ΠΡΠΎ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΌΠ°ΠΊΡΠΎΡΡ Π² Clojure ΠΈΠ»ΠΈ Scala, ΡΠ°Π±Π»ΠΎΠ½Ρ Π² Haskell, parse_transform ΠΈ, ΠΎΠΏΡΡΡ ΡΠ°ΠΊΠΈ, ΠΌΠ°ΠΊΡΠΎΡΡ Π² Erlang, ΡΠ°Π±Π»ΠΎΠ½Ρ Π² C++ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. ΠΡΠ΅ ΡΡΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π° ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΠΎΠ± ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅.
- ΠΠΎΠΎΠ±ΡΠ΅, ΡΡΡΠ΄Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΈΠ΄ΡΠΌΠ°ΡΡ Π·Π°Π΄Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΡΡ Π±Π΅Π· ΠΌΠ°ΠΊΡΠΎΡΠΎΠ². ΠΠ½Π΅ Π² Π³ΠΎΠ»ΠΎΠ²Ρ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΠ»ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ°ΠΊΡΠΎΡΡ 1-2 ΡΠ°Π·Π°, ΠΈ ΡΠΎ Π·Π°Π΄Π°ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠ΅ΡΠΈΡΡ ΠΈΠ½Π°ΡΠ΅. ΠΠΎΡΡΠΈ Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅ΡΠΈΡΡ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΡΠ·ΡΠΊΠ°.
- ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Π²ΡΠ΅Π³Π΄Π° ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΌΡ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°. Π’Π°ΠΊΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡΡΡ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΡΠ΅ΡΡΡΡΠ°ΠΌ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΌ Π΄Π»Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ, Π² ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ;
- ΠΠΈΠΊΡΠΎ Π½Π΅ ΠΎΡΠΌΠ΅Π½ΡΠ» ΠΎΠ±ΡΡΠ½ΡΡ ΠΊΠΎΠ΄ΠΎΠ³Π΅Π½Π΅ΡΠ°ΡΠΈΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Thrift, Protobuf ΠΈ ΠΏΡΠΎΡΠΈΠ΅ Π΄Π΅Π»Π°ΡΡ Π² ΡΡΡΠ½ΠΎΡΡΠΈ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΎΡ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ². ΠΡΠ»ΠΈ ΠΆΠ΅ ΡΠ°ΠΊΠΈΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΠ»ΠΎΡ ΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΡΡΡΡΡ Ρ Π²Π°ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΡΠ±ΠΎΡΠΊΠΈ ΠΈΠ»ΠΈ IDE, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠΎΡΡΠΎ Ρ Π²Π°Ρ ΡΠΈΠ³ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ±ΠΎΡΠΊΠΈ ΠΈΠ»ΠΈ IDE.
- ΠΠΎΠΏΡΡΡΠΈΠΌ, ΠΊΠΎΠ΄, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΠΈΠ»ΠΈ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ², Π±ΡΠΎΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. ΠΠ°ΠΊΠΈΠ΅ Π½ΠΎΠΌΠ΅ΡΠ° ΡΡΡΠΎΠΊ Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ Π² ΡΡΡΠΊΡΡΠ΅ΠΉΡΠ΅? Π‘ΠΌΠΎΠΆΠ΅ΡΠ΅ Π»ΠΈ Π²Ρ Π»Π΅Π³ΠΊΠΎ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ ΠΈ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ Π΅Π΅, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄ Π½Π°ΠΏΠΈΡΠ°Π½ ΠΊΠ΅ΠΌ-ΡΠΎ Π΄ΡΡΠ³ΠΈΠΌ?
- ΠΡΠ»ΠΈ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΡΠ°Π±Π»ΠΎΠ½Ρ, ΡΠΎ ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ ΡΠ»ΠΎΠΌΠ°Π΅ΡΠ΅ ΠΌΠΎΠ·Π³ ΡΠ²ΠΎΠ΅ΠΉ Π»ΡΠ±ΠΈΠΌΠΎΠΉ IDE. ΠΠΎΠΏΡΡΡΠΈΠΌ, ΡΠ°Π±Π»ΠΎΠ½ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ Π½ΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. Π§ΡΠΎΠ±Ρ ΡΠ·Π½Π°ΡΡ ΠΎ Π½ΠΈΡ , IDE Π½ΡΠΆΠ½ΠΎ ΠΈΠΌΠ΅ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π‘ΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΠΎΠ½Π° Π΅Π³ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ, Π° Π·Π½Π°ΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ΄ΡΠ΅ΡΠΊΠΈΠ²Π°ΡΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΡΠ°ΡΠ½ΡΠΌ, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ ΠΏΡΡΠ°ΡΡΡΡ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² ΠΊΠΎΠ΄Π΅ ΠΈΡ ΠΊΠ°ΠΊ Π±Ρ ΠΈ Π½Π΅Ρ.
- ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Ρ ΠΏΡΡΠ°Π΅ΡΠ΅ΡΡ Π·Π°ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π΄ΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°. ΠΡΡΡ ΠΌΠ΅Π½Π΅Π΅ ΡΠ°Π΄ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ Π±ΠΎΡΡΠ±Ρ Ρ code smell. ΠΡΠ±Π»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΠΎΡΡΠΈ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ½Π΅ΡΡΠΈ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ. ΠΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡΠΈΠ΅ΡΡ ΡΠ°ΡΡΠΈ, ΠΏΠ΅ΡΠ΅Π΄Π°Π² Π»ΡΠΌΠ±Π΄Ρ.
- ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ² ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΡΠΌΠ΅ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌΠΈ ΠΈ ΡΠ°Π±Π»ΠΎΠ½Π°ΠΌΠΈ. ΠΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ Π²Ρ Π½Π΅ ΠΎΠ΄Π½ΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅. ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Π°ΡΠΈ ΠΊΠΎΠ»Π»Π΅Π³ΠΈ Π·Π½Π°ΡΡ ΠΌΠ°ΠΊΡΠΎΡΡ, Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΡΡΠ»ΠΎΠΆΠ½ΠΈΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΊΠΎΠ΄Π°.
- ΠΠ°ΡΠ°ΡΡΡΡ ΠΌΠ°ΠΊΡΠΎΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ ΡΡΡΠ°Π½Π½ΡΡ ΠΈ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π² Erlang Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ±ΡΠ°ΡΡ beam Ρ ΠΊΠ°ΠΊΠΈΠΌΠΈ-ΡΠΎ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌΠΈ, Π·Π°ΡΠ΅ΠΌ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΡΡΠΎΡ ΠΌΠ°ΠΊΡΠΎΡ, ΠΈ ΡΠΎΠ±ΡΠ°ΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΡΠ°ΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΡΠΆΠ΅ Ρ Π΄ΡΡΠ³ΠΈΠΌ ΠΌΠ°ΠΊΡΠΎΡΠΎΠΌ. ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΠΏΠΎΡΠΎΠΌ ΠΎΡΠ»Π°Π΄ΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΡΠΏΡΡΡΡ! ΠΠ»ΠΈ, Π΄ΠΎΠΏΡΡΡΠΈΠΌ, ΠΌΠ°ΠΊΡΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ΅ΠΊΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ. ΠΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π»ΠΈ ΠΊΠΎΠ΄, ΠΎΠ½ Π·Π°ΠΊΡΡΠΈΡΠΎΠ²Π°Π»ΡΡ. ΠΠ°ΡΠ΅ΠΌ Π²Ρ ΠΏΠ΅ΡΠ΅ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΠ΅, ΠΏΠΎΡΠ΅ΠΌΡ Π²ΡΠ΅ΠΌΡ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΡΡΡ.
- ΠΠ΅ΡΠ΅Π΄ΠΊΠΎ ΠΌΠ°ΠΊΡΠΎΡΡ β ΡΡΠΎ Π½Π΅ΡΡΠ°Π±ΠΈΠ»ΡΠ½Π°Ρ ΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΡΠΈΡΠ° ΡΠ·ΡΠΊΠ°. Π Scala ΠΈ ΡΠ°ΠΊ Π²ΡΠ΅ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ, Π° Π²Ρ Π΅ΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΠ΅ Π²Π·ΡΡΡ ΠΌΠ°ΠΊΡΠΎΡΡ. Π Template Haskell ΡΠΎΠΆΠ΅ Π²ΠΎΠ½ Π²ΡΠ΅ ΠΏΠΎΠΌΠ΅Π½ΡΠ»ΠΎΡΡ, ΡΠ΅ΠΏΠ΅ΡΡ ΡΠ°ΠΌ Π΅ΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΡ. ΠΠ»ΡΡ ΠΊ ΡΡΠΎΠΌΡ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ² Π½Π΅ΡΠ΅Π΄ΠΊΠΎ ΠΈΠΌΠ΅ΡΡΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΠΊΠΎΡΡΠΊΠΈ ΠΈ Π½Π΅ΡΠ΄ΠΎΠ±ΡΡΠ²Π°. Π’Π°ΠΊ Π² Template Haskell ΡΠ°Π±Π»ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ Π² ΠΎΠ΄Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅.
- ΠΡ ΠΈΠ·ΠΎΠ±ΡΠ΅ΡΠ°Π΅ΡΠ΅ ΠΊΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ DSL. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ·ΡΠΊ ΠΏΡΠΈ ΡΡΠΎΠΌ, ΠΏΠΎΠ½ΡΡΠ½ΠΎΠ΅ Π΄Π΅Π»ΠΎ, ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ . ΠΠΎΡΠ΅ΠΌΡ Π±Ρ ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΠΏΠΈΡΠ°ΡΡ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅? ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ, ΠΎΠ½ ΠΏΡΠΎΡΡΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»Π΅Π½ ΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π½Π°ΠΉΡΠΈ ΡΠ·ΡΠΊ ΠΏΠΎΠ»ΡΡΡΠ΅?
ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΌΠΈΠ½ΡΡΠΎΠ² Ρ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠ°, ΠΈ, ΡΠΊΠ°Π·Π°ΡΡ ΠΏΠΎ ΠΏΡΠ°Π²Π΄Π΅, Ρ Π½Π΅ Π²ΠΈΠΆΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ ΠΏΠ»ΡΡΠΎΠ².
ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΏΠΎΠΉΠΌΠΈΡΠ΅ ΠΌΠ΅Π½Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ. ΠΠ΅ ΡΠΎ, ΡΡΠΎΠ±Ρ ΠΌΠ°ΠΊΡΠΎΡΡ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π±Π΅ΡΠΏΠΎΠ»Π΅Π·Π½Ρ ΠΈ ΠΈΡ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ. Π ΡΠ΅Π΄ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΠΎΠ»Π΅Π·Π½Ρ. Π ΡΡΠΎΠΌ ΡΠΌΡΡΠ»Π΅ ΠΎΠ½ΠΈ Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈΠΌΠΏΠ»ΠΈΡΠΈΡΡ Π² Scala ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΡΡΡΠΎΠ³ΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠΈΠΏΠΈΠ·Π°ΡΠΈΡ. ΠΡΠΎ Π²ΡΠ΅ ΡΡΠ΅Π΄ΡΡΠ²Π°, Π±Π΅Π· ΠΊΠΎΡΠΎΡΡΡ , Π²ΠΎΠΎΠ±ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡΠΈΡΡ ΠΈ ΠΏΠΎΡΠΎΠΌΡ ΠΎΠ½ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠ½ΠΎΡΡΡ Π»ΠΈΡΠ½ΡΡ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ. Π€ΠΎΠΊΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ ΠΎΠ½ΠΈ ΠΎΡΠ΅Π½Ρ, ΠΎΡΠ΅Π½Ρ ΡΠ΄ΠΎΠ±Π½Ρ, ΡΠ°ΠΊ ΡΠ΄ΠΎΠ±Π½Ρ, ΡΡΠΎ ΠΈΡ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π² ΡΠ·ΡΠΊ. Scala, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΠΊ Π±Ρ Β«ΡΠ»ΠΎΠΆΠ½ΡΠΉΒ», Π½ΠΎ ΠΎΡΠ΅Π½Ρ Β«ΡΠ΄ΠΎΠ±Π½ΡΠΉΒ» ΡΠ·ΡΠΊ. Π Π²ΠΎΡ Scheme β ΡΠ·ΡΠΊ Β«ΠΏΡΠΎΡΡΠΎΠΉΒ», Π½ΠΎ Β«Π½Π΅ΡΠ΄ΠΎΠ±Π½ΡΠΉΒ». ΠΡΠ» Π±Ρ Π΅ΡΠ΅ ΠΏΡΠΎΡΠ΅ ΠΈ Π½Π΅ΡΠ΄ΠΎΠ±Π½Π΅Π΅, Π½Π΅ Π±ΡΠ΄Ρ Π² Π½Π΅ΠΌ ΠΌΠ°ΠΊΡΠΎΡΠΎΠ².
Π ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π»ΠΈ Π²Ρ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΠΈ Π΅ΡΠ»ΠΈ Π΄Π°, ΡΠΎ Π² ΠΊΠ°ΠΊΠΈΡ Π·Π°Π΄Π°ΡΠ°Ρ ?
ΠΠ΅ΡΠΊΠΈ: Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ°, Π€ΠΈΠ»ΠΎΡΠΎΡΠΈΡ.
ΠΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ β ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΡ
ΠΠ°ΡΠ΅ΡΠΈΠ°Π» ΠΈΠ· ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ β ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠΉ ΡΠ½ΡΠΈΠΊΠ»ΠΎΠΏΠ΅Π΄ΠΈΠΈ
ΠΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅Β β Π²ΠΈΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠ°ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ[1] (Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π½Π° ΡΡΠ°Π΄ΠΈΠΈ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΈΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°), Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠ΅Π½ΡΡΡ ΡΠ΅Π±Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (ΡΠ°ΠΌΠΎΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΡΡΠΈΠΉΡΡ ΠΊΠΎΠ΄).[ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π½Π΅ ΡΠΊΠ°Π·Π°Π½ 3387 Π΄Π½Π΅ΠΉ] ΠΠ΅ΡΠ²ΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΈ ΠΌΠ΅Π½ΡΡΠΈΡ Π·Π°ΡΡΠ°ΡΠ°Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ ΡΡΠΈΠ»ΠΈΠΉ Π½Π° ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΡΠ΅ΠΌ Π΅ΡΠ»ΠΈ Π±Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΠΏΠΈΡΠ°Π» ΠΈΡ Π²ΡΡΡΠ½ΡΡ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ, Π²ΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ»ΡΡΡΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠΎΠ΄Π° (ΡΠ°Π·ΠΌΠ΅Ρ ΠΈ Π±ΡΡΡΡΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅).
ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠ΄Π°
ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π΅ ΠΏΠΈΡΠ΅ΡΡΡ Π²ΡΡΡΠ½ΡΡ, Π° ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ-Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΎΠΌ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΠΏΡΠΈΠΎΠ±ΡΠ΅ΡΠ°Π΅Ρ ΡΠΌΡΡΠ», Π΅ΡΠ»ΠΈ ΠΏΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π²ΡΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° (Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΡ, Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ Π²Π½Π΅ΡΠ½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΡΡΠ΅ΡΠ΅ΠΎΡΠΈΠΏΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΏΡ.). ΠΡΠΈ ΡΡΠΎΠΌ ΡΠ°ΡΡΡ ΠΊΠΎΠ΄Π° (ΠΈΠ»ΠΈ Π΄Π°Π½Π½ΡΡ ) ΡΠ΅ΡΡΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠΌΡΡΠ» ΠΈ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π»ΠΈΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΡΠ΅ΡΠΊΠΈΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠ°Π²ΠΈΠ». ΠΠΎΠ³Π΄Π° ΡΡΠ° ΡΠ°ΡΡΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΌΡΡΠ»Ρ Π·Π°Π΄Π°Π²Π°ΡΡ Π²ΡΡΡΠ½ΡΡ Π»ΠΈΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠ°ΡΡΡ, Π° ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. ΠΡΠΎ ΠΈ ΠΏΡΠΎΠ΄Π΅Π»ΡΠ²Π°Π΅Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ.
Π Π°Π·Π»ΠΈΡΠ°ΡΡΡΡ Π΄Π²Π° ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π²ΠΈΠ΄Π° ΠΊΠΎΠ΄ΠΎΠ³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ:
- Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΉ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ, Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠΉ Π½Π° ΡΠ΅Π»Π΅Π²ΠΎΠΌ ΡΠ·ΡΠΊΠ΅.
- ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΡΠ·ΡΠΊ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠ·ΡΠΊΠΎΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ°, ΡΠ°ΠΊ ΡΡΠΎ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Ρ ΡΠ΅Π»Π΅Π²ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΎΠ΅ ΡΠ΅Π»ΠΎΠ΅.
ΠΠ°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΠΌ ΠΈ Π½Π°Π³Π»ΡΠ΄Π½ΡΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ»ΡΡΠ°Ρ ΡΠ²Π»ΡΡΡΡΡ GUI ΠΏΠΎΡΡΡΠΎΠΈΡΠ΅Π»ΠΈ, Π³Π΄Π΅ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π°ΡΠ΅Π»Π΅Π½Π° Π½Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅[en], ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ Π½Π΅ΡΠ²Π΅Π΄ΡΡΠΈΠΌ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠ°ΠΌ Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΡΡΠ³ΠΎΠ½ΠΎΠΌΠΈΠΊΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΡΡΠ°ΡΡΠΈΠ΅ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ². Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π·Π°Π²Π΅Π΄ΠΎΠΌΠΎ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ, ΠΊΡΡΠΏΠ½ΠΎΠΉ ΠΈ ΡΡΡΠ΄ΠΎΡΠΌΠΊΠΎΠΉ Π² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅, ΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅ΠΌΡΠΉ Π΅Ρ ΠΊΠΎΠ΄, ΠΈ Π΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΠΏΡΠ°Π²Π΄ΡΠ²Π°Π΅ΡΡΡ ΡΠ°ΡΡΠΎΡΠΎΠΉ Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ[ΠΈΡΡΠΎΡΠ½ΠΈΠΊ Π½Π΅ ΡΠΊΠ°Π·Π°Π½ 1010 Π΄Π½Π΅ΠΉ] (Π½ΠΎ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ), ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ΄Π° ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΠΈΡΡΡΡΡ Π½Π° ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΡΠ·ΡΠΊΠ°Ρ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ ΠΆΠ΅ ΡΠ·ΡΠΊΠ°Ρ , ΠΈ ΠΏΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ Π² ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅. ΠΠ΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠΌ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ Π½ΠΎΠ²ΡΡ , Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΡ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ.
ΠΡΡΠ³ΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΡΠ²Π»ΡΡΡΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΈ Π»Π΅ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΠ², ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Lex, YACC, ANTLR, bison.
ΠΡΠΎΡΠΎΠΉ ΡΠ»ΡΡΠ°ΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ Π²ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΠ΅ ΡΠ·ΡΠΊΠ° ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΡΡΡ ΡΡΠ΅ΠΌΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ c ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ°ΠΊΡΠΎΡΡΠ΅Π΄ΡΡΠ² ΡΠ·ΡΠΊΠ° ΠΈΠ»ΠΈ ΡΠΈΡΡΡΠΌ Π²ΡΡΡΠ°ΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π°ΡΠ°Π±ΠΎΡΠΊΠΈ, Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½Π½ΡΠ΅ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΌΠΎΠ³ΡΡ ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π½ΠΎΠ²ΡΡ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ[2].
ΠΡΡΠ³ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ:
- Π Perl ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΏΠΎΠ½ΡΡΠΈΠ΅ Β«source filtersΒ» (Β«ΡΠΈΠ»ΡΡΡΠΎΠ² ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°Β»)Β β ΠΌΠ΅ΡΠΎΠ΄Π° ΠΏΠ΅ΡΠ΅ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΠΏΠ΅ΡΠ΅Π΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΌΠ΅Π½ΡΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΈ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΡ ΡΠ·ΡΠΊΠ°. ΠΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΈΠ·Π²Π΅ΡΡΠ½ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ Lingua::Romana::Perligata, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ Perl Π½Π° Π»Π°ΡΡΠ½ΠΈ.[3]
- Π Π€ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Π² ΡΠ·ΡΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΠΈ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ. ΠΡΠΎ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ ΠΈ ΠΏΠΎΠ»Π½ΡΠΌ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΅Ρ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ .
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΈΠ»ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡΡ ΡΠ΅Π±Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π² Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ. Π₯ΠΎΡΡ ΡΠ°ΠΊΠ°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π»Π° ΡΠΆΠ΅ Π΄Π°Π²Π½ΠΎ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΌΠ°ΡΠΈΠ½Π½ΡΡ ΠΊΠΎΠ΄ΠΎΠ² (ΠΈ Π°ΠΊΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠ½ΡΡ Π²ΠΈΡΡΡΠΎΠ²), Ρ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ²ΡΠ·ΡΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ Π² Π²ΡΡΠΎΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ ΡΠ·ΡΠΊΠΈ.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ:
- ΠΠΎΠΌΠΎΠΈΠΊΠΎΠ½Π½ΠΎΡΡΡΒ β ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΠΎ ΡΠ°ΠΌΠΎΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡΡ Π½Π° ΡΠΎΠΌ ΠΆΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅, ΡΡΠΎ ΠΈ ΡΠ°ΠΌ ΠΊΠΎΠ΄.
- ΠΠ½ΡΡΠΎΡΠΏΠ΅ΠΊΡΠΈΡΒ β ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ ΡΡΡΡΠΊΡΡΡ ΡΠ·ΡΠΊΠ° Π² Π²ΠΈΠ΄Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΡΠΈΠΏΠΎΠ² Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π½ΠΈΠΌ ΠΈΠ· ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ Π‘++ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠΌ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌΠ° ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ²).
- ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ, ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΈΠΏΠΎΠ², ΡΡΠ΅ΠΊ Π²ΡΠ·ΠΎΠ²ΠΎΠ², ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌΠΎΠΌΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΈ ΠΏΡ.
- ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½
System.Reflection
ΠΈ ΡΠΈΠΏSystem.Type
Π² .NET; ΠΊΠ»Π°ΡΡΡClass, Method, Field
Π² Java; ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ² ΠΈΠΌΠ΅Π½ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ ΡΠΈΠΏΠΎΠ² ΡΠ΅ΡΠ΅Π· Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ Π² Python; ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π² Π€ΠΎΡΡ ΠΏΠΎ Π΄ΠΎΡΡΡΠΏΡ ΠΊ ΡΠ΅ΡΡΡΡΠ°ΠΌ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ; ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ² ΠΏΠΎΡΡΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΈΠ· ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π² ECMAScript (Ρ ΠΎΠ³ΠΎΠ²ΠΎΡΠΊΠ°ΠΌΠΈ).
- ΠΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½
- ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ.
- Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π²ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΡ
ΡΠ·ΡΠΊΠΎΠ² (Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ
eval
Π±ΡΠ»Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Lisp, Π° ΡΠΎΡΠ½Π΅Π΅, Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄ Π½ΠΈΠΌ, ΡΡΠ°Π²ΡΠΈΠΌ Π΅Ρ ΠΏΠ΅ΡΠ²ΡΠΌ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ). - ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ Tiny C ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Β«Π½Π° Π»Π΅ΡΡΒ» ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡ ΠΊΠΎΠ΄ Π½Π° ΡΠ·ΡΠΊΠ΅ C, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΉ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².
- ΠΠ»Ρ Π€ΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΈΠ· ΡΡΡΠΎΠΊΠΈ EVALUATE.
- Π‘ΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π²ΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΡ
ΡΠ·ΡΠΊΠΎΠ² (Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ
Π ΡΠ·ΡΠΊΠ΅ ΠΡΠΎΠ»ΠΎΠ³ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ ΠΈ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ (ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠ²ΠΎΠΉΡΡΠ²) ΠΡΠΎΠ»ΠΎΠ³-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΠΡΠΎΠ»ΠΎΠ³Π΅ ΠΊΠ°ΠΊ ΡΠ΅ΡΠΌΡ ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ, ΡΡΡΠΎΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΠΡΠΎΠ»ΠΎΠ³-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ[4].
Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΡ
Π‘ΡΡΠ»ΠΊΠΈ
ΠΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΡ ΠΈ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² Python β GitJournal
4.5
/
5
(
2
Π³ΠΎΠ»ΠΎΡΠ°
)
ΠΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅ ΡΠ΅Π±Π΅, ΡΡΠΎ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΈΡΡΡ ΠΊΠΎΠ΄ Π·Π° Π²Π°Ρ. ΠΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ ΠΌΠ°ΡΠΈΠ½Ρ Π½Π΅ Π½Π°ΠΏΠΈΡΡΡ Π²Π΅ΡΡ Π²Π°Ρ ΠΊΠΎΠ΄!
ΠΡΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠ°, ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΠ°Ρ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΠΏΡΠ»ΡΡΠ½Π° ΡΡΠ΅Π΄ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ². Π’Π°ΠΊ Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠ΄Π° ΠΈ ΡΠΌΠ½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ½Π½ΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°Ρ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ , ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Ruby On Rails ΠΈΠ»ΠΈ TensorFlow.
Π―Π·ΡΠΊΠΈ ΡΡΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Elixir, Clojure ΠΈ Ruby, ΠΈΠ·Π²Π΅ΡΡΠ½Ρ ΡΠ²ΠΎΠΈΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. Π ΡΡΠΎΠΌ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΌΡ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΡΡ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² Python.
ΠΡΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ΄Π° Π½Π°ΠΏΠΈΡΠ°Π½Ρ Π΄Π»Ρ Python 3, Π½ΠΎ Π±ΡΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° Python 2 Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌΠΈ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΠΌΠΈ.
Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ Π² Python?
Python β ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ·ΡΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ.
ΠΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² Python ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΎ Π½Π° Π½ΠΎΠ²ΠΎΠΌ ΠΎΡΠΎΠ±ΠΎΠΌ ΡΠΈΠΏΠ΅ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ. ΠΡΠΎΡ ΡΠΈΠΏ ΠΊΠ»Π°ΡΡΠ°, Π²ΠΊΡΠ°ΡΡΠ΅, ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΎ Π·Π°ΠΊΡΠ»ΠΈΡΠ½ΠΎΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ, Π·Π°ΠΏΡΡΠΊΠ°Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΠ΄.
ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Ρ ΠΎΡΠΎΡΠΎ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΡ:
ΠΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ (Π°Π½Π³Π». Metaclass)Β β Π² ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΠΎ ΠΊΠ»Π°ΡΡ, ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΡΠ²Π»ΡΡΡΡΡ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ.
ΠΠΎΠ³Π΄Π° ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΠΊΠ»Π°ΡΡ, Π΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΎΠ·Π΄Π°ΡΡΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠ»Π°ΡΡ ΠΊΠ°ΠΊ ΠΏΡΠΈΠΌΠ΅Ρ. ΠΠΎ ΠΊΠ°ΠΊ Π½Π°ΡΡΡΡ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°? Π§ΡΠΎ Π΅ΡΡΡ ΡΡΠΎΡ ΡΠ°ΠΌΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ°?
ΠΠ΄Π΅ΡΡ Π½Π° ΡΡΠ΅Π½Ρ Π²ΡΡ ΠΎΠ΄ΠΈΡ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ. ΠΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ β ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΠΊΠ°ΠΊ ΠΊΠ»Π°ΡΡ Π΅ΡΡΡ ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ Π΅Π³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ². ΠΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ β ΡΡΠΎ ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π΄ΡΡΠ³ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ². Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΠ° ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊ Π½ΠΎΠ²ΡΠΌ ΠΊΠ»Π°ΡΡΠ°ΠΌ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΡΠΌΠ² Π½Π°ΡΠ΅ΠΌ ΠΊΠΎΠ΄Π΅.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΎΠ±ΡΠ°Π·ΡΠ΅ ΠΊΠΎΠ΄Π° Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ hello
ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΊΠ»Π°ΡΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅ΠΌΡ ΡΡΠΎΡ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ ΠΊΠ°ΠΊ ΡΠ°Π±Π»ΠΎΠ½. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ Π½ΠΎΠ²ΡΠ΅ ΠΊΠ»Π°ΡΡΡ β ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΠ° Π±ΡΠ΄ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ hello
Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π΅Π³ΠΎ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ:
# hello_metaclass.py # ΠΡΠΎΡΡΠΎΠΉ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ # ΠΡΠΎΡ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ 'hello' ΠΊ ΠΊΠ»Π°ΡΡΠ°ΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΌ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, # ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ 'hello' Π±Π΅Π· Π»ΠΈΡΠ½ΠΈΡ ΡΡΠΈΠ»ΠΈΠΉ # ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ Π·Π°Π±ΠΎΡΠΈΡΡΡ ΠΎ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π° Π΄Π»Ρ Π½Π°Ρ class HelloMeta(type): # ΠΠ΅ΡΠΎΠ΄ hello def hello(cls): print("greetings from %s, a HelloMeta type class" % (type(cls()))) # ΠΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ def __call__(self, *args, **kwargs): # ΡΠΎΠ·Π΄Π°ΡΠΌ Π½ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ cls = type.__call__(self, *args) # ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ Π½ΠΎΠ²ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ hello Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΡΡΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² setattr(cls, "hello", self.hello) # Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΠΊΠ»Π°ΡΡ return cls # ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ class TryHello(object, metaclass=HelloMeta): def greet(self): self.hello() # Π‘ΠΎΠ·Π΄Π°ΡΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΠ°. ΠΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ hello # Ρ ΠΎΡΡ ΠΎΠ½ Π½Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ Π² ΠΊΠ»Π°ΡΡΠ΅ Π²ΡΡΡΠ½ΡΡ # ΠΈΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΎΠ½ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ Π·Π° Π½Π°Ρ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΠΎΠΌ greeter = TryHello() greeter.greet()
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π·Π°ΠΏΡΡΠΊΠ° ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ TryHello
ΡΠΏΠΎΡΠΎΠ±Π΅Π½ Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°ΡΡ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΠΈΠ΅:
greetings from <class '__main__.TryHello'>, a HelloMeta type class
ΠΠ΅ΡΠΎΠ΄, ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΡΠΉ Π·Π° ΡΡΠΎΡ Π²ΡΠ²ΠΎΠ΄, Π½Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ Π² Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠ°. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ, Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ HelloMeta
, ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅Ρ ΠΊΠΎΠ΄ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π·Π°ΠΏΡΡΠΊΠ°, ΡΡΠΎ ΡΡΠ°Π·Ρ ΡΠ²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Ρ ΠΊΠ»Π°ΡΡΠΎΠΌ.
Π§ΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΡΠΎ Π² Π΄Π΅ΠΉΡΡΠ²ΠΈΠΈ, ΡΠΌΠ΅Π»ΠΎ ΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ ΠΊΠΎΠ΄ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ Python. Π’Π°ΠΊΠΆΠ΅ ΠΏΡΠΎΡΡΠΈΡΠ΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΡΡΠΎΠ±Ρ Π»ΡΡΡΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ ΠΌΡ ΡΠ΄Π΅Π»Π°Π»ΠΈ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΊΠΎΠ΄Π°. Π£ Π½Π°Ρ Π΅ΡΡΡ Π½ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ greeter
, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠ½ΠΎΡΡΡΡ ΠΊΠ»Π°ΡΡΠ° TryHello
. ΠΠΏΡΠΎΡΠ΅ΠΌ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ self.hello
ΠΊΠ»Π°ΡΡΠ° TryHello
, Ρ
ΠΎΡΡ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π½Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ Π² ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° TryHello
.
ΠΠΌΠ΅ΡΡΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π²ΡΠ΄Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΡ Π²ΡΠ·ΠΎΠ²Π° Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°, TryHello
Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅Ρ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΊ ΠΊΠ»Π°ΡΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ HelloMeta
ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ.
ΠΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΡ Π΄Π°ΡΡ Π½Π°ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π°Π½Π½ΡΠ΅, Π½ΠΎ ΠΈ Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠΎΠ΄, ΡΠΎ Π΅ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΠΊΠ»Π°ΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠ΅ Π½Π°Ρ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΊ Π½ΠΎΠ²ΡΠΌ ΠΊΠ»Π°ΡΡΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ, ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ.
ΠΡΠΎ ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ ΠΈ ΡΡ ΠΎΠΆΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π½Π° Π·Π°Π΄Π½Π΅ΠΌ ΠΏΠ»Π°Π½Π΅.
ΠΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎ Π² ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΎ, ΡΡΠΎ Π²ΠΌΠ΅ΡΡΠΎ Π²ΡΠ²ΠΎΠ΄Π° ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΎΠ½ΠΎ Π΄Π°ΡΡ Π½Π°ΠΌ Π»ΠΈΡΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π΅ Π·Π½Π°Π΅Ρ ΠΎ Β«ΠΌΠ°Π³ΠΈΠΈΒ», ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡΠ΅ΠΉ Π·Π° ΠΊΠ°Π΄ΡΠΎΠΌ.
ΠΠΎΠ΄ΡΠΌΠ°ΠΉΡΠ΅ ΠΎ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡ ΠΊΠΎΠ΄ Π² ΡΠΎΠ½ΠΎΠ²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π²Π°ΠΌ ΠΊΠ°ΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π½ΡΠΆΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ ΠΌΠ΅Π½ΡΡΠ΅ ΠΊΠΎΠ΄Π° Π΄Π»Ρ Π²ΡΠ΅Π³ΠΎ. ΠΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ²:
ΠΠΎΠΌΠΈΠΌΠΎ ΡΠ·ΡΠΊΠ° Python, Π΄ΡΡΠ³ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π²ΡΠΎΠ΄Π΅ Ruby On Rails(Ruby) ΠΈ Boost(C++) ΡΠ»ΡΠΆΠ°Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π°Π²ΡΠΎΡΠ°ΠΌΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ², ΡΡΠΎΠ±Ρ Π½Π΅ΡΠ²Π½ΠΎ ΠΏΠΎΡΠΎΠΆΠ΄Π°ΡΡ ΠΊΠΎΠ΄ ΠΈ Π·Π°Π±ΠΎΡΠΈΡΡΡΡ ΠΎΠ±ΠΎ Π²ΡΠ΅ΠΌ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΏΡΠΎΡΡΠ½Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠ΅ API, ΠΊΠΎΡΠΎΡΡΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π±ΠΎΡΡ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°, ΠΏΠΈΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°.
ΠΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΡΠΎΡΠ° ΡΠ°Π±ΠΎΡΠ°Π»Π° Π·Π° ΠΊΠ°Π΄ΡΠΎΠΌ β ΠΊΠ°ΠΊ ΡΠ°Π· ΡΠΎ, Π΄Π»Ρ ΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΡΡΠΎΠ΅Π½ΠΎ Π² ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ².
ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΎΡΠΈΠΈ: ΡΠ°Π·Π±Π΅ΡΡΠΌΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΡ
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΡ Π² Python, ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠ΅Π½Ρ Ρ ΠΎΡΠΎΡΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ Π½ΠΎΡΠ°ΡΠΈΡ ΡΠΈΠΏΠΎΠ². Π’ΠΈΠΏ β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ Π½ΠΎΠΌΠ΅Π½ΠΊΠ»Π°ΡΡΡΠ° Π΄Π°Π½Π½ΡΡ ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π² Python.
ΠΠ°ΠΉΡΠΈ ΡΠΈΠΏ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ Python REPL (ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ), Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΡΠΎΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ Π΅Π³ΠΎ ΡΠΈΠΏ:
>>> day = "Sunday" >>> print("The type of variable day is %s" % (type(day))) The type of variable day is <type 'str'>
ΠΠ°ΠΊ ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π»ΠΎ ΠΎΠΆΠΈΠ΄Π°ΡΡ, ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ Π²ΡΠ²ΠΎΠ΄, ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ day
ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠΈΠΏΡ str
, ΡΡΡΠΎΠΊΠΎΠ²ΠΎΠΌΡ ΡΠΈΠΏΡ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΉΡΠΈ ΡΠΈΠΏ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΏΡΠΎΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ type
Ρ ΠΎΠ΄Π½ΠΈΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ-ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ.
ΠΠ°ΠΉΡΠΈ ΡΠΈΠΏ ΠΊΠ»Π°ΡΡΠ°
Π’Π°ΠΊ, ΡΡΡΠΎΠΊΠ° Π²ΡΠΎΠ΄Π΅ "Sunday"
ΠΈΠ»ΠΈ "hello"
ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΏ str
, Π½ΠΎ ΠΊΠ°ΠΊ Π½Π°ΡΡΡΡ ΡΠ°ΠΌΠΎΠ³ΠΎ str
? ΠΠ°ΠΊΠΎΠΉ ΡΠΈΠΏ Ρ ΠΊΠ»Π°ΡΡΠ° str
?
ΠΠΏΡΡΡ Π²Π²Π΅Π΄ΡΠΌ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ Python:
>>> type(str) <type 'type'>
Π ΡΡΠΎΡ ΡΠ°Π· ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π²ΡΠ²ΠΎΠ΄: str
ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΡΠΈΠΏΡ type
.
Π’ΠΈΠΏ ΠΈ ΡΠΈΠΏ Π΅Π³ΠΎ ΡΠΈΠΏΠ°
Π§ΡΠΎ ΡΠΊΠ°ΠΆΠ΅ΠΌ ΠΏΡΠΎ ΡΠ°ΠΌ type
? ΠΠ°ΠΊΠΎΠ² ΡΠΈΠΏ type
?
>>> type(type) <type 'type'>
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ½ΠΎΠ²Π° ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Β«typeΒ». Π’Π°ΠΊ ΠΌΡ Π½Π°Ρ
ΠΎΠ΄ΠΈΠΌ, ΡΡΠΎ type
Π΅ΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ Π΄Π»Ρ ΡΠΈΠΏΠΎΠ² Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ int
, Π½ΠΎ ΠΈ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ!
Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ
ΠΠ΄Π΅ΡΡ Π½Π°ΠΌ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΎΡΠΈΠΈ. ΠΡΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ β ΡΡΠΎ ΠΊΠ»Π°ΡΡ, ΡΡΡΠ½ΠΎΡΡΡΠΌΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΡΡΡΡ ΡΠ°ΠΌΠΈ ΠΊΠ»Π°ΡΡΡ, Π° Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΎΠ±ΡΡΠ½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ. Π Python 3 ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π·Π½Π°ΡΠΈΡΡ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΠΏΠ΅ΡΠ΅Π΄Π°Π² Π³Π»Π°Π²Π½ΡΠΉ ΠΊΠ»Π°ΡΡ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°.
Π’ΠΈΠΏ type
, ΠΊΠ°ΠΊ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π² Python, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΡΠΎΠ±ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΠΎΠ²ΡΠΉ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠΎΡ ΠΊΡΠ°ΡΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ ΡΡΠΈΡ
Β«Π²ΠΎΠ»ΡΠ΅Π±Π½ΡΡ
Β» ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ
Π² ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΠ΅:
__new__
: ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π² ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΠ΅ Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΡΡΡΠ½ΠΎΡΡΡ ΠΊΠ»Π°ΡΡΠ°, Π½Π° Π½ΡΠΌ ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ__init__
: ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ, ΡΡΠΎΠ±Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΡΠ½ΠΎΡΡΠΈ/ΠΎΠ±ΡΠ΅ΠΊΡΠ°__prepare__
: ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΈΠΌΡΠ½ ΠΊΠ»Π°ΡΡΠ° Π² ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ, ΡΠΎΡ ΡΠ°Π½ΡΡΡΠΈΠ΅ΠΌ Π°ΡΡΠΈΠ±ΡΡΡ__call__
: ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΡΠ΅ΠΊΡΠ°
ΠΠΎΡ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΡΡ
Π² Π²Π°ΡΠ΅ΠΌ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΠ΅ Π΄Π°ΡΡ Π²Π°ΡΠΈΠΌ ΠΊΠ»Π°ΡΡΠ°ΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, ΠΎΡΠ»ΠΈΡΠ½ΠΎΠ΅ ΠΎΡ ΡΠΈΠΏΠ° type
ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ.
ΠΡΠ°ΠΊΡΠΈΠΊΠ° ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ 1: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠΎΠ², ΡΡΠΎΠ±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ
Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠ°Π³ Π½Π°Π·Π°Π΄, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΌΡ ΠΏΡΠΈΡΡΡΠΏΠΈΠΌ ΠΊ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ. ΠΠ±ΡΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° Python β ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΠΈΠ½Π΅ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠΎΠ².
ΠΠ΅ΠΊΠΎΡΠ°ΡΠΎΡ Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΎΠ½ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ Π½Π° Π²Ρ ΠΎΠ΄ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΄ΡΡΠ³ΡΡ ΡΡΠ½ΠΊΡΠΈΡ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΠΎΡ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ Π΅Ρ ΠΈΠΌΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΎΠ±ΡΡΠ½ΡΠΌ Π·Π°ΠΏΡΡΠΊΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π΄Π»Ρ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
# decorators.py from functools import wraps # Π‘ΠΎΠ·Π΄Π°ΡΠΌ Π½ΠΎΠ²ΡΠΉ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ notifyfunc def notifyfunc(fn): """ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄ Π΅Ρ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ""" @wraps(fn) def composite(*args, **kwargs): print("Executing '%s'" % fn.__name__) # ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ rt = fn(*args, **kwargs) return rt # ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π½Π°ΡΡ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ return composite # ΠΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ Π½Π°Ρ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡ ΠΊ ΠΎΠ±ΡΡΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² @notifyfunc def multiply(a, b): product = a * b return product
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΈ Π²ΡΡΠ°Π²ΠΈΡΡ ΡΡΠΎΡ ΠΊΠΎΠ΄ Π² Python REPL. ΠΠ»Π°Π²Π½ΠΎΠ΅ Π² ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠΎΠ² β ΡΠΎ, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΎΡΡΠ°Π²Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΌΠ΅ΡΡΠΎ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° ΡΡΠ½ΠΊΡΠΈΡ ΡΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅Ρ ΠΎ ΡΠ²ΠΎΡΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ ΠΏΠ΅ΡΠ΅Π΄ Π½Π°ΡΠ°Π»ΠΎΠΌ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ:
>>> multiply(5, 6) Executing 'multiply' 30 >>> >>> multiply(89, 5) Executing 'multiply' 445
ΠΠΊΡΠ°ΡΡΠ΅, Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΡ Π΄ΠΎΡΡΠΈΠ³Π°ΡΡ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΠΎΠ², Π½ΠΎ ΠΎΠ½ΠΈ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΏΡΠΎΡΠ΅. ΠΡΠ»ΠΎ Π±Ρ Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΡ, ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΎΠ±ΡΠ΅Π΅ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΎΠΊΡΡΠ³ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡ, Π»ΠΎΠ³ΠΈΡΡΡΡΠΈΠΉ Π²ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ .
ΠΡΠ°ΠΊΡΠΈΠΊΠ° ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ 2: ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΠΎΠ² ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΠΉ-Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠΎΠ²
ΠΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΡ ΠΌΠΎΠ³ΡΡ Π·Π°ΠΌΠ΅Π½ΡΡΡ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π°ΡΡΠΈΠ±ΡΡΡ ΠΈΠ»ΠΈ ΠΊΠ»Π°ΡΡΡ. ΠΠ½ΠΈ ΡΠΏΠΎΡΠΎΠ±Π½Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΏΠ΅ΡΠ΅Π΄ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈΠ΅ΠΌ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΠΈΠ»ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΎΠ½ ΡΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π½. Π ΠΈΡΠΎΠ³Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π±ΠΎΠ»ΡΡΡΡ Π³ΠΈΠ±ΠΊΠΎΡΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΠ³ΠΎ, Π΄Π»Ρ ΡΠ΅Π³ΠΎ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ.
ΠΠ°Π»Π΅Π΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ, Π΄ΠΎΡΡΠΈΠ³Π°ΡΡΠΈΠΉ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°, ΡΡΠΎ ΠΈ Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡ ΠΈΠ· ΠΏΡΠΎΡΠ»ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°. Π§ΡΠΎΠ±Ρ ΡΡΠ°Π²Π½ΠΈΡΡ ΠΎΠ±Π° ΡΠΏΠΎΡΠΎΠ±Π°, Π²Π°ΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΈΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ. ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄ ΠΈ Π²ΡΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ ΠΏΡΡΠΌΠΎ Π² Π²Π°Ρ REPL, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°.
# metaclassdecorator.py import types # Π€ΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΈΠΌΡ ΠΏΠΎΡΡΡΠΏΠ°ΡΡΠ΅ΠΉ Π½Π° Π²Ρ ΠΎΠ΄ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΡ ΡΡΠ½ΠΊΡΠΈΡ # ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΡΡΠΈΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ def notify(fn, *args, **kwargs): def fncomposite(*args, **kwargs): # ΠΠ±ΡΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ notify print("running %s" % fn.__name__) rt = fn(*args, **kwargs) return rt # ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ return fncomposite # ΠΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ, ΠΌΠ΅Π½ΡΡΡΠΈΠΉ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² # Π½Π° Π½ΠΎΠ²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, 'Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠ΅' ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ class Notifies(type): def __new__(cls, name, bases, attr): # ΠΠ°ΠΌΠ΅Π½ΠΈΠΌ ΠΊΠ°ΠΆΠ΄ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π½Π° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΠΈΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ # ΠΏΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΡΠΊΠΎΠΌ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠΌΠΈ args ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π΅Π³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ for name, value in attr.items(): if type(value) is types.FunctionType or type(value) is types.MethodType: attr[name] = notify(value) return super(Notifies, cls).__new__(cls, name, bases, attr) # ΠΡΠΎΠ²Π΅ΡΠΈΠΌ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ class Math(metaclass=Notifies): def multiply(a, b): product = a * b print(product) return product Math.multiply(5, 6) # ΠΠ°ΠΏΡΡΠΊ multiply(): # 30 class Shouter(metaclass=Notifies): def intro(self): print("I shout!") s = Shouter() s.intro() # ΠΠ°ΠΏΡΡΠΊ intro(): # I shout!
Π ΠΊΠ»Π°ΡΡΠ°Ρ
, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π½Π°Ρ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ Notifies
, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Shouter
ΠΈ Math
, Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ½Π°ΡΠ°Π»Π° ΡΠΎΠΎΠ±ΡΠ°ΡΡ Π½Π°ΠΌ ΡΠ΅ΡΠ΅Π· Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ print
ΠΈΠΌΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌΠΎΠ³ΠΎ ΡΠ΅ΠΉΡΠ°Ρ ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΡΠΎ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΡ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π»ΠΈ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ-Π΄Π΅ΠΊΠΎΡΠ°ΡΠΎΡΠ°.
ΠΡΠΈΠΌΠ΅Ρ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΠΎΠ² 1: ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ°, ΠΎΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½Π΅Π»ΡΠ·Ρ ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡΡΡ
ΠΠ±ΡΡΠ½ΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΊΠ»Π°ΡΡΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠ΄ΠΈΠ½ΠΎΡΠΊΠΈ (singletons) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ ΠΊΠΎΠ΄Π°. ΠΠ»Π°ΡΡ-ΠΎΠ΄ΠΈΠ½ΠΎΡΠΊΠ° ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΡΠ°ΠΊ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°ΡΡ Π»ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΊΠ»Π°ΡΡΠ° Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅.
Π€ΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ β Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠΎΠ². ΠΡΠΎΡ ΠΊΠ»Π°ΡΡ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ²ΠΎΠΈ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΡ. Π€ΠΈΠ½Π°Π»ΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°Ρ Π΄Π»Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, ΡΡΠΎΠ±Ρ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ ΠΊΠ»Π°ΡΡ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΡΠ²ΠΎΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΡΠ΅ Π°ΡΡΠΈΠ±ΡΡΡ.
ΠΠΈΠΆΠ΅ ΠΌΡ Π΄Π°Π΄ΠΈΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠΈΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π³ΠΎ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΊΠ»Π°ΡΡΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡΡΡ ΠΎΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ.
# final.py # ΡΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ. Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡΡΡ ΠΎΡ ΠΊΠ»Π°ΡΡΠ°, ΠΈΠΌΠ΅ΡΡΠ΅Π³ΠΎ ΡΠ²ΠΎΠΈ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΠΎΠΌ Final, Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ class Final(type): def __new__(cls, name, bases, attr): # ΠΎΡ ΡΠΈΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π½Π΅Π»ΡΠ·Ρ ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡΡΡ # ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ, ΡΡΠΎ ΠΊΠ»Π°ΡΡ Final Π½Π΅ Π²ΡΡΡΡΠΏΠ°Π΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ # Π΅ΡΠ»ΠΈ ΡΠ°ΠΊ, ΡΠΊΠ°ΠΆΠ΅ΠΌ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ΅, ΠΈΠ½Π°ΡΠ΅ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ Π½ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ Ρ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌΠΈ Final type_arr = [type(x) for x in bases] for i in type_arr: if i is Final: raise RuntimeError("You cannot subclass a Final class") return super(Final, cls).__new__(cls, name, bases, attr) # Π’Π΅ΡΡ: ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΈΠ½Π°Π»ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ Cop class Cop(metaclass=Final): def exit(): print("Exiting...") quit() # ΠΠΎΠΏΡΡΠΊΠ° ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ»Π°ΡΡ Cop, Π² ΠΈΠ΄Π΅Π°Π»Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΠΎΠ·Π±ΡΠ΄ΠΈΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅! class FakeCop(Cop): def scam(): print("This is a hold up!") cop1 = Cop() fakecop1 = FakeCop() # ΠΠΎΠ»ΡΡΠ΅ ΡΠ΅ΡΡΠΎΠ², Π΄ΡΡΠ³ΠΎΠΉ ΠΊΠ»Π°ΡΡ Final class Goat(metaclass=Final): location = "Goatland" # Π£Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡΡΡ ΠΎΡ ΡΠΈΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ class BillyGoat(Goat): location = "Billyland"
Π ΡΡΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΌΡ Π²Π²Π΅Π»ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ², ΡΡΠΎΠ±Ρ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ ΡΠ½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡΡΡ ΠΎΡ ΠΊΠ»Π°ΡΡΠ° Final
. ΠΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠΈ ΠΏΡΠΎΠ²Π°Π»ΠΈΠ»ΠΈΡΡ, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π±ΡΠ»ΠΎ Π²ΡΠ±ΡΠΎΡΠ΅Π½ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΠΎΠ², ΡΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΡΠΈΠ½Π°Π»ΡΠ½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ Π² Π½Π°ΡΠ΅ΠΉ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅.
ΠΡΠΈΠΌΠ΅Ρ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡΠΎΠ² 2: ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠ°, ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡΠ΅Π³ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
ΠΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²ΡΠΈΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ² Π² Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅. ΠΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π·Π°Π½ΠΈΠΌΠ°Π΅ΠΌΡΡ ΠΏΠ°ΠΌΡΡΡ, ΡΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΈ ΠΏΡΠΎΡΠΈΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈ.
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ, ΡΡΠΎΠ±Ρ ΡΠ»Π΅Π΄ΠΈΡΡ Π·Π° Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π°. ΠΠ°Ρ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²ΡΠΈΠΊ, Π½ΠΎ ΠΎΠ½ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ΅ΡΠ°ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ.
# timermetaclass.py import types # ΠΠ»Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ import time class Timer: def __init__(self, func=time.perf_counter): self.elapsed = 0.0 self._func = func self._start = None def start(self): if self._start is not None: raise RuntimeError('Already started') self._start = self._func() def stop(self): if self._start is None: raise RuntimeError('Not started') end = self._func() self.elapsed += end - self._start self._start = None def reset(self): self.elapsed = 0.0 @property def running(self): return self._start is not None def __enter__(self): self.start() return self def __exit__(self, *args): self.stop() # ΠΠ°Π»Π΅Π΅ ΠΌΡ ΡΠΎΠ·Π΄Π°ΡΠΌ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ Timed, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠΈΡΠ°Π΅Ρ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΡΠ²ΠΎΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² # Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΊΠ»Π°ΡΡa # Π²ΡΠ΅ΠΌΠ΅Π½Π° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² # Π€ΡΠ½ΠΊΡΠΈΡ, Π·Π°ΡΠ΅ΠΊΠ°ΡΡΠ°Ρ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΡ, # ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ def timefunc(fn, *args, **kwargs): def fncomposite(*args, **kwargs): timer = Timer() timer.start() rt = fn(*args, **kwargs) timer.stop() print("Executing %s took %s seconds." % (fn.__name__, timer.elapsed)) return rt # Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ return fncomposite # ΠΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ 'Timed', ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠ²ΠΎΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² # Ρ Π½ΠΎΠ²ΡΠΌ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ 'timed' Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°ΡΠ΅Π»Ρ class Timed(type): def __new__(cls, name, bases, attr): # ΠΌΠ΅Π½ΡΠ΅Ρ ΠΊΠ°ΠΆΠ΄ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π½Π° Π½ΠΎΠ²ΡΡ, Π²ΡΠ΅ΠΌΡ ΠΊΠΎΡΠΎΡΠΎΠΉ Π·Π°ΠΌΠ΅ΡΡΠ΅ΡΡΡ # Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌΠΈ args ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ for name, value in attr.items(): if type(value) is types.FunctionType or type(value) is types.MethodType: attr[name] = timefunc(value) return super(Timed, cls).__new__(cls, name, bases, attr) # Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ # ΠΠ»Π°ΡΡΡ, ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΠΈΠ΅ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ Timed, ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π°ΠΌΠ΅ΡΠΈΡΡ Π·Π° Π½Π°Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ # ΠΏΡΠΎΠ²Π΅ΡΡΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² REPL class Math(metaclass=Timed): def multiply(a, b): product = a * b print(product) return product Math.multiply(5, 6) class Shouter(metaclass=Timed): def intro(self): print("I shout!") s = Shouter() s.intro() def divide(a, b): result = a / b print(result) return result div = timefunc(divide) div(9, 3)
ΠΡΠ²ΠΎΠ΄Ρ
ΠΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅ΡΡ, ΠΌΡ ΡΠΌΠΎΠ³Π»ΠΈ ΡΠΎΠ·Π΄Π°ΡΡ ΠΌΠ΅ΡΠ°ΠΊΠ»Π°ΡΡ Timed
, ΠΊΠΎΡΠΎΡΠΉ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΎΠ²ΠΈ ΠΊΠ»Π°ΡΡΡ Π½Π° Π»Π΅ΡΡ. ΠΠΎΠ³Π΄Π° Π±Ρ Π½ΠΈ ΠΎΠ±ΡΡΠ²Π»ΡΠ»ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉTimed
, Π΅Π³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ, ΡΡΠΎΠ±Ρ Π½Π°Ρ ΠΊΠ»Π°ΡΡ Π·Π°ΠΌΠ΅ΡΡΠ» Π²ΡΠ΅ΠΌΡ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ. ΠΠΎΠ³Π΄Π° Π±Ρ ΠΌΡ Π½ΠΈ Π·Π°ΠΏΡΡΠΊΠ°Π»ΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ»Π°ΡΡΠ° Timed
, Π·Π°ΠΌΠ΅ΡΡ Π΄Π΅Π»Π°ΡΡΡΡ Π·Π° Π½Π°Ρ ΡΠ°ΠΌΠΈ, Π±Π΅Π· Π½ΡΠΆΠ΄Ρ Π΄Π΅Π»Π°ΡΡ ΡΡΠΎ-Π»ΠΈΠ±ΠΎ Π΅ΡΡ.
ΠΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ β Π²Π°ΠΆΠ½Π°Ρ Π²Π΅ΡΡ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΏΠΈΡΠ΅ΡΠ΅ ΠΊΠΎΠ΄ ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ² ΠΈΠ»ΠΈ ΠΎΡΠ»Π°Π΄ΡΠΈΠΊΠΎΠ². Π‘ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠ΅ΠΉ ΠΊΠΎΠ΄Π° ΠΈ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ±Π»Π΅Π³ΡΠΈΡΡ ΠΆΠΈΠ·Π½Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π²Π°ΡΠΈΠΌΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ ΠΊΠΎΠ΄Π°.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² C #?
ΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°
- ΠΠΊΠΎΠ»ΠΎ
ΠΡΠΎΠ΄ΡΠΊΡΡ
- ΠΠ»Ρ ΠΊΠΎΠΌΠ°Π½Π΄
ΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°
ΠΠ±ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΈ ΠΎΡΠ²Π΅ΡΡΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄
ΠΠ΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈ Π΄Π΅Π»ΡΡΡΡ ΡΠ°ΡΡΠ½ΡΠΌΠΈ Π·Π½Π°Π½ΠΈΡΠΌΠΈ Ρ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈΠΠ°ΠΊΠ°Π½ΡΠΈΠΈ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½ΠΈΠΌ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΊΠ°ΡΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠ°Π’Π°Π»Π°Π½Ρ
ΠΠ°Π½ΠΈΠΌΠ°ΠΉΡΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΎΠ² ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ²ΠΎΠΉ Π±ΡΠ΅Π½Π΄ ΡΠ°Π±ΠΎΡΠΎΠ΄Π°ΡΠ΅Π»ΡΠ Π΅ΠΊΠ»Π°ΠΌΠ°
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ ΡΠΎ Π²ΡΠ΅Π³ΠΎ ΠΌΠΈΡΠ°- Π ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ
.
ΠΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² C ++ — Π‘Π²ΠΎΠ±ΠΎΠ΄Π½ΠΎ C ++
ΠΡΡΡ ΡΠ°ΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² C ++, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π½ΡΡ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ².
Π Π΅ΡΡΡ Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ C ++.
Π₯ΠΎΡΡ Ρ ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ ΡΠΊΠΎΡΠ΅Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Ρ Π² Π»Π°Π³Π΅ΡΡ ΠΏΠΎΠΊΠ»ΠΎΠ½Π½ΠΈΠΊΠΎΠ², Ρ Π²ΡΡΡΠ΅ΡΠ°Π» Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»ΡΡΠ΅ Π»ΡΠ΄Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΠΏΡΠΎΡΠ²Π»ΡΠ»ΠΈ ΠΊ Π½Π΅ΠΌΡ ΠΎΡΠΎΠ±ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ° ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΠ»ΠΈ Π΅Π³ΠΎ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΠΎΡΠ²ΡΠ°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌ , ΡΠ΅ΠΌ ΡΠ½ΡΡΠ·ΠΈΠ°ΡΡΠΎΠ² TMP.Π ΠΊΠ°ΠΊΠΎΠΉ Π»Π°Π³Π΅ΡΡ Π²Ρ ΠΏΠΎΠΏΠ°Π΄Π°Π΅ΡΠ΅?
ΠΠ° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄, ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡΠΈΡΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ TMP Π½Π΅ Π½ΡΠ°Π²ΠΈΡΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠΌ Π»ΡΠ΄ΡΠΌ, Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ°ΡΡΠΎ ΡΡΠΎ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΡΠΉ . ΠΠΎ ΡΠ°ΠΊΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ, ΡΡΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ ΡΠ΅ΠΌΠ½Π°Ρ ΠΌΠ°Π³ΠΈΡ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½Π°Ρ Π΄Π»Ρ ΠΎΡΠ΅Π½Ρ ΡΠ²ΠΎΠ΅ΠΎΠ±ΡΠ°Π·Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π²ΠΈΠ΄Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ½ΡΡΡ Π΅Π΅ Π΄ΠΈΠ°Π»Π΅ΠΊΡ. ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π²ΡΠ΅ΠΌΡ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΌΡ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΠΌΡΡ Ρ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΎΠΌ TMP, Π½ΠΎ Π² ΡΡΠ΅Π΄Π½Π΅ΠΌ ΠΌΠ½Π΅ ΡΡΡΠ΄Π½Π΅Π΅ ΠΏΠΎΠ½ΡΡΡ, ΡΠ΅ΠΌ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΊΠΎΠ΄.
Π Ρ Ρ ΠΎΡΡ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ TMP Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ°ΠΊΠΈΠΌ .
Π― ΡΠΎΠ±ΠΈΡΠ°ΡΡΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π²Π°ΠΌ, ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠΎΠ΄ TMP Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ. Π ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊΠ΅ΡΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅.
TMP ΡΠ°ΡΡΠΎ Π½Π°Π·ΡΠ²Π°ΡΡ ΡΠ·ΡΠΊΠΎΠΌ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΠ·ΡΠΊΠ° C ++. ΠΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΠ΄Π΅Π»Π°ΡΡ TMP Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ, Π½Π°ΠΌ ΠΏΡΠΎΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅ ΠΆΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°, ΡΡΠΎ ΠΈ Π² ΠΎΠ±ΡΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅. Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΠΈΠ»Π»ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎ, ΠΌΡ Π²ΠΎΠ·ΡΠΌΠ΅ΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ½ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΌΡΠ΅ ΡΠΌΠ΅Π»ΡΠ΅ ΠΈΠ· Π½Π°Ρ, ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΊ Π½Π΅ΠΌΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π²Π° ΠΏΡΠ°Π²ΠΈΠ»Π° Π²ΡΡΠ°Π·ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ:
Π― ΡΠΊΠ°Π·Π°Π» Π²Π°ΠΌ, ΡΡΠΎ Π½Π΅ ΡΠ°ΠΊΠ΅ΡΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅.
ΠΠ΅ΡΠ΅Π΄ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΌΡ Π½Π°ΡΠ½Π΅ΠΌ, Ρ Ρ ΠΎΡΡ ΠΏΠΎΠ±Π»Π°Π³ΠΎΠ΄Π°ΡΠΈΡΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ»Π»Π΅Π³Ρ ΠΠΆΠ΅ΡΠ΅ΠΌΠΈ Π·Π° Π΅Π³ΠΎ Π²ΠΏΠ΅ΡΠ°ΡΠ»ΡΡΡΡΡ Π»ΠΎΠ²ΠΊΠΎΡΡΡ Ρ TMP, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΠΈΠ½ΡΠ΅Π½ΡΠ°, Ρ ΠΊΠΎΡΠΎΡΡΠΌ Π²ΡΠ΅Π³Π΄Π° ΡΠ°ΠΊ Π·Π΄ΠΎΡΠΎΠ²ΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡ ΠΎΡΠΊΠ»ΠΈΠΊ Π² ΠΈΠ΄Π΅ΡΡ .Π Π΅Π±ΡΡΠ°, Π²Ρ ΠΌΠΎΠ»ΠΎΠ΄ΡΡ.
ΠΠ°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°
ΠΡ Π½Π°ΠΏΠΈΡΠ΅ΠΌ API, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»ΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΈΡΡΠ²Π°Ρ ΡΠΈΠΏ T, ΠΌΡ Ρ ΠΎΡΠ΅Π»ΠΈ Π±Ρ Π·Π½Π°ΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ T ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΠΌΡΠΌ, ΡΠΎ Π΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ° t ΡΠΈΠΏΠ° T, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅:
ΡΠ²Π»ΡΠ΅ΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ. ΠΡΠ»ΠΈ T ΡΠ°Π²Π½ΠΎ int
, ΡΠΎΠ³Π΄Π° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ, Π° Π΅ΡΠ»ΠΈ T ΡΠ°Π²Π½ΠΎ std :: string
, ΡΠΎΠ³Π΄Π° Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ.
ΠΠΎΡ ΡΠΈΠΏΠΈΡΠ½Π°Ρ ΡΠ°ΡΡΡ TMP, ΠΊΠΎΡΠΎΡΠ°Ρ Π΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ:
ΡΠ°Π±Π»ΠΎΠ½
struct is_incrementable: std :: false_type {};
ΡΠ°Π±Π»ΠΎΠ½
struct is_incrementable
>: std :: true_type {};
.
ΠΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° C ++ ΠΈ D
ΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°
- ΠΠΊΠΎΠ»ΠΎ
ΠΡΠΎΠ΄ΡΠΊΡΡ
- ΠΠ»Ρ ΠΊΠΎΠΌΠ°Π½Π΄
ΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°
ΠΠ±ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΈ ΠΎΡΠ²Π΅ΡΡΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄
ΠΠ΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈ Π΄Π΅Π»ΡΡΡΡ ΡΠ°ΡΡΠ½ΡΠΌΠΈ Π·Π½Π°Π½ΠΈΡΠΌΠΈ Ρ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈΠΠ°ΠΊΠ°Π½ΡΠΈΠΈ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½ΠΈΠΌ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΊΠ°ΡΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠ°Π’Π°Π»Π°Π½Ρ
ΠΠ°Π½ΠΈΠΌΠ°ΠΉΡΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΎΠ² ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ²ΠΎΠΉ Π±ΡΠ΅Π½Π΄ ΡΠ°Π±ΠΎΡΠΎΠ΄Π°ΡΠ΅Π»ΡΠ Π΅ΠΊΠ»Π°ΠΌΠ°
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ ΡΠΎ Π²ΡΠ΅Π³ΠΎ ΠΌΠΈΡΠ°- Π ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ
ΠΠ°Π³ΡΡΠ·ΠΊΠ°β¦
.
c ++ 14 — ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° C ++
ΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°
- ΠΠΊΠΎΠ»ΠΎ
ΠΡΠΎΠ΄ΡΠΊΡΡ
- ΠΠ»Ρ ΠΊΠΎΠΌΠ°Π½Π΄
ΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ°
ΠΠ±ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ ΠΈ ΠΎΡΠ²Π΅ΡΡΠΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΊΠΎΠΌΠ°Π½Π΄
ΠΠ΄Π΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈ Π΄Π΅Π»ΡΡΡΡ ΡΠ°ΡΡΠ½ΡΠΌΠΈ Π·Π½Π°Π½ΠΈΡΠΌΠΈ Ρ ΠΊΠΎΠ»Π»Π΅Π³Π°ΠΌΠΈΠΠ°ΠΊΠ°Π½ΡΠΈΠΈ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½ΠΈΠΌ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΊΠ°ΡΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠ°Π’Π°Π»Π°Π½Ρ
ΠΠ°Π½ΠΈΠΌΠ°ΠΉΡΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΎΠ² ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΠΉΡΠ΅ ΡΠ²ΠΎΠΉ Π±ΡΠ΅Π½Π΄ ΡΠ°Π±ΠΎΡΠΎΠ΄Π°ΡΠ΅Π»ΡΠ Π΅ΠΊΠ»Π°ΠΌΠ°
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³Π°ΠΌ ΡΠΎ Π²ΡΠ΅Π³ΠΎ ΠΌΠΈΡΠ°- Π ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ
.