ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Solod Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅Ρ‚ подмноТСство языка Go, транслируСмоС Π² язык Π‘ΠΈ

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ язык программирования Solod (So), ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ подмноТСство языка Go, транскомпилируСмоС Π² прСдставлСниС Π½Π° языкС Π‘ΠΈ (C11), ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½ΠΎΠ΅ для сборки компиляторами GCC, Clang ΠΈ zig cc. ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ΠΌ Solod ΠΎΡ‚ Go ΠΈ Tinygo являСтся использованиС Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π³ΠΎ Π±Π΅Π· примСнСния сборщика мусора, Π±Π΅Π· автоматичСского выдСлСния памяти ΠΈ Π±Π΅Π· подсчёта ссылок. ВранспайлСр для Solod написан Π½Π° языкС Go ΠΈ распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ BSD. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ Ρ€Π°Π±ΠΎΡ‚Π° Π² Linux, macOS ΠΈ Windows.

Π―Π·Ρ‹ΠΊ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ структуры, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, интСрфСйсы, слайсы, Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ функциями Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ + ΠΊΠΎΠ΄ ошибки), Π΄ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΊΠΈ ΠΈ ΠΎΡ‚Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹ (defer). C Ρ†Π΅Π»ΡŒΡŽ упрощСния Π² языкС Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°Π½Π°Π»Ρ‹, сопрограммы ΠΈ замыкания. ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½Π° языкС Solod ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ LSP-сСрвСры, Π»ΠΈΠ½Ρ‚Π΅Ρ€Ρ‹, ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΊΠΎΠ΄Π°, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ язык Go, Π° Ρ‚Π°ΠΊΠΆΠ΅ инструмСнтарий Β«go testΒ».

Написанный Π½Π° Solod ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ с прилоТСниями Π½Π° языкС Π‘ΠΈ (язык Π‘ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Solod ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚) ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ прикрСплСния runtime. Из ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… областСй примСнСния отмСчаСтся систСмноС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с Π±Π»ΠΈΠ·ΠΊΠΈΠΌΠΈ ΠΊ Π‘ΠΈ возмоТностями, Π½ΠΎ с синтаксисом Π² стилС Go ΠΈ обСспСчСниСм ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ². Solod Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для портирования Go-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ для использования Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… Π½Π° Π‘ΠΈ. На язык Π‘ΠΈ ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ Go-ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ strings, io, bytes, mem, slices ΠΈ Ρ‚.ΠΏ. Помимо Π½Π°Π±ΠΎΡ€Π° ΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Go-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° языкС Solod ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ обвязки Π½Π°Π΄ стандартной Π‘ΠΈ-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ libc.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ вся ΠΏΠ°ΠΌΡΡ‚ΡŒ выдСляСтся Π² стСкС, Π½ΠΎ Ρ‡Π΅Ρ€Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Alloc / Free стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π² ΠΊΡƒΡ‡Π΅. Π‘Π±ΠΎΡ€ΠΊΠ° мусора ΠΈ подсчёт ссылок Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ, Π½ΠΎ Π² Solod ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ возмоТности для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρƒ массива. ΠŸΡ€ΠΈ этом ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ висячих ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ (dangling pointer) ΠΈ отсутствиС освобоТдСния памяти Π½Π΅ производятся. Π’ качСствС основного способа выявлСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ упоминаСтся использованиС AddressSanitizer (-fsanitize=address) Π² соврСмСнных компиляторах.

По ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ скомпилированныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, написанныС Π½Π° Solod, Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв быстрСС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° Go. НапримСр, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· ΠΏΠ°ΠΊΠ΅Ρ‚Π° Byte быстрСС Π² ΠΏΠΎΠ»Ρ‚ΠΎΡ€Π° Ρ€Π°Π·Π° ΠΏΡ€ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΠΌ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠΈ памяти. Π Π°Π±ΠΎΡ‚Π° с Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ Π±ΡƒΡ„Π΅Ρ€Π°ΠΌΠΈ быстрСС Π² 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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ