Lizzie : un langage de script pour .NET

Par:
fredericmazue

lun, 03/09/2018 - 17:52

Lizzie est un langage de script pour .Net basé sur le modèle de conception des "délégués symboliques" . Lizzie permet d'exécuter des scripts créés dynamiquement. Ces scripts ne sont ni compilés ni interprétés, mais ils "compilent "directement vers les délégués CLR managés. 

Lizzie est fortement influencé et inspiré de Lisp (chic :-), mais sans la "notation polonaise" non intuitive expliquent les concepteurs de ce nouveau langage. (Comprendre : sans les parenthèses de Lisp qui souvent rebutent les développeurs qui n'y sont pas habitués ou qui n'écrivent pas leur code comme il se devrait :-)  

La nature dynamique de Lizzie vous permet d'exécuter des morceaux de code Lizzie en ligne dans votre code C #, en chargeant votre code depuis des fichiers, ou en récupérant par exemple le code d'une base de données ou même en transmettant du code sur le réseau.

Voici un exemple de code en Lizzie :

using System;
using lizzie;

class MainClass
{
    public static void Main(string[] args)
    {
        // Some inline Lizzie code
        var code = @"
// Multiples 10 by 2 and adds to 57
+(57, *(10, 2))
";

        // Creating a Lizzie lambda object from the above code, and evaluating it
        var lambda = LambdaCompiler.Compile(code);
        var result = lambda();

        // Writing the result of the above evaluation to the console
        Console.WriteLine("Result was: " + result);

        // Waiting for user input
        Console.Read();
    }
}

Lier Lizzie à vos propres types

Une caractéristique très intéressante de Lizzie est la possibilié de faire une liaison (binding) entre du code Lizzie et un type CLR. Ceci permet d'étendre Lizzie avec vos "mos-clés" C#. L'exemple ci-dessous montre commence le type Write de C# devient le 'mot-clé write dans le code Lizzie.

using System;
using lizzie;

class MainClass
{

    [Bind(Name = "write")]
    object Write(Binder<MainClass> ctx, Arguments arguments)
    {
        Console.WriteLine(arguments.Get<string>(0));
        return null;
    }

    public static void Main(string[] args)
    {
        // Some inline Lizzie code
        var code = @"
write('Hello World!!')
";

        // Creating a lambda function from our code, and evaluating it
        var function = LambdaCompiler.Compile(new MainClass(), code);
        function();
    }
}

Un langage de script très sympathique.

Lizzie est open source, disponible sur GitHub.