Posts Tagged compiler

Compilando desde WinForms y desde la consola

Compilando desde Linux usando la interfaz de WinForms:

Compilando desde la consola en Linux:

Este último vídeo también incluye algunos ejemplos de los parámetros que se le pueden pasar al compilador, y se ve cómo automáticamente detecta el idioma del sistema (que en la consola se configura mediante variables de entorno).

, , , , ,

No Comments


Compilando código escrito en Visual Basic .NET

Programa de ejemplo escrito en Visual Basic .NET

Código fuente en lenguaje ensamblador generado por Pigmeo Compiler

Y un pantallazo de Pigmeo Compiler compilando este programa desde linux, utilizando la interfaz de WinForms:
pantallazo de Pigmeo Compiler compilando

, , , , , ,

No Comments


Pigmeo Compiler compilando

Compilando el siguiente programa escrito en C#: ejemplo001.cs

El compilador de C# que más nos guste nos genera el .exe (que hace referencia a PIC16F716.dll) y Pigmeo Compiler lo convierte a lenguaje ensamblador: ejemplo001.asm. Podemos fijarnos en que se compiló para el PIC16F716 (sin especificarlo a la hora de utilizar Pigmeo Compiler), ya que el compilador de pigmeo automáticamente detecta la “librería de dispositivo” que se utilizó cuando el programa en C# fue compilador a .exe y sin intervención del usuario sabe para qué arquitectura y qué rama/dispositivo estamos compilando, en este caso la arquitectura es PIC14 y el dispositivo es PIC16F716.

Y con mpasm, gpasm o cualquier otro programa ensamblador (que sea compatible) para PICs de 8 bits generamos el archivo binario (.hex) que podemos grabar en nuestro microcontrolador.

, , , , ,

No Comments


Cómo encontrar partes de Pigmeo sin terminar

He preparado un Custom Attribute para que los desarrolladores de Pigmeo puedan marcar métodos/funciones indicando que ese método aún no está implementado, debe ser reescrito o faltan cosas por hacer. Este método se utiliza en el desarrollo de Mono (aunque no he utilizado nada de código de Mono, ni siquiera lo he visto) y me parece útil para encontrar más fácilmente las tareas pendientes pero que no son lo suficientemente importantes o urgentes como para reportarlas como un bug, además de servir como complemento al bugzilla.

parámetros del compilador de pigmeo

En la siguiente imagen podemos ver cómo se marcan las funciones con el atributo PigmeoToDo, que obviamente se compilan y se integran en los metadatos de los ejecutables y las librerías, es decir, los atributos son datos que se almacenan en pigmeo-compiler.exe, Pigmeo.Internal.dll, Pigmeo.dll, PIC16F716.dll… no son variables accesibles desde otras partes del programa.

un método marcado con el Custom Attribute PigmeoToDo
un método marcado con el Custom Attribute PigmeoToDo

Entonces… ¿cómo sabemos qué métodos poseen el atributo PigmeoToDo?
He implementado una clase (Pigmeo.Internal.FindPigmeoToDos, dentro de la librería Pigmeo.Internal.dll) que puede utilizarse desde cualquier otro programa del proyecto Pigmeo para cargar las librerías y los ejecutables uno a uno y mostrar las funciones marcadas con PigmeoToDo.

De momento el compilador puede llamarse con el parámetro todo o ToDo y conseguimos que el compilador se lea a sí mismo en tiempo de ejecución y nos muestre las cosas que faltan por hacer:

Pigmeo Compiler mostrando los métodos marcados con el Custom Attribute PigmeoToDo

, , , , , ,

No Comments


Cómo funciona Pigmeo

(Este artículo es una traducción de How Pigmeo Works, parte de la documentación oficial para desarrolladores de Pigmeo. Al contrario que la documentación para usuarios, la doc. para desarrolladores sólo se publicará en inglés)

Para entender cómo funciona Pigmeo, antes debemos entender cómo funciona .NET.

Cómo funciona .NET

Cuando quieres escribir una aplicación en C#, Visual Basic .NET, C++/CLI o cualquier otro lenguaje de .NET, lo primero que haces es escribir el código fuente. Este código fuente se compila a CIL/IL/MSIL, el lenguaje intermedio de .NET (parecido a otros tipos de lenguaje ensamblador), y se almacena en archivos .exe que contienen bytecodes de CIL (al igual que ocurre en java). Estos bytecodes son representaciones binarias del juego de instrucciones definido por CIL. Cabe destacar que estos archivos .exe no son ejecutables de Windows aunque tengan la misma extensión.

Los bytecodes de CIL almacenados en los ejecutables de .NET (los archivos .exe) se compilan a código máquina por el CLR (cuando el usuario lo ejecuta), la máquina virtual de .NET, y entonces son ejecutados por el procesador. Hay que tener en cuenta que CIL no está orientado a ninguna arquitectura de hardware en particular, por lo que cualquier máquina virtual (CLR) en cualquier arquitectura y cualquier sistema operativo puede compilar y ejecutar los archivos ejecutables de .NET.

Algunas implementaciones de .NET son Mono, la implementación de .NET hecha por Microsoft, DotGNU, Rotor

Por lo tanto funciona de la siguiente manera:
[C# / VB.NET / C++/CLI / Boo / Chrome / J# / Nemerle / Ruby.NET / IronScheme / IronPython / IKVM.NET / cualquier otro lenguaje que sea compilado a CIL] => compilador => .exe + librerías en el GAC => Máquina Virtual (CLR) => código máquina => procesador

Cómo funciona Pigmeo

Si queremos ejecutar nuestra aplicación en un microcontrolador o algún tipo de sistema embebido, podemos ejecutar un CLR en él y dejar que sea el CLR quien compile y ejecute nuestros bytecodes en CIL (el archivo .exe), como lo hace el .NET Micro Framework, pero requiere muchísimos recursos, así que Pigmeo genera el código máquina en un ordenador común.

Desarrollando aplicaciones en .NET para microcontroladores usando Pigmeo, se escribe el código fuente y se compila a bytecodes de CIL de manera normal. Después Pigmeo Compiler toma el archivo .exe, lo junta con las librerías necesarias y convierte solamente las partes útiles de estos archivos a lenguaje ensamblador para la arquitectura de destino.

Una vez que tenemos nuestra aplicación compilada a lenguaje ensamblador ya podemos utilizar un programa ensamblador para convertirlo a código máquina listo para ser enviado al microcontrolador a través de un programador (como PIC³PROG o PICkit).

Cuando la aplicación haya sido grabada en el microcontrolador ya puede ejecutarse normalmente.

Como resumen:
[C# / VB.NET / C++/CLI / Boo / Chrome / J# / Nemerle / Ruby.NET / IronScheme / IronPython / IKVM.NET / cualquier otro lenguaje que sea compilado a CIL] => compilador => .exe + librerías en el GAC => Pigmeo Compiler => lenguaje ensamblador para la arquitectura de destino => programa ensamblador => código máquina => cualquier programador/grabador de microcontroladores => procesador del microcontrolador

, , , , , , , , , , , ,

No Comments


Editor de lenguaje ensamblador integrado

Para facilitar la depuración o para cualquiera que quiera ver el código fuente generado por Pigmeo Compiler he implementado un sencillo editor de texto con resaltado de sintaxis para lenguaje ensamblador, que abre automáticamente el archivo con el que estemos trabajando.

Vídeo de ejemplo del editor de lenguaje ensamblador [ogg + theora]
Vídeo de ejemplo del editor de lenguaje ensamblador [avi + xvid]

, , , , , , , , , , ,

No Comments


Video de ejemplo del compilador

La GUI de WinForms corriendo en Gentoo Linux, sobre Mono 1.2.6. Versión 0.0.9999-SVN de Pigmeo Compiler:
Vídeo de ejemplo de Pigmeo Compiler [ogg + theora]
Vídeo de ejemplo de Pigmeo Compiler [avi + xvid]

Se ve cómo se elige un archivo a ejecutar, automáticamente se configuran las rutas para los archivos de destino; luego configuramos para que se muestren los mensajes de depuración y cambiamos entre español e inglés un par de veces para que se vea cómo los controles se adaptan a cada idioma. Se vuelve al panel de compilación y compilamos.

Algunos mensajes de salida están en inglés y otros en español. Esto es así porque todo lo relacionado con los desarrolladores de pigmeo (incluyendo los mensajes de depuración) solamente está en inglés, ya que los usuarios finales no tienen por qué ver estos mensajes, en cambio los textos verbose (los precedidos por “INFO:”) se muestran en español (salvo que aún no estén traducidos).

Creo que para ser una versión de desarrollo (aún no hay ninguna release estable) no está nada mal.

, , , ,

No Comments


El compilador de Pigmeo ya tiene cara

La primera interfaz gráfica que voy a implementar es la de WinForms, que aunque ni es estándar ni libre, sí es la más fácil de portar ya que Mono la soporta casi perfectamente en linux.

Una imagen del compilador utilizando la interfaz de WinForms en Gentoo Linux:
pantallazo de pigmeo compiler corriendo con winforms en linux

La misma versión del compilador, usando exactamente la misma interfaz y utilizando el mismo binario, sin necesidad de recompilarlo siquiera, corriendo en Windows XP con estilo clásico:
pantallazo de pigmeo compiler corriendo con winforms en windows

Y de nuevo en Windows XP pero esta vez utilizando el estilo de Windows XP:
pantallazo de pigmeo compiler corriendo con winforms en windows xp

Además el compilador automáticamente ha detectado que mi sistema está configurado en español, así que la interfaz se muestra en español (el idioma puede configurarse en tiempo de ejecución desde el panel de configuración del compilador), como puede leerse en el menú “Archivo”, pero como todos los demás strings aún no están traducidos entonces se muestran en inglés.

, , , , , , , , ,

No Comments