Présenté langage de programmation Solod (So), fournissant un sous-ensemble du langage Go, transcompilé en une représentation en C (C11), adapté pour la compilation avec les compilateurs GCC, Clang et zig cc. La principale différence entre Solod et Go est l'utilisation d'une gestion manuelle de la mémoire, fonctionnant sans ramasse-miettes, sans allocation automatique de mémoire et sans comptage de références. Le transpileur pour Solod est écrit en Go et est distribué sous licence BSD. Il fonctionne sous Linux, macOS et Windows.
Le langage prend en charge les structures, méthodes, interfaces, slices, le retour de plusieurs valeurs par les fonctions (par exemple, résultat + code d'erreur), génériques et les appels différés (defer). Dans un souci de simplification, le langage ne prend pas en charge les canaux, coroutines et closures. Lors du développement en Solod, il est possible d'utiliser des serveurs LSP existants, des linters, des environnements de développement intégrés et des éditeurs de code compatibles avec Go, ainsi que l'outil 'go test'.
Le code écrit en Solod peut s'intégrer aux applications en C (le langage C peut appeler des fonctions en Solod et vice versa) et ne nécessite pas de runtime attaché. Parmi les principales applications, on note la programmation système avec des fonctionnalités proches de C, mais avec une syntaxe de style Go et une vérification des types. Solod peut également être utilisé pour porter des bibliothèques Go à utiliser dans des projets en C. Portés en C, on trouve des packages Go :
- strings
- io (antonz.org)
- bytes
- mem
- slices
et etc. En plus de un ensemble des bibliothèques Go portées dans les programmes Solod peuvent utiliser des wrappers au-dessus de la bibliothèque standard C libc.
Par défaut, toute la mémoire est allouée sur la pile, mais via les fonctions Alloc / Free de la bibliothèque standard, il est possible d'allouer de la mémoire sur le tas. Le ramassage des ordures et le comptage des références ne sont pas utilisés, mais Solod fournit des mécanismes pour la vérification des types et l'arrêt d'urgence lors de l'accès hors des limites d'un tableau. Aucune vérification pour éviter les pointeurs pendants ou le manque de libération de mémoire n'est effectuée. Comme principal moyen de détection des problèmes de mémoire, on mentionne l'utilisation d'AddressSanitizer -fsanitize=address dans les compilateurs modernes.
En termes de performance, les programmes compilés en Solod, dans la plupart des cas, plus rapide sont des programmes en Go :
- Les performances des fonctions du paquet Byte sont 1,5 fois plus rapides avec une consommation de mémoire identique.
- Le travail avec des tampons de bytes est 1,3 fois plus rapide en lecture et de 2 à 4 fois plus rapide en écriture.
- Dans le paquet Map, l'interrogation par clé entière est 3,4 fois plus rapide, mais la modification des clés est 1,6 fois plus lente.
- L'interrogation par clés de chaînes de caractères est au même niveau que le langage Go, mais la modification est 1,5 fois plus lente.
- Le parsing et le formatage des entiers sont 2 fois plus rapides, tandis que ceux des nombres à virgule flottante le sont de 1,5 / 1,2 fois.
- Les fonctions de chaîne sont 1,3 fois plus rapides, et la création de chaînes est 2 à 4 fois plus rapide avec une réduction de la consommation de mémoire de 10 à 20%.
Source : linux.org.ru
