Archivo de la etiqueta: roslyn

Vídeo: Lo que viene con C# 6

En este evento tuvimos la ocasión de juntarnos varios entusiastas de tecnologías Microsoft para comentar lo que viene con la nueva versión de C# y Visual Studio 14, así como las novedades a nivel de compilador con Roslyn. Además tuvimos la posibilidad de contar con Syncfusion como patrocinador estrella, que ofreció una licencia de su producto Essential Studio Enterprise Edition a un asistente.

Tras una introducción a cómo poner a punto un Visual Studio 14 para empezar a jugar por parte de Juan Quijano (@jc_quijano) usando las máquinas virtuales de Azure, el ilustre Eduard Tomás (@eiximenis) y un servidor nos metíamos en harina para repasar algunas de las características que trae esta nueva versión del lenguaje.

Entre las novedades destacan la propagación de nulos, los constructores principales, o la inicialización de variables dentro de bloques, y por otro lado, de manera un tanto negativa también para los asistentes, de la importación de métodos de clases estáticas.

En el segundo bloque, de mano de Juan Manuel Servera (@jmservera) vimos cómo podemos extender las capacidades de Visual Studio a través de Roslyn, para agregar más capas o reglas a nuestro propio código, ofreciendo además la posibilidad de dar sugerencias a los desarrolladores, y todo esto en un paquete nuget que puede formar parte de nuestro código fuente.

Se avecinan tiempos muy interesantes en el desarrollo de IDEs.

Antes de terminar, no quería dejar de compartir algunas estadísticas del evento:

  • 10 +1s en la página del evento
  • 24 asistentes de máxima
  • 32 personas han visto el evento, de acuerdo con su estatus en la página de Google Plus.
  • 85 tweets (incluyendo retweets) con el hashtag #vienecsharp6, “oficial” del evento, de acuerdo con las estadísticas de Topsy
  • 108 visitas a la página del evento, de acuerdo con las estadísticas de Karmacracy.
  • 124 visualizaciones del vídeo en Youtube en este momento.

Finalmente, en el vídeo comentamos algunos enlaces que se muestran a continuación:

Muchas gracias a los ponentes por hacer el evento posible, a nuestro patrocinador por el apoyo y finalmente a todos los asistentes.

Anuncios

Roslyn CTP: Compiler as a service

Microsoft acaba de lanzar la Comunity Tech Preview de la herramienta Roslyn, que representa otra herramienta para los desarrolladores, esta vez en un servicio basado en extender capacidades del compilador para dar funcionalidades a los programas bastante más allá de nuestra imaginación.

Qué hace un compilador

Hasta la fecha los compiladores han sido, para algunos, una caja negra que generaba el ejecutable de manera mágica. Para otros un programa que convertía el fichero en un código objeto y posteriormente lo enlazaba, y, finalmente para los que hemos sufrido asignaturas del tipo Procesadores de lenguaje, es un programa que realiza varios pasos:

  • Análisis morfológico: Comprueba que los caracteres signifiquen variables, comandos, no nos falte ningún punto y coma o que no pongamos caracteres ilegales en el código
  • Análisis sintáctico: Comprueba que la formación del código sea la correcta, te falta un paréntesis o una llave que has borrado accidentalmente? esto lo detecta el analizador sintáctico.
  • Análisis semántico: Comprueba que el significado del código sea correcto, estás asignando un entero a una variable de tipo cadena?, o no devuelves un valor en una función declarada como void. Esto lo detecta el analizador semántico.
  • Generación de tabla de símbolos: La tabla de símbolos permite comprobar el estado de las variables, y donde buscar su significado (gestión de variables globales, argumentos, puntos de retorno de las funciones, etc).
  • Generación de código: Si el código es correcto, se sustituyen las porciones por código ensamblador correspondiente, se sustituyen valores y se genera un fichero ensamblable. Existen compiladores que generan directamente código objeto y se saltan este paso.
  • Optimización: Mediante técnicas como el desenrollamiento de bucles, se pueden conseguir unos ciclos de ejecución más, además de posibles técnicas para múltiples procesadores.

De hecho, hacer un compilador no es demasiado difícil. Se requieren ciertos conocimientos de Ensamblador, teoría de lenguajes formales, y paciencia. El análisis morfológico, sintáctico y semántico se puede hacer con las herramientas flex y bison, y generar un fichero ensamblador usando la herramienta NASM, en un proceso que lleva aproximadamente… un cuatrimestre para un grupo de 5 personas.

El caso, es que para arquitecturas como .net el proceso será un poco más complicado.

Las novedades

Lo que hace a Roslyn una herramienta tan especial, es que cada una de las fases que se han comentado antes tendrá una API específica, con lo cual nos encontraremos con varias API diferentes para las siguientes fases:

  • Árbol sintáctico
  • Tabla de símbolos
  • Enlace y análisis de flujo (semántico)
  • Generación de código.

Estas API proporcionan nuevos servicios para los lenguajes de programación, como resaltado de sintaxis, explorador de objetos, capacidad de refactoring, que podremos extender para nuestros proyectos.

Esto nos permite tener la capacidad de compilar código de manera dinámica (en tiempo de ejecución) desde un programa, o definir funciones que son creadas sobre la marcha, es decir, hacer programas que creen programas o metaprogramación, algo bastante común a lenguajes funcionales como LISP.

Esta capacidad permite tener una consola REPL (Read-Eval-Print-Loop) para poder usar C# o Visual Basic, o ejecutar directamente un código seleccionado. Esta consola se incluye con la CTP de Roslyn, y tiene IntelliSense, completado de código, opciones de refactor, ejecución de LINQ, generar interfaces de forma dinámica… para un código que estamos escribiendo en una consola, no esta nada mal.

En resumen, una utilidad muy interesante que seguramente hará las delicias de algunos, y que ahora está disponible para jugar con ello, y descubrir nuevas maneras de generar y usar el código (como por ejemplo hacer una utilidad que convierta de C# a VB).

Más información: