Π§ΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄
ΠΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄
ΠΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ (ΡΠ°ΠΊΠΆΠ΅ ΡΠΏΠΎΡΡΠ΅Π±Π»ΡΡΡΡΡ ΡΠ΅ΡΠΌΠΈΠ½Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ ΡΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄ β ΠΎΡ Π°Π½Π³Π». native code ) β ΡΠΈΡΡΠ΅ΠΌΠ° ΠΊΠΎΠΌΠ°Π½Π΄ (ΡΠ·ΡΠΊ) ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ (ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΡΠ·ΡΠΊ), ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΌΠΈΠΊΡΠΎΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ ΠΈΠ»ΠΈ ΠΌΠΈΠΊΡΠΎΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ Π΄Π°Π½Π½ΠΎΠΉ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ.
ΠΠ°ΠΆΠ΄Π°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΡΠ·ΡΠΊ, Ρ ΠΎΡΡ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΌΠΎΠ΄Π΅Π»ΡΡ ΡΡΠΈ Π½Π°Π±ΠΎΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΡΠΈΠ»ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΡΡ. ΠΠΎΠ²ΠΎΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ A ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ B, Π΅ΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ A ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Β«ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΡΒ» ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° B. ΠΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ A Π·Π½Π°Π΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠΌΠ°Π½Π΄, ΠΊΠΎΡΠΎΡΡΡ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ B, ΡΠΎ B Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ A.
Β«Π‘Π»ΠΎΠ²Π°Β» ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΡΠ·ΡΠΊΠ° Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΠΌΠ°ΡΠΈΠ½Π½ΡΠΌΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΠΌΠΈ. ΠΠ°ΠΆΠ΄Π°Ρ ΠΈΠ· Π½ΠΈΡ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠ½ΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ, ΡΠ°ΠΊΠΎΠ΅ ΠΊΠ°ΠΊ Β«ΠΏΠ΅ΡΠ΅ΡΠ»Π°ΡΡ Π±Π°ΠΉΡ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ Π² ΡΠ΅Π³ΠΈΡΡΡΒ». ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ Π΄Π»ΠΈΠ½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ. Π Π°Π½ΡΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ ΠΏΡΠΎΡΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΎΠ΄Π½Ρ Π·Π° Π΄ΡΡΠ³ΠΎΠΉ, Π½ΠΎ Π½ΠΎΠ²ΡΠ΅ ΡΡΠΏΠ΅ΡΡΠΊΠ°Π»ΡΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ ΡΠΏΠΎΡΠΎΠ±Π½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ Π·Π° ΡΠ°Π·. ΠΡΡΠΌΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΠ½ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠ΅ΠΉ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Ρ Π·Π°Π΄Π°Π½Π½ΡΠΌ Π°Π΄ΡΠ΅ΡΠΎΠΌ. ΠΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΠ»ΠΎΠ²Π½ΠΎΠΉ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠ΅ΠΉ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΡΠΎΠ±Π»ΡΠ΄Π΅Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΡΠ»ΠΎΠ²ΠΈΡ.
Π’Π°ΠΊΠΆΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π±ΡΠ²Π°ΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ (Ρ MISC-Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡ) ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π½ΠΎΠΉ (Ρ x86 ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΈΠΌΠ΅Π΅Ρ Π΄Π»ΠΈΠ½Ρ ΠΎΡ 8 Π΄ΠΎ 120 Π±ΠΈΡΠΎΠ²).
Π‘ΠΌ ΡΠ°ΠΊΠΆΠ΅
ΠΠΎΠ»Π΅Π·Π½ΠΎΠ΅
Π‘ΠΌΠΎΡΡΠ΅ΡΡ ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ «ΠΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄» Π² Π΄ΡΡΠ³ΠΈΡ ΡΠ»ΠΎΠ²Π°ΡΡΡ :
ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ ΠΊΠΎΠ΄ β ΠΡΠ° ΡΡΠ°ΡΡΡ ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΡΠ΅Π»ΠΎΠΌ; ΠΎΠ± ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΡ ΡΠΌ.: ΠΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΊΠ°). ΠΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ (ΡΠ°ΠΊΠΆΠ΅ ΡΠΏΠΎΡΡΠ΅Π±Π»ΡΡΡΡΡ ΡΠ΅ΡΠΌΠΈΠ½Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ ΡΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΎΡ Π°Π½Π³Π». native code) ΡΠΈΡΡΠ΅ΠΌΠ°β¦ β¦ ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΡ
ΠΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ β ΠΡΠ° ΡΡΠ°ΡΡΡ ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΡΠ΅Π»ΠΎΠΌ; ΠΎΠ± ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΡ ΡΠΌ.: ΠΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΊΠ°). ΠΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ (ΡΠ°ΠΊΠΆΠ΅ ΡΠΏΠΎΡΡΠ΅Π±Π»ΡΡΡΡΡ ΡΠ΅ΡΠΌΠΈΠ½Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ ΡΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΎΡ Π°Π½Π³Π». native code) ΡΠΈΡΡΠ΅ΠΌΠ°β¦ β¦ ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΡ
Π ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ΄ β ΠΡΠ° ΡΡΠ°ΡΡΡ ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΡΠ΅Π»ΠΎΠΌ; ΠΎΠ± ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΡ ΡΠΌ.: ΠΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΊΠ°). ΠΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ (ΡΠ°ΠΊΠΆΠ΅ ΡΠΏΠΎΡΡΠ΅Π±Π»ΡΡΡΡΡ ΡΠ΅ΡΠΌΠΈΠ½Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ ΡΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΎΡ Π°Π½Π³Π». native code) ΡΠΈΡΡΠ΅ΠΌΠ°β¦ β¦ ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΡ
Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ β ΠΡΡ ΡΡΠ°ΡΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΠΈΠΊΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ. ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΎΡΠΎΡΠΌΠΈΡΠ΅ Π΅Ρ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π°ΠΌ ΠΎΡΠΎΡΠΌΠ»Π΅Π½ΠΈΡ ΡΡΠ°ΡΠ΅ΠΉ. Π£ΡΠ»ΠΎΠ²Π½ΡΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ β¦ ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΡ
ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΠΉ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ β ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ Π² ΠΌΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ΅Π½ΡΡΠ°Π»ΡΠ½ΡΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ (ΠΊΠ°ΠΊ Π² ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΡΡ ΡΠ·ΡΠΊΠ°Ρ ), Π° ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°. Πβ¦ β¦ ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΡ
ΠΠ°ΡΠΈΠ½Π½Π°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ β ΠΡΠ° ΡΡΠ°ΡΡΡ ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΡΠ΅Π»ΠΎΠΌ; ΠΎΠ± ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΡ ΡΠΌ.: ΠΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΊΠ°). ΠΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ (ΡΠ°ΠΊΠΆΠ΅ ΡΠΏΠΎΡΡΠ΅Π±Π»ΡΡΡΡΡ ΡΠ΅ΡΠΌΠΈΠ½Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ ΡΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΎΡ Π°Π½Π³Π». native code) ΡΠΈΡΡΠ΅ΠΌΠ°β¦ β¦ ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΡ
ΠΠ°ΡΠΈΠ½Π½ΡΠΉ ΡΠ·ΡΠΊ β ΠΡΠ° ΡΡΠ°ΡΡΡ ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄ Π² ΡΠ΅Π»ΠΎΠΌ; ΠΎΠ± ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡΡ ΡΠΌ.: ΠΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ (ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΊΠ°). ΠΠ°ΡΠΈΠ½Π½ΡΠΉ ΠΊΠΎΠ΄ (ΡΠ°ΠΊΠΆΠ΅ ΡΠΏΠΎΡΡΠ΅Π±Π»ΡΡΡΡΡ ΡΠ΅ΡΠΌΠΈΠ½Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ ΡΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ΄, ΠΈΠ»ΠΈ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΎΡ Π°Π½Π³Π». native code) ΡΠΈΡΡΠ΅ΠΌΠ°β¦ β¦ ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΡ
ΠΠΎΠ±ΠΈΠ»ΡΠ½Π°Ρ ΠΈΠ³ΡΠ° β Π§Π°ΡΡΡ ΡΠ΅ΡΠΈΠΈ β¦ ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΡ
OCaml β Objective Caml Π‘Π΅ΠΌΠ°Π½ΡΠΈΠΊΠ°: ΠΌΡΠ»ΡΡΠΈΠΏΠ°ΡΠ°Π΄ΠΈΠ³ΠΌΠ΅Π½Π½ΡΠΉ: ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ, ΠΎΠ±ΡΠ΅ΠΊΡΠ½ΠΎ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ, ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΠΉ ΠΠ²ΡΠΎΡ(Ρ): INRIA Π Π΅Π»ΠΈΠ·: 4.00.1 (5 ΠΎΠΊΡΡΠ±ΡΡ β¦ ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΡ
ΠΠΎΠ±ΠΈΠ»ΡΠ½Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°: Cross-platform ΠΈΠ»ΠΈ Native
ΠΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π΅Ρ! Π― ΠΠ³ΠΎΡΡ ΠΠ΅Π΄Π΅Π½Π΅Π΅Π², ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π² AGIMA. ΠΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΎ Π½Π°ΡΠΈΠ²Π½ΠΎΠΉ ΠΈ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅. Π Π°Π½ΡΡΠ΅ Ρ ΠΏΠΎ Π±ΠΎΠ»ΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ ΡΠΊΠ΅ΠΏΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΡΠ½ΠΎΡΠΈΠ»ΡΡ ΠΊΠΎ Π²ΡΠΎΡΠΎΠΉ: Π½Π΅ ΡΡΡΡΠ°ΠΈΠ²Π°Π»ΠΎ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ. ΠΠ΄Π½Π°ΠΊΠΎ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π³ΠΎΠ΄ ΡΠ΅ΠΌΠΏΡ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΡΡ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ² ΡΠΆΠ΅ Π½Π΅ Π² ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π· Π·Π°ΡΡΠ°Π²Π»ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠ²ΠΎΠ΅ ΠΌΠ½Π΅Π½ΠΈΠ΅ Π½Π°ΡΡΠ΅Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°. ΠΠΎΡΡΠΎΠΌΡ Π΄Π°Π²Π°ΠΉΡΠ΅ Π΅ΡΠ΅ ΡΠ°Π· ΡΡΠ°Π²Π½ΠΈΠΌ ΡΠ°ΠΌΡΠ΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠ΅ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈ Π½Π°ΡΠΈΠ²Π½ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ.
ΠΠ° Π²ΡΡΠΊΠΈΠΉ ΡΠ»ΡΡΠ°ΠΉ
ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Π·Π½Π°Π΅ΡΠ΅, ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ Π½Π°ΡΠΈΠ²Π½Π°Ρ ΠΈ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°:
Π½Π°ΡΠΈΠ²Π½Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° (2 Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΠ·ΡΠΊΠ°Ρ Swift ΠΈ Kotlin);
ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° β ΠΎΠ±ΡΠ°Ρ ΠΊΠΎΠ΄ΠΎΠ²Π°Ρ Π±Π°Π·Π° Π΄Π»Ρ iOS ΠΈ Android (Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ² Flutter ΠΈΠ»ΠΈ React Native (Π΄Π°Π»Π΅Π΅ RN)).
Π£ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° Π΅ΡΡΡ ΡΠ²ΠΎΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ, ΠΏΠ»ΡΡΡ ΠΈ ΠΌΠΈΠ½ΡΡΡ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ ΠΈ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ ΡΠ΅Π»Ρ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ . Π‘Π΅ΠΉΡΠ°Ρ ΠΎΠ±ΡΡΡΠ½Ρ, ΠΊΠ°ΠΊ Π²ΡΠ±ΡΠ°ΡΡ ΠΈ Π½Π° ΡΡΠΎ ΠΎΠ±ΡΠ°ΡΠ°ΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅.
ΠΠ°ΡΠΈΠ²Π½Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°
ΠΠ°ΡΠΈΠ²Π½Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° β ΡΡΠΎ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ iOS ΠΈ Android. ΠΠ΅Π΄Π΅ΡΡΡ ΠΎΠ½Π° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΡΡ Π²Π΅Π½Π΄ΠΎΡΠ°ΠΌΠΈ β Apple ΠΈ Google. Π―Π·ΡΠΊΠΈ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ β Swift (iOS) ΠΈ Kotlin (Android), Π° ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ Π² Π½Π°ΡΠΈΠ²Π½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ.
ΠΠ΄Π½Π°ΠΊΠΎ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΡΡΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ Π΄Π²Π° Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π Π°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΠΎΠ½ΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ. ΠΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΡΡ ΠΏΠΎ-ΡΠ²ΠΎΠ΅ΠΌΡ, ΠΈ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ²ΠΎΠΈ Π±Π°Π³ΠΈ. Π ΡΠ°ΠΌΠΎΠ΅ Π³Π»Π°Π²Π½ΠΎΠ΅, Π½Π°ΡΠΈΠ²Π½Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½ΠΈΠΊΡΠ΄Π° Π½Π΅ Π΄Π΅Π½Π΅ΡΡΡ: ΠΏΠΎΠΊΠ° ΡΡΡΠ΅ΡΡΠ²ΡΡΡ iOS ΠΈ Android, Apple ΠΈ Google Π±ΡΠ΄ΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
ΠΠ°ΡΠΈΠ²Π½Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΌΠΎΠ΅ ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½ΠΎ Π²Π·Π°ΠΌΠ΅Π½ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΈ ΠΎΡΠ»Π°ΠΆΠΈΠ²Π°ΡΡ Π²ΡΡ 2 ΡΠ°Π·Π° ΠΈ ΡΠ»Π΅Π΄ΠΈΡΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°Π»ΠΈ Π΄ΡΡΠ³ Π΄ΡΡΠ³Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ.
Π‘ΡΠ΅Π΄ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΡΠΎ ΠΏΠΎΠΊΠ° ΡΠ°ΠΌΡΠΉ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠΎΡΡΠΎΠΌΡ ΡΠΎΠ±ΡΠ°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, Π΄Π°ΠΆΠ΅ Π±ΠΎΠ»ΡΡΡΡ, Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΡΠ΅, ΡΠ΅ΠΌ Π΄Π»Ρ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΡ. Π ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΈΠ·-Π·Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΡΡΠ½ΠΊΠ΅.
ΠΠ»ΡΡΡ ΠΈ ΠΌΠΈΠ½ΡΡΡ Π½Π°ΡΠΈΠ²Π½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ
2 Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
Π‘ΡΠΎΠΈΠΌΠΎΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ
ΠΠ΅Π½ΡΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π»ΡΠ΅ΠΌΡΡ ΡΠ΅ΡΡΡΡΠΎΠ²*
ΠΠΎΠ³Π°ΡΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ
Π¨ΠΈΡΠΎΠΊΠΈΠΉ ΡΡΠ½ΠΎΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ²
ΠΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°
ΠΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½Π°Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ, ΡΡΠΎ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΊΠΎΠ΄ ΠΈ Π½Π° iOS, ΠΈ Π½Π° Android. ΠΠΎΠΎΠ±ΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, ΡΡΠΎ Π²ΡΡ ΡΠ°ΠΊΠΎΠ΅ ΠΆΠ΅ Π½Π°ΡΠΈΠ²Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½ΠΎ, Π·Π°ΠΏΡΡΡΠΈΠ² Π΅Π³ΠΎ, ΠΌΡ ΡΡΠ°Π·Ρ ΠΏΡΠΎΠ²Π°Π»ΠΈΠ²Π°Π΅ΠΌΡΡ Π² ΠΌΠΈΡ Flutter ΠΈΠ»ΠΈ RN, ΠΈ Π²ΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΆΠ΅ ΡΠ°ΠΌ. Π‘ΡΠΎΠΈΡ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Flutter/RN ΠΈΠ΄Π΅Ρ Π±ΡΡΡΡΠ΅Π΅. ΠΡΠΈΡΠ΅ΠΌ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π·Π° ΡΡΠ΅Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΌΡ Π΄Π΅Π»Π°Π΅ΠΌ 1 ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΌΠ΅ΡΡΠΎ 2-Ρ , Π° Π΅ΡΠ΅ ΠΈ Π·Π° ΡΡΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΠΉ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ UI.
ΠΠΎ, ΡΠ²Ρ, Π½Π΅ Π²ΡΡ ΡΠ°ΠΊ Ρ ΠΎΡΠΎΡΠΎ: ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ ΡΡΠ΄ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠΎΠΈΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΡΡΠΎΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π΄Π»Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. React Native ΠΈ Flutter Π²ΡΡ ΠΆΠ΅ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ Open Source-ΡΠ΅ΡΠ΅Π½ΠΈΡ. Π Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ Π±Π°Π³ΠΈ. ΠΠΎΠ²ΡΠ΅ ΡΠΈΡΠΊΠΈ iOS ΠΈ Android ΡΠ°ΠΌ Π±ΡΠ΄ΡΡ ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π½Π΅ ΡΠ°ΠΊ Π±ΡΡΡΡΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠΈ Π½Π°ΡΠΈΠ²Π½ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡΡ . ΠΠΎΠΆΠ΅Ρ ΠΏΡΠ΅ΠΊΡΠ°ΡΠΈΡΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ°, Π² ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ².
Π’Π°ΠΊΠΆΠ΅, Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠ°ΡΡΠΎ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π½Π° ΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ Open Source-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, ΡΡΠΎ ΡΠΎΠΆΠ΅ Π½Π΅ΡΠ΅Ρ Π² ΡΠ΅Π±Π΅ ΡΠΈΡΠΊΠΈ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ: Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Π²Π΅ΡΡΠΈΠΈ Flutter/RN. ΠΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ Π²Π°ΡΠΈΠ°Π½Ρ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π² ΠΏΡΠΈΡΠΎΠ΄Π΅, ΠΈ ΡΠΎΠ³Π΄Π° ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ Π²ΡΡ Ρ Π½ΡΠ»Ρ ΡΠ°ΠΌΠΎΠΌΡ. Π’Π°ΠΊΠΆΠ΅ Π½Π΅Π»ΡΠ·Ρ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π΄Π»Ρ iOS-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠ°ΡΡ. ΠΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ ΠΈ Flutter, ΠΈ RN.
Π’ΠΎ Π΅ΡΡΡ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΠΈΡ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄, ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΡΠΌΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ. ΠΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π½Π°Π΄ΠΎ Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ Π² Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠ΅ΡΠ΅Π½ΡΠΈΠΈ. ΠΠ°ΠΊ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ β ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²ΡΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ· Π½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π² ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΡΠΉ ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ.
ΠΡΠ»ΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈ Π΅ΡΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ, ΡΡΠΎ ΡΠΎΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΈ Π²ΠΎ Flutter, ΠΈ Π² RN. ΠΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½ΠΎ, ΡΠΊΠ°ΠΆΠ΅ΠΌ, ΡΡΠΎ Π½Π΅ ΡΠΎ, Π΄Π»Ρ ΡΠ΅Π³ΠΎ Π±ΡΠ»ΠΈ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Ρ ΡΡΠΈ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΈ. Π’Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΡΠΆΠ΅Π»ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ΅Π΄Ρ, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΡΡΡΡΠΎΠ΅ΠΌΠΊΠΈΠΌΠΈ ΠΈ ΡΡΠ΅Π±ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΊ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ/ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²ΠΊΠ΅ ΡΠ΅Π»Π΅ΡΠΎΠ½Π°.
ΠΡΠ»ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅Ρ ΠΎΠ±ΡΠΈΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΡΠ΅Π»Π΅ΡΠΎΠ½Π°, Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΠ‘, ΡΠΎ Ρ Π±Ρ ΡΠΎΠΆΠ΅ Π½Π΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΡ β Π΅ΡΡΡ ΡΠΈΡΠΊ, ΡΡΠΎ Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΈΠ»ΠΈ ΠΊΠΎΠ΄ ΡΡΠ°Π½Π΅Ρ ΠΎΡΠ΅Π½Ρ Π·Π°ΠΏΡΡΠ°Π½Π½ΡΠΌ, ΠΈΠ»ΠΈ ΠΌΡ ΡΠΏΡΠ΅ΠΌΡΡ Π² ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΠ»Π°ΡΡΠΎΡΠΌ ΠΈΠ»ΠΈ ΡΠ°ΠΌΠΎΠ³ΠΎ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ°. ΠΡΠ΅ ΡΡΠΎΠΈΡ ΡΡΠ΅ΡΡΡ, ΡΡΠΎ Π½Π°ΠΌ ΡΡΠΎΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎ Π½Π΅ΠΉΡΡΠ°Π»ΡΠ½ΡΠΉ UI, ΡΡΠΎΠ±Ρ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π½Π° ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°Ρ ΠΈ Π² ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ Π½Π΅ ΡΠ½ΠΈΠΆΠ°ΡΡ Π½Π° ΡΡΠΎΠΌ ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ.
ΠΠ° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅ Π½ΠΈΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΡΠ΅ΡΡΠ° Ρ ΠΏΡΠΎΡΡΡΠΌ ΡΠΏΠΈΡΠΊΠΎΠΌ Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ: Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ Π½Π°ΡΠΈΠ²Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΠΈΠ³ΡΡΠ²Π°Π΅Ρ Π²ΡΠΈΡΡΡΡ. ΠΠ°, Π½Π° Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²ΡΡ ΠΌΠΎΠ΄Π΅Π»ΡΡ ΡΠ΅Π»Π΅ΡΠΎΠ½ΠΎΠ² ΡΠ°Π·Π½ΠΈΡΠ° Π±ΡΠ΄Π΅Ρ Π½Π΅ ΡΠ°ΠΊΠΎΠΉ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ, Π½ΠΎ ΡΠ΅Π½Π΄Π΅Π½ΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅ΡΡ. Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΡΠ΅ΡΡΠΎΠ² ΡΡΡ.
ΠΡΠ»ΠΈ ΠΏΡΠΎΡΠ΅, ΡΠΎ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΊΡΠ°ΡΡΠ°ΠΉΡΠΈΠ΅ ΡΡΠΎΠΊΠΈ. ΠΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ-Π²ΠΈΡΡΠΈΠ½ ΡΡΠ»ΡΠ³ ΠΈΠ»ΠΈ ΡΠΎΠ²Π°ΡΠΎΠ² ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ/ΠΌΠ°Π»ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΌΠ° Π±Π΅Π· ΠΎΠ±ΡΠΈΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ. Π’ΠΎ Π΅ΡΡΡ ΡΠ½ΡΡΡ ΡΠΎΡΠΊΡ Π½Π° Π°Π²Π°ΡΠ°Ρ ΠΈΠ»ΠΈ ΠΎΡΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°ΡΡ QR-ΠΊΠΎΠ΄ Π½Π΅ ΡΠΎΡΡΠ°Π²ΠΈΡ Π±ΠΎΠ»ΡΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, Π½ΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ Π΄Π΅Π»Π°Π΅ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎΠΊΡΡΠ³ ΠΊΠ°ΠΌΠ΅ΡΡ, Π»ΡΡΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π°ΡΠΈΠ²Π½ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ.
ΠΠ»ΡΡΡ ΠΈ ΠΌΠΈΠ½ΡΡΡ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ
ΠΠ°ΡΠΈΠ² ΠΈΠ»ΠΈ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ°? ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·Π±ΠΎΡ ΠΏΡΠΎΡΡΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ
ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ Π·Π½Π°Π½ΠΈΠΉ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π½Π΅ ΠΏΠΎΠ²ΡΠ΅Π΄ΠΈΡ, ΡΡΠΎΠ±Ρ ΠΈΠΌΠ΅ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°. ΠΠΎΡΡΠ°ΡΠ°ΡΡΡ Π½Π΅ Π±ΡΡΡ Π·Π°Π½ΡΠ΄ΠΎΠΉ.
SDK β software development kit β ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°. ΠΠΎΠ²ΠΎΡΡΡ Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, β AppStore SDK β Π½Π°Π±ΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ»Π°ΡΠ΅ΠΆΠ΅ΠΉ ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΎΠΊ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. ΠΠ»ΠΈ Android SDK β ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΠΎΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΌΠ΅Π»ΠΊΠΈΡ SDK Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΠΎΠ΄ Π²ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ.
API β ΡΡΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, (ΡΡΠΆΠ΅Π»ΠΎ ΠΎΠ±ΡΡΡΠ½ΡΡΡ ΠΏΡΠΎΡΡΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ). Π ΡΠ»Ρ β ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΊ ΠΊΠΎΠ»ΡΡΠ°ΠΌ, ΠΊΠΎΡΠΎΠ±ΠΊΠ° ΠΏΠ΅ΡΠ΅Π΄Π°Ρ β ΠΊ Π΄Π²ΠΈΠ³Π°ΡΠ΅Π»Ρ, ΠΌΡ Π΄Π΅ΡΠ³Π°Π΅ΠΌ Π·Π° Π½ΠΈΡ , ΡΡΠΎΠ±Ρ ΠΌΠ°ΡΠΈΠ½Π΅ΡΠΈΡ Π²Π½ΡΡΡΠΈ ΡΠ΄Π΅Π»Π°Π»Π° Π΄Π»Ρ Π½Π°Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ ΡΠ΅ΡΠ΅Π· ΠΏΡΠΎΡΡΠΎΠΉ Π΄Π»Ρ Π²ΠΎΡΠΏΡΠΈΡΡΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ β Π½Π°Π±ΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΡΡΡΠΌΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠΌΠΈ.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΡ ΠΎΠΉ ΡΠ°Π·Π±ΠΎΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ² ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠ² ΡΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ β ΠΏΡΡΡΠ°Ρ ΡΡΠ°ΡΠ° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π±ΡΠ΄Π΅ΠΌ ΡΠ΅ΡΡΠ½Ρ, ΠΈΠ· Π»ΡΠ±ΠΎΠΉ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠ°ΠΊΠ°ΡΠΊΡ ΠΈ ΠΊΠΎΠ½ΡΠ΅ΡΠΊΡ, Π²ΠΎΠΏΡΠΎΡ Π»ΠΈΡΡ ΠΊΠ°ΠΊΠΎΠΉ ΡΠ΅Π½ΠΎΠΉ, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΠΎΡΠΎΠ·Π½Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ, Π·Π°ΠΉΠ΄Π΅ΠΌ ΡΡΡΡ ΠΈΠ·Π΄Π°Π»Π΅ΠΊΠ°.
Π’Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°ΡΠ΅, ΠΊΠ»ΠΈΠ΅Π½Ρ Π»ΡΠ±ΠΎΠ³ΠΎ Π±ΠΈΠ·Π½Π΅ΡΠ°, ΠΏΠΎΠΆΠ΅Π»Π°Π²ΡΠ΅Π³ΠΎ ΠΎΡΠΊΡΡΡΡ Π΄Π»Ρ ΡΠ΅Π±Ρ Π²ΠΎΠΆΠ΄Π΅Π»Π΅Π½Π½ΡΡ Π°ΠΉΡΠΈΡΠ΅ΡΠΊΡ, Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΡΠ΅ΡΠ΅Π· 3 ΠΎΠΊΠΎΡΠΊΠ°:
Π’Π°ΠΊΠΆΠ΅ ΠΌΡ Π½Π΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π° Π½ΠΎΡΠΈΠΌΠΎΠΉ ΡΠ»Π΅ΠΊΡΡΠΎΠ½ΠΈΠΊΠΈ, ΠΈΠ½ΡΠ΅ΡΠ½Π΅ΡΠ° Π²Π΅ΡΠ΅ΠΉ, ΡΠΊΡΠ°Π½ΠΎΠ² Ρ ΠΎΠ»ΠΎΠ΄ΠΈΠ»ΡΠ½ΠΈΠΊΠΎΠ², ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ embedded ΡΠΈΡΡΠ΅ΠΌ β ΡΠΆ ΠΎΡΠ΅Π½Ρ ΠΎΠ½ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½Ρ.
ΠΠ° Π·Π°ΡΠ΅ ΡΠΈΡΠΎΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΡΠΏΠ΅Ρ Π° ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ Π³Π°Π΄ΠΆΠ΅ΡΠΎΠ², Π½Π΅ΠΊΡΠΎ ΠΏΠΎ ΡΠ°ΠΌΠΈΠ»ΠΈΠΈ ΠΠΆΠΎΠ±Ρ, ΠΎΡΡΡΠ°ΠΈΠ²Π°Π» ΠΈΠ΄Π΅Ρ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΡΠΌΠ°ΡΡΡΠΎΠ½ β ΡΡΠΎ Π²ΡΠ΅Π³ΠΎ Π»ΠΈΡΡ ΠΎΠΊΠΎΡΠΊΠΎ ΠΊ Π²ΡΠ΅ΠΌΠΈΡΠ½ΠΎΠΉ ΠΏΠ°ΡΡΠΈΠ½Π΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅Π³Π΄Π° Ρ ΡΠΎΠ±ΠΎΠΉ. ΠΡΡΡΠΎ ΠΆΠ΅ Π·Π²ΡΡΠΈΡ! ΠΠΎΡ ΡΡΠΎ ΠΎΠ½ Π³ΠΎΠ²ΠΎΡΠΈΠ»:
ΠΠΎΠ»Π½ΠΎΡΠ΅Π½Π½ΡΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ Safari ΡΠΆΠ΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π²Π½ΡΡΡΠΈ iPhone. Π’ΠΎ Π΅ΡΡΡ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΈΠ·ΡΠΌΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Web 2.0 ΠΈ Ajax ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠ³Π»ΡΠ΄ΡΡ ΠΈ Π²Π΅Π΄ΡΡ ΡΠ΅Π±Ρ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΡΠΎΠ΄Π½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ iPhone. Π ΠΎΠ½ΠΈ ΡΠΏΠΎΡΠΎΠ±Π½Ρ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ Π΅Π³ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ°ΠΌΠΈ: Π·Π²ΠΎΠ½ΠΈΡΡ, ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΠ΅ ΠΏΠΈΡΡΠΌΠ°, ΡΠ°Π·ΡΡΠΊΠΈΠ²Π°ΡΡ ΠΌΠ΅ΡΡΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² Google Maps. Π Π·Π½Π°Π΅ΡΠ΅, ΡΡΠΎ? ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ Π½ΡΠΆΠ΅Π½ SDK! Π£ Π²Π°Ρ ΡΠΆΠ΅ Π²ΡΠ΅ Π΅ΡΡΡ Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ Π½Π΅Π²Π΅ΡΠΎΡΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π΄Π»Ρ iPhone, Π΅ΡΠ»ΠΈ Π²Ρ Π·Π½Π°Π΅ΡΠ΅, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π²Π΅Π±-ΡΡΠ°Π½Π΄Π°ΡΡΡ.
ΠΡΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π²Π·Π³Π»ΡΠ΄ ΠΠΆΠΎΠ±ΡΡ ΠΏΠΎΠΌΠΎΠ³ ΠΠΆΠΎΠ½Π½ΠΈ ΠΠΉΠ², ΡΠ±Π΅Π΄ΠΈΠ² Π΅Π³ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΡΡΠΎΠΉΡΡΠ²Π° ΡΠΏΠΏΠ» Π±Π΅Π· Π½Π°ΡΠΈΠ²Π½ΡΡ ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ Π±ΡΠ΄ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°ΡΠ΅Π»Π΅ΠΉ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ°, ΠΏΠ»ΡΡ ΠΎΡ ΡΡΠΎΠ³ΠΎ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ° ΠΏΠΎΡΠ΅ΡΡΠ΅Ρ ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΠΎΡΡΡ. Π ΡΠΎΠΆΠ΅ Π²ΡΠ΅ΠΌΡ, Π² ΠΊΡΠ»ΡΠ°ΡΠ°Ρ ΠΡΠ³Π» Π·ΡΠ΅Π» Π°Π½Π΄ΡΠΎΠΈΠ΄ ΠΈ Ρ ΠΌΠ΅Π½Π΅Π΄ΠΆΠΌΠ΅Π½ΡΠ° Π½Π΅ Π±ΡΠ»ΠΎ ΠΎΡΠΎΠ±ΠΎΠ³ΠΎ ΠΌΠ½Π΅Π½ΠΈΡ Π½Π° ΡΡΠΎΡ ΡΡΠ΅Ρ.
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, ΠΊ ΡΠ΅ΠΌΡ ΡΡΠ° Π»ΠΈΡΠΈΠΊΠ°. ΠΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈ, ΠΌΡ ΠΈΠΌΠ΅Π΅ΠΌ Π΄Π²Π° ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠΏΠΎΡΠΎΠ±Π° Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ:
-ΠΠ°ΡΠΈΠ²Π½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β ΡΠΎΠ·Π΄Π°Π½Π½ΠΎΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Π²Π΅Π½Π΄ΠΎΡΠΎΠ²: Apple/Google ΠΈ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΠΌΠΎΠ΅ ΡΠ΅ΡΠ΅Π· ΠΌΠ°Π³Π°Π·ΠΈΠ½Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠ»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΠΎΠ΄ Apple Π°ΠΊΡΡΠ°Π»ΡΠ½Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ: UIKit, SwiftUI + Π±ΠΎΠ³Π°ΡΡΠΉ iOS SDK, ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Swift (ΠΈ Π΄Π»Ρ ΠΎΡΠΎΠ±ΡΡ ΡΠ»ΡΡΠ°Π΅Π² ΡΡΠ°ΡΠΈΡΠΎΠΊ Objective-C)ΠΠ»Ρ ΠΠ½Π΄ΡΠΎΠΈΠ΄ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ β Android SDK, Jetpack Compose, ΡΠ·ΡΠΊΠΈ: Java 8, Kotlin
ΠΠ΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π΅ Π±ΡΠ°ΡΠ·Π΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ΅Π΄Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ΅ΡΡΡΡΠ°ΠΌ Π΄Π΅Π²Π°ΠΉΡΠ° (Ρ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π½Π΅ Π½Π°Π·ΡΠ²Π°Ρ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ°ΠΉΡΠΎΠΌ, ΡΠ°ΠΊ ΠΌΡ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Ρ ΠΎΡΠ΄Π΅Π»ΡΠ΅ΠΌ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΡΠ°Π½ΠΈΡΠΊΠΈ ΠΎΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΡΡ , Π½Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΎΠΉ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ, ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ). Π Π½ΠΈΠΌ ΠΆΠ΅ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠ΅ WebView β ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΎΠ±Π΅ΡΠ½ΡΡΡΠ΅ ΡΠΎΠ½ΠΊΠΈΠΌ ΡΠ»ΠΎΠ΅ΠΌ Π½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π³ΠΎ SDK Π±ΡΠ°ΡΠ·Π΅ΡΠ° Π΄Π»Ρ ΠΎΡΠΊΡΡΡΠΈΡ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ ΡΠ΅ΡΠ΅Π· ΡΡΠΎΡΡ.ΠΠ° Π»Π°Π΄Π°Π½ Π΄ΡΡΠ°ΡΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΠ΅Π»ΠΈ ΡΡΠΎΠ³ΠΎ Π²ΡΠΌΠΈΡΠ°ΡΡΠΈΠ΅Π³ΠΎ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π° β Apache Cordova ΠΈ Ionic. ΠΠ½ΠΈ Π½Π΅ ΡΠΊΡΡΠ²Π°ΡΡ ΡΠ²ΠΎΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ΅ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ β Π±ΡΡΡΡΠΎΠ΅ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠ»Ρ Π½ΠΈΡ Π°ΠΊΡΡΠ°Π»ΡΠ½Ρ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²Π΅Π± ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ β HTML, CSS, Javascript. Π‘ΡΠ΄Π° ΠΆΠ΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ ΠΏΠΎΠ΄Π΅Π»ΠΊΠΈ ΠΈΠ· no-code ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ² ΡΠΈΠΏΠ° GlideApps ΠΈ Π΅Π³ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ².
ΠΠ±Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΡΡΠΎΡΡ Π΄ΠΈΠ°ΠΌΠ΅ΡΡΠ°Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎ Π΄ΡΡΠ³ Π΄ΡΡΠ³Ρ ΠΏΠΎ ΡΡΠ΄Ρ ΠΊΡΠΈΡΠ΅ΡΠΈΠ΅Π²:
ΠΡΠΎΠΌΠ΅ΠΆ ΠΏΠ΅ΡΠ²ΡΡ Π΄Π²ΡΡ , Ρ Π½Π΅Π΄Π°Π²Π½ΠΈΡ ΠΏΠΎΡ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ Π³ΠΈΠ±ΡΠΈΠ΄Π½ΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π² Π½Π°ΡΡΠΎΡΡΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΡΠ΅:
ΠΠΈΠ±ΡΠΈΠ΄Π½ΡΠ΅, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΡΠ΅ΠΌΡΠ΅ Π² Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄ β ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ, ΡΠ·ΡΠΊΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅ΡΡ ΡΠ²ΠΎΠΉ Π½Π°Π±ΠΎΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΡΠ²ΡΠ·ΡΠ²Π°ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΡΡ SDK Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΌΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°ΠΌΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π·Π°ΠΌΠ΅Π½ΡΡΡΠΈΠ΅ ΠΈΡ .
Π’ΠΈΠΏΠΈΡΠ½ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΠ΅Π»ΠΈ ΡΡΠΎΠ³ΠΎ ΡΠ΅ΠΌΠ΅ΠΉΡΡΠ²Π°: React Native, Native Script, Electron.
ΠΠΎΠΊΠ° ΠΌΡ Π½Π΅ ΡΠ±Π΅ΠΆΠ°Π»ΠΈ Π΄Π°Π»Π΅ΠΊΠΎ, Ρ ΠΎΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π½Π΅ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΡΡ ΠΏΡΠ±Π»ΠΈΠΊΡ β ΡΠ°ΠΌΠ°Ρ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½Π°Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ, ΠΎΠ½ ΠΆΠ΅ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, β C++! Π’Π°-Π΄Π°-Π°-Π°ΠΌ! Π ΠΊΠ°ΠΊ Π½ΠΈ ΡΡΡΠ°Π½Π½ΠΎ, ΠΎΠ½ ΠΎΡΠ΅Π½Ρ ΡΠΈΡΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π½Π°ΡΠΈΠ²Π½ΡΡ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ. ΠΠΈΠΊΠ°ΠΊΠΈΡ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡΠΎΠ²! Π’ΠΎΠ»ΡΠΊΠΎ Ρ Π°ΡΠ΄ΠΊΠΎΡ! ΠΠ΅Π΄Ρ Π½Π°ΡΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΡΡΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠ½ΠΎΠΏΠΎΡΠΊΠΈ ΠΈ ΡΠΏΠΈΡΠΊΠΈ. ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΡΠ΅Π½ ΡΠΎΡΠ΅ΠΊ Π½Π° ΠΊΠ°ΡΡΠ°Ρ , Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Ρ ΠΎΡΠΎΠ±ΡΠΌΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌΠΈ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ, ΠΊΡΠΈΠΏΡΠΎΠ³ΡΠ°ΡΠΈΡ, Π΄ΠΎΡΡΠ°Π²ΠΊΠ° ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π²ΠΈΠ΄Π΅ΠΎ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π΅ΠΆΠ΅ΡΠ΅ΠΊΡΠ½Π΄Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΊΠΎΡΠΈΡΠΎΠ²ΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΌΠΎΠ»Π½ΠΈΠ΅Π½ΠΎΡΠ½ΠΎ Π΄Π»Ρ Π΄Π΅ΡΡΡΠΊΠΎΠ² Π±ΠΈΡΠΆΠ΅Π²ΡΡ ΡΠΈΠΊΠ΅ΡΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅. ΠΠΈΠΊΡΠΎ Π½Π΅ ΠΏΠΈΡΠ΅Ρ ΡΡΡ Π»ΠΎΠ³ΠΈΠΊΡ Π΄Π²Π°ΠΆΠ΄Ρ ΠΈΠ»ΠΈ ΡΡΠΈΠΆΠ΄Ρ ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄ΡΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ.
ΠΠ»Π°Π²Π½ΡΠΉ Π²ΠΎΠΏΡΠΎΡ ΠΏΡΠΈ Π²ΡΠ±ΠΎΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ (Π±Π΅Π·ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΈΠ½ΡΡ Π±ΠΈΠ·Π½Π΅Ρ ΡΠ΅Π»Π΅ΠΉ) β ΠΎΠΏΡΡ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΏΠΎΠ΄Π°ΡΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. Π Π²ΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΡΠΈΡΠ΅ΡΠΈΠ΅Π², Π²Π»ΠΈΡΡΡΠΈΡ Π½Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΠΎΠΏΡΡ:
ΠΠΎΠ²ΠΎΡΡ ΠΎΠ±ΡΠ°Π·Π½ΠΎ, ΠΏΠΎ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΡΡΠΈ ΠΊ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΉ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅, ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΡΠ°ΠΊ:
ΠΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ, Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, Ρ ΠΎΡΡΡ Π·Π°Π²Π»Π΅ΡΡ Π½Π°Ρ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°ΠΌΠΈ Π΅Π΄ΠΈΠ½ΠΎΠΉ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ. Π‘ ΡΡΠΈΠΌ ΡΡΡΠ΄Π½ΠΎ ΡΠΏΠΎΡΠΈΡΡ:
Π‘ΡΠ°Π²Π½ΠΈΡΠ΅ 2 ΠΊΡΡΠΎΡΠΊΠ° ΠΊΠΎΠ΄Π°, ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΠΈΡ ΠΊΠ°ΡΡΠΎΡΠΊΡ Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΎΠΉ:
ΠΠΎΠΌΠ°Π½Π΄Ρ Π½Π°ΡΠΈΠ²Π½ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΠ°ΡΡΠΎ ΡΠ°Π·Π±Π°Π²Π»ΡΡΡ C/C++ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°ΠΌΠΈ. ΠΠ½ΠΈ ΠΏΠΈΡΡΡ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ Π·Π°Π΄Π°Ρ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ Π½Π΅ ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Ρ Π±ΠΈΠ·Π½Π΅Ρ Π»ΠΎΠ³ΠΈΠΊΠΎΠΉ.
ΠΠ° ΡΡΠ°ΡΡΠ΅ Ρ Π½ΡΠ»Ρ Π΅ΠΌΡ Π½Π΅Ρ ΡΠ°Π²Π½ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° ΠΊ ΡΠΊΠΎΡΠΎΡΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. 2-3 ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° ΡΠΏΠΎΡΠΎΠ±Π½Ρ Π½Π°ΠΊΠΎΠ²ΡΡΡΡΡ Π±Π΅Π·ΡΠΌΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΡ Π² ΠΊΡΠ°ΡΡΠ°ΠΉΡΠΈΠ΅ ΡΡΠΎΠΊΠΈ ΠΈ Π²ΡΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡ. ΠΡΠΈ ΡΡΠΎΠΌ look-and-feel, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π±ΡΠ΄ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΡΠΌΠΈ. ΠΠΎΠ»ΡΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΡΠ΅ΡΠ°Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π·Π°Π΄Π°Ρ ΡΠΈΠΏΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ. Π― Π±Ρ Π½Π°Π·Π²Π°Π» flutter ΡΠ΅ΡΠ΅Π±ΡΡΠ½ΠΎΠΉ ΠΏΡΠ»Π΅ΠΉ, Π½ΠΎ. Π½Π°Π΄ΠΎ ΠΊΠΎΠ΅-ΡΡΠΎ ΠΈΠΌΠ΅ΡΡ Π² Π²ΠΈΠ΄Ρ.
Π’Π΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ UI! ΠΠ°ΠΊ ΠΈ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ Dart.
ΠΡΠ΄Π΅ΡΠΆΠΊΠ° ΠΈΠ· Π²ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ Π² Π΄ΠΎΠΊΠ°Π·Π°ΡΠ΅Π»ΡΡΡΠ²ΠΎ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π΅ΡΡΡ ΡΠ»Π°ΡΡΠ΅Ρ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅:
Flutter is an open-source UI software development kit created by Google.
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Ρ ΡΡΠΈΠΌ SDK ΠΌΠ½Π΅ Π²ΡΠ΅Π³Π΄Π° Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°Π»Π° ΠΏΠΈΡΡΠΌΠΎ ΠΈΠ· ΠΡΠΎΡΡΠΎΠΊΠ²Π°ΡΠΈΠ½ΠΎ:
ΠΠ° Π»ΠΈΡΠ½ΠΎΠΌ ΠΎΠΏΡΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½ΠΎ, ΡΡΠΎ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΡΠ°Π·Π²ΠΈΡΠΈΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° ΡΠΊΠΎΡΠΎΡΡΡ Π½Π°ΡΠΈΠ²Π½ΠΎΠΉ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎ Π²ΡΠ΅ΠΌΠ΅Π½Π΅ΠΌ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π΅Ρ, Π° ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠ±ΡΠ²Π°Π΅Ρ. ΠΡΠΎ ΠΎΠ±ΡΡΠ»ΠΎΠ²Π»Π΅Π½ΠΎ ΡΠ΅ΠΌ, ΡΡΠΎ Π² Π½Π°ΡΠ°Π»Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΡΠΈΠ»ΠΈΠΉ Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΈ Π½Π°ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΊΠΎΠ΄Π° Π΄Π»Ρ 2Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ², Π½Π΅ΠΆΠ΅Π»ΠΈ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ. ΠΠΎΠΊΠ° ΡΠΌΡΠ΄ΡΠ΅Π½Π½ΡΠ΅ Π² ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΡ ΡΠ²ΠΎΠΈΡ ΠΏΠ»Π°ΡΡΠΎΡΠΌ, ΠΊΠΎΠ΄Π΅ΡΡ ΡΠΊΡΡΠΏΡΠ»Π΅Π·Π½ΠΎ ΡΠΎΠ±ΠΈΡΠ°ΡΡ Π±Π°Π·ΠΎΠ²ΡΠ΅ Π΄ΠΆΠ΅Π½ΡΠ΅Π»ΡΠΌΠ΅Π½ΡΠΊΠΈΠ΅ Π½Π°Π±ΠΎΡΡ Π΄Π»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ Π½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΈΡ ΠΊΠΎΠ»Π»Π΅Π³ΠΈ ΠΏΠΎ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΠΌΡ ΡΠ΅Ρ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΆΠ΅ Π³ΠΎΡΠΎΠ²ΡΡΡΡ Π²ΡΠΏΡΡΠΊΠ°ΡΡ MVP. ΠΡΡ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π° Π·ΡΠ΅Π»ΠΎΠΉ ΡΡΠ°Π΄ΠΈΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°.
ΠΠΎΡ ΡΠΏΠΈΡΠΎΠΊ Π±Π΅Π΄ Π½Π° ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π° ΠΏΠΎΠ·Π΄Π½Π΅ΠΉ ΡΡΠ°Π΄ΠΈΠΈ ΡΠΎΠΆΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π΄Π΅Π½Π΅Π³, ΡΠ΅ΠΌ Π½Π° ΡΡΠ°ΡΡΠ΅:
ΠΠ°ΠΉΡΠ΅ Π·Π½Π°ΡΡ, Π΅ΡΠ»ΠΈ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎ KMM ΠΈ Xamarin, ΠΆΠ΄Ρ Π²Π°Ρ ΠΈ Π²Π°ΡΠΈ ΠΌΠ½Π΅Π½ΠΈΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ !
ΠΠ°Π½Π°Π»Π° Π² ΡΠ΅Π»Π΅Π³Π΅ Π½Π΅Ρ, Π½ΠΎ Π΅ΡΠ»ΠΈ ΡΡΠΎ, ΠΏΠΈΡΠΈΡΠ΅ Π² Π»ΠΈΡΠΊΡ
Π Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΈΠ· ΡΡΡΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡΠ° Java: ΠΏΡΡΠ΅ΡΠ΅ΡΡΠ²ΠΈΠ΅ ΡΡΠ΄Π° ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ (ΡΠ°ΡΡΡ 1)
Java ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ ΡΠ·ΡΠΊΠΈ ΠΏΡΠΎΡΡΡ ΠΈ ΡΠ΄ΠΎΠ±Π½Ρ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ , Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π½ΡΠΆΠ½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, Π½Π°ΠΏΠΈΡΠ°Π½Π½Π°Ρ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° C ΠΈΠ»ΠΈ C++. ΠΠ½ΠΎΠ³Π΄Π° Ρ ΠΎΡΠ΅ΡΡΡ ΠΏΠΎΠ·Π²Π°ΡΡ ΠΏΠ°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈΠ· ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ API, ΠΈΠ»ΠΈ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΡΠ»ΡΡΡΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π΄Π»Ρ ΠΌΠΎΠ΄ΡΠ»Ρ β ΠΈ ΡΠΎΠ³Π΄Π° ΠΏΡΡΠΌΠΎΠΉ ΠΏΡΡΡ Π² Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄.
ΠΠΎ ΡΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½ΡΠ΅ ΠΊΠ°ΠΌΠ½ΠΈ: Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΈ Π²ΡΠ·Π²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈ Π»Π΅Π³ΠΊΠΎ, Π½ΠΎ JVM Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΊΡΠ°ΡΠΈΡΡΡΡ Π² ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ ΠΌΠ΅ΡΡΠ°Ρ , ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΠ°Π΄Π°Π΅Ρ, ΡΠ±ΠΎΡΡΠΈΠΊ ΠΌΡΡΠΎΡΠ° ΠΏΠ΅ΡΠ΅ΡΡΠ°Π΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Ρ ΡΠ°Π±ΠΎΡΠΎΠΉ, Π° Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ ΡΠ°ΡΡΡΠ²ΡΡΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΠ΅ C-ΡΠ½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ Ρ Π±ΡΠΊΠ²Π°ΠΌΠΈ JNI. Π§ΡΠΎ ΠΆΠ΅ ΠΌΠΎΠ³Π»ΠΎ ΠΏΠΎΠΉΡΠΈ Π½Π΅ ΡΠ°ΠΊ?
ΠΠ²Π°Π½ Π£Π³Π»ΡΠ½ΡΠΊΠΈΠΉ (dbg_nsk) ΠΈΠ· Huawei ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΡΡΡ ΡΠΎ Π²ΡΠ΅ΠΌ ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ: ΡΡΠΎ Π½Π΅ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ Π² ΠΈΠ½ΡΠ΅ΡΠΎΠΏΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ Java ΠΈ Π½Π°ΡΠΈΠ²Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ ΡΠ°Π½ΡΡΠ΅ ΠΈ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π΄Π΅Π»Π°ΡΡ Π΄Π»Ρ ΠΈΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ (ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΡΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ). ΠΠ²Π°Π½ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΡΠΎΡΠ°Π΄ΠΎΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π²Π½Π΅Π·Π°ΠΏΠ½ΡΡ OOM ΠΈ ΡΠ°Π·ΠΌΡΡΠ»ΡΠ΅Ρ Π½Π° ΡΠ΅ΠΌΡ Π±ΡΠ΄ΡΡΠ΅Π³ΠΎ β Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ² Panama ΠΈ Sulong.
ΠΡ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΈΠ»ΠΈ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡ Π΄ΠΎΠΊΠ»Π°Π΄Π° ΠΎ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π½Π°ΡΠΈΠ²Π°ΠΌΠΈ Π² Java. Π ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ°ΡΡΠΈ:
ΠΠΎ Π²ΡΠΎΡΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠ°ΡΡΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ Π΅ΡΡΡ Π²Π°ΡΠΈΠ°Π½ΡΡ, ΡΡΠΎ ΠΈΠ· Π½ΠΈΡ Π±ΡΡΡΡΠ΅Π΅ ΠΈ Π»ΡΡΡΠ΅, ΠΈ Π΅ΡΡΡ Π»ΠΈ ΡΠ½ΠΈΠ²Π΅ΡΡΠ°Π»ΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° β Π²ΡΡ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΠΊΠΎΠ΄Π° ΠΈ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°ΠΌΠΈ.
ΠΠ°Π»Π΅Π΅ β ΠΏΠΎΠ²Π΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ Π»ΠΈΡΠ° ΡΠΏΠΈΠΊΠ΅ΡΠ°.
Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΌΡ Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΏΡΠΎ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΏΡΠΎ ΠΏΡΡΠ΅ΡΠ΅ΡΡΠ²ΠΈΠ΅ ΠΈΠ· Java Π² Π½Π΅Π³ΠΎ ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Ρ JVM-ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ, 7.5 Π»Π΅Ρ ΡΠ°Π±ΠΎΡΠ°Π» Π² Excelsior, Π³Π΄Π΅ ΠΌΡ Π΄Π΅Π»Π°Π»ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ Excelsior JET, Π° Π²ΠΎΡ ΡΠΆΠ΅ ΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π³ΠΎΠ΄Π° ΡΠ°Π±ΠΎΡΠ°Ρ Π² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Huawei, Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Excelsior@Huawei, Π³Π΄Π΅ ΠΌΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Π·Π°Π½ΠΈΠΌΠ°ΡΡΡΡ ΡΠ²ΠΎΠΈΠΌ Π»ΡΠ±ΠΈΠΌΡΠΌ Π΄Π΅Π»ΠΎΠΌ: ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ°ΠΌΠΈ, JVM ΠΈ Π½ΠΎΠ²ΡΠΌΠΈ ΡΠ·ΡΠΊΠ°ΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Ρ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠ°ΡΡΡ Π²ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΌ ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ JVM, ΡΠΌΠΎΡΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΡΡΡΠΎΠ΅Π½ΠΎ, ΠΏΡΠ°Π²Π»Ρ β Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅, ΠΈ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ²ΡΠ·ΠΊΠΈ JVM Ρ Π½Π°ΡΠΈΠ²Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. ΠΠΎΡΡΠΎΠΌΡ ΡΠ΅Π³ΠΎΠ΄Π½Ρ Ρ ΠΎΡΡ Π²Π°ΠΌ ΠΏΡΠΎ ΡΡΠΎ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ.
Π Java Π΅ΡΡΡ ΡΠ°ΠΊΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π°Ρ ΡΠΈΡΠ° β Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ Π±Π΅Π· ΡΠ΅Π», Π·Π°ΡΠΎ ΡΠΎ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΌ ΠΊΠ»ΡΡΠ΅Π²ΡΠΌ ΡΠ»ΠΎΠ²ΠΎΠΌ native:
ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΡΠΎΠΈΡ ΠΈΡΠΊΠ°ΡΡ Π³Π΄Π΅-ΡΠΎ Π΅ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΠΏΠΎΠ΄Π³ΡΡΠΆΠ°Π΅ΠΌΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ . Π Π½Π°ΠΏΠΈΡΠ°Π½Π° ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π° ΠΊΠ°ΠΊΠΈΡ -ΡΠΎ Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠ°Ρ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° C/C++ ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠΌ Π΄ΡΡΠ³ΠΎΠΌ ΡΠ·ΡΠΊΠ΅, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ C-like Π±ΠΈΠ½Π°ΡΠ½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΡ.
ΠΡΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΠΏΡΠΎΡΡΡΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΠΈ, ΡΠ°ΠΊ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠ΅, ΡΡΠΎ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΆΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π²ΡΡΠ΅. ΠΡΠ»ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ ΠΏΠ΅ΡΠ²ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ goNative, ΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΠ΅ ΠΈΠ· Java Π² C. Π Π²ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ goThere ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΈΠ· Java Π² C, ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΡΠ΄Π° Java-ΠΎΠ±ΡΠ΅ΠΊΡ callback ΠΈ Π²ΡΠ·Π²Π°ΡΡ ΠΎΡ Π½Π΅Π³ΠΎ ΡΠΆΠ΅ Java-ΠΌΠ΅ΡΠΎΠ΄.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² call stack ΠΌΠΎΠ³ΡΡ ΡΠ΅ΡΠ΅Π΄ΠΎΠ²Π°ΡΡΡΡ java ΠΈ Π½Π°ΡΠΈΠ²Π½ΡΠ΅ ΡΡΠ΅ΠΉΠΌΡ.
ΠΠ°ΡΠ΅ΠΌ Π½Π°ΠΌ Π½ΡΠΆΠ½Ρ Π½Π°ΡΠΈΠ²Ρ
Java β Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ managed-ΡΠ·ΡΠΊ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅Π³ΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ΄ΠΎΠ±ΡΡΠ²Π°.
Π’Π°ΠΌ Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΡΡ, ΠΈ Π²Ρ, Π½Π°Π²Π΅ΡΠ½ΠΎΠ΅, ΡΠΆΠ΅ ΠΎΡΠ²ΡΠΊΠ»ΠΈ ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΡΠΈΠΏΠ° ΡΡΠ΅ΡΠ΅ΠΊ ΠΏΠ°ΠΌΡΡΠΈ, Π²ΠΈΡΡΡΠΈΡ ΡΡΡΠ»ΠΎΠΊ ΠΈ ΠΏΡΠΎΡΠ΅Π³ΠΎ β Π²ΡΡ ΡΡΠΎ ΠΎΡΡΠ°Π»ΠΎΡΡ Π³Π΄Π΅-ΡΠΎ Π² ΡΠ°ΠΉΠΎΠ½Π΅ C, Π° Π² Java Π΅ΡΡΡ GC, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΡΡΠΈΠΌ Ρ ΠΎΡΠΎΡΠΎ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ.
Π Π²ΠΎΠΎΠ±ΡΠ΅ Java β Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΡΠ·ΡΠΊ. ΠΠ°ΠΆΠ΅ Π΅ΡΠ»ΠΈ Π²Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΠΉΠ΄Π΅ΡΠ΅ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΌΠ°ΡΡΠΈΠ²Π°, Π²ΠΌΠ΅ΡΡΠΎ ΡΠΆΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π²Π°Π»Π°, ΠΊΠ°ΠΊ Π±ΡΠ»ΠΎ Π±Ρ Π² Π‘, Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΊΡΠ°ΡΠΈΠ²ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ, ΠΈ Ρ ΡΡΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠ΅ΠΉ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ.
ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ Java β ΡΡΠΎ ΡΠ°ΠΊΠΎΠΉ Π¨ΠΈΡ ΠΈΠ· Π‘ΡΠ΅Π΄ΠΈΠ·Π΅ΠΌΡΡ: Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ΅, ΡΠ΄ΠΎΠ±Π½ΠΎΠ΅, ΠΏΡΠΈΡΡΠ½ΠΎΠ΅ Π΄Π»Ρ ΠΆΠΈΠ·Π½ΠΈ ΠΌΠ΅ΡΡΠΎ, Π³Π΄Π΅ Π²ΡΠ΅ ΡΡΠ°ΡΠ°ΡΡΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Ρ Π²Π°Ρ Π²ΡΡ Π±ΡΠ»ΠΎ Ρ ΠΎΡΠΎΡΠΎ, ΠΈ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π»ΠΎΠΌΠ°Π»ΠΎΡΡ.
ΠΡΠ»ΠΈ Π²Ρ Π½Π΅ Π±ΡΠ΄Π΅ΡΠ΅ Π²ΡΡ ΠΎΠ΄ΠΈΡΡ Π·Π° Π΅Π³ΠΎ Π³ΡΠ°Π½ΠΈΡΡ, ΡΠΎ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π½ΠΈΡΠ΅Π³ΠΎ ΠΏΠ»ΠΎΡ ΠΎΠ³ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ.
Π Π²ΠΎΡ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄ β ΡΡΠΎ Π΅Π³ΠΎ ΠΏΠΎΠ»Π½Π°Ρ ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡΡ. ΠΡΠΎ ΠΠΎΡΠ΄ΠΎΡ, Π³Π΄Π΅ ΡΠ°Π³ Π²Π»Π΅Π²ΠΎ-Π²ΠΏΡΠ°Π²ΠΎ, ΠΈ Π²Π°Ρ ΡΠΆΠΈΡΠ°Π΅Ρ Π³ΠΎΡΠ½ΡΠΉ ΡΡΠΎΠ»Π»Ρ.
ΠΠΎ Π·Π½Π°Π΅ΡΠ΅, ΠΈΠ½ΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ Π²ΡΡ ΠΎΠ΄ΠΈΡΡ ΠΈΠ· ΡΡΡΠ½ΠΎΠ³ΠΎ Π¨ΠΈΡΠ° ΠΈ ΠΈΠ΄ΡΠΈ Π² ΠΏΡΡΠ΅ΡΠ΅ΡΡΠ²ΠΈΠ΅ ΠΊ Π ΠΎΠΊΠΎΠ²ΠΎΠΉ Π³ΠΎΡΠ΅.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Ρ ΠΎΡΠ΅ΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΠΎ-ΡΠΎ Π½Π°ΠΏΡΡΠΌΡΡ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠΎΠΏΡΡΡΠΈΠΌ, Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΡΠ·Π½Π°ΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡΠΎΠΊΡΠΈ ΡΡΠΎΠΈΡ Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ β Π½Π°ΠΏΡΡΠΌΡΡ ΠΈΠ· Java Π²Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠ΄Π΅Π»Π°Π΅ΡΠ΅, Π²Π°ΠΌ ΠΎΠΏΡΡΡ-ΡΠ°ΠΊΠΈ Π½ΡΠΆΠ½ΠΎ ΠΎΠΏΡΡΡΠΈΡΡΡΡ Π½Π° ΡΡΠΎΠ²Π΅Π½Ρ Π½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ Π΄ΡΡΠ½ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ· WinAPI Π² ΡΠ»ΡΡΠ°Π΅ Windows.
ΠΡΡΡ Π΅ΡΡ ΠΎΠ΄Π½Π° ΠΌΠΎΡΠΈΠ²Π°ΡΠΈΡ. ΠΠ½ΠΎΠ³ΠΈΠ΅ Π»ΡΠ΄ΠΈ ΠΏΡΠΈΠ²ΡΠΊΠ»ΠΈ Π΄ΡΠΌΠ°ΡΡ, ΡΡΠΎ Java ΡΠΎΡΠΌΠΎΠ·ΠΈΡ, Π° Π²ΠΎΡ C++ β ΡΡΠΎ ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡΠΎ. ΠΠΎΡΡΠΎΠΌΡ Π΅ΡΠ»ΠΈ Π²Π·ΡΡΡ ΠΈ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΠΌΡΠΉ performance critical ΠΌΠΎΠ΄ΡΠ»Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° Π½Π° ΠΏΠ»ΡΡΡ, ΡΠ²ΡΠ·Π°ΡΡ Π²ΡΡ ΡΡΠΎ ΡΠ΅ΡΠ΅Π· Π½Π°ΡΠΈΠ²Ρ, ΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΠΎΡΠ΅ΠΌΡ ΡΡΠ° ΠΌΠΎΡΠΈΠ²Π°ΡΠΈΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠΎΠΌΠ½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ, Ρ ΠΏΠΎΠΊΠ°ΠΆΡ Π½ΠΈΠΆΠ΅, Π½ΠΎ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½Π° ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π² ΡΠ°ΠΌΠΎΠΌ JDK ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅Π³ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ ΡΠ΅ΡΠ΅Π· Π½Π°ΡΠΈΠ²Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ. ΠΠΎΡΡΠΎΠΌΡ Π²Ρ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π΅ΡΠ΅ΡΡ Ρ ΡΡΠΈΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π΄Π΅Π½Ρ, ΡΠ°ΠΊ ΡΡΠΎ Π½Π΅ΠΏΠ»ΠΎΡ ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
Π Π²ΠΎΡ Π²Ρ ΠΏΠΎΠ»Π½Ρ ΡΠ½ΡΡΠ·ΠΈΠ°Π·ΠΌΠ°, Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ ΡΠ²ΠΎΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ Π½Π° Π‘, Π½Π°ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ Π½Π° Java, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΠ΅, ΠΎΠΆΠΈΠ΄Π°Π΅ΡΠ΅, ΡΡΠΎ ΡΠ΅ΠΉΡΠ°Ρ Π²ΡΡ ΡΡΠΊΠΎΡΠΈΡΡΡ, Π° Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅β¦ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ SIGSEGV, Exception_Access_Violation ΠΈΠ»ΠΈ Π΅ΡΡ ΠΎΠ΄ΠΈΠ½ SIGSEGV.
Π ΠΎΠ±ΡΠ΅ΠΌ, Π²Π°ΡΠ΅ ΠΏΡΡΠ΅ΡΠ΅ΡΡΠ²ΠΈΠ΅ ΠΈΠ· Π¨ΠΈΡΠ° Π² ΠΠΎΡΠ΄ΠΎΡ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡΠΎ, ΠΊΠ°ΠΊ Ρ ΠΠΎΡΠΎΠΌΠΈΡΠ°. Π Π°Π·Π²Π°Π» ΡΡΡΠ°ΡΠ½ΡΠΉ, Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ, Π±ΡΠ΄ΡΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ ΡΠ»ΠΎΠΌΠ°Π»Π°ΡΡ ΡΠ°ΠΌΠ° Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π°. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°ΠΆΠ΅ ΡΠ΅ΠΏΠΎΡΡΡΡ Π±Π°Π³ΠΈ, ΠΌΠΎΠ», JVM ΡΠ°Π·Π²Π°Π»ΠΈΠ»Π°ΡΡ.
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π½Π°ΡΠΈΠ²Ρ.
Π ΡΡΠΎΠΌ ΠΏΠΎΡΡΠ΅ Ρ Π² ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Ρ ΠΎΡΡ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΠΏΠΎΡΠ΅ΠΌΡ Π»ΡΠ΄ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ SIGSEGV Ρ Π½Π°ΡΠΈΠ²Π°ΠΌΠΈ, Π²ΠΎ-Π²ΡΠΎΡΡΡ , ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π²Π°ΠΌ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΉ ΠΏΡΡΡ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΉΡΠΈ ΠΈΠ· Π¨ΠΈΡΠ° Π² ΠΠΎΡΠ΄ΠΎΡ, Π½Π΅ ΠΎΡΡΡΡΠ΅Π»ΠΈΡΡ ΡΠ΅Π±Π΅ Π½ΠΎΠ³Ρ, ΠΈ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ SIGSEGV, ΡΡΠΎΠ±Ρ Π²ΡΡ Π±ΡΠ»ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΈ Ρ ΠΎΡΠΎΡΠΎ.
ΠΠΎ Ρ ΠΎΠ΄Ρ ΠΏΠΎΠ²Π΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π²ΡΠ΅ Π²ΡΠ΅ΠΌΡ ΡΠ²Π΅ΡΡΡΡΡΡ Π²ΠΎΡ Ρ ΡΠ°ΠΊΠΎΠΉ ΠΊΠ°ΡΡΠΎΠΉ Β«ΠΠ°ΠΊ ΠΏΠΎΠ·Π²Π°ΡΡ Π½Π°ΡΠΈΠ²?Β»
ΠΡΠ»ΠΈ Π²Ρ ΠΈΠ΄Π΅ΡΠ΅ ΠΈΠ· Π¨ΠΈΡΠ° Π² ΠΠΎΡΠ΄ΠΎΡ, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΡΠ²Π΅ΡΠΈΡΡ Π½Π° ΡΡΠΈ Π²ΠΎΠΏΡΠΎΡΠ°:
ΠΡΠ²Π΅ΡΡ Π½Π° ΡΡΠΈ Π²ΠΎΠΏΡΠΎΡΡ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΡΡ Π½Π°ΠΌ ΡΠ°ΠΌΡΠ΅ Π±ΠΎΠ»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΡΠ° Π² ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ΅ Π½Π°ΡΠΈΠ²Π½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΈ ΠΏΠΎΠΌΠΎΠ³ΡΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
ΠΡΡΠΎΡΠΈΡ Π΄ΠΎ Π½Π°ΡΠ΅ΠΉ ΡΡΡ
Π‘Π½Π°ΡΠ°Π»Π° ΡΡΡΡ-ΡΡΡΡ ΠΈΡΡΠΎΡΠΈΠΈ.
ΠΠ°ΡΠΈΠ²Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ Π² Java Π΅ΡΡ Π² ΡΠ°ΠΌΠΎΠΌ Π½Π°ΡΠ°Π»Π΅, Π±ΡΠΊΠ²Π°Π»ΡΠ½ΠΎ Π² JDK 1.0 ΡΠΆΠ΅ Π±ΡΠ» Native Method Invocation, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ» Π²ΡΠ·ΡΠ²Π°ΡΡ C-ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ. ΠΠΎ ΠΎΠ½ Π±ΡΠ» Π·Π°ΡΠΎΡΠ΅Π½ Π½Π° Π΄Π΅ΡΠ°Π»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° Sun JVM. ΠΠ° ΡΠΎ, ΠΊΠ°ΠΊ ΡΠ°ΠΌ Π»Π΅ΠΆΠ°Ρ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ, ΠΊΠ°ΠΊΠΎΠΉ ΡΠ±ΠΎΡΡΠΈΠΊ ΠΌΡΡΠΎΡΠ° ΡΠ°ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ.
ΠΡΠ»ΠΈ ΠΈ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Microsoft ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π»Π° ΡΠ²ΠΎΠΉ Raw Native Interface. ΠΠ½ Π±ΡΠ» Π² ΡΠ΅ΠΌ-ΡΠΎ Π»ΡΡΡΠ΅, Π² ΡΠ΅ΠΌ-ΡΠΎ Ρ ΡΠΆΠ΅, Π½ΠΎ ΡΠΎΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°Π» ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΠ΄Π½ΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½ΠΎΠΉ β ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΆΠ΅ Microsoft J++.
ΠΡΠ»ΠΈ ΠΏΠΎΠΏΡΡΠΊΠΈ ΡΠ΄Π΅Π»Π°ΡΡ Π½Π΅ΠΉΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΡ, ΠΊΠ°ΠΊ Ρ Netscape, Π½ΠΎ Π² ΡΠ΅Π»ΠΎΠΌ ΡΡΠΎ Π±ΡΠ»ΠΈ ΡΡΠΌΠ½ΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½Π°. ΠΠΎΠ³Π΄Π° Π²Ρ ΠΏΠΈΡΠ°Π»ΠΈ Π½Π°ΡΠΈΠ², Π²Ρ Π½Π΅ ΠΌΠΎΠ³Π»ΠΈ Π±ΡΡΡ ΡΠ²Π΅ΡΠ΅Π½Ρ, ΡΡΠΎ ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° Π²ΡΠ΅Ρ JVM ΠΈΠ»ΠΈ Ρ ΠΎΡΡ Π±Ρ Π½Π° ΠΊΠ°ΠΊΠΈΡ -ΡΠΎ.
ΠΠ°ΡΠ° ΡΡΠ°: JNI β Java Native Interface
ΠΠ°ΡΠ° ΡΡΠ° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ Π·Π½Π°ΠΌΠ΅Π½ΠΈΡΠΎΠ³ΠΎ Java Native Interface ΠΈΠ»ΠΈ JNI. ΠΡΠΎ Π±ΡΠ» Π΅Π΄ΠΈΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΡΡΠΎΠ±Ρ ΠΏΡΠ°Π²ΠΈΡΡ Π²ΡΠ΅ΠΌΠΈ, ΠΈ ΠΎΠ½ Π±ΡΠ» ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π±ΡΠ» JVM Π½Π΅ΠΉΡΡΠ°Π»Π΅Π½.
ΠΠ½ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π·Π°ΡΠ°ΡΠΈΠ²Π°Π»ΡΡ Π½Π° ΡΠΎ, ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Π½Π° ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π°, Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΊΠ°ΠΊΠ°Ρ ΡΠ°ΡΠΊΠ»Π°Π΄ΠΊΠ° ΠΏΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ Π² ΠΏΠ°ΠΌΡΡΠΈ, Π½Π΅Π²Π°ΠΆΠ½ΠΎ ΠΊΠ°ΠΊΠΎΠΉ GC.
ΠΡΠ»ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ JNI, Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ, ΡΡΠΎ Π²Π°Ρ Π½Π°ΡΠΈΠ² ΡΠ°ΠΌ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠ°Π»Π΅Π΅ Ρ Π±ΡΠ΄Ρ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΏΡΠΎ JNI ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ»ΠΎΡ ΠΎΠ³ΠΎ, Π½ΠΎ Ρ ΠΎΡΡ Π°ΠΊΡΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Π½Π° ΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΠΎ Π±ΡΠ» ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΉ ΠΏΡΠΎΠ³ΡΠ΅ΡΡ Π΄Π»Ρ Π²ΡΠ΅ΠΉ ΠΎΡΡΠ°ΡΠ»ΠΈ, Π½Π°ΠΊΠΎΠ½Π΅Ρ-ΡΠΎ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΈΡΠ°ΡΡ Π½Π°ΡΠΈΠ²Ρ Π±Π΅Π· ΡΡΡΠ°Ρ Π°, ΡΡΠΎ ΠΎΠ½ΠΈ Π³Π΄Π΅-Π½ΠΈΠ±ΡΠ΄Ρ Π½Π΅ Π·Π°Π²Π΅Π΄ΡΡΡΡ.
ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ.
Π‘ΠΎ ΡΡΠΎΡΠΎΠ½Ρ Java Π²ΡΡ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠΈΠ»ΠΎ, Π²Ρ ΡΡΠΎ ΡΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ.
ΠΠΈΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄Ρ Π±Π΅Π· ΡΠ΅Π»Π°, ΠΏΠΈΡΠ΅ΠΌ Π³Π΄Π΅ ΠΈΡΠΊΠ°ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² System.LoadLibrary Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΏΠΎΠ΄Π³ΡΡΠ·ΠΈΡΡ dll-ΠΊΡ, ΠΈ ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΡΡΠΈΠΌ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ Π² Π‘ ΠΈΠ»ΠΈ Π‘++.
Callback β ΡΡΠΎ ΠΏΡΠΎΡΡΠΎ ΠΊΠ»Π°ΡΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ call, Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ Β«Ok, we are in Shire again!Β», Π² ΠΌΠΎΡΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΡ Π²Π΅ΡΠ½ΡΠ»ΠΈΡΡ Π² Π¨ΠΈΡ Π½Π° ΠΎΡΠ»Π°Ρ .
ΠΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΡ ΡΡΠ½ΠΊΡΠΈΠΉ?
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½Π°ΡΠΈΠ²Π½ΡΡ ΡΠ°ΡΡΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Π‘.
ΠΠ΄Π΅ΡΡ Π²ΡΡ Π±ΡΠ΄Π΅Ρ ΡΠΆΠ΅ Π½Π΅ ΡΠ°ΠΊ ΠΊΡΠ°ΡΠΈΠ²ΠΎ, Π½ΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ JavaToNative.h ΡΠΎ Π²ΡΠ΅ΠΌΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠΎ, ΡΡΠΎ ΡΠ°ΠΌ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ, Π½Π΅ ΠΎΡΠ΅Π½Ρ-ΡΠΎ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° Π½Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ.
ΠΠ΄Π΅ΡΡ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΡ ΡΠΈΠΏΠ° JNICall. ΠΠ΄Π΅ΡΡ ΡΠΎΠ²ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΎΠ΅ ΠΈΠΌΡ ΠΌΠ΅ΡΠΎΠ΄Π°: ΠΎΠ½ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΅ΡΠ΅ ΠΈ package ΠΈ ΠΈΠΌΡ ΠΊΠ»Π°ΡΡΠ°. Π ΡΠΈΠ³Π½Π°ΡΡΡΡ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ! Π£ Π½Π°Ρ Π±ΡΠ» 1 Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΡΠΈΠΏΠ° Callback, Π° Π·Π΄Π΅ΡΡ ΠΈΡ ΡΠΆΠ΅ ΡΡΠΈ ΠΈ ΠΎΠ½ΠΈ ΡΠΎΠ²ΡΠ΅ΠΌ Π΄ΡΡΠ³ΠΈΠ΅.
jclass ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π°ΡΠΈΠ² Π±ΡΠ» ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΈ ΡΡΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ Java-ΠΊΠ»Π°ΡΡ, ΡΠ΅ΠΉ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ. Callback ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΠ»ΡΡ Π² jobject ΠΈ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ Π½ΠΎΠ²ΡΠΉ JNIEnv ΡΠΎ Π·Π²ΡΠ·Π΄ΠΎΡΠΊΠΎΠΉ (ΠΏΡΠΎ Π½Π΅Π³ΠΎ ΡΡΡΡ ΠΏΠΎΠ·ΠΆΠ΅).
ΠΡΠ°Π²ΠΈΠ»Π°, ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΠΎΡΠ΅Π½Ρ ΡΠ΅ΡΠΊΠΈΠ΅ ΠΈ ΠΎΠΏΠΈΡΠ°Π½Ρ Π² JNI-ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ. ΠΡΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠ΅ ΡΠΈΠΏΡ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°ΡΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΠ΅ C-ΡΠ½ΡΠ΅ (Π·Π°Π΄Π°Π½Π½ΡΠ΅ ΠΌΠ°ΠΊΡΠΎΡΠ°ΠΌΠΈ ΠΈ Π±Π°Π·ΠΈΡΡΡΡΠΈΠ΅ΡΡ Π½Π° Π‘-ΡΠ½ΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΡΡ ΡΠΈΠΏΠ°Ρ ), Π²ΡΠ΅ ΡΠ΅ΡΠ΅ΡΠ΅Π½Ρ-ΡΠΈΠΏΡ ΠΏΡΠ΅Π²ΡΠ°ΡΠ°ΡΡΡΡ Π² jobject ΠΈΠ»ΠΈ Π² ΡΠ΅Π΄ΠΊΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΡ Π² Π΅Π³ΠΎ Π½Π°ΡΠ»Π΅Π΄Π½ΠΈΠΊΠΎΠ² β jclass, jstring, jthrowable, jarray.
ΠΡΠΎ ΠΎΡΠ²Π΅Ρ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ Π²ΠΎΠΏΡΠΎΡ Π² Π½Π°ΡΠ΅ΠΉ ΠΊΠ°ΡΡΠ΅ β ΠΊΠ°ΠΊ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². ΠΠ½Π° ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΏΠΎ ΠΈΠΌΠ΅Π½Π°ΠΌ, Π·Π½Π°Π΅Ρ Π²ΡΠ΅ ΡΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΈ Π² ΠΏΠΎΠ΄Π³ΡΡΠΆΠ΅Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΈΡΠ΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π½Π°Π·ΡΠ²Π°ΡΡΠΈΠ΅ΡΡ Π½Π°ΡΠΈΠ²Π½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ.
Π§ΡΠΎ Π·Π° JNIEnv?
ΠΡΠ³ΡΠΌΠ΅Π½Ρ JNIEnv * β ΡΡΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ°Π±Π»ΠΈΡΡ ΠΈΠ· 214 ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ JNINativeInterface.
ΠΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ :
Π Π²ΠΎΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π°ΠΆΠ½ΡΠ΅ ΠΈΠ· Π½ΠΈΡ , ΠΊΠΎΡΠΎΡΡΠ΅, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ.
JNINativeInterace ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π½Π°ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΠΌΠ΅ΡΠ°ΡΡΠΎΠ²Π½Π΅ β ΠΊΠ°ΠΊ Π±ΡΠ΄ΡΠΎ Π±Ρ Π½Π° Java, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΌΠ΅ΡΠ°-ΡΡΡΠ½ΠΎΡΡΠΈ: handle Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠΎΠ², ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ Π·Π΄Π΅ΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ handle Java-ΠΊΠ»Π°ΡΡΠ°, ΡΠ΅ΡΠ΅Π· Π½Π΅Π³ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π΅Π³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ (Java ΠΎΠ±ΡΠ΅ΠΊΡΡ), Π²ΡΠ·ΡΠ²Π°ΡΡ Java ΠΌΠ΅ΡΠΎΠ΄Ρ ΡΠ΅ΡΠ΅Π· ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Call*Method, Π²ΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
ΠΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° ΡΠ΅ΡΠ»Π΅ΠΊΡΠΈΡ, ΡΠΎΠ»ΡΠΊΠΎ Π²Ρ Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΠ΅ΡΡ ΡΡΠΈΠΌ Π½Π΅ Π² Java-ΠΊΠΎΠ΄Π΅, Π° Π² C.
ΠΡΠ΅ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ JNI-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° β Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Ρ ΠΎΡΡ ΠΊΠ°ΠΊ-ΡΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ Java-ΠΌΠΈΡΠΎΠΌ: Π»ΠΈΠ±ΠΎ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, Π»ΠΈΠ±ΠΎ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ.
Π ΡΡΠΎ ΠΎΡΠ²Π΅Ρ Π½Π° Π²ΡΠΎΡΠΎΠΉ Π²ΠΎΠΏΡΠΎΡ Π² Π½Π°ΡΠ΅ΠΉ ΠΊΠ°ΡΡΠ΅: ΠΊΠ°ΠΊ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ JVM. ΠΠΎΡ ΡΠ°ΠΊ β ΡΠ΅ΡΠ΅Π· 214 ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ²Π»ΡΡΡΡΡ Π²ΡΠ°ΡΠ°ΠΌΠΈ Π² Π¨ΠΈΡ.
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ Π½Π°ΠΏΠΈΡΠ΅ΠΌ Π½Π°ΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅Π»ΠΎ.
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Ρ ΠΏΠΎΠ»ΡΡΠ°Ρ jclass, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠ»Π°ΡΡΡ ΠΌΠΎΠ΅Π³ΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, Π½Π°Ρ ΠΎΠΆΡ Π² Π½ΡΠΌ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ call, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠΈΠΉ void, ΠΈ Π²ΡΠ·ΡΠ²Π°Ρ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Ρ ΠΏΠΎΠΌΠΎΡΡΡ JNI-ΡΡΠ½ΠΊΡΠΈΠΈ CallVoidMethod. ΠΠΎΠ»ΠΆΠ½Π° Π½Π°ΠΏΠ΅ΡΠ°ΡΠ°ΡΡΡΡ ΡΡΡΠΎΠΊΠ°, ΡΡΠΎ ΠΌΡ Π²Π΅ΡΠ½ΡΠ»ΠΈΡΡ Π½Π° ΠΎΡΠ»Π°Ρ ΠΈ Π²ΡΡ ΠΎΠΊ.
ΠΠ°ΠΊ Π²ΡΠ΅ ΡΡΠΎ ΡΠΎΠ±ΡΠ°ΡΡ?
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ Π²ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ ΡΠ°Π½Π΅Π΅ ΡΠΎΠ±ΡΠ°ΡΡ.
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Windows, ΠΏΠΎΡΡΠΎΠΌΡ Π³ΡΠ³Π»Ρ Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΡΠΎΠ±ΡΠ°ΡΡ Π½Π°ΡΠΈΠ²Π½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π΄Π»Ρ JNI Π½Π° ΡΡΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅:
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Ρ Π½Π°Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° NativeLib.dll.
ΠΡΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π½Π΅ΠΏΡΠΈΡΡΠ½ΠΎ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΡΡΠΈ. ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π΄Π»Ρ Linux ΠΈΠ»ΠΈ macOS β Π·Π°ΠΊΠ»ΠΈΠ½Π°Π½ΠΈΡ Π±ΡΠ΄ΡΡ Π΄ΡΡΠ³ΠΈΠΌΠΈ.
Π ΡΡΠ°ΡΡΡΡ, Π΅ΡΡΡ Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΡΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΎΡ Π²ΡΠ΅Π³ΠΎ ΡΡΠΎΠ³ΠΎ Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°ΡΡΡΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Nokee plugins. ΠΡΠΎ ΠΊΡΠΎΡΡΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΄ΠΎΠ±Π½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ°ΡΠ³Π΅Ρ Π² gradle ΡΠΊΡΠΈΠΏΡ ΠΈ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠΎΠ±ΡΠ°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΏΠΎΠ΄ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΠ΅ Π²Π°Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ.
ΠΠΊΠ΅ΠΉ, ΡΠ΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΌΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΡΠΎΠ±ΡΠ°Π»ΠΈ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ Π½Π°ΡΠ΅ Java ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌβ¦
Π£ΡΠ°, ΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΠΎΠ²Π΅ΡΡΠΈΠ»ΠΈ ΡΠ²ΠΎΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΠΏΡΡΠ΅ΡΠ΅ΡΡΠ²ΠΈΠ΅ Π² ΠΠΎΡΠ΄ΠΎΡ ΠΈ Π²Π΅ΡΠ½ΡΠ»ΠΈΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ. Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ, ΡΡΠΎ ΠΆΠ΅ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΉΡΠΈ Π½Π΅ ΡΠ°ΠΊ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π½Π°ΠΌ ΠΏΡΠΈΡΠ»ΠΎΡΡ ΠΏΠΎΠΏΠΈΡΠ°ΡΡ Π½Π° Π½Π΅ ΡΠ°ΠΌΠΎΠΌ ΠΏΡΠΈΡΡΠ½ΠΎΠΌ ΡΠ·ΡΠΊΠ΅ C, Π΄Π° ΠΈ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΡΠΎ Π²ΡΠ΅ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΠΆΠ°ΡΠ½ΠΎ.
Π§ΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΉΡΠΈ Π½Π΅ ΡΠ°ΠΊ?
Π ΠΏΠΎΠΉΡΠΈ Π½Π΅ ΡΠ°ΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π΅ΡΠ΅ΠΉβ¦
Π ΠΏΠ΅ΡΠ²ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΊΠΎΠ³Π΄Π° Π²Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡΠ΅ Π² Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄, Π²Ρ ΡΠ΅ΡΡΠ΅ΡΠ΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΡΠΈΠΏΠΎΠ²ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.
ΠΠ°, Π²Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ callback, Π½ΠΎ ΠΎΠ½ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΠ»ΡΡ Π² jobject, ΠΈ ΠΊΠ°ΠΊΠΎΠΉ Π±ΡΠ» ΡΠΈΠΏ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ β ΡΡ ΠΎΠ΄Ρ Π½Π΅ Π²ΠΈΠ΄Π½ΠΎ.
ΠΠΎΠΏΡΡΡΠΈΠΌ, Ρ ΠΌΠ΅Π½Ρ Π±ΡΠ» Π±Ρ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π΄ΡΡΠ³ΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΡΠ΅ΠΏΠ΅ΡΡ ΡΠΆΠ΅ java.lang.Object. Π ΠΎΠ½ Π±Ρ ΡΠΎΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ»ΡΡ Π² Π½Π°ΡΠΈΠ²Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅, ΠΊΠ°ΠΊ jobject, Π° ΠΏΠΎΡΠΎΠΌ Ρ ΠΌΠΎΠ³Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ ΠΏΠΎ Π½Π΅Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ·Π²Π°ΡΡ CallVoidMethod, ΠΏΠ΅ΡΠ΅Π΄Π°Π² ΡΡΠ΄Π° Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° Π½Π΅ Callback, Π° ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ java.lang.Object ΠΈ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ ΠΈΠ· Π½Π΅Π³ΠΎ ΠΏΠΎΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ call (ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ°ΠΌ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π½Π΅Ρ).
ΠΠ΅Π½Ρ Π½Π΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ, Π½Π΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡ runtime ΡΠΎΠ²Π½ΠΎ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ ΡΠ»ΡΡΠΈΡΡΡ ΡΠ°Π·Π²Π°Π» ΠΈΠ·-Π·Π° ΠΏΠΎΠΏΡΡΠΊΠΈ ΠΏΠΎΠ·Π²Π°ΡΡ call ΠΎΡ java.lang.Object.
ΠΠ±ΡΠΎΠ»ΡΡΠ½ΠΎ ΠΏΠΎΡ ΠΎΠΆΠ°Ρ ΠΈΡΡΠΎΡΠΈΡ Ρ ΡΠ΅ΠΌ, ΠΊΠ°ΠΊΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ JNI-ΡΡΠ½ΠΊΡΠΈΡ Π²Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅. ΠΠΈΠΊΡΠΎ Π½Π΅ ΠΏΡΠΎΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅Ρ, ΡΡΠΎ Π²Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ ΠΈΠΌΠ΅Π½Π½ΠΎ Π‘allVoidMethod, Π° Π½Π΅ CallBooleanMethod ΠΈΠ»ΠΈ CallStaticVoidMethod ΠΈΠ»ΠΈ Π΅ΡΡ ΡΡΠΎ-ΡΠΎ β ΡΡΠΎ Π±ΡΠ΄Π΅Ρ Π²Π°ΡΠ° ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ. ΠΡΠ»ΠΈ Π²Ρ ΠΎΡΠΈΠ±Π»ΠΈΡΡ, ΡΠΎ ΡΠ»ΡΡΠ°Π΅ΡΡΡ Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (ΠΏΡΡΠΌ ΠΊΠ°ΠΊ Π² ΠΏΠ»ΠΎΡ ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ Π½Π° Π‘), ΡΡΠΎ Π½Π°ΡΠ½Π΅Ρ Π΄Π΅Π»Π°ΡΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° β Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ.
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠΎΠΈΡ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΊΠΎΠ³Π΄Π° Π²Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ ΠΈΠ· Π½Π°ΡΠΈΠ²Π° Java-ΠΌΠ΅ΡΠΎΠ΄, ΠΎΠ½ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ±ΡΠΎΡΠΈΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² Π½Π°ΡΠΈΠ². Π Java ΠΌΡ ΠΏΡΠΈΠ²ΡΠΊΠ»ΠΈ, ΡΡΠΎ Π½Π΅ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Π½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΎΠ»Π΅ΡΠ°Π΅Ρ Π΄Π°Π»ΡΡΠ΅, Π½ΠΈΡΠ΅Π³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π΄Π΅Π»Π°ΡΡ Π½Π΅ Π½ΡΠΆΠ½ΠΎ. ΠΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎ ΡΠ½ΠΎΠ²Π° Π²Π°ΡΠ° ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ! ΠΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, Π° Π½Π΅ ΡΠ»ΡΡΠΈΠ»ΠΎΡΡ Π»ΠΈ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ Java-ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ (Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ExceptionCheck ΠΈΠ»ΠΈ ExceptionOccurred), ΠΈ Π΅ΡΠ»ΠΈ ΡΠ°ΠΊ, ΡΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΅Π³ΠΎ Π·Π΄Π΅ΡΡ (Ρ ΠΏΠΎΠΌΠΎΡΡΡ ExceptionDescribe ΠΈ ExceptionClear). ΠΡΠ»ΠΈ ΠΆΠ΅ Π²Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠ΄Π΅Π»Π°Π΅ΡΠ΅, ΡΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΈΠ΄Π΅Ρ Π² Java-ΠΊΠΎΠ΄, ΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»Π΅ΡΠΈΡ ΡΠΆΠ΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ³ΠΎ Π΄Π»Ρ Π²Π°Ρ ΠΌΠ΅ΡΡΠ°, ΠΈ Π²Ρ ΡΠ½ΠΎΠ²Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.
ΠΠΌΠ΅ΡΡΠΎ ΡΡΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΈ ΡΠΆΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π²Π°Π»Π° Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ²ΡΡΠ½ΠΎΠ΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ stacktrace, Π³Π΄Π΅ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ, ΡΡΠΎ Π²Ρ ΠΏΠ΅ΡΠ΅ΠΏΡΡΠ°Π»ΠΈ MethodID ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΠ΅ Π½Π΅ ΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ (ΡΡΠΎ, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, Ρ Π½Π°Ρ ΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ!).
ΠΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π±ΡΡΡΡΠΎ ΠΏΠΎΠ½ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² Π±ΠΎΠ»ΡΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅Π½ΡΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ Ρ Π½Π°ΡΠΈΠ²Π°ΠΌΠΈ.
ΠΡΠΎ Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π±ΡΠ΄ΡΡ Π²ΡΠ»Π΅ΡΠ΅Π½Ρ Π²ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π½ΠΎ Π²ΡΠ΅ ΡΠ°ΠΌΡΠ΅ ΠΏΡΠΎΡΡΡΠ΅ β Π΄Π°.
Garbage Collector ΠΈ Native-ΠΊΠΎΠ΄
Π ΡΠ΅ΠΏΠ΅ΡΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΏΡΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΡΠ½ΠΊΡ Π² Π½Π°ΡΠ΅ΠΉ ΠΊΠ°ΡΡΠ΅ β ΠΊΠ°ΠΊ GC Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ Π½Π°ΡΠΈΠ²Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ.
ΠΠΎΡΠ΅ΠΌΡ ΠΏΡΠΎ ΡΡΠΎ Π²ΠΎΠΎΠ±ΡΠ΅ Π½ΡΠΆΠ½ΠΎ Π³ΠΎΠ²ΠΎΡΠΈΡΡ? ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ Π² Java ΠΊΠΎΠ΄Π΅, ΠΊΠΎΠ³Π΄Π° JVM Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΌΡΡΠΎΡ, ΠΎΠ½Π° ΠΏΡΠΈΠΎΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Java ΠΏΠΎΡΠΎΠΊΠΈ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΡ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ ΡΠΎΡΠΊΠ°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ GC safepoints. ΠΠ°Π²Π°ΠΉΡΠ΅ Π΄Π»Ρ ΠΏΡΠΎΡΡΠΎΡΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΡΠ»ΡΡΠ°ΠΉ StopTheWorld-ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΎΡΠΎΠ². Π ΡΠ°ΠΊΠΎΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²ΡΠ΅ Java-ΠΏΠΎΡΠΎΠΊΠΈ Π΄ΠΎΡΡΠΈΠ³Π»ΠΈ Π±Π»ΠΈΠΆΠ°ΠΉΡΠΈΡ safepoints ΠΈ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠ»ΠΈΡΡ, Π½Π°ΡΠΈΠ½Π°ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ GC-ΡΡΠ΅Π΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅, ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ, ΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΌΡΡΠΎΡ.
ΠΡΠΎ Π²Π°ΠΆΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ GC ΠΌΠΎΠΆΠ΅Ρ Π΄Π²ΠΈΠ³Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΡ. ΠΠ»Ρ ΠΊΠΎΠΌΠΏΠ°ΠΊΡΠΈΠ·Π°ΡΠΈΠΈ ΠΊΡΡΠ΅ΠΉ, Π΄Π»Ρ ΡΠ²ΠΎΠΈΡ ΠΊΠ°ΠΊΠΈΡ -ΡΠΎ ΡΠ΅Π»Π΅ΠΉ β Π½Π΅Π²Π°ΠΆΠ½ΠΎ. ΠΡΠ»ΠΈ Π² ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΊΡΠΎ-ΡΠΎ ΠΈΠ· Java-ΡΡΠ΅Π΄ΠΎΠ² Π±ΡΠ΄Π΅Ρ ΡΠΌΠΎΡΡΠ΅ΡΡ ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ Java Ρ ΠΈΠΏΠΎΠΌ β ΡΠΈΡΠ°ΡΡ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ ΠΏΠΎΠ»Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Java ΠΎΠ±ΡΠ΅ΠΊΡΠ°, ΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠ»ΡΡΠΈΡΡΡ Π½Π΅ΠΏΡΠΈΡΡΠ½Π°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ: ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΡΠΎΡΡΠΎ ΡΠΊΡΠ°Π΄ΡΡ Ρ Π½Π΅Π³ΠΎ ΠΈΠ·-ΠΏΠΎΠ΄ Π½ΠΎΡΠ° ΠΈ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΡ Π² Π΄ΡΡΠ³ΡΡ ΡΠ°ΡΡΡ ΠΏΠ°ΠΌΡΡΠΈ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°Π·Π²Π°Π»).
Π’Π°ΠΊ Π²ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ safepoints Π² ΡΠΎΠΌ, ΡΡΠΎ Π² Π½Π°ΡΠΈΠ²Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΡΠ°ΠΊΠΎΠΉ ΡΠΎΠΊΡΡ Π½Π΅ ΠΏΡΠΎΠΉΠ΄Π΅Ρ.
Safepoints Π²ΡΡΠ°Π²Π»ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΠΈΠ· JVM, Π° Π΅ΡΠ»ΠΈ ΡΡΠΎ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΊΠΎΠ΄, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π½Π° C ΠΈΠ»ΠΈ C++, ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ clang-ΠΎΠΌ, ΡΠΎ ΡΠ°ΠΌ Π½Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ safepoint! Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅, ΠΌΡ ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π½Π°ΡΠΈ ΠΏΠΎΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΠΎΠ»Π½ΡΡΡ Π½Π°ΡΠΈΠ², ΡΡΠΎΠ±Ρ ΠΏΠΎΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΌΡΡΠΎΡ. ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ Π²ΡΠ½ΡΠΆΠ΄Π΅Π½Ρ ΡΠΌΠΈΡΠΈΡΡΡΡ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π½Π°ΡΠΈΠ²Ρ Π±ΡΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ ΡΠΎ ΡΠ±ΠΎΡΠΊΠΎΠΉ ΠΌΡΡΠΎΡΠ°.
Π ΡΠΎΠ³Π΄Π° ΡΡ Π΅ΠΌΠ° ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ°ΠΊ: ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ Π½ΠΎΠ²ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΠ΅ Π»ΠΈΡΠ°, ΡΡΠ΅Π΄Ρ, ΠΈΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠ΅ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄. ΠΠΎΠΏΡΡΡΠΈΠΌ, ΠΎΠ½ΠΈ ΡΡΠ»ΠΈ Π² Π½Π°ΡΠΈΠ² Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ ΠΏΠΎΡΠΎΠ±ΠΈΡΠ°ΡΡ ΠΌΡΡΠΎΡ, ΠΈ Π²ΠΎΡ ΠΎΠ½ΠΈ ΡΠΏΠΎΠΊΠΎΠΉΠ½ΠΎ Π±ΡΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Ρ GC-ΡΡΠ΅Π΄Π°ΠΌΠΈ.
ΠΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ. ΠΠ° Π²Ρ ΠΎΠ΄Π΅ Π² Π½Π°ΡΠΈΠ² Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΡΠ±ΠΎΡΡΠΈΠΊΡ ΠΌΡΡΠΎΡΠ°: ΠΌΡ ΡΡΠ»ΠΈ Π² Π½Π°ΡΠΈΠ², Π½Π΅ ΠΆΠ΄ΠΈ Π½Π°Ρ, ΡΠΏΠΎΠΊΠΎΠΉΠ½ΠΎ ΡΠΎΠ±ΠΈΡΠ°ΠΉ ΠΌΡΡΠΎΡ. ΠΠ° Π²ΡΡ ΠΎΠ΄Π΅ Π½Π°Π΄ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, Π° Π½Π΅ ΠΈΠ΄Π΅Ρ Π»ΠΈ ΡΠ΅ΠΉΡΠ°Ρ ΡΠ±ΠΎΡΠΊΠ° ΠΌΡΡΠΎΡΠ°, ΠΈ Π΅ΡΠ»ΠΈ ΠΈΠ΄ΡΡ β ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ.
ΠΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π²ΡΡ Π΅ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°: Π΄Π°ΠΆΠ΅ Π² Π½Π°ΡΠΈΠ²Π΅ Π²Ρ Π½Π΅ ΠΈΠΌΠ΅Π΅ΡΠ΅ ΠΏΡΠ°Π²Π° ΡΡΠΎΠ³Π°ΡΡ Java-ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅ΠΉΡΠ°Ρ ΠΌΠΎΠΆΠ΅Ρ Π²Π·ΡΡΡ ΠΈ Π΄Π²ΠΈΠ³Π°ΡΡ GC.
ΠΠ°ΠΊ Π²Ρ ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, Π²ΡΠ΅ Π½Π°ΡΠΈ Java-ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² Π½Π°ΡΠΈΠ²Π°Ρ ΠΏΠΎΡΠ΅ΠΌΡ-ΡΠΎ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΠ»ΠΈΡΡ Π² jobject.
ΠΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΡΡΠΎ jobject β Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Π΄Π»Ρ Java-ΡΡΡΠ»ΠΎΠΊ, Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΠ΅ Ρ Π΅Π½Π΄Π»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π½ΡΡΡΠΈ ΠΈΠ½ΠΊΠ°ΠΏΡΡΠ»ΠΈΡΡΡΡ Π°Π΄ΡΠ΅Ρ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΡΠΉ Java-ΠΎΠ±ΡΠ΅ΠΊΡ.
ΠΠ°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ, ΡΡΠΎ Java-ΠΌΠ°ΡΠΈΠ½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ²ΡΠ·Ρ ΡΡΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ° Ρ ΡΠ΅Π°Π»ΡΠ½ΡΠΌ Π°Π΄ΡΠ΅ΡΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π’ΠΎ Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ ΠΌΡ ΠΏΠΎΠ΄Π²ΠΈΠ½ΡΠ»ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ jobject ΡΠΎΠΆΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΏΠ°ΡΡΠ΅Π½ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ.
Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΠΎΠ²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ Ρ Java-ΠΌΠΈΡΠΎΠΌ ΠΈΠ· Π½Π°ΡΠΈΠ²Π° β ΡΡΠΎ JNI-ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ jobject. ΠΠΎΡΡΠΈ Π²ΠΎ Π²ΡΠ΅Ρ ΠΈΠ· Π½ΠΈΡ ΡΡΠΎΠΈΡ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ Ρ GC, ΡΠ°ΠΊ ΡΡΠΎ Π²Ρ Π½Π΅ ΡΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Π½ΠΈΡΠ΅Π³ΠΎ ΠΏΠ»ΠΎΡ ΠΎΠ³ΠΎ, ΠΏΠΎΠΊΠ° ΠΈΠ΄Π΅Ρ ΡΠ±ΠΎΡΠΊΠ° ΠΌΡΡΠΎΡΠ°.
ΠΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²Π°ΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π±ΡΠ»Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΈΡ Π² Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄, ΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ, ΡΡΠΎ Π·Π° Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ Π½Π°ΡΠΈΠ²Π° ΠΈΡ Π½ΠΈΠΊΡΠΎ Π½Π΅ ΡΠΎΠ±Π΅ΡΠ΅Ρ. ΠΡΠΈ jobject ΡΠ²Π»ΡΡΡΡΡ ΡΠ²ΠΎΠ΅ΠΎΠ±ΡΠ°Π·Π½ΡΠΌΠΈ GC-root, ΡΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ Π²ΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
ΠΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²Π°ΠΌ Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ.
JNI References
ΠΠ΅ΡΠ²Π°Ρ ΠΈ Π³Π»Π°Π²Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄Π»Ρ Ρ Π΅Π½Π΄Π»ΠΎΠ² ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΡΡ. ΠΡΠΎ Π½Π΅ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½ΠΈ Π½Π° Java, Π½ΠΈ Π½Π° C, ΡΠΊΠΎΡΠ΅Π΅, ΡΡΠΎ-ΡΠΎ ΡΡΠ΅Π΄Π½Π΅Π΅ ΠΌΠ΅ΠΆΠ΄Ρ Π½ΠΈΠΌΠΈ. ΠΡΡ, ΡΡΠΎ Π²Ρ Π² ΠΊΠΎΠ΄Π΅ Π²ΠΈΠ΄ΠΈΡΠ΅, ΠΊΠ°ΠΊ jobject, Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ JNI Reference, ΠΏΡΠΈΡΠ΅ΠΌ ΠΎΠ½ΠΈ Π±ΡΠ²Π°ΡΡ ΡΡΠ΅Ρ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ².
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , local references.
ΠΠ½ΠΈ Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΡΠ°ΠΊ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ½ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π½Π΅ Π΄ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ» ΡΠΎΠ·Π΄Π°Π½ local reference (ΠΏΠΎΠ»Π½Π°Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ).
ΠΠ½ΠΈ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Ρ, Π²ΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΡΠ΅ΠΌ, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ JNI-reference β ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ LR. ΠΠ΅ΡΠ΅Π΄Π°Π»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-ΡΠΎ Java-Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π² Π½Π°ΡΠΈΠ² β ΠΎΠ½ΠΈ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π·Π°Π²ΠΎΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ Π² Π»ΠΎΠΊΠ°Π»ΡΠ΅ΡΡ, Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ JNI-ΡΡΠ½ΠΊΡΠΈΡ, ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ β ΠΈΠ· Π½Π΅Π΅ ΡΠΎΠΆΠ΅ Π²Π΅ΡΠ½Π΅ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ΅Ρ. Π Π²ΠΎ-Π²ΡΠΎΡΡΡ , Ρ ΡΡΠΈΠΌΠΈ ΡΡΡΠΊΠ°ΠΌΠΈ, Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π°, ΠΊΠ°Π·Π°Π»ΠΎΡΡ Π±Ρ, ΠΎΡΠ΅Π½Ρ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ ΠΈ ΠΏΡΠΎΡΡΡΡ ΡΡ Π΅ΠΌΡ ΠΎΡΠΈΡΡΠΊΠΈ, ΡΡΠ΅Π·Π²ΡΡΠ°ΠΉΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΠ΅ΡΠΊΡ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡ ΡΡΠΎ Π½Π° Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅:
ΠΠ΄Π΅ΡΡ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π°Π»Π»ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ Π² ΠΎΠ³ΡΠΎΠΌΠ½ΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π°Ρ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΡΡΠΌΠΎ ΠΈΠ· Π½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°Ρ ΠΎΠ΄ΠΈΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠ»Π°ΡΡ BornInNative Ρ ΠΏΠΎΠΌΠΎΡΡΡ JNI-ΡΡΠ½ΠΊΡΠΈΠΈ FindClass, Π° ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ ΠΈ ΠΌΠ΅ΡΠΎΠ΄-ΠΏΡΠ΅Π΄ΠΈΠΊΠ°Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΏΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΌΡ ΠΈΠ½ΡΡΠ°Π½ΡΡ, Π½ΡΠΆΠ½ΠΎ Π»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ»ΠΈ Π½Π΅Ρ. Π ΠΏΠΎΡΠΎΠΌ ΠΏΡΠΎΡΡΠΎ Π² Π½Π°ΡΠΈΠ²Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ JNI-ΡΡΠ½ΠΊΡΠΈΠΈ NewObject Π½Π°ΡΠΈΠ½Π°Π΅ΠΌ ΡΡΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ.
NewObject Π°Π»Π»ΠΎΡΠΈΡΡΠ΅Ρ ΠΏΠ°ΠΌΡΡΡ, Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π² Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΡ ΡΠ°ΠΌΡΡ local reference, ΠΊΠΎΡΠΎΡΡΡ Π·Π°ΡΠ΅ΠΌ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΠΌ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ obj ΡΠΈΠΏΠ° jobject. ΠΡ Π½Π΅Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΏΡΠ΅Π΄ΠΈΠΊΠ°Ρ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, Π½ΡΠΆΠ½ΠΎ Π»ΠΈ Π΄Π°Π»ΡΡΠ΅ Π°Π»Π»ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΠ»ΠΈ Π½Π΅Ρ.
ΠΠΎΡ Π΅ΡΠ»ΠΈ Π²Ρ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ ΡΠ°ΠΊΠΎΠΉ ΠΊΠΎΠ΄ Π½Π° Java, Ρ Π²Π°Ρ Π±Ρ Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ ΡΠΎΠΌΠ½Π΅Π½ΠΈΠΉ Π² ΡΠΎΠΌ, ΡΡΠΎ Π·Π΄Π΅ΡΡ Π²ΡΡ Ρ ΠΎΡΠΎΡΠΎ Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°ΠΌΡΡΡΡ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΎΡΠ΅ΡΠ΅Π΄Π½Π°Ρ ΠΈΡΠ΅ΡΠ°ΡΠΈΡ ΡΠΈΠΊΠ»Π°, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ Π½Π° ΡΡΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΆΠ΅ Π½ΠΈΠΊΠΎΠΌΡ Π½Π΅ Π½ΡΠΆΠ΅Π½, Π° Π·Π½Π°ΡΠΈΡ, GC ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΡΠΈΠ΄ΡΡ ΠΈ ΡΠΎΠ±Π΅ΡΠ΅Ρ Π΅Π³ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΏΠ°ΠΌΡΡΠΈ Π±ΡΠ΄Π΅Ρ Π½Π΅ Ρ Π²Π°ΡΠ°ΡΡ Π΄Π»Ρ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ Π°Π»Π»ΠΎΠΊΠ°ΡΠΈΠΈ.
ΠΠ° Java Π±Ρ Π²ΡΡ ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ, Π½ΠΎ Π² Π½Π°ΡΠΈΠ²Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Π²Π°ΠΌ ΡΠ°ΠΊΠΎΠ³ΠΎ Π½ΠΈΠΊΡΠΎ Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ. ΠΡΠΎ Local reference Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ, ΡΡΠΎ ΠΎΠ½ΠΈ ΡΠΌΠΈΡΠ°ΡΡ Π½Π΅ ΠΏΠΎΠ·ΠΆΠ΅, ΡΠ΅ΠΌ Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΈΠ· Π½Π°ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°. ΠΠΎ ΡΡΠΎ ΠΈ Π²ΡΠ΅: ΡΠ°ΠΌΠΈ ΠΏΠΎ ΡΠ΅Π±Π΅ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²Ρ ΠΏΠ΅ΡΠ΅Π½Π°Π·Π½Π°ΡΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π½Π° Π΄ΡΡΠ³ΡΡ LR, ΠΎΠ½ΠΈ ΡΠΌΠΈΡΠ°ΡΡ Π½Π΅ ΠΎΠ±ΡΠ·Π°Π½Ρ ΠΈ Π½Π΅ Π±ΡΠ΄ΡΡ.
Π§Π΅ΡΠ΅Π· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΡΠ΅Π½ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ ΠΌΡ Π·Π°ΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ Π°Π»Π»ΠΎΠΊΠ°ΡΠΈΠΈ ΡΡΠ°Π»ΠΈ ΡΠ΅ΠΉΠ»ΠΈΡΡΡΡ. JVM ΡΠ΅ΠΉΡΠ°Ρ Π² ΠΊΠΎΠΌΠ°ΡΠΎΠ·Π½ΠΎΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ, ΠΎΠ½Π° ΠΏΡΡΠ°Π΅ΡΡΡ Π²ΡΠΊΠΈΠ½ΡΡΡ out of memory, Π½ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, Π²Π΅Π΄Ρ Π² Π½Π°ΡΠΈΠ²Π΅ ΠΌΡ ΡΡΠΎ Π½Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ.
ΠΡ Π·Π°ΠΊΠ°Π·ΡΠ²Π°Π»ΠΈ 1 ΠΠ, Π½ΠΎ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΡΠΆΠ΅ 2 ΠΠ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π°) Π²ΡΠ΅ Java-ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ Π² heap, Π±) ΡΠ°ΠΌΠΈ Π½Π΅ΡΠΌΠΈΡΠ°ΡΡΠΈΠ΅ jobject ΡΠΎΠΆΠ΅ Π·Π°Π½ΠΈΠΌΠ°ΡΡ (Π½Π°ΡΠΈΠ²Π½ΡΡ) ΠΏΠ°ΠΌΡΡΡ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡΠΈ Π²Π°ΡΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠ΅Π²ΡΡΠΈΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π»ΠΈΠΌΠΈΡ Π½Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ Π³ΠΈΠ³Π°Π±Π°ΠΉΡ.
Π§ΡΠΎΠ±Ρ ΡΡΠΎ ΠΏΠΎΡΠΈΠ½ΠΈΡΡ, Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ DeleteLocalRef, ΠΊΠΎΡΠΎΡΠ°Ρ Π³ΠΎΠ²ΠΎΡΠΈΡ JVM, ΡΡΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ ΡΡΡΠ»ΠΊΠ° Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ½Π°, Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ½ΠΈΡΡΠΎΠΆΠΈΡΡ, Π° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ±ΡΠ°ΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ GC.
ΠΡΠΏΡΠ°Π²Π»Π΅Π½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ Π»ΡΠ±ΡΠΌ ΡΠ°Π·ΡΠΌΠ½ΡΠΌ Xmx.
Π’Π°ΠΊ ΡΡΠΎ Ρ local Reference Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ memory leak, Π½ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈ Π²ΠΈΡΡΡΡΡ ΡΡΡΠ»ΠΊΡ. ΠΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅ ΡΠΎΡ ΡΠ°Π½ΠΈΡΡ LR Π² static-ΠΏΠΎΠ»Π΅, Π²ΡΠΉΡΠΈ ΠΈΠ· Π½Π°ΡΠΈΠ²Π°, Π²Π΅ΡΠ½ΡΡΡΡΡ ΠΈ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ ΡΡΠΎ ΠΏΠΎΠ»Π΅. ΠΠΎΠ»ΡΡΠΈΡΠ΅ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
ΠΡΠΎΠΌΠ΅ LR Π΅ΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ Ρ Π΅Π½Π΄Π»Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Global Reference. Π’Π°ΠΊΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΡΡ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π²Ρ ΡΠ²Π½ΠΎ ΠΈΡ Π½Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΠ΅. ΠΠ΄Π΅ΡΡ Π΅ΡΡ Π»Π΅Π³ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΡΠ΅ΡΠΊΡ ΠΏΠ°ΠΌΡΡΠΈ (Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ Π·Π°Π±ΡΡΡ Π²ΡΠ·Π²Π°ΡΡ DeleteGlobalRef), Π½ΠΎ Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ ΠΎΠ½ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΡΠΌΠΎΠ»ΠΈΠ½Π΅ΠΉΠ½Ρ, Π½Π΅Ρ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΡΡΠ΅ΠΉ. ΠΠ°Π±ΡΠ»ΠΈ ΠΏΠΎΠ·Π²Π°ΡΡ DeleteGlobalRef β Π·Π½Π°ΡΠΈΡ, Π±ΡΠ΄Π΅Ρ ΡΡΠ΅ΡΠΊΠ°.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ Π΅ΡΡΡ Weak Global Reference, ΡΡΠΎ GR, Π½ΠΎ Π² Π½ΠΈΡ Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ, ΡΡΠΎ GC Π½Π΅ ΡΠΎΠ±Π΅ΡΠ΅Ρ Π²Π°Ρ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΡΠΎ ΠΏΠΎΠ»Π½Π°Ρ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ ΡΠΎ ΡΠ»Π°Π±ΡΠΌΠΈ ΡΡΡΠ»ΠΊΠ°ΠΌΠΈ ΠΈΠ· Java. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ Π½ΠΈΠΌΠΈ Π°ΠΊΡΡΠ°Π»ΡΠ½Ρ ΠΈ Π΄Π»Ρ Π½Π°ΡΠΈΠ²ΠΎΠ² ΡΠΎΠΆΠ΅.
ΠΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Ρ GC
ΠΡΠΎΠΌΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ JNI Reference ΡΡΠΎΠΈΡ ΡΠΏΠΎΠΌΡΠ½ΡΡΡ, ΡΡΠΎ Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ JNI-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ° Π΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΡΠΎ ΡΠ±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ ΠΌΡΡΠΎΡΠ°. ΠΠΎΠΏΡΡΡΠΈΠΌ, Π²Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΠ΅ Π² Π½Π°ΡΠΈΠ² ΠΌΠ°ΡΡΠΈΠ², ΠΎΠ½ Π·Π°Π²Π΅ΡΠ½Π΅ΡΡΡ Π² jobject, Π½ΠΎ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠ΅ΡΠ΅Π· jni-ΡΡΠ½ΠΊΡΠΈΠΈ β ΡΡΠΎ ΠΎΡΠ΅Π½Ρ Π΄ΠΎΠ»Π³ΠΎ.
ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Π²Ρ Π½Π°Π²Π΅ΡΠ½ΡΠΊΠ° Π·Π°Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ΅Π³ΠΈΠΎΠ½Ρ Π΄Π°Π½Π½ΡΡ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π° Π·Π° ΡΠ°Π·. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, GetIntArrayElements. ΠΠ΄Π½Π°ΠΊΠΎ Ρ Π½Π°Ρ ΠΎΠΏΡΡΡ Π΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°: ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ, Π΅ΡΠ»ΠΈ Π² ΡΡΠΎΡ ΠΌΠΎΠΌΠ΅Π½Ρ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ΄Π²ΠΈΠ½ΡΡΡ GC. Π‘ ΡΡΠΈΠΌ Π½ΡΠΆΠ½ΠΎ ΡΡΠΎ-ΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ.
ΠΡΡΡ Π΄Π²Π΅ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΌΠΎΠΆΠ½ΠΎ Β«Π·Π°ΠΏΠΈΠ½ΠΈΡΡΒ» ΠΎΠ±ΡΠ΅ΠΊΡ, ΡΠΊΠ°Π·Π°ΡΡ ΡΠ±ΠΎΡΡΠΈΠΊΡ ΠΌΡΡΠΎΡΠ° Β«Π΄Π°Π²Π°ΠΉ ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Π΄Π²ΠΈΠ³Π°ΡΡ ΠΏΠΎΠΊΠ° ΠΌΠ°ΡΡΠΈΠ², ΡΡ ΡΠΎΠ±ΠΈΡΠ°ΠΉ ΠΌΡΡΠΎΡ, Π° Π΅Π³ΠΎ Π½Π΅ Π΄Π²ΠΈΠ³Π°ΠΉΒ».
ΠΡΠΎΡΠ°Ρ ΡΠ°ΠΊΡΠΈΠΊΠ° β ΠΏΡΠΎΡΡΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π² Π½Π°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ, Π² Π½Π°ΡΠΈΠ²Π΅ ΠΏΠΎΡΠ°Π±ΠΎΡΠ°Π΅ΠΌ Ρ ΠΊΠΎΠΏΠΈΠ΅ΠΉ, Π° ΠΏΠΎΡΠΎΠΌ ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΌΠ°ΡΡΠΈΠ².
JNI ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΈΠΏΠ° GetIntArrayElements Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠ°ΠΊΡΡ Π΄Π²ΠΎΠΉΡΡΠ²Π΅Π½Π½ΠΎΡΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ: Ρ Π½ΠΈΡ Π΅ΡΡΡ ΡΡΠ΅ΡΠΈΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ β ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ»Π°ΠΆΠΎΠΊ. ΠΡΠ»ΠΈ Π²ΠΈΡΡΡΠ°Π»ΡΠ½Π°Ρ ΠΌΠ°ΡΠΈΠ½Π° ΡΠ΅ΡΠΈΠ»Π°ΡΡ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ, ΡΠΎ ΡΡΠ΄Π° Π·Π°ΠΏΠΈΡΠ΅ΡΡΡ true, Π΅ΡΠ»ΠΈ Π½Π΅Ρ, ΡΠΎ false, ΡΠ°ΠΊ ΡΡΠΎ Π²Ρ ΡΠ·Π½Π°Π΅ΡΠ΅, ΡΡΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ.
ΠΠΎΠ΄Π²ΠΎΠ΄Π½ΡΠΉ ΠΊΠ°ΠΌΠ΅Π½Ρ Π·Π΄Π΅ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½ ΠΈ ΡΠ±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΌΡΡΠΎΡΠ° Π½Π΅ ΡΠΌΠ΅ΡΡ pin-Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ. ΠΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π½ΠΎ ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, ΠΊΠ°ΠΊ Π±Ρ Π²Ρ Π½Π΅ Π½Π°Π΄Π΅ΡΠ»ΠΈΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ ΡΠ»ΡΡΠΈΠ»ΠΎΡΡ, ΠΎΠ½ΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ. Π’Π°ΠΊ ΡΡΠΎ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Π² Π½Π°ΡΠΈΠ²Π΅ Ρ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ Π½Π° 2 ΠΠ Π²Ρ ΡΡΠΎΠ»ΠΊΠ½Π΅ΡΠ΅ΡΡ Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π΅Π³ΠΎ Π² Π½Π°ΡΠΈΠ²Π½ΡΡ ΠΏΠ°ΠΌΡΡΡ, ΡΡΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π°ΡΠΈΡΡ ΠΈ ΠΏΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, ΠΈ ΠΏΠΎ ΠΎΠ±ΡΠ΅ΠΌΡ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ Π²Π°ΡΠΈΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Π΅ΡΡΡ ΠΎΡΠΎΠ±Π΅Π½Π½ΡΠ΅ JNI-ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠΈΠΏΠ° GetArrayElementsCritical (ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΡΡΡΡΠΈΠΊΡΠΎΠΌ Critical), ΠΎΠ½ΠΈ Π²ΡΡΡΠ΅ΡΠΊΠΈ ΡΡΠ°ΡΠ°ΡΡΡΡ Π½Π΅ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ².
ΠΠΈΠ½Π½ΠΈΠ½Π³Π° Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ GC Π½Π΅Ρ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π²ΡΡ ΠΎΠ΄ΡΡ ΠΈΠ· ΡΠΈΡΡΠ°ΡΠΈΠΈ?
ΠΠ½ΠΈ Π³ΠΎΠ²ΠΎΡΡΡ: Β«ΠΠ°Π²Π°ΠΉΡΠ΅ Π½Π° Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΡΠ±ΠΎΡΠΊΠΈ ΠΌΡΡΠΎΡΠ°, ΠΏΡΡΡΡ GC ΠΏΠΎΠ΄ΠΎΠΆΠ΄ΡΡΒ». ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈ Π΄Π°ΡΡ Ρ ΠΎΡΠΎΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, Π²Ρ ΠΏΠΎΡΠ°Π±ΠΎΡΠ°Π΅ΡΠ΅ Π±Π΅Π· ΠΊΠΎΠΏΠΈΠΉ, Π½ΠΎ Π΅ΡΡΡ ΠΈ ΠΎΠ±ΡΠ°ΡΠ½Π°Ρ ΡΡΠΎΡΠΎΠ½Π° ΠΌΠ΅Π΄Π°Π»ΠΈ.
ΠΡ ΠΎΡΠΎΠ΄Π²ΠΈΠ³Π°Π΅ΡΠ΅ GC Π½Π° Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ ΡΡΠΎΠΊ, ΡΡΠΎ ΡΠΆΠ΅ ΠΏΠ»ΠΎΡ ΠΎ ΡΠ°ΠΌΠΎ ΠΏΠΎ ΡΠ΅Π±Π΅, Π½ΠΎ ΠΏΡΠΈ ΡΠ°ΠΌΠΎΠΌ ΠΏΠ»ΠΎΡ ΠΎΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΄Π΅Π΄Π»ΠΎΠΊ ΠΈ Π·Π°Π²ΠΈΡΠ°Π½ΠΈΠ΅ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΏΡΠΎ ΡΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΡΠΈΡΠ°ΡΡ Π² ΠΏΠΎΡΡΠ΅ ΠΠ»Π΅ΠΊΡΠ΅Ρ Π¨ΠΈΠΏΠΈΠ»ΡΠ²Π°.
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π½Π°ΡΠΈΠ²Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²
Π Π½Π°ΠΊΠΎΠ½Π΅Ρ, Π½Π΅Π»ΡΠ·Ρ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΠΏΡΠΎ Π½Π°ΡΠΈΠ²Ρ ΠΈ Π½Π΅ ΠΎΠ±ΡΡΠ΄ΠΈΡΡ ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ. Π Π°Π· Π²Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ C-ΠΊΠΎΠ΄, ΡΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠ΅ΡΡΠΎΠ²ΡΠΊΠΈ Π±ΡΡΡΡΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΎΠ±ΡΡΠ½ΠΎΠΉ Java. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ β ΡΡΠΎ Π±ΠΎΠ»ΡΡΠΎΠ΅ Π·Π°Π±Π»ΡΠΆΠ΄Π΅Π½ΠΈΠ΅. ΠΠ΅Π»ΠΎ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΠ°ΠΌ Π²ΡΠ·ΠΎΠ² Π½Π°ΡΠΈΠ²Π½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² β ΡΡΠΎ ΡΠ΅ΡΡΠ΅Π·Π½Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΡ Π΄Π»Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΈΠ·ΠΌΠ΅ΡΡΡΡ!
ΠΡΠ΅ Π·Π°ΠΌΠ΅ΡΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ Π½Π° ΠΌΠ°ΡΠΈΠ½Π΅: Intel Core i7-7700 @ 3.60 GHz;16GB RAM, Linux Ubuntu 18.04
ΠΠ°ΡΠ½Π΅ΠΌ Ρ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°. ΠΡ ΠΈΠ· Java Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ Π΄ΡΡΠ³ΠΎΠΉ Java ΠΌΠ΅ΡΠΎΠ΄ Π±Π΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π±Π΅Π· ΠΈΠ½Π»Π°ΠΉΠ½Π°. ΠΠ΅ΡΠΈΠΌ ΡΡΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ JMH, ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ 696 ΠΏΠΎΠΏΡΠ³Π°Π΅Π², (Π±ΠΎΠ»ΡΡΠ΅ β Π»ΡΡΡΠ΅).
ΠΡΠΎΠ²Π΅Π΄Π΅ΠΌ Π΄ΡΡΠ³ΠΎΠΉ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½Ρ ΠΈ Π²ΡΠ·ΠΎΠ²Π΅ΠΌ ΠΈΠ· Java Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΡΠΎΠΆΠ΅ ΠΏΡΡΡΠΎΠΉ, Π±Π΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. Π ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΡΠΎΡΠ°Π΄ΠΊΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π² 3,3 ΡΠ°Π·Π° Π½Π° jdk8u252.
ΠΡΠΈ ΡΡΠΎΠΌ Π½Π° jdk11 Π²Ρ ΡΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΠΏΡΠΎΡΠ°Π΄ΠΊΡ ΡΠΆΠ΅ Π² 6 ΡΠ°Π·. ΠΡΠΈΡΠΈΠ½Ρ ΡΠ°ΠΊΠΎΠΉ ΡΠ°Π·Π½ΠΈΡΡ Π² ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ ΡΠ°Π·Π½ΡΡ Π²Π΅ΡΡΠΈΠΉ Java ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π² ΠΊΠΎΠ½ΡΠ΅ Π΄ΠΎΠΊΠ»Π°Π΄Π°, Π° ΡΠ΅ΠΉΡΠ°Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ Π½Π°ΡΠΈ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ.
Π’Π΅ΠΏΠ΅ΡΡ Π΄Π°Π²Π°ΠΉΡΠ΅ ΠΏΡΠΎΠ²Π΅Π΄Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ Π·Π»ΠΎΠ²Π΅ΡΠΈΠΉ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½Ρ ΠΈ Π²ΡΠ·ΠΎΠ²Π΅ΠΌ ΠΈΠ· Java Π½Π°ΡΠΈΠ², Π° ΠΎΡΡΡΠ΄Π° ΡΠ΅ΡΠ΅Π· callback ΠΏΠΎΠ·ΠΎΠ²ΡΠΌ ΠΏΡΡΡΠΎΠΉ Java-ΠΌΠ΅ΡΠΎΠ΄. ΠΠΎΠ³ΠΈΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡΡ, ΡΡΠΎ Π·Π΄Π΅ΡΡ ΡΠ»ΡΡΠΈΡΡΡ ΠΏΡΠΎΡΠ΅Π΄Π°Π½ΠΈΠ΅ ΡΠ°Π·Π° Π² Π΄Π²Π° (Π²Π΅Π΄Ρ ΡΡΠ°Π»ΠΎ Π² Π΄Π²Π° ΡΠ°Π·Π° Π±ΠΎΠ»ΡΡΠ΅ ΡΠ°Π±ΠΎΡΡ). ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΡΠΎΡΠ°Π΄ΠΊΠ° Π±ΡΠ΄Π΅Ρ Π² 10 ΡΠ°Π·.
Π’.Π΅.Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ ΠΈΠ· Java Π² Π½Π°ΡΠΈΠ² Π΄ΠΎΡΠΎΠΆΠ΅, ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ ΡΡ ΠΎΠ΄ΠΈΡΡ Π² Π½Π°ΡΠΈΠ².
ΠΠΎΡΠ΅ΠΌΡ ΡΠ°ΠΊ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ?
ΠΡΠ»ΠΈ Π²Ρ Π²ΡΠ·ΡΠ²Π°Π΅ΡΠ΅ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΡΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π² ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ Ρ ΠΎΡΠ΅ΡΡΡ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΏΡΠΎΡΡΠΎ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ call, Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΌΡ-ΡΠΎ Π°Π΄ΡΠ΅ΡΡ.
Π Π²Ρ ΡΡΠΎΡ call ΠΏΠΎΠ»ΡΡΠΈΡΠ΅, Π½ΠΎ Π²ΠΎΠΊΡΡΠ³ Π½Π΅Π³ΠΎ Π΅ΡΡΡ Π΅ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π±ΠΎΡΡ Π΄Π»Ρ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²ΠΊΠΈ ΠΊ Π²ΡΠ·ΠΎΠ²Ρ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°.
ΠΠΎΠ»Π΅Π΅ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ ΠΊΡΠΎΠΌΠ΅ ΡΠ°ΠΌΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ:
Π Π²ΡΡ ΡΡΠΎ Π΄Π°ΡΡ ΠΏΡΠΎΡΠ°Π΄ΠΊΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π² ΡΠ΅ΡΡΡ ΡΠ°Π·.
ΠΡΠΎΡΠ°Ρ Π²ΠΎΠ»Π½Π° ΠΏΡΠΎΡΠ°Π΄ΠΊΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, ΠΊΠΎΠ³Π΄Π° ΠΌΡ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅ΠΌ, ΡΡΠΎ Π½ΠΈΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΈΠ½Π»Π°ΠΉΠ½Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ. ΠΠ±ΡΠΎΠ»ΡΡΠ½ΠΎ Π²ΡΠ°ΠΆΠ΄Π΅Π±Π½ΡΠΉ ΠΊΠΎΠ΄, ΠΎΠ½ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΡΠ·ΡΠΊΠ΅, Π° ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ Π΄ΡΡΠ³ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ. Π£ Π½Π°Ρ ΠΏΡΠΎΡΡΠΎ Π½Π΅Ρ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΠΈΠ½Π»Π°ΠΉΠ½ΠΈΡΡ ΡΡΠΎ Π² Java. ΠΠΎΡΡΠΎΠΌΡ Π² Π½Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΌΡ Π²ΡΠ·ΡΠ²Π°Π»ΠΈ Java ΠΌΠ΅ΡΠΎΠ΄ Π±Π΅Π· ΠΈΠ½Π»Π°ΠΉΠ½Π°, ΠΈΠ½Π°ΡΠ΅ ΡΠ°Π·Π½ΠΈΡΠ° Π±ΡΠ»Π° Π±Ρ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ³ΡΠΎΠΌΠ½Π°Ρ, ΡΡΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ Π³ΡΠ°ΡΠΈΠΊΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡ ΡΠΆΠ΅ Π½Π΅ Π±ΡΠ»ΠΎ Π±Ρ ΡΠΌΡΡΠ»Π°.
ΠΡ ΠΈ ΠΏΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² Java β ΡΠ°ΠΊ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈΠ·-Π·Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ Hotspot. ΠΠΎΠ³Π΄Π° Π²Ρ Π΄Π΅Π»Π°Π΅ΡΠ΅ callback, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎ Π»ΠΈΡΠ½Π΅ΠΉ ΠΈ ΡΡΠΆΠ΅Π»ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ, Π² Π΄ΡΡΠ³ΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Π°Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΌΠΎΠ³ Π±Ρ Π±ΡΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π»ΡΡΡΠ΅.
ΠΠ° ΡΡΠΎΠΉ ΠΏΠΎΠ·ΠΈΡΠΈΠ²Π½ΠΎΠΉ Π½ΠΎΡΠ΅ ΠΌΡ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΠΌ ΡΠ°Π·Π³ΠΎΠ²ΠΎΡ ΠΏΡΠΎ JNI, ΠΈ Π²ΠΎΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΎΠ²Π΅ΡΠΎΠ² ΠΏΠΎ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ°ΡΡΠΈ Π΄ΠΎΠΊΠ»Π°Π΄Π°, ΡΠ»Π΅Π΄ΡΡ ΠΊΠΎΡΠΎΡΡΠΌ, Π²Ρ ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ ΠΈΠ·Π±Π΅ΠΆΠΈΡΠ΅ Π½Π΅ΠΏΡΠΈΡΡΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΈ ΡΠ°Π·Π²Π°Π»ΠΎΠ².
ΠΠΎΠ΄Π²Π΅Π΄Π΅ΠΌ ΠΈΡΠΎΠ³ ΡΡΠΎΠΉ ΡΠ°ΡΡΠΈ Π΄ΠΎΠΊΠ»Π°Π΄Π° ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ β Β«ΠΠΎΡΠ²Π»Π΅Π½ΠΈΠ΅ JNI Π² ΡΠ²ΠΎΡ Π²ΡΠ΅ΠΌΡ Π±ΡΠ»ΠΎ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΌ ΠΏΡΠΎΡΡΠ²ΠΎΠΌ Π² ΠΎΡΡΠ°ΡΠ»ΠΈ, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΡΠ΅Π³ΠΎΠ΄Π½Ρ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π½Π°ΡΠΈΠ²Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠΆ Π±ΠΎΠ»ΡΠ½ΠΎΒ».
Π ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΏΡΠΎ ΡΠ΅Π³ΠΎΠ΄Π½ΡΡΠ½ΠΈΠ΅ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ JNI, ΠΈΡ ΡΠΈΠ»ΡΠ½ΡΠ΅ ΠΈ ΡΠ»Π°Π±ΡΠ΅ ΡΡΠΎΡΠΎΠ½Ρ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±ΡΡΠ΄ΠΈΠΌ Π±ΡΠ΄ΡΡΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠ³ΡΡ ΠΊΠ°ΡΠ΄ΠΈΠ½Π°Π»ΡΠ½ΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ Π²ΡΠ΅ Π½Π°ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ Π½Π°ΡΠΈΠ²Π°Ρ Π² Java: ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Panama ΠΈ Sulong.
ΠΠΈΠ½ΡΡΠΊΠ° Π½Π°ΡΠΈΠ²Π½ΠΎΠΉ ΡΠ΅ΠΊΠ»Π°ΠΌΡ Π² ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΎ Π½Π°ΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄. Π Π°Π· Π²Ρ Π·Π΄Π΅ΡΡ β ΠΏΠΎΡ ΠΎΠΆΠ΅, Π²Ρ Java-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ Π±ΠΎΠΈΡΡΡ ΠΏΠΎΠΊΠΈΠ΄Π°ΡΡ ΡΡΡΠ½ΡΡ Ρ ΠΎΠ±Π±ΠΈΡΡΡ Π½ΠΎΡΡ ΠΈ ΠΏΠΎΠΊΠΎΡΡΡΡ ΡΡΠΎ-ΡΠΎ Π½ΠΎΠ²ΠΎΠ΅ Π΄Π»Ρ ΡΠ΅Π±Ρ. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ Joker (25-28 Π½ΠΎΡΠ±ΡΡ, ΠΎΠ½Π»Π°ΠΉΠ½) Π½Π°Π²Π΅ΡΠ½ΡΠΊΠ° Π±ΡΠ΄Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅ Π΄Π»Ρ Π²Π°Ρ β ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ°ΠΌΠΈ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΠ°ΠΉΡΠ΅.