ΠΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Solod (So), ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ ΠΊΠΎΠΉΡΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π½Π° Π΅Π·ΠΈΠΊΠ° Go, ΡΡΠ°Π½ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΎ Π² ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ Π½Π° Π΅Π·ΠΈΠΊΠ° C (C11), ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΎ Π·Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡ Ρ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠΈ ΠΊΠ°ΡΠΎ GCC, Clang ΠΈ zig cc. ΠΠ»ΡΡΠΎΠ²Π°ΡΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° Π½Π° Solod Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ Go ΠΈ Tinygo Π΅ ΡΡΡΠ½ΠΎΡΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°, ΡΠ°Π±ΠΎΡΠ΅ΡΠΎ Π±Π΅Π· Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½Π° ΡΠ±ΠΎΡΠΊΠ° Π½Π° Π±ΠΎΠΊΠ»ΡΠΊ, Π±Π΅Π· Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ ΠΈ Π±Π΅Π· Π±ΡΠΎΠ΅Π½Π΅ Π½Π° ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ. Π’ΡΠ°Π½ΡΠΏΠ°ΠΉΠ»Π΅ΡΡΡ Π·Π° Solod Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Π΅Π·ΠΈΠΊΠ° Go ΠΈ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π· BSD. ΠΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠ°Π±ΠΎΡΠ° Π² Linux, macOS ΠΈ Windows.
ΠΠ·ΠΈΠΊΡΡ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΡΡΡΠΊΡΡΡΠΈ, ΠΌΠ΅ΡΠΎΠ΄ΠΈ, ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΈ, ΡΠ»Π°ΠΉΡΠΎΠ²Π΅, Π²ΡΡΡΠ°Π½Π΅ Π½Π° ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅Π·ΡΠ»ΡΠ°Ρ + ΠΊΠΎΠ΄ Π·Π° Π³ΡΠ΅ΡΠΊΠ°), Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊ ΠΈ ΠΎΡΠ»ΠΎΠΆΠ΅Π½ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½ΠΈΡ (defer). Π‘ ΡΠ΅Π» ΠΎΠΏΡΠΎΡΡΡΠ²Π°Π½Π΅, Π΅Π·ΠΈΠΊΡΡ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ° ΠΊΠ°Π½Π°Π»ΠΈ, ΡΡΠΏΡΠΎΡΠ΅ΡΠΈ ΠΈ Π·Π°ΠΌΠΈΠΊΠ°Π½ΠΈΡ. ΠΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Solod ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈ LSP-ΡΠ΅ΡΠ²Π΅ΡΠΈ, Π»ΠΈΠ½ΡΠ΅ΡΠΈ, ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½ΠΈ ΡΡΠ΅Π΄ΠΈ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠΈ Π½Π° ΠΊΠΎΠ΄, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ Π΅Π·ΠΈΠΊΠ° Go, ΠΊΠ°ΠΊΡΠΎ ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΡΡ βgo test.β
ΠΠΎΠ΄ΡΡ, Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Solod, ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½ Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° Π΅Π·ΠΈΠΊΠ° C (Π΅Π·ΠΈΠΊΡΡ C ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° Solod ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ) ΠΈ Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° runtime. ΠΠ»ΡΡΠΎΠ²ΠΈ ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡΡΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Π½Π΅ Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π±Π»ΠΈΠ·ΠΊΠΈ Π΄ΠΎ ΡΠ΅Π·ΠΈ Π½Π° C, Π½ΠΎ ΡΡΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Π² ΡΡΠΈΠ» Go ΠΈ ΠΎΡΠΈΠ³ΡΡΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠΈΠΏΠΎΠ²Π΅. Solod ΡΡΡΠΎ ΡΠ°ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° ΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π΅ Π½Π° Go-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π·Π° ΡΠΏΠΎΡΡΠ΅Π±Π° Π² ΠΏΡΠΎΠ΅ΠΊΡΠΈ Π½Π° C. ΠΠΎΡΡΠΈΡΠΎΠ²Π°Π½ΠΈ ΡΠ° Go-ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ strings, io, bytes, mem, slices ΠΈ Ρ.Π½. ΠΡΠ²Π΅Π½ ΠΏΠΎΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡΠ΅ Go-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ, Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ Π½Π° Solod ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΎΠ±Π²ΠΈΠ²ΠΊΠΈ Π½Π°Π΄ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° C-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° libc.
ΠΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅, ΡΡΠ»Π°ΡΠ° ΠΏΠ°ΠΌΠ΅Ρ ΡΠ΅ ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Ρ Π² ΡΡΠ΅ΠΊΠ°, Π½ΠΎ ΡΡΠ΅Π· ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ Alloc / Free Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠ° ΠΏΠ°ΠΌΠ΅Ρ Π² ΠΊΡΠΏΡΠΈΠ½Π°ΡΠ°. Π‘ΡΠ±ΠΈΡΠ°Π½Π΅ Π½Π° Π±ΠΎΠΊΠ»ΡΠΊ ΠΈ Π±ΡΠΎΠ΅Π½Π΅ Π½Π° ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ Π½Π΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ, Π½ΠΎ Π² Solod ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠΈΠΏΠΎΠ²Π΅ ΠΈ Π°Π²Π°ΡΠΈΠΉΠ½ΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΡΠ²Π°Π½Π΅ ΠΏΡΠΈ ΠΎΠΏΠΈΡ Π·Π° Π΄ΠΎΡΡΡΠΏ ΠΈΠ·Π²ΡΠ½ ΠΌΠ°ΡΠΈΠ². Π ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π΅ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° Π²ΡΡΡΠ°Π½Π΅ Π½Π° Π²ΠΈΡΡΡΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ (dangling pointer) ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ. ΠΡΠ½ΠΎΠ²Π΅Π½ ΠΌΠ΅ΡΠΎΠ΄ Π·Π° ΠΎΡΠΊΡΠΈΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° AddressSanitizer (-fsanitize=address) Π² ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈΡΠ΅ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΠΈ.
ΠΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ, Π½Π°ΠΏΠΈΡΠ°Π½ΠΈ Π½Π° Solod, Π² ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΡΠ»ΡΡΠ°ΠΈ ΡΠ° ΠΏΠΎ-Π±ΡΡΠ·ΠΈ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ΅ Π½Π° Go. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ ΠΎΡ ΠΏΠ°ΠΊΠ΅ΡΠ° Byte Π΅ 1.5 ΠΏΡΡΠΈ ΠΏΠΎ-Π²ΠΈΡΠΎΠΊΠ° ΠΏΡΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ. Π Π°Π±ΠΎΡΠ°ΡΠ° Ρ Π±Π°ΠΉΡΠΎΠ²ΠΈ Π±ΡΡΠ΅ΡΠΈ Π΅ ΠΏΠΎ-Π±ΡΡΠ·Π° Ρ 1.3 ΠΏΡΡΠΈ ΠΏΡΠΈ ΡΠ΅ΡΠ΅Π½Π΅ ΠΈ 2-4 ΠΏΡΡΠΈ ΠΏΡΠΈ Π·Π°ΠΏΠΈΡ. Π ΠΏΠ°ΠΊΠ΅ΡΠ° Map ΠΈΠ·Π²Π»ΠΈΡΠ°Π½Π΅ΡΠΎ ΠΏΠΎ ΡΠ΅Π»ΠΈ ΡΠΈΡΠ»ΠΎΠ²ΠΈ ΠΊΠ»ΡΡΠΎΠ²Π΅ Π΅ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ Ρ 3.4 ΠΏΡΡΠΈ, Π½ΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡΡΠ° Π½Π° ΠΊΠ»ΡΡΠΎΠ²Π΅ΡΠ΅ Π΅ ΠΏΠΎ-Π±Π°Π²Π½Π° Ρ 1.6 ΠΏΡΡΠΈ. ΠΠ·Π²Π»ΠΈΡΠ°Π½Π΅ΡΠΎ ΠΏΠΎ ΡΡΡΠΈΠ½Π³ΠΎΠ²ΠΈ ΠΊΠ»ΡΡΠΎΠ²Π΅ Π΅ Π½Π° Π΅Π΄Π½ΠΎ Π½ΠΈΠ²ΠΎ Ρ Π΅Π·ΠΈΠΊΠ° Go, Π½ΠΎ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡΡΠ° Π΅ ΠΏΠΎ-Π±Π°Π²Π½Π° Ρ 1.5 ΠΏΡΡΠΈ. ΠΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ΅Π»ΠΈ ΡΠΈΡΠ»Π° Π΅ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ Ρ 2 ΠΏΡΡΠΈ, Π° Π½Π° ΡΠΈΡΠ»Π° Ρ ΠΏΠ»Π°Π²Π°ΡΠ° Π·Π°ΠΏΠ΅ΡΠ°Ρ - Ρ 1.5/1.2 ΠΏΡΡΠΈ. Π‘ΡΡΠΈΠ½Π³ ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ ΡΠ° ΠΏΠΎ-Π±ΡΡΠ·ΠΈ Ρ 1.3 ΠΏΡΡΠΈ, Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΡΠΈΠ½Π³ΠΎΠ²Π΅ Π΅ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ Ρ 2-4 ΠΏΡΡΠΈ ΠΏΡΠΈ Π½Π°ΠΌΠ°Π»Π΅Π½ΠΎ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ Ρ 10-20%.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
