Gravity : un langage léger pour écrire des applications Android et iOS

Par:
fredericmazue

mar, 14/03/2017 - 15:21

Gravity est un langage développé à partir de zéro dans le cadre du projet Creo. Creo est un outil sous Mac qui combine le design et la conception d'applications iOS et Android. Gravity est entièrement écrit en C portable, sans autre dépendance que la stdlib. Ainsi Créo peut être porté sur toute plate-forme qui dispose d'un compilateur C99, ce qui finalement ne le limite pas à iOS et Android. Gravity est intéressant pour toute application embarquée.

En effet Gravity fait dans la légèreté :-) Son environnement d'exécution (VM) ne compte que 2000 lignes de code, son compilateur multi-passes 3000 lignes et son code partagé 2 000 lignes. Le tout pèse moins de 200 Ko sur un système 64 bits.

Gravity est un langage dynamiquement typé et multi-paradigmes. Il permet la programmation procédurale, orientée objet, fonctionnelle et pilotée par les données. Ces fonctionnalités sont très riches : classes et héritage, classes imbriquées, portée lexicale, fonction d'ordre supérieur, fermetures (closures), surcharge des opérateurs, tests unitaires intégrés, ramasse-miettes, sérialiseur/désérialiseur JSON intégré,...

Gravity est open source sur GitHub.

Voici à quoi ressemble du code Gravity :

class Vector {
    // variables d'instances
    var x = 0;
    var y = 0;
    var z = 0;

    // constructeur
    func init (a, b, c) {
        if (!a) a = 0;
        if (!b) b = 0;
        if (!c) c = 0;

        x = a; y = b; z = c;

    }

    // méthode d'instance  (surcharge d'opérateur)

    func + (v) {
        if (v is Int) return Vector(x+v, y+v, z+v);
        else if (v is Vector) return Vector(x+v.x, y+v.y, z+v.z);
        return null;
    }

    // methode d'instance (surcharge de conversion de chaine)
    func String() {
        return "[" + x.String() + "," + y.String() + "," + z.String() + "]";
    }

func main() {

    // instanciation d'un objet vector
    var v1 = Vector(1,2,3);
    // instanciation d'un objet vector
    var v2 = Vector(4,5,6);

    // opération sur les vecteurs
    var v3 = v1 + v2;
    // retourne la chaîne "[5,7,9]"
    return v3.String();
}