No es la primera vez que hablo de mi relación de mi amor/odio con los lenguajes de scripting. Son algo que considero imprescindible para crear esas pequeñas herramientas que mejoran tu flujo de trabajo, pero que se me resisten especialmente.
También he dicho que cada vez me da más pereza utilizar IDEs pesados, sobre todo cuando estoy experimentando con un lenguaje o resolviendo tareas sencillas, y que me gusta la forma en que se trabaja con otros lenguajes, como es el caso de Clojure con leiningen.
Por eso cuando me enteré del proyecto de Glenn Block para poder utilizar C# como lenguaje de scripting sin depender de Visual Studio, me pareció que merecía la pena dedicar un rato a echarle un vistazo.
¿Qué es scriptcs?
Lo mejor para entender scriptcs es leer el post de Glenn Block en el que explica los motivos que le llevaron a empezar el proyecto.
La idea de scriptcs es poder aprovechar Roslyn para compilar scripts escritos en C# y NuGet como gestor de dependencias. Con eso conseguimos montar un combo entre scriptcs y NuGet similar al de node.js y npm.
Con NuGet podremos instalar los paquetes que vayamos a utilizar y scriptcs se encargará de compilar «al vuelo» y ejecutar los scripts que escribamos.
¿Cómo se usa?
OJO: este proyecto es MUY nuevo, por lo que seguramente dentro de poco todo esto esté obsoleto. La información actualizada siempre la podrás encontrar en la web de scriptcs.
Para empezar a utilizar scriptcs sólo hacen falta dos cosas:
- Descargar el bootstrapper por línea de comandos de NuGet y añadirlo a alguna carpeta que esté en el path.
- Clonar el repositorio de scriptcs, compilar la solución y copiar los archivos resultantes a algún sitio accesible en el path.
Con esto ya podemos crear nuestro primer script. Creamos una carpeta y creamos dentro un fichero sample.csx
:
using System; Console.WriteLine("¡Soy un script simple!");
Como veis, no hay clases ni métodos (aunque se pueden añadir), sólo los using
y el código. Ejecutarlo es muy sencillo:
scriptcs sample.csx
OJO: actualmente hay un bug en la rama master
que hace que se genere un error si no hemos instalado ningún paquete con nuget y no existe la carpeta packages
. Lo puedes evitar si creas a mano esa carpeta al mismo nivel que el script.
Si quieres añadir algún paquete, sólo tienes que instalarlo con nuget:
nuget install Nombre.Del.Paquete -o Packages
scriptcs lo detectará automáticamente y podrás usarlo desde tus scripts.
Un proyecto interesante
No es la primera vez que alguien intenta utilizar C# como lenguaje de scripting fuera del Visual Studio. Existen cosas como Snippet Compiler, CS-Script o incluso LINQPad. Usando System.CodeDom.Compiler es relativamente fácil hacer cosas similares (yo mismo hice algo parecido para Mono hace muchos años), pero la idea de usar Roslyn e integrarlo con NuGet abre muchas puertas.
Con Roslyn no estamos tan atados a la sintaxis habitual de C# y podemos adecuarla a un estilo más propio de lenguajes de scripting, y NuGet facilita mucho la gestión de dependencias sin necesidad de definir un archivo de proyecto en el Visual Studio.
La comunidad de desarrollo de C# está muy apegada a sus herramientas (es en lo que se ha centrado Microsoft siempre), por lo que esta filosofía de trabajo resultará extraña para muchos, pero en los últimos tiempos cada vez es más habitual trabajar con distintos lenguajes dentro de un mismo proyecto y acabar expuesto a otras formas de trabajo (estoy pensando fundamentalmente en node.js).
Tampoco creo que haya que verlo como algo excluyente, hay casos en que contar con todo un Visual Studio y sus múltiples utilidades de análisis estático, refactorización, gestión de proyectos, etc., es muy valioso, pero también es cierto que otras veces resulta excesivo.
En cualquier caso, me ha parecido un proyecto con un enfoque muy interesante y tengo ganas de ver hasta dónde es capaz de llegar.
No controlo mucho el tema del scripting en ms pero una opcion de toda la vida es usar javascript -aka JScript- (o vbscript aunque nunca ha sido mi opcion ya que prefiero el primero)
Alguna vez que he tenido que hacer algun script en ms lo he usado y no me ha ido mal, ¿cual serian las ventajas e inconvenientes con esta nueva opcion (aparte de la de tener un gestor de dependencias que ya es bastante)?
¿Ventajas? Según se mire. Para mi poder escribir el script en un lenguaje que domino es una ventaja :-)
Además la BCL (la librería estándar de .NET) es muy completa y me parece más cómoda de manejar que las APIs que usa JScript para cosas como el sistema de ficheros, etc.
De todas formas, creo que el proyecto hay que verlo más desde el punto de vista de lo que aporta a C# que de lo que aporta al mundo del scripting (en el que ya había soluciones como las que mencionas que, podían gustar más o menos, pero funcionaban bien).