BT

Diffuser les Connaissances et l'Innovation dans le Développement Logiciel d'Entreprise

Contribuez

Sujets

Sélectionner votre région

Accueil InfoQ Actualités ScriptCS : Faire de C# un langage de Script

ScriptCS : Faire de C# un langage de Script

Grâce à ScriptCS, les développeurs peuvent écrire des applications C# depuis un simple éditeur de texte. La compilation est effectuée par Roslyn et la gestion des packages par NuGet.

C'est Glenn Block, responsable de projets dans l'équipe du SDK Windows Azure, qui a initié ScriptCS dans le cadre d'un projet personnel, avec pour objectif de faire de C# un langage de script. Il offre au développeur la possibilité d'utiliser ses connaissances en C# en codant dans un simple éditeur de texte, la compilation étant effectuée par Roslyn, le "compiler-as-a-service" de Microsoft. ScriptCS s'appuie sur NuGet pour découvrir les packages dépendants et pour uploader les binaires. La syntaxe de Roslyn r: est utilisée pour ajouter les références vers les DLL du GAC ou d'autres emplacements.

Si un fichier hello.csx contient la ligne de code C# suivante,

Console.WriteLine("Hello World!");

alors l'exécution de la commande scriptcs hello.csx produira l'affichage de la chaîne de caractères Hello World! dans la console.

Dans cet exemple, aucune mention d'espace de nom ni de définition de classe n'est nécessaire et aucun projet, fichiers .obj ou .exe ne sont générés. Roslyn compile, ScriptCS exécute le résultat.

Un autre exemple, plus élaboré, est la création d'un hôte Web API :

using System;
using System.IO;
using System.Web.Http;
using System.Web.Http.SelfHost;

var address = "http://localhost:8080";
var conf = new HttpSelfHostConfiguration(new Uri(address));
conf.Routes.MapHttpRoute(name: "DefaultApi",
   routeTemplate: "api/{controller}/{id}",
   defaults: new { id = RouteParameter.Optional }
);

var server = new HttpSelfHostServer(conf);
server.OpenAsync().Wait();
Console.WriteLine("Listening...");
Console.ReadKey();

Comme Glenn Block l'explique, ScriptSC propose un mécanisme de plug-in, s'appuyant sur un concept qu'il appelle script packs :

Un script pack peut apporter des imports d'espaces de noms, des références, aussi bien que des objets qui seront alors disponibles pour le script via l'API Require<T>.

L'objectif premier d'un script pack est de faciliter l'écriture des scripts s'appuyant sur des frameworks.

S'installant via des packages NuGet, les scripts packs peuvent être facilement découverts et consommés.

Un travail est actuellement en cours pour faire fonctionner ScriptCS sur Mono. L'idée d'ajouter des fonctions de debugging à Roslyn est, elle, en cours d'investigation. Sublime Text a créé un plug-in pour ScriptCS pour permettre la coloration syntaxique depuis un éditeur simple. Pour la coloration syntaxique dans les fichiers .csx, une alternative est possible depuis Visual Studio en utilisant Roslyn.

Glenn Block liste les avantages du scripting, en s'appuyant sur son expérience avec Node.js :

  • Pas de projets, que du script. Une chose que j'apprécie fortement avec Node.js, c'est que vous pouvez tout simplement ouvrir un répertoire, créer des fichiers .js et vous mettre au boulot.
  • Pas besoin d'IDE, un éditeur de texte suffit.
  • Les packages priment sur les assemblies. Avec Node, quand vous voulez récupérer quelque chose, vous utilisez npm pour télécharger les packages. C'est super simple. Vous avez votre application et votre répertoire local node_modules et c'est tout ce qu'il vous faut.
  • Pas de compilation. Ça, c'est un gros avantage. Avec Node, j'ai juste à lancer node.exe et mon application et cela fonctionne. Je n'ai pas d'abord à créer un exécutable, j'exécute, c'est tout.

Tout ceci est rendu possible par Roslyn et NuGet. ScriptCS travaille toujours avec des assemblies, mais du point de vue du développeur, on se contente de dire : "je n'ai pas à les gérer individuellement, je me contente d'installer des packages".

ScriptCS est sous licence Apache 2 et n'est actuellement pas supporté par Microsoft.

Evaluer cet article

Pertinence
Style

Contenu Éducatif

BT