Le langage de programmation Gravity fournit une option complémentaire pour développer des applications mobiles. Ecrit en C, il emprunte aussi à d’autres langages et supporte la programmation orientée données et objets, fonctionnelle et procédurale, explique le développeur Marco Bambini sur GitHub. Il a été développé en partant de zéro pour le projet Creo, l'outil de conception pour Mac Creo de CreoLabs (qui en propose une description) mais il est livré comme un produit indépendant. Actuellement en bêta et proposé en open source, Gravity permet d’écrire rapidement du code portable pour iOS et Android. Il supporte aussi les développements pour les postes de travail et systèmes embarqués.

« Imaginez Swift, Javascript et Smalltalk combinés dans une toute petite machine virtuelle qui fonctionne sur n’importe quel OS », décrivent les concepteurs de Gravity sur le site de Creolabs.

Il se présente comme un langage de script basé sur des classes, dont la syntaxe est similaire à celle de Swift, le langage de programmation, conçu pour le développement de logiciels pour iOS et OS X et mis en open source par Apple il y a un peu plus d’un an. Avec son code C portable, Gravity peut être compilé sur n’importe quelle plateforme utilisant un compilateur C99, selon la description du projet postée sur GitHub. Il n'a pas de dépendances externes (excepté stdlib). Ensemble, compilateur et machine virtuelle n’ajoutent guère que 200 Ko au fichier exécutable sur un système 64-bit, est-il précisé.

Un exemple du code que l'on peut produire avec Gravity.

Marco Bambini voit Gravity comme un outil complémentaire à Swift et Java dans la panoplie de développement destinée aux plateformes mobiles. Le langage est supporté par certains projets open source. Il fait appel aux closures en s’inspirant de « l’élégant langage de programmation Lua », et plus spécifiquement du document « Closures in Lua », est-il encore expliqué dans la présentation du projet. Tandis que le langage Wren, également accessible sur GitHub, a inspiré de son côté d’autres éléments (fibers, manipulation des upvalues) et quelques parties du récupérateur de mémoire (garbage collector).