Logged in as 38.107.191.95 : Discusión para esta IP Registrarse/Entrar
Views:
Herramientas:

Libro para desarrolladores en Mono:Prefacio

De Mono Hispano

En el año 2000 Microsoft publica las especificaciones de la plataforma .NET. Esta tecnología se crea con el objetivo de ser un entorno de desarrollo que simplifique el desarrollo de aplicaciones estandarizando una plataforma dotándola de una serie de características que iremos describiendo a lo largo de este libro.

No es la primera tecnología de esta características, Sun Microsystems había desarrollado hace unos cuantos años algo similar: Java

Básicamente se pueden dividir los tipos de programas en varios bloques:

1.- Procedentes de lenguajes compilados, como puede ser C. En este tipo de lenguajes son compilados, osea, que nuestro código se convierte en una serie de instrucciones interpretables por el ordenador.

Ejemplo:

static void function_foo (int foo)
{}


int main (int argc, char *argv[])
{

  function_foo (10);
  return 0;
}
/*
 * Una vez lo compilamos se convierte en lo siguiente:
 *
 * push   $0xa
 * call   0x80482f4 <function_foo>
 *
 * El lenguaje C no es comprensible por un ordenador, sin embargo al compilarlo
 * obtenemos las instrucciones de las que hablabamos antes.
 *
 * La instrucción push introduce el literal 0xa (que se corresponde 
 * con el valor decimal 10) en la pila y llama a la función mapeada en 
 * memoría en la dirección 0x80482f4 de tal manera que function_foo es 
 * capaz de obtener los argumentos y trabajar con ellos si fuera necesario.
 *
 * Como podemos ver, el lenguaje C es muy cercano al lenguaje máquina.
 * 
 */


2.- Los programas que están escritos en un lenguaje interpretado no necesitan ser compilados, sino que son procesados por un programa (intérprete) que es quien finalmente se comunica con la máquina. De esta manera no debemos de preocuparnos por direcciones de memoria, asignación de espacio, ... ya que todo eso lo hace el interprete, que suele ser compilado por cuestiones de rendimiento. Otra ventaja de estos lenguajes es que no necesitamos portarlos a otra arquitectura, solo es necesario portar el interprete.

3.- Programas que se ejecutan sobre máquina virtual. Este tipo de programas es un híbrido entre los dos anteriores, ya que son compilados pero también son interpretados. Para aumentar el rendimiento y las características se opta por usar código byte, que es un repertorio de instrucciones que un programa (máquina virtual) se encarga de interpretar. Algunas ventajas es que se puede introducir información extra como por ejemplo símbolos de depuración. No es necesario portar la aplicación a otra arquitectura, solo es necesario portar la máquina virtual. Internamente, una máquina virtual implementa algunas funciones que implementa una arquitectura de hardware, como por ejemplo una pila.

Java es una tecnología que usa máquina virtual y un lenguaje orientado a objetos, al igual que .NET. Al código interpretable por la máquina virtual de Java se le conoce como bytecode y al interpretable por la máquina virtual de .NET CIL (Common Intermediate Language). Mientras que las especificaciones de Java solo especifican un único lenguaje (el lenguaje Java), las especificaciones de .NET se centran en especificar otros temas que veremos ahora, de tal manera que no se cierran a un único lenguaje, sino que dan la posibilidad de que cualquiera escriba un compilador para cualquier lenguaje. De esta manera en .NET podemos trabajar con C# (que se diseñó especialmente para esta arquitectura), VB.NET, C++, ... incluso lenguajes interpretados como python (IronPython?).. o construir una máquina virtual sobre .NET como por ejemplo la de Java (iKVM)!!

Dado que todos los lenguajes de .NET al compilarse generan el mismo tipo de código, podemos usar desde cualquiera de los lenguajes cualquier recurso hecho en cualquier otro lenguaje como si fuera una librería de nuestro lenguaje.

Para ello .NET define los CTS (Common Type System) que son los tipos de datos necesarios para desarrollar en la plataforma. También se define CLS (Common Language Specifications) que termina de especificar algunos otros temas importantes para la interoperabilidad entre lenguajes.

La plataforma .NET basa toda la tecnología en el CLR y la FCL.

El CLR (Common Language Runtime) es el entorno de ejecución encargado de la interpretación del CIL. Un CLR puede implementar JIT (Just In Time), que se encarga de convertir en tiempo de ejecución el código CIL a código máquina (a modo de compilador instantaneo) sólo de las porciones de código necesarias, con el consiguiente aumento del rendimiento.

La FCL (Framewrok Class Library) es la librería de classes que trae por defecto .NET que implementa E/S (acceso a ficheros, comunicaciones, ...), colecciones, hilos, criptografía, XML, SOA... que veremos de forma más detallada.

(FIXME: Explicar que es VES -virtual execution system-, MSD -Metadata Definition and Semantics-)

A parte de la librería de clases básica, Microsoft define un conjunto de librerias para acceso a datos ADO.NET, para desarrollo de GUI Windows.Forms, desarrollo web ASP.NET, ...


Pero... ¿Qué es mono?

Mono es una implementación libre de estas especificaciones y estandarizadas por Microsoft.

El proyecto mono nace el 9 de Julio del 2001 liderado por Miguel de Icaza (fundador del proyecto Gnome), ya que pensaba que esta tecnología podría ayudarle con los problemas que había tenido a la hora de desarrollar Gnome.

GNOME (GNU Network Object Model Enviroment) es un proyecto que se divide en dos partes: un manejador de ventanas, con un escritorio atractivo, intuitivo y amigable para los usuarios finales y una plataforma de desarrollo de aplicaciones. GNOME nace en 1997 como el primer entorno de escritorio completamente libre para GNU/Linux y otros sistemas operativos tipo Unix. Su biblioteca de controles gráficos principal es GTK+, sobre la que esta basada GTK#.

Mono trata de implementar el 100% del CLR y del FCL tal y como se describe en las especificaciones ECMA de Microsoft, así como otras librerías no especificadas en esos documentos (ADO.NET, ASP.NET, Windows.Forms, GAC...) y librerías propias (GTK# para GUI basadas en librerias de Linux, FIXME...)

Actualmente mono funciona en varias arquitecturas: x86, PowerPC, S390, SPARC (con soporte de JIT), HPPA, StrongARM (sin soporte de JIT) y varios sistemas operativos (Linux, Windows, BSD, MacosX...)