ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Solod Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π° подмноТСство ΠΎΡ‚ Π΅Π·ΠΈΠΊΠ° Go, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΅ ΠΏΡ€Π΅Π²Π΅Π΄Π΅Π½ΠΎ Π½Π° Π΅Π·ΠΈΠΊΠ° C.

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π΅Π½ Π΅ Π΅Π·ΠΈΠΊΡŠΡ‚ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Solod (So). Π’ΠΎΠΉ прСдоставя подмноТСство ΠΎΡ‚ Π΅Π·ΠΈΠΊΠ° Go, транскомпилирано Π² C11 прСдставянС, подходящо Π·Π° компилация с ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ GCC, Clang ΠΈ zig cc. ΠšΠ»ΡŽΡ‡ΠΎΠ²Π° Ρ€Π°Π·Π»ΠΈΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ Solod ΠΈ Go ΠΈ Tinygo Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€ΡŠΡ‡Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π±Π΅Π· ΡΡŠΠ±ΠΈΡ€Π°Ρ‡ Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊ, Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° ΠΈΠ»ΠΈ Π±Ρ€ΠΎΠ΅Π½Π΅ Π½Π° Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ. Π’Ρ€Π°Π½ΡΠΏΠΈΠ»Π΅Ρ€ΡŠΡ‚ Π·Π° Solod Π΅ написан Π½Π° Go ΠΈ сС разпространява ΠΏΠΎΠ΄ BSD Π»ΠΈΡ†Π΅Π½Π·. Π Π°Π±ΠΎΡ‚ΠΈ Π½Π° Linux, macOS ΠΈ Windows.

Π•Π·ΠΈΠΊΡŠΡ‚ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° структури, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ, интСрфСйси, сСгмСнти, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π²Ρ€ΡŠΡ‰Π°Ρ‚ мноТСство стойности (Π½Π°ΠΏΡ€. Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ + ΠΊΠΎΠ΄ Π½Π° Π³Ρ€Π΅ΡˆΠΊΠ°), Π³Π΅Π½Π΅Ρ€ΠΈΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΈ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½ΠΈ извиквания (defer). Π—Π° ΠΏΠΎ-голяма простота Π΅Π·ΠΈΠΊΡŠΡ‚ Π½Π΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ° ΠΊΠ°Π½Π°Π»ΠΈ, ΠΊΠΎΡ€ΡƒΡ‚ΠΈΠ½ΠΈ ΠΈΠ»ΠΈ затваряния. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° със Solod ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ LSP ΡΡŠΡ€Π²ΡŠΡ€ΠΈ, Π»ΠΈΠ½Ρ‚Π΅Ρ€ΠΈ, ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½ΠΈ срСди Π·Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΈ Π½Π° ΠΊΠΎΠ΄, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°Ρ‚ Π΅Π·ΠΈΠΊΠ° Go, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ инструмСнтариума "go test".

ΠšΠΎΠ΄ΡŠΡ‚, написан Π½Π° Solod, ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½ с C прилоТСния (C ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π° Solod Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ) ΠΈ Π½Π΅ изисква срСда Π·Π° изпълнСниС. ΠšΠ»ΡŽΡ‡ΠΎΠ²ΠΈ области Π½Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π²Π°Ρ‚ систСмно ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅, с Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ Π½Π° C, Π½ΠΎ със синтаксис ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π² стил Go. Solod ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈ Π·Π° прСнасянС Π½Π° Go Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π² C ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ. Go ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ ΠΊΠ°Ρ‚ΠΎ strings, io, bytes, mem, slices ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ са прСнСсСни Π½Π° C. Π’ допълнСниС към Π½Π°Π±ΠΎΡ€Π° ΠΎΡ‚ прСнСсСни Go Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Solod ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΎΠ±Π²ΡŠΡ€Π·Π²Π°Π½ΠΈΡ (bindings) Π·Π° стандартната C Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, libc.

По ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ цялата ΠΏΠ°ΠΌΠ΅Ρ‚ сС разпрСдСля Π½Π° стСка, Π½ΠΎ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° heap Π΅ възмоТно с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ Alloc / Free Π½Π° стандартната Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°. Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π±ΠΎΠΊΠ»ΡƒΠΊ ΠΈ Π±Ρ€ΠΎΠ΅Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π΅Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠΈ Π½Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚, Π½ΠΎ Solod прСдоставя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° Ρ‚ΠΈΠΏΠ° ΠΈ сривовС ΠΏΡ€ΠΈ Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ масив извън Π³Ρ€Π°Π½ΠΈΡ†ΠΈΡ‚Π΅. ВисящитС Π²Ρ€ΡŠΡ‰Π°Π½ΠΈΡ Π½Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎΡ‚ΠΎ освобоТдаванС Π½Π° ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° Π½Π΅ сС провСряват. Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° 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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€