Starlark est un petit langage de programmation, conçu comme un dialecte simple de Python et destiné principalement à une utilisation embarquée dans des applications. Certains diront que c'est un peu comme Lua avec la syntaxe de Python, mais je pense qu'il y a beaucoup de choses intéressantes à discuter. Le langage est désormais ouvert et utilisé dans de nombreuses autres applications et entreprises. Comme j'ai dirigé la conception et la mise en œuvre de Starlark, j'aimerais écrire un peu plus à son sujet.
À quoi ressemble Starlark ?
Voici un exemple de code :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 | def fizz_buzz(n): """Print Fizz Buzz numbers from 1 to n.""" for i in range(1, n + 1): s = "" if i % 3 == 0: s += "Fizz" if i % 5 == 0: s += "Buzz" print(s if s else i) fizz_buzz(20) |
Comme Python, c'est un langage à typage dynamique avec des types de données de haut niveau, des fonctions de première classe avec une portée lexicale et un ramasse-miettes. Mais il est beaucoup plus simple que Python et la plupart des fonctionnalités de Python ne sont pas prises en charge.
D'après mon expérience sur une grande base de code avec des dizaines de milliers de développeurs, la plupart des gens sont à l'aise avec le langage, sans avoir à l'apprendre au préalable.
Les principes
Le langage a été conçu en tenant compte des principes suivants.
- Évaluation déterministe. Si vous exécutez le même code deux fois, vous obtiendrez les mêmes résultats. En Python, le code ne sera pas déterministe s'il s'appuie sur la sortie de fonctions comme "id", "hash", s'il parcourt une table de hachage, s'il a des conditions de course, ou s'il mesure le temps d'exécution.
- Exécution hermétique. Pendant l'exécution, le code ne peut pas accéder au système de fichiers, au réseau ou même à la date du jour. Il est possible d'exécuter du code non fiable.
- Évaluation parallèle. En Python, l'ordre d'importation, car chaque importation est évaluée successivement, peut avoir des effets secondaires. Dans Starlark, les modules peuvent être chargés en parallèle en toute sécurité. Les données partagées entre plusieurs modules deviennent immuables, ce qui garantit que le code est toujours sûr pour les threads.
- Simplicité. Le langage est petit, la spécification du langage est courte. Le nombre de concepts est relativement limité, de sorte que les nouveaux utilisateurs devraient être en mesure de lire et d'écrire rapidement du code. Nous avons éliminé de nombreux pièges présents dans Python.
- Se concentrer sur l'outillage. Au fur et à mesure que la base de code s'étoffe, il devient important de pouvoir analyser et modifier le code Starlark automatiquement. Lorsqu'un langage est trop dynamique, il peut être difficile de remanier et de migrer le code existant. Dans Starlark, il est plus facile de faire de l'analyse statique et d'avoir des garanties plus fortes qu'en Python
- Similaire à Python. Python est un langage très populaire et sa syntaxe est bien connue des développeurs. Starlark a été conçu pour être familier, afin de réduire la courbe d'apprentissage et de rendre la sémantique plus évidente pour les utilisateurs.
Nous obtenons de nombreuses garanties avec Starlark, et c'est le principal facteur de différenciation par rapport à d'autres langages populaires. Certaines personnes peuvent penser qu'il est facile d'éviter le non-déterminisme ou d'autres problèmes, mais je vous assure qu'ils se produisent fréquemment dans les grandes bases de code.
Différences avec Python
Starlark est beaucoup plus simple que Python. La bibliothèque est minimaliste : il y a environ 30 fonctions, quelques types, et des méthodes sur les listes, les chaînes et les dicts. Bien sûr, lors de l'intégration de Starlark, l'application hôte peut fournir des fonctions supplémentaires.
Quelques différences avec Python : Il n'y a pas d'exceptions, pas de "while", pas de "yield", pas de "is", pas de réflexion. Les variables globales ne peuvent pas être réaffectées. L'ordre d'itération est toujours spécifié. La concaténation implicite de chaînes de caractères n'est pas autorisée. Cette liste n'est pas exhaustive. Pour plus d'informations sur le sujet, voir la page Conception du langage.
Applications
Starlark est souvent utilisé comme langage d'extension (similaire à Lua) ou comme langage de configuration. Starlark est disponible en tant que bibliothèque, pour être utilisé à partir d'autres applications. Il existe actuellement trois implémentations de Starlark, dans des langages différents :
- En Java (partie de la base de code Bazel). Il s'agit de l'implémentation originale. Elle est utilisée pour Bazel et quelques projets de Google, mais elle n'a pas d'interface stable.
- En Rust : https://github.com/facebookexperimen.../starlark-rust. Elle est maintenue par Facebook. Elle est utilisée par Facebook pour son système de construction, Buck, ainsi que pour de nombreux autres outils internes.
- En Go : https://github.com/google/starlark-go/. Elle est utilisée par de nombreux projets et entreprises open source, tels que IBM, Stripe (skycfg), Chromium (lucicfg), Cruise Automation (isopod), le débogueur Go Delve, et bien d'autres encore.
Pourquoi avez-vous créé Starlark ?
Historiquement, tout le code de la base de code de Google était construit à l'aide de Makefiles. Au fur et à mesure que la base de code s'est développée, les gens ont écrit des scripts Python pour générer les Makefiles, en utilisant une syntaxe relativement déclarative. Vers 2007, Bazel a été créé et s'est appuyé sur l'interpréteur Python pour comprendre les scripts de construction. Après avoir rencontré des problèmes d'évolutivité, de performance et de maintenance, nous avions besoin d'un langage qui fournisse des garanties beaucoup plus solides. J'ai commencé la conception et l'implémentation du langage en 2015. En 2017, nous avons migré tous les scripts de construction Python de Google vers Starlark (des centaines de milliers de fichiers). Pour faciliter la migration, nous avons décidé de garder le langage aussi similaire que possible à Python.
Si vous envisagez d'utiliser Starlark dans votre application, j'aimerais en savoir plus. Si vous rencontrez des obstacles à l'adoption, j'aimerais également en savoir plus. Je viens de créer un subreddit Starlark pour les nouvelles et les discussions, bien que je ne sache pas encore à quel point il sera utile, mais je le surveillerai.
Sources : Laurent Le Brun, Starlark
Et vous ?
Quel est votre avis sur le sujet ?
Voir aussi :
La version 1.0.0 de Bazel est disponible, l'outil open source de Google pour compiler et générer la plupart de ses applications
Python creuse l'écart et renforce son avance en tant que langage de programmation le plus populaire sur l'indice TIOBE, mais pourquoi le langage est-il autant prisé ?
Python 3.13 ajoute un compilateur JIT qui pourrait améliorer les performances du langage d'environ 9 %, mais l'annonce suscite des réactions mitigées