@alejandro | Buenas tardes a tod@s. |
---|---|
@alejandro | La siguiente conferencia trata sobre el estado actual y futuro de Mono y va a ser imparcida por César López Natarén. |
@alejandro | Cesar ha estado trabajando en el proyecto Mono y Mono Hispano desde sus comienzos. |
@alejandro | Actualmente trabaja en Novell en el compilador de Ecma JavaScript. |
@alejandro | Las preguntas pueden hacerse en #qc y la traducción será en el canal de #redes. |
@alejandro | Bienvenido César, tu turno. |
@cesar | Hola, me da mucho gusto que me invitaran a estas charlas |
@cesar | yo vengo a platicarles un poco sobre Mono |
@cesar | y consistira básicamente en un repaso de las herramientas y tecnologías que se tienen en este momento |
@cesar | y los planes que se tiene para el futuro |
@cesar | En un principio los tres componentes más importantes de Mono son: |
@cesar | + Compilador del lenguaje de programación C# |
@cesar | + Biblioteca de clases |
@cesar | + Motor de ejecución o runtime system |
@cesar | Estos tres componentes se encuentran definidos en los estándares de la organización ECMA número 334 y 335 |
@cesar | Y Mono es una implementación libre de ellos. |
@cesar | Actualmente Mono se encuentra en su versión 1.1.11 y cuenta ya con 4 años de desarrollo |
@cesar | se tiene planeado que para el mes de febrero del 2006 se libera la siguiente versión mayor que será 1.2 |
@cesar | el único componente faltante para que se libere es el soporte para creación de aplicaciones gráficas conocido como System.Windows.Forms |
@cesar | Ustedes se estarán preguntando que hace interesante a Mono |
@cesar | y la respuesta es bastante amplia, pero básicamente es por: |
@cesar | + Soporte para multiples lenguajes de programación |
@cesar | + Es una plataforma de desarrollo multi-plataforma |
@cesar | + Manejo de memoria automático (recolección de basura) |
@cesar | + La posibilidad de extender aplicaciones ya escritas en C o C++ a través de un lenguaje de programación de más alto nivel como C# |
@cesar | Con respecto al soporte de multiples lenguajes de programación; este se logra mediante un sistema de tipos conocido como CTS (Common Type System) |
@cesar | que fue diseñado con la inter-operabilidad entre distintos lenguajes de programación como objetivo |
@cesar | en particular Mono promueve el uso de los lenguajes: |
@cesar | + C# |
@cesar | + Java (a través de IKVM, http://www.ikvm.net/) |
@cesar | + Boo (lenguaje de scripting, muy dinámico, http://boo.codehaus.org/) |
@cesar | + Nemerle (lenguaje funcional + Orientado a Objetos, http://nemerle.org/) |
@cesar | + VB.NET |
@cesar | + JavaScript |
@cesar | y finalmente |
@cesar | + Python (IronPython es una implementación http://www.ironpython.com/) |
@cesar | Por otro lado, las plataformas en las cuales es posible usar Mono son: |
@cesar | + x86 |
@cesar | + x86-64 |
@cesar | + amd64 |
@cesar | + itanium |
@cesar | + arm |
@cesar | + sparc |
@cesar | + sparc-64 |
@cesar | + ibm s390 |
@cesar | + finalmente PowerPC (ppc) |
@cesar | con respecto a los sistema operativos, tambien se cuenta con un rango bastante amplio: |
@cesar | + GNU/Linux |
@cesar | + BSD's |
@cesar | + MS Windows |
@cesar | + Solaris |
@cesar | + y finalmente MAC OS X |
@cesar | por lo que si escriben aplicaciones con Mono estas serán portables a todas las arquitecturas de computadoras y sistemas operativos arriba mencionados |
@cesar | (pueden hacer sus preguntas en #qc) |
@cesar | En Mono se tienen dos lineas de desarrollo, a las cuales conocemos como 'de compatibilidad con MS .NET' y la linea de innovación |
@cesar | en la primera entran los componentes tales como: |
@cesar | + ASP.NET, que nos sirven para la creación de aplicaciones web, o de generación de HTML dinámico |
@cesar | + System.Windows.Forms, que es un API para construir aplicaciones gráficas para el cliente |
@cesar | + y algunos otros API's de uso diverso |
@cesar | sin embargo, se han desarrollado paralelamente API's que explotan las capacidades del sistema operativo (GNU/Linux), o toolkits ya implementados para el |
@cesar | como es el caso de: |
@cesar | + Gtk#, que es el mecanismo para utilizar el conocido toolkit Gtk+ desde C# o cualquier lenguaje de programación soportado por Mono |
@cesar | + Gecko#, que de igual manera nos permite usar el componente GtkMozEmbed que nos permite presentar contenido HTML tal como lo hacen los navegadores web |
@cesar | + Tao, que brinda el soporte para OpenGL |
@cesar | + Evolution#, que nos permite acceder a los calendarios, agenda y demás información contenida en el servidor de datos de Evolution |
@cesar | y muchas otras mas bibliotecas. |
@cesar | (alguna pregunta?) |
@alejandro | no, por el momento no hay dudas :-) |
@cesar | Ahora quiero mencionarles algunas de las características que hacen interesante a C# 2.0 |
@cesar | Y voy a empezar con los tipos genéricos o generics |
@cesar | + Generics, esta característica nos brinda dos ventajas: |
@cesar | ++ La posibilidad de poder definir estructuras de datos o colecciones una sola vez; que pueden ser parametrizadas por un tipo y eso permite una mayor verificación de tipos en tiempo de compilación |
@cesar | ++ Dado que tenemos mucha información con respecto a los tipos el compilador JIT puede generar código especializado que es mucho más eficiente |
@cesar | si alguno de ustedes usa o conoce C++ el concepto de tipos genericos les recordará a los 'templates' de C++ |
@cesar | La otra característica importante en C# 2.0, es la inclusión de los delegados anónimos (anonymous delegates) |
@cesar | un delegado (delegate) es el mecanismo que se usa en C# para poder enviar funciones como parametros de otras funciones o para que sean el valor de regreso de alguna de ellas; |
@cesar | sin embargo ese mecanismo era demasiado verboso; por lo que ahora mediante los delegados anónimos poder hacer eso mismo pero escribiendo, es decir, podemos escribir la función 'en linea' cuando la queremos mandar como parámetro o enviarla como valor de regreso. |
@cesar | aquellos que han programado en LISP, algún lenguaje de programación funcional o cualquier lenguaje con soporte de funciones como objetos/entidades de primera clase ya se están imaginando a que me refiero |
@cesar | las famosas 'lambdas' de LISP son el ejemplo común, sin embargo en C# se agrega la verificación de tipos estricta en tiempo de compilación. |
@cesar | Otra característica nueva en C# 2.0 son los iteradores (iterators), |
@cesar | y ellos nos permiten poder implementar iteradores de manera más concisa; |
@cesar | la manera anterior de como se implementaban iteradores en Mono (C#) era a través de la implementación de dos interfaces IEnumerable e IEnumerator |
@cesar | y se realizaba mediante alguna clase anidada que implementaba la máquina de estados que tiene el control sobre el iterador, en particular sobre quien es el elemento actual, mover el cursos y poder conocer si la estructura de datos aún tiene elementos, |
@cesar | con los iteradores es el compilador quien es encarga de generar esa máquina de estados y el programador simplemente - podría decirse declarativa - indica como se obtiene el elemento actual; |
@cesar | esto es una ventaja para el programador ya escribe menos y el código es más mantenible. |
@cesar | En la especificación de C# 2.0 tambien se encuentran cosas nuevas como: |
@cesar | + Clases parciales (partial classes), que permiten poder definir una clase en archivos separados; un caso de uso de esto puede ser cuando queremos hacer modificaciones a clases que son generadas automáticamente |
@cesar | como es el caso cuando usamos SOAP, WSDL y servicos web en general. |
@cesar | Los compiladores de Mono para C# (mcs y gmcs) actualmente ya implementan esas características, así que pueden utilizarlas libremente. |
@cesar | Hasta aquí he mencionado algunas de las características que hacen interesante a Mono; sin embargo no he mencionado herramientas que nos ayuden en el desarrollo, precisamente eso es de lo que hablaré a continuación. |
@cesar | Quiero mencionar que una pieza faltante por mucho tiempo en Mono ha sido el tener un depurador |
@cesar | sin embargo, esto ya está cambiando ya que recientemente se liberó mdb (Mono Debugger) versión 0.11 |
@cesar | y es una gran noticia por que tiene muchas mejoras y funciona con la versión de Mono 1.1.11 recien liberada también. |
@cesar | Otra herramienta interesante es Gendarme, que es un programa que permite verificar que reglas que nosotros indicamos se cumplan, estas reglas tienen que ver con seguridad y desempeño, sobre todo. |
@cesar | Para aquellos que buscan un IDE o ambiente de programación integrado, MonoDevelop (http://www.monodevelop.org/Main_P age) es una opción interesante, |
@cesar | en particular debido a su nueva arquitectura de plugins e integración con Glade3. |
@cesar | Todos aquellas que han usado 'Makefiles' o 'ant' saben lo que es un sistema de construcción automática de proyectos, MSBuild es un nuevo sistema basado en XML y Mono ya cuenta con una implementación de el a través de xbuild. |
@cesar | Un componente nueva también es el compilador para XAML; que es un lenguaje de especificación de interfaces gráficas muy al estilo Glade pero que sirve para la siguiente generación de API's para aplicaciones gráficas en el cliente. |
@cesar | Monodoc es otra herramienta importante al ser el visor de documentación de Mono. |
@cesar | Y Cecil es una biblioteca para la creación, lectura y modificación de imágenes binarias en el formato que se usa en Mono (CIL, Medatos, PE) |
@cesar | Hasta acá es el estado actual de Mono, y ustedes se estarán preguntando que hay del futuro. |
@cesar | Para el futuro, al menos actualmente, se tiene planeado lo siguiente: |
@cesar | + Implementar los componentes faltantes para completar la versión de compatibilidad con MS .NET 2.0. |
@cesar | (actualmente ya hay cosas implementadas como System.Xml 2.0 y otras cosas) |
@cesar | + Optimizaciones en el motor de ejecución: inlining, fastdce e integración de HSSA |
@cesar | + Un nuevo recolector de basura que será preciso, generacional y compactador. |
@cesar | + Soporte para DataBinding a Gtk#. |
@cesar | Y bien, lo interesante de los proyectos de software libre consiste en que quien así lo desee se puede integrar a su desarrollo, |
@cesar | en particular en Mono tenemos dos páginas en el web donde pueden encontrar información con respecto al area a la que se pueden integrar |
@cesar | estas son: http://mono.ximian.com/class-status/ donde pueden encontrar las partes faltantes de clases que pueden implementar |
@cesar | Si prefieren escribir documentación en http://mono-project. com/Mono_Documentation_Improvement_Project se encuentra una guía para realizarlo. |
@cesar | Tenemos una pregunta |
@cesar | ceronman: cesar: una pregunta, ¿qué ventajas tendrá el nuevo recolector de basura con respecto al actual? |
@cesar | las ventajas serán varias: |
@cesar | + liberación más eficiente de la memoria |
@cesar | + menos y menores pausas creadas por el proceso de recolección de basura. |
@cesar | y como consecuencia de ello Mono será aún más escalable y las aplicaciones se sentiran que responden más rápido. |
@cesar | Volviendo a la última parte de mi charla, hago extensiva la invitación a que se unan al proyecto, hay muchas y variadas areas a las cuales se pueden integrar; |
@cesar | el sitio del proyecto es http://mono-project.com/ |
@cesar | y en particular en la página http://mono-project.com/Contrib uting pueden encontrar algunas guías para empezar a colaborar. |
@cesar | Con esto doy por terminada mi charla; si tienen preguntas por favor no duden en hacerlas. |
@cesar | alejandro y MJesus: Muchas gracias por invitarme a esta serie de charlas; un saludo afectuoso desde México. |
@alejandro | cesar, muchas gracias por tu interesantisima charla. |
MJesus | muchas gracias!!. En verdad que ha sido muy interesante. Enhorabuena por tan magnificos trabajos ! |
felix | ceronman: una pregunta el Mono Develop que nombraste, posee características del tipo IntelliSense (como el IDE de microsoft)? |
@cesar | Olvide mencionar eso, pero si tienen dudas o comentarios pueden escribirme a cnataren@novell.com |
felix | (Soy algo vago como programador :) |
@cesar | felix: si tiene intelliSense, olvidé mencionar esa característica. |
@cesar | felix: puedes ver el pantallazo en http://www.monodevelop.o rg/Main_Page |
felix | (copiaré el link, estoy en consola ahora mismo) |
felix | cesar: De qué lenguajes hace Intellisense el MonoDevelop? |
@cesar | De los que estoy seguro es de C# y Boo |
felix | y tiene algún tipo de herramienta para hacer refactoring? |
@cesar | refactoring no, hay un visor de clases. |
felix | ¿En qué está programado MonoDevelop? |
@cesar | felix: solamente C# |
ceronman | según vi en el wiki de monodevelop, ya está en desarrollo un add-in para refactoring |
ceronman | tal vez para la 1.0 |
felix | cesar: muchas gracias por tus respuestas |
@cesar | esa es una buena noticia en verdad. |