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