DAI 1er. C5-PEM UNITAT DIDACTICA 1: CONCEPTES BASICS (AP5-1-01) 1. Sistema de processament de la informació....................................................................... 2 2. Concepte d’ algorisme ....................................................................................................... 3 3. Concepte de programa : Dues definicions........................................................................ 4 4. llenguatge de programació : Tipus de ll. De programació. ............................................. 5 5. Traductors de llenguatge................................................................................................... 7 6. Exemples de Llenguatges ................................................................................................ 10 7. Microsoft.NET ................................................................................................................. 12 Arxiu: UD1-NA1-Intro Elaborat per: Ferran Chic Pàgina 1 de 15 Versió: 1.1 Data: 24/9/2009 DAI 1er. C5-PEM UNITAT DIDACTICA 1: CONCEPTES BASICS (AP5-1-01) 1. Sistema de processament de la informació Un sistema de processament de informació ens transforma unes dades d’ entrada en brut, en informació organitzada i útil per a l’ usuari. En el nostre sistema hi distingim 3 element bàsics: Entrades Sortides Procés Entrades : Informació d’ entrada necessària per al nostre sistema, necessària per al procés posterior de la informació. Sortides : Resultats obtinguts del processament de la informació d’ entrada. Procés : :Transformació de les entrades a sortides. Exemples : 1.- SPI per a fer un truita a la francesa : Entrades : Oli , sal, ou ,paella petita , forquilla, 2 plats, llumins , càmping gas. Sortides : La truita (poc feta a ser possible) Procés : batre l ‘ou en un plat amb la forquilla, afegir-hi la sal, encendre el càmping gas i posar-hi la paella amb un mica d’ oli . Esperar que l’ oli sigui calent i desprès posar-hi l’ ou batut. Ajudar-se de la forquilla per donar la forma a la truita i quan agafi consistència posar-la en 1 plat net. Bona cuina ! 2.- SPI per calcular l’ àrea d’ un triangle : Tindrem identificades Entrades : Base i alçada Sortides : Àrea Procés : Realitzar el càlcul Àrea = Base * Alçada / 2 3.- SPI per a ordenar 1000 nombres : Entrades : 1000 nombres desordenats procedents de teclat/ fitxer Sortides : 1000 nombres ordenats visualitzats en pantalla Procés : Algorisme d’ ordenació Arxiu: UD1-NA1-Intro Elaborat per: Ferran Chic Pàgina 2 de 15 Versió: 1.1 Data: 24/9/2009 DAI 1er. C5-PEM UNITAT DIDACTICA 1: CONCEPTES BASICS (AP5-1-01) 2. Concepte d’ algorisme Bàsicament durant tot el curs ens dedicarem a resoldre problemes mitjançant la elaboració acurada de programes. Per arribar a escriure un bons programes necessitem seguir una metodologia de forma rigorosa i sistemàtica : Aquesta metodologia l’ anomenem metodologia de la programació. La metodologia de la programació es basa en la elaboració d’ algorismes per resoldre problemes. El disseny d’ aquests algorismes serà l’ objectiu principal del nostre curs. Podrem afirmar que a partir del correcte disseny del nostre algorisme obtindrem de forma quasi bé immediata un programa que resolgui el problema plantejat. Com podríem definir un algorisme ? Podem dir de forma simple que un algorisme és un mètode per resoldre un problema. PROBLEMA DISSENY DE ALGORISME L’ PROGRAMA Per tant, per a resoldre un problema concret , caldrà 0.- Fase d’ anàlisis del problema. 1.- Fase de disseny :Dissenyar un algorisme que descriu la seqüència ordenada de passes a realitzar (Sense ambigüitats) que ens conduiran a la solució d’ un problema donat. 2.- Fase de codificació :Expressar l’ algorisme en un ll. de programació adient. 3.- Fase d’ Execució i verificació del programa . La definició d’ algorisme anterior resulta incompleta si no adjuntem les característiques que ha de complir un algorisme . Aquestes són : a)Ha de ser precís i i indicar l´ordre de realització de cada pas b)Ha d´estar definit de forma única : Si el seguim 2 vegades, hem d´obtenir sempre el mateix resultat. c)Ha de ser finit : Num. Finit de passes per aconseguir l´objectiu A més, la definició d’ un algorisme implicarà definir 3 parts : Procés, entrades i sortides. Arxiu: UD1-NA1-Intro Elaborat per: Ferran Chic Pàgina 3 de 15 Versió: 1.1 Data: 24/9/2009 DAI 1er. C5-PEM UNITAT DIDACTICA 1: CONCEPTES BASICS (AP5-1-01) 3. Concepte de programa : Dues definicions. En l’ apartat anterior hem comentat que per a solventar un determinat problema, cal un algorisme que el resolgui. Qui processa l’ algorisme ha de ser capaç de comprendre les instruccions que conté l’ algorisme Dur a terme la seva execució Doncs bé, quan el processador de l’ algorisme és un computadora, l’ algorisme cal expressar-lo en un format que anomenem programa. Aquest programa s’ escriu en un determinat llenguatge de programació, , per tant definim llenguatge de programació com els llenguatges utilitzats per a escriure els programes. Per tant ara ja sabem que : Els programes són la implementació d’ un algorisme en un llenguatge de programació. Que un ll. de programació és una eina que s’ usa per escriure (crear) els nostres programes). Qui escriu aquest programes són els programadors. Donarem dues definicions de programa : D1: Seqüència de passos (accions) d’ un algorisme, anomenades habitualment instruccions que ens permeten resoldre un problema donat mitjançant el computador. L elaboració d’ un programa cal un coneixement del repertori d’ instruccions del llenguatge. Aquestes instruccions es classifiques en : a) Instruccions d’ Entrada / Sortida : Necessàries per alimentar el procés amb entrades i per mostrar els resultats (sortides) b) Instruccions aritmètic lògiques : Executaran operacions aritmètiques (suma, resta, potenciació ....) i lògiques (and, or, not) c) Instruccions selectives : Ens permetran executar instruccions en funció de determinades condicions. d) Instruccions repetitives : Permeten la execució d’ un mateix conjunt d’ instruccions un nombre determinat de vegades repetidament . D2: Definició de Niklaus Wirth Algoritmos + Estructuras de datos = Programas. Ens aquesta definició hem de parar atenció en que per tenir un programa hem d’ elaborar l’ algorisme adequat i pensar quines dades manipula el nostre algorisme i quina estructura tenen les nostres dades. Arxiu: UD1-NA1-Intro Elaborat per: Ferran Chic Pàgina 4 de 15 Versió: 1.1 Data: 24/9/2009 DAI 1er. C5-PEM UNITAT DIDACTICA 1: CONCEPTES BASICS (AP5-1-01) 4. llenguatge de programació : Tipus de ll. De programació. Els éssers humans ens expressem en un llenguatge natural , intelligible pels humans . Quin és el llenguatge que entén el computador : El llenguatge màquina o codi màquina . És l’ únic llenguatge que entén i que per tant pot executar . El llenguatge màquina és un llenguatge que es caracteritza per És l’ únic que entén el computador És de molt difícil interpretació i manipulació per part de l’ home S’ expressa mitjançant llargues seqüències binàries (0’ s I 1’s ) És particular i depèn de cada tipus de màquina concret (Portabilitat nul·la). Donat l’ inconvenient de treballar amb ll. màquina donada la dificultat que això comporta per al programador, existeixen programes, anomenats ll. d’ alt nivell que proporcionen una sintaxi molt propera a la sintaxi humana, de forma que així facilitem la tasca al programador que decideix programar amb ll. d’ alt nivell. Les característiques d’ aquests llenguatges són : Sintaxi similar a la sintaxi del ll. natural . Facilitat de creació de programes amb aquest tipus de llenguatge. Portabilitat : Els llenguatges d’ alt nivell s’ escriuen en un llenguatge, que és independent de la màquina . El manteniment del programes, modificacions ... són molt més tractables que en el cas de ll. màquina. No poden aprofitar els recursos de la màquina , ja que són independents de la mateixa. Alguns exemples de ll. d’ alt nivell : Pascal, Java, Basic, Cobol , Visual Basic ... Arxiu: UD1-NA1-Intro Elaborat per: Ferran Chic Pàgina 5 de 15 Versió: 1.1 Data: 24/9/2009 DAI 1er. C5-PEM UNITAT DIDACTICA 1: CONCEPTES BASICS (AP5-1-01) Llenguatges de baix nivell : Són aquells que són més fàcils d’ utilitzar que el ll. màquina , tot i que continuen depenent de la màquina en concret. El ll. de baix nivell per excellència és el llenguatge ensamblador, que és quasi bé el mateix que el ll. . màquina, però canviant seqüències binàries per mnemotècnics que es corresponen amb instruccions : Ex: ADD M,N,P Equivalent en C. Màquina per exemple a 0101 1100 1111 0001 En qualsevol cas, tot i que la escriptura de programes en ll. de baix nivell és més fàcil que en ll. màquina, encara és molt distant de la facilitat d’ escriptura de programes en ll. d’ alt nivell. Ll. de nig nivell : Són aquells que intentant usar sintaxi corresponent a ll. d’ alt nivell, poden també accedir als recursos de la màquina, com un ll. de baix nivell. Ex : Llenguatge C. Arxiu: UD1-NA1-Intro Elaborat per: Ferran Chic Pàgina 6 de 15 Versió: 1.1 Data: 24/9/2009 DAI 1er. C5-PEM UNITAT DIDACTICA 1: CONCEPTES BASICS (AP5-1-01) 5. Traductors de llenguatge Donats els diferents tipus de llenguatges de programació ens pot surgir la qüestió següent : Si nosaltres programem en ll. d’ alt nivell, donat que és el llenguatge més proper al ll. humà i el computador treballa amb ll. màquina únicament, com podem executar els nostres programes escrits en ll. d’ alt nivell ? Doncs bé, la resposta és que han d’ haver uns programes que facin un procés de traducció de ll. d’ alt nivell a ll. màquina, que anomenem traductors de llenguatge. Tipus de traductors : a) Compiladors: A partir del programa escrit en llenguatge d’ alt nivell ( programa font o codi font) , un compilador fa el seguent : a. Anàlisi sintàctic en busca d’ errors en temps de compilació . Si existeixen errors hem de rectificar-los i tornar a compilar. Si no hi ha errors s’ obté un programa intermig anomenat programa objecte.i es passa al punt b) . El programa objecte ja és codi maquina consistent en la traducció de totes les instruccions del nostre programa excepte les llibreries . b. Muntatge (link) del programa objecte per obtenir l’ executable: En aquest procés s’ incorporen al nostre programa les llibreries del propi llenguatge de programació o be llibreries fetes per nosaltres previament que les reutilitzem. Un cop s’ han incorporat les llibreries al programa objecte s’ obté el resultat final : el programa executable en codi màquina. c. Execució del fitxer executable: Aquest programa executable físicament és un fitxer (p. Ex en MSDOS és un fitxer amb un nom i una extensió .EXE, p. Exemple CALCULS.EXE) . Aquest fitxer forma el nostre programa executable, i es pot executar desde el sistema operatiu independentment de l’ entorn de programació al que havia estat creat. Arxiu: UD1-NA1-Intro Elaborat per: Ferran Chic Pàgina 7 de 15 Versió: 1.1 Data: 24/9/2009 DAI 1er. C5-PEM UNITAT DIDACTICA 1: CONCEPTES BASICS (AP5-1-01) Programa Font (Ll. Alt nivell) COMPILADOR Correcció dels errors Si Existiesen errors sintàctics ? No Programa Objecte LINKADOR Programa Executable Execució desde el sistema operatiu Arxiu: UD1-NA1-Intro Elaborat per: Ferran Chic Pàgina 8 de 15 Versió: 1.1 Data: 24/9/2009 DAI 1er. C5-PEM UNITAT DIDACTICA 1: CONCEPTES BASICS (AP5-1-01) b) Intèrprets : També a partir del nostre programa escrit en ll. d’ alt nivell ens proposem executar el codi màquina que s’ obté a partir d’ ell, però desde un punt de vista molt diferent: Es preten amb un intèrpret el fet de dur a terme la tasca de traducció d’ un programa en ll. d’ alt nivell linia a linia , de forma que per a cada linia de codi font, un intèrpret analitza sintàcticament la linia, si hi ha errors els reporta i s’ atura a la espera de la coerció dels mateixos, i si no hi ha errors tradueix a codi màquina aquella linia i la executa. Aquest procés es repeteix per a cada linia de programa. L’ algorisme que seguéis un intèrpret a grans trets seria : a) Hi ha 1 linia de codi font per procesar ? b) Si hi ha linies pendents, aleshores agafar una linia i passar a d) c) Si no hi ha linies pendents fi d’ algorisme d) Analitzem sintàcticament la linia e) Si hi ha errors els corregim i tornem a d) f) Si no hi ha errors en la linia traduim a codi màquina la linia i la executem g) Tornem al punt a) h) Comparativa compilador / intèrpret : a) Un compilador trata el codi fornt en conjunt, obtenint un resultat final consistent en un programa executable en un fitxer. Un intèrpret tracta el codi font linia a linia arribant-la a executar si aquesta no conté errades sintàctiques (un compilador no executa no mes obté l’ executable, i despres l’ usuari final decideix quan l’ executa desde el sistema operatiu., un intèrpret si executa cada linia de codi fornt que precessa). b) Com a conseqüència de a) la execució d’ un executable generat amb un compilador sempre serà més rápida que la del mateix programa interpretat, la que l’ executable ja està traduit (amb el que tot això comporta) i la interpretació tradueix linia a linia el codi fornt cada cop que executem. c) També com a conseqüència de a) , el compilador genera un executable i apartir d’ aquí no es necesita l’ entorn de programació per utilitzar el pr. Executable. En canvi en el cas de l’ intèrpret si que cal l’ entor per tal de procesar les intruccions cada cop que calgui executar el programa. d) El treball amb codi font interpretat és portable entre diferents maquines en canvi un executable és específic de la plataforma en la que treballem. Arxiu: UD1-NA1-Intro Elaborat per: Ferran Chic Pàgina 9 de 15 Versió: 1.1 Data: 24/9/2009 DAI 1er. C5-PEM UNITAT DIDACTICA 1: CONCEPTES BASICS (AP5-1-01) 6. Exemples de Llenguatges BASIC : Llenguatge en el seu origen interpretat. Visual Basic : Interpretat quan desenvolupem , però es pot generar executables quan el programa ja és estable. C: Llenguatge compilat, tot i que alguns entorns admeten interpretació (Borland C) Cas Especial : JAVA El cas del Java el considerem una mica especial , ja que per arribar a executar una aplicació java , passem per les dues fases. Per explicar això cal remuntar-nos als llenguatges d’ alt nivell de tercera generació que lluitaven per arribar a standaritzar-se amb l’ objectiu d’ aconseguir portabilitat entre diferents plataformes hardware. Ara bé, la compatibilitat esmentada només era a nivell de codi font (ll. alt nivell). Java va més enlla i aconsegueix compatibilitat a nivell d’ executable (codi màquina) . Com ? Procediment per arribar a executar un programa fet amb java a partir del codi font: Partim del codi font en Java (calculs.java) Compilem el .java i obtenim el nostre executable. Aquest executable té extensió .class Aquest executable és intelligible per un tipus de màquina molt concret que s’ anomena JAVA VIRTUAL MACHINE (JVM) . Aquesta màquina és genèricai entent un codi màquina molt concret també que s’ anomena bytecodes , és a dir el executable .class està format per bytecodes. La clau és generar emuladors software per sobre del S.O. , per cada plataforma hardware del mercat, és a dir implementar la JVM per a cada plataforma. La JVM en aquest cas si que es depenent de la platforma. En realitat la JVM actua com a intèrpret dels bytecodes que li arriben d’ un executable java. Arxiu: UD1-NA1-Intro Elaborat per: Ferran Chic Pàgina 10 de 15 Versió: 1.1 Data: 24/9/2009 DAI 1er. C5-PEM UNITAT DIDACTICA 1: CONCEPTES BASICS (AP5-1-01) Arxiu: UD1-NA1-Intro Elaborat per: Ferran Chic Pàgina 11 de 15 Versió: 1.1 Data: 24/9/2009 DAI 1er. C5-PEM UNITAT DIDACTICA 1: CONCEPTES BASICS (AP5-1-01) 7. Microsoft.NET Microsoft.NET es el conjunto de nuevas tecnologías en las que Microsoft ha estado trabajando durante los últimos años con el objetivo de obtener una plataforma sencilla y potente para distribuir el software en forma de servicios que puedan ser suministrados remotamente y que puedan comunicarse y combinarse unos con otros de manera totalmente independiente de la plataforma, lenguaje de programación y modelo de componentes con los que hayan sido desarrollados. Ésta es la llamada plataforma .NET, y a los servicios antes comentados se les denomina servicios Web. Para crear aplicaciones para la plataforma .NET, tanto servicios Web como aplicaciones tradicionales (aplicaciones de consola, aplicaciones de ventanas, servicios de Windows NT, etc.), Microsoft ha publicado el denominado kit de desarrollo de software conocido como .NET Framework SDK, que incluye las herramientas necesarias tanto para su desarrollo como para su distribución y ejecución y Visual Studio.NET, que permite hacer todo la anterior desde una interfaz visual basada en ventanas. Ambas herramientas puede descargarse gratuitamente desde http://www.msdn.microsoft.com/net, aunque la última sólo está disponible para subscriptores MSDN Universal (los no subscriptores pueden pedirlo desde dicha dirección y se les enviará gratis por correo ordinario) El concepto de Microsoft.NET también incluye al conjunto de nuevas aplicaciones que Microsoft y terceros han (o están) desarrollando para ser utilizadas en la plataforma .NET. Entre ellas podemos destacar aplicaciones desarrolladas por Microsoft tales como Windows.NET, Hailstorm, Visual Studio.NET, MSN.NET, Office.NET, y los nuevos servidores para empresas de Microsoft (SQL Server.NET, Exchange.NET, etc.) Common Language Runtime (CLR) El Common Language Runtime (CLR) es el núcleo de la plataforma .NET. Es el motor encargado de gestionar la ejecución de las aplicaciones para ella desarrolladas y a las que ofrece numerosos servicios que simplifican su desarrollo y favorecen su fiabilidad y seguridad. Las principales características y servicios que ofrece el CLR son: • Modelo de programación consistente: A todos los servicios y facilidades ofrecidos por el CLR se accede de la misma forma: a través de un modelo de programación orientado a objetos. Esto es una diferencia importante respecto al modo de acceso a los servicios ofrecidos por los algunos sistemas operativos actuales (por ejemplo, los de la familia Windows), en los que a algunos servicios se les accede a través de llamadas a funciones globales definidas en DLLs y a otros a través de objetos (objetos COM en el caso de la familia Windows) • Modelo de programación sencillo: Con el CLR desaparecen muchos elementos complejos incluidos en los sistemas operativos actuales (registro de Windows, GUIDs, HRESULTS, IUnknown, etc.) El CLR no es que abstraiga al programador de estos conceptos, sino que son conceptos que no existen en la plataforma .NET • Eliminación del "infierno de las DLLs": En la plataforma .NET desaparece el problema conocido como "infierno de las DLLs" que se da en los sistemas operativos actuales de la familia Windows, problema que consiste en que al sustituirse versiones viejas de DLLs compartidas por versiones nuevas puede que aplicaciones que fueron diseñadas para ser ejecutadas usando las viejas dejen de funcionar si las Arxiu: UD1-NA1-Intro Elaborat per: Ferran Chic Pàgina 12 de 15 Versió: 1.1 Data: 24/9/2009 DAI 1er. C5-PEM UNITAT DIDACTICA 1: CONCEPTES BASICS (AP5-1-01) nuevas no son 100% compatibles con las anteriores. En la plataforma .NET las versiones nuevas de las DLLs pueden coexistir con las viejas, de modo que las aplicaciones diseñadas para ejecutarse usando las viejas podrán seguir usándolas tras instalación de las nuevas. Esto, obviamente, simplifica mucho la instalación y desinstalación de software. • Ejecución multiplataforma: El CLR actúa como una máquina virtual, encargándose de ejecutar las aplicaciones diseñadas para la plataforma .NET. Es decir, cualquier plataforma para la que exista una versión del CLR podrá ejecutar cualquier aplicación .NET. Microsoft ha desarrollado versiones del CLR para la mayoría de las versiones de Windows: Windows 95, Windows 98, Windows ME, Windows NT 4.0, Windows 2000, Windows XP y Windows CE (que puede ser usado en CPUs que no sean de la familia x86) Por otro lado Microsoft ha firmado un acuerdo con Corel para portar el CLR a Linux y también hay terceros que están desarrollando de manera independiente versiones de libre distribución del CLR para Linux. Asímismo, dado que la arquitectura del CLR está totalmente abierta, es posible que en el futuro se diseñen versiones del mismo para otros sistemas operativos. • Integración de lenguajes: Desde cualquier lenguaje para el que exista un compilador que genere código para la plataforma .NET es posible utilizar código generado para la misma usando cualquier otro lenguaje tal y como si de código escrito usando el primero se tratase. Microsoft ha desarrollado un compilador de C# que genera código de este tipo, así como versiones de sus compiladores de Visual Basic (Visual Basic.NET) y C++ (C++ con extensiones gestionadas) que también lo generan y una versión del intérprete de JScript (JScript.NET) que puede interpretarlo. La integración de lenguajes esta que es posible escribir una clase en C# que herede de otra escrita en Visual Basic.NET que, a su vez, herede de otra escrita en C++ con extensiones gestionadas. • Gestión de memoria: El CLR incluye un recolector de basura que evita que el programador tenga que tener en cuenta cuándo ha de destruir los objetos que dejen de serle útiles. Este recolector es una aplicación que se activa cuando se quiere crear algún objeto nuevo y se detecta que no queda memoria libre para hacerlo, caso en que el recolector recorre la memoria dinámica asociada a la aplicación, detecta qué objetos hay en ella que no puedan ser accedidos por el código de la aplicación, y los elimina para limpiar la memoria de "objetos basura" y permitir la creación de otros nuevos. Gracias a este recolector se evitan errores de programación muy comunes como intentos de borrado de objetos ya borrados, agotamiento de memoria por olvido de eliminación de objetos inútiles o solicitud de acceso a miembros de objetos ya destruidos. • Seguridad de tipos: El CLR facilita la detección de errores de programación difíciles de localizar comprobando que toda conversión de tipos que se realice durante la ejecución de una aplicación .NET se haga de modo que los tipos origen y destino sean compatibles. • Aislamiento de procesos: El CLR asegura que desde código perteneciente a un determinado proceso no se pueda acceder a código o datos pertenecientes a otro, lo que evita errores de programación muy frecuentes e impide que unos procesos puedan atacar a otros. Esto se consigue gracias al sistema de seguridad de tipos antes comentado, pues evita que se pueda convertir un objeto a un tipo de mayor tamaño que el suyo propio, ya que al tratarlo como un objeto de mayor tamaño podría accederse a espacios en memoria ajenos a él que podrían pertenecer a otro Arxiu: UD1-NA1-Intro Elaborat per: Ferran Chic Pàgina 13 de 15 Versió: 1.1 Data: 24/9/2009 DAI 1er. C5-PEM UNITAT DIDACTICA 1: CONCEPTES BASICS (AP5-1-01) proceso. También se consigue gracias a que no se permite acceder a posiciones arbitrarias de memoria. • Tratamiento de excepciones: En el CLR todo los errores que se puedan producir durante la ejecución de una aplicación se propagan de igual manera: mediante excepciones. Esto es muy diferente a como se venía haciendo en los sistemas Windows hasta la aparición de la plataforma .NET, donde ciertos errores se transmitían mediante códigos de error en formato Win32, otros mediante HRESULTs y otros mediante excepciones. El CLR permite que excepciones lanzadas desde código para .NET escrito en un cierto lenguaje se puedan capturar en código escrito usando otro lenguaje, e incluye mecanismos de depuración que pueden saltar desde código escrito para .NET en un determinado lenguaje a código escrito en cualquier otro. Por ejemplo, se puede recorrer la pila de llamadas de una excepción aunque ésta incluya métodos definidos en otros módulos usando otros lenguajes. • Soporte multihilo: El CLR es capaz de trabajar con aplicaciones divididas en múltiples hilos de ejecución que pueden ir evolucionando por separado en paralelo o intercalándose, según el número de procesadores de la máquina sobre la que se ejecuten. Las aplicaciones pueden lanzar nuevos hilos, destruirlos, suspenderlos por un tiempo o hasta que les llegue una notificación, enviarles notificaciones, sincronizarlos, etc. Como se puede deducir de las características comentadas, el CLR lo que hace es gestionar la ejecución de las aplicaciones diseñadas para la plataforma .NET. Por esta razón, al código de estas aplicaciones se le suele llamar código gestionado, y al código no escrito para ser ejecutado directamente en la plataforma .NET se le suele llamar código no gestionado. Microsoft Intermediate Language (MSIL) Todos los compiladores que generan código para la plataforma .NET no generan código máquina para CPUs x86 ni para ningún otro tipo de CPU concreta, sino que generan código escrito en el lenguaje intermedio conocido como Microsoft Intermediate Lenguage (MSIL) El CLR da a las aplicaciones las sensación de que se están ejecutando sobre una máquina virtual, y precisamente MSIL es el código máquina de esa máquina virtual. Es decir, MSIL es el único código que es capaz de interpretar el CLR, y por tanto cuando se dice que un compilador genera código para la plataforma .NET lo que se está diciendo es que genera MSIL. MSIL ha sido creado por Microsoft tras consultar a numerosos especialistas en la escritura de compiladores y lenguajes tanto del mundo académico como empresarial. Es un lenguaje de un nivel de abstracción mucho más alto que el de la mayoría de los códigos máquina de las CPUs existentes, e incluye instrucciones que permiten trabajar directamente con objetos (crearlos, destruirlos, inicializarlos, llamar a métodos virtuales, etc.), tablas y excepciones (lanzarlas, capturarlas y tratarlas) Ya se comentó que el compilador de C# compila directamente el código fuente a MSIL, que Microsoft ha desarrollado nuevas versiones de sus lenguajes Visual Basic (Visual Basic.NET) y C++ (C++ con extensiones gestionadas) cuyos compiladores generan MSIL, y que ha desarrollado un intérprete de JScript (JScript.NET) que genera código MSIL. Pues bien, también hay numerosos terceros que han anunciado estar realizando versiones para la plataforma .NET de otros lenguajes como APL, CAML, Cobol, Eiffel, Fortran, Haskell, Java (J#), Mercury, ML, Mondrian, Oberon, Oz, Pascal, Perl, Python, RPG, Scheme y Smalltalk. La principal ventaja del MSIL es que facilita la ejecución multiplataforma y la integración entre lenguajes al ser independiente de la CPU y proporcionar un formato común para el código máquina generado por todos los compiladores que generen código para .NET. Sin Arxiu: UD1-NA1-Intro Elaborat per: Ferran Chic Pàgina 14 de 15 Versió: 1.1 Data: 24/9/2009 DAI 1er. C5-PEM UNITAT DIDACTICA 1: CONCEPTES BASICS (AP5-1-01) embargo, dado que las CPUs no pueden ejecutar directamente MSIL, antes de ejecutarlo habrá que convertirlo al código nativo de la CPU sobre la que se vaya a ejecutar. De esto se encarga un componente del CLR conocido como compilador JIT (Just-In-Time) o jitter que va convirtiendo dinámicamente el código MSIL a ejecutar en código nativo según sea necesario. Arxiu: UD1-NA1-Intro Elaborat per: Ferran Chic Pàgina 15 de 15 Versió: 1.1 Data: 24/9/2009