LINUX.ORG.RU

Clang


71

3

Всего сообщений: 272

См. также:

 , , , , , , , ,

Новости — Разработка

Solod — подмножество языка Go, транслируемое в язык Си

Группа Разработка

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

Язык поддерживает структуры, методы, интерфейсы, слайсы, возврат функциями нескольких значений (например, результат + код ошибки), дженерики и отложенные вызовы (defer). C целью упрощения в языке не поддерживаются каналы, сопрограммы и замыкания. При разработке на языке Solod могут использоваться существующие LSP-серверы, линтеры, интегрированные среды разработки и редакторы кода, поддерживающие язык Go, а также инструментарий «go test».

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

и т. п. Помимо набора портированных 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

 , , , ,

PunkPerson
()

Еще новости

2023

2020

2019

2018

2017

2016

2015

2014

2013

2012

Опросы

2021

  • Голосования gcc vs clang (167 комментариев)

Галерея

Форум

Апрель 2026

Январь 2026

Ноябрь 2025

Октябрь 2025

Август 2025

Июнь 2025

Май 2025

2025

2024