Домой Статьи и аналитика Технологии Solod: язык программирования на базе Go с трансляцией в Си

Solod: язык программирования на базе Go с трансляцией в Си

Новый инструмент для системного программирования, объединяющий понятный синтаксис Go и производительность языка Си без оверхеда в виде GC.

Solod: язык программирования на базе Go с трансляцией в Си
Solod: язык программирования на базе Go с трансляцией в Си — иллюстрация к материалу. Источник: linux.org.ru

Разработчики представили язык программирования Solod (So) — специализированное подмножество языка Go, которое транслируется в код на языке Си (стандарт C11). Полученный промежуточный код полностью совместим со сборкой через современные компиляторы GCC, Clang и zig cc.

Главная особенность Solod заключается в полном отказе от автоматического управления памятью. В языке отсутствуют сборщик мусора, механизмы подсчёта ссылок и автоматическое выделение ресурсов. Все процессы контроля памяти переложены на разработчика. Транспайлер для языка написан на самом Go и распространяется по открытой лицензии BSD, обеспечивая кроссплатформенную работу в средах Linux, macOS и Windows.

Возможности и синтаксис Solod

Язык сохранил ключевые синтаксические конструкции Go: поддерживаются структуры, методы, интерфейсы, слайсы, механизм отложенных вызовов (defer), дженерики и возможность возврата нескольких значений из функций. Ради максимального упрощения и предсказуемости в Solod сознательно не реализованы каналы, сопрограммы (goroutines) и замыкания.

Для комфортной разработки в Solod можно применять практически весь инструментарий, привычный для программистов на Go: от популярных IDE и текстовых редакторов до LSP-серверов и линтеров. Также сохранена совместимость с утилитой go test.

Интеграция и применение

Код на Solod легко интегрируется с существующими проектами на языке Си: возможен вызов функций Solod из Си-кода и наоборот. Отсутствие необходимости в прикреплении runtime делает этот язык отличным выбором для системного программирования. Он позволяет создавать высокопроизводительные компоненты с синтаксисом Go, сохраняя при этом возможности и предсказуемость Си.

Solod также упрощает процесс портирования библиотек Go для нужд Си-проектов. Кроме того, программы на Solod могут штатно работать с любыми обвязками стандартной библиотеки libc.

Управление памятью и производительность

По умолчанию Solod выделяет память в стеке, однако для работы с кучей предусмотрены функции Alloc и Free. Хотя язык не проводит автоматических проверок на утечки или «висячие» указатели (dangling pointers), он обеспечивает контроль границ массивов, вызывая аварийное завершение при выходе за их пределы. Для поиска ошибок при работе с памятью авторы рекомендуют использовать встроенный в современные компиляторы инструмент AddressSanitizer (параметр -fsanitize=address).

Согласно внутренним тестам, скомпилированный код на Solod во многих сценариях демонстрирует превосходство в скорости над оригинальным Go:

  • Функции пакета Byte работают в 1,5 раза быстрее при сопоставимом расходе памяти.
  • Операции с байтовыми буферами показывают прирост скорости в 1,3 раза при чтении и до 2–4 раз при записи.
  • В пакете Map выборка по целочисленному ключу происходит в 3,4 раза быстрее, хотя модификация ключей оказалась медленнее на 1,6 раза.
  • Работа со строковыми ключами по скорости выборки сопоставима с Go, однако операции модификации медленнее на 1,5 раза.
  • Парсинг и форматирование целых чисел выполняются в 2 раза быстрее, чисел с плавающей запятой — на 20–50% быстрее.
  • Строковые функции работают в 1,3 раза быстрее, а создание строк ускорилось в 2–4 раза при общем снижении потребления памяти на 10–20%.
Источник: https://www.linux.org.ru