Publicado el 28 de Marzo del 2019
661 visualizaciones desde el 28 de Marzo del 2019
284,9 KB
17 paginas
Creado hace 20a (16/03/2005)
Universidad de Oviedo
Departamento de Informática
Reflexionando sobre
Reflexionando sobre
Microsoft .net
Microsoft .net
Francisco Ortín Soler,
Universidad de Vigo
Ourense, Marzo de 2005
Lenguajes y Sistemas Informáticos
¿¿QuQuéé es .net?
es .net?
Introducción
• El desarrollo de aplicaciones software es una
tarea en sí compleja
La apertura de éstas a entornos distribuidos
(Internet) la hace todavía más compleja
• Microsoft .net es una plataforma que ofrece la
infraestructura para resolver los problemas
comunes del desarrollo de aplicaciones
(distribuidas)
Francisco Ortín Soler
Marzo 2005
1
.net Framework
Framework
.net
Introducción
• .net Framework proporciona soluciones
prefabricadas para el desarrollo de aplicaciones
distribuidas. Consta de:
1. Common Language Runtime (CLR)
Proporciona el entorno de ejecución de todas
las aplicaciones del sistema
Proporciona una capa intermedia entre el
sistema operativo y las aplicaciones
Su diseño se basa en el concepto de máquina
virtual o abstracta
2. Librerías de clases: Base Class Libraries (BCL),
WinForms, Win32, ADO.NET...
3. Plataforma de Aplicaciones Web: ASP.NET y
Francisco Ortín Soler
Marzo 2005
Introducción
Servicios Web
CLRCLR
• La utilización del CLR aporta las siguientes
ventajas:
1. Disponibilidad de las características de cualquier
lenguaje: La elección del lenguaje estará
condicionada por el dominio del problema, no
por otras características –librerías, eficiencia,
frameworks... ¿Puedo utilizar el API de Java desde
otros lenguajes?
2. Heterogeneidad: Internet es una arquitectura
heterogénea, las aplicaciones deberían poder
ejecutarse de forma independiente a la plataforma
3. Interoperabilidad de aplicaciones orientadas a
objetos, independientemente de los lenguajes
de programación seleccionados (sistema de tipos
común)
4. Gestión automática de memoria: la gestión de
memoria es compleja en aplicaciones de servidor
Francisco Ortín Soler
Marzo 2005
2
CLR (II)
CLR (II)
Introducción
5. El mantenimiento de aplicaciones da lugar a
versiones de componentes OO utilizados por
diversas aplicaciones. La coexistencia de
distintas versiones de componentes demandada
por distintos clientes debe ser gestionada sin
incoherencias (DLL hell)
6. Las aplicaciones distribuidas por redes son cada vez
más un canal de adquisición y ejecución de
software. La limitación de acceso a recursos por
aplicaciones posee mayor veracidad que un sistema
“todo o nada” de certificados
7. Organización de las funciones del sistema
operativo mediante jerarquías (espacios de
nombres)
8. Debe mantenerse “compatibilidad hacia atrás” para
crear e interactuar con código existente (legacy
code)
Francisco Ortín Soler
Marzo 2005
Expresividad de los Lenguajes
Expresividad de los Lenguajes
Introducción
• Siempre puede aparecer la controversia acerca de
qué lenguaje de programación utilizar
• Lo ideal es que la elección de un lenguaje estuviera
condicionada al dominio del problema (parcial o
total) a resolver
• Las facetas propias de:
Librerías
Gestión de memoria
Eficiencia
Tamaño de los programas a utilizar
Componentes
Portabilidad
Distribución
Persistencia
estarán ligadas al entorno de ejecución (al CLR),
no al lenguaje
Francisco Ortín Soler
Marzo 2005
3
Entorno Computacional ÚÚniconico
Entorno Computacional
Introducción
¡Todos se
ejecutan sobre
el mismo
entorno de
ejecución: el
CLR!
Python
Orientado a
Objetos
VBS VBA VB.NET
C++
JScript
Procesamiento
del Lenguaje
Perl
Dinámico/
Scripting
Haskell
Script
Paradigma
Funcional
/Lógico
C#
Estático
Prolog
Haskell
ML
Francisco Ortín Soler
Marzo 2005
Introducción
Solucióónn
Soluci
Pascal
C#
Mercury
Python
Scheme
Cobol
Mondrian
Oberon
Objetivos Principales:
• Ejecución de aplicaciones
Lenguajes de Programación
• Generación de código nativo (JIT)
• Gestión de Memoria (GC)
• Gestión de versiones (componentes)
• Seguridad (acceso recursos)
SML
JScript
• Manejo de excepciones
• Único Sistema de tipos
• Independencia de la plataforma
• Interoperabilidad con COM
Compilación
Eiffel
VB
Haskell
Código Intermedio: IL (Intermediate Language), MSIL (Microsoft...), CIL (Common...)
Ejecución
CLR
Sistema Operativo
Francisco Ortín Soler
Marzo 2005
4
DemoDemo
Introducción
• HolaVB.vb
• HolaCS.cs
• HolaIL.il
• ILDASM (Intemediate Language Disassembler)
• Comparación de código generado
Francisco Ortín Soler
Marzo 2005
Eficiencia
Eficiencia
Introducción
• La utilización de un único motor computacional (CLR)
proporciona multitud de ventajas, pero un claro
inconveniente: la eficiencia
• La interpretación es más cara que la ejecución nativa,
puesto que existe un nivel computacional más
• ¿Es el CLR un intérprete? NO
• En lugar de interpretar el código, el CLR (Compilador JIT):
Compila dinámicamente el código a su representación
nativa en la plataforma de ejecución
Optimiza el código generado (e.g., inlining)
Aplicación
Código
Portable
Compilador
JIT
0110001
Compilación
Ejecución
Francisco Ortín Soler
Marzo 2005
5
Contenido
Contenido
• Introducción
• SSCLI (Rotor)
• Reflectividad
• Incluyendo Reflectividad Estructural
• Desarrollo del Proyecto
• Documentación
Francisco Ortín Soler
Marzo 2005
Implementaciones Libres
Implementaciones Libres
SSCLI (Rotor)
• Existen diversas implementaciones libres del CLI (Common
Francisco Ortín Soler
Marzo 2005
6
Language Infrastructure) ECMA-335 y de C# (ECMA-334)
Formato del fichero exe (metadatos y código IL)
El sistema de tipos común
La especificación extensible (atributos) de metadatos
El lenguaje intermedio
Acceso a la plataforma host (PAL)
La librería básica de clases (BCL)
Sintaxis y semántica de C#
• Shared Source CLI (SSCLI, aka Rotor)
Implementación de Microsoft libre para investigación y
docencia (Windows, FreeBSD y Mac OS x)
• Mono (www.mono-project.com)
Implementación libre (liderada por Novell) de los dos
estándares ECMA para Linux, Windows, BSD y Solaris
Además ofrece otros componentes del .net Framework
(ADO.net, Windows Forms, ASP.NET)
• DotGNU Portable.NET (www.dotgnu.org)
Implementación de ECMA 335 y 334 para Linux, Windows,
[Net,Free]BSD, Solaris y Mac OS X
Componentes de Rotor
Componentes de Rotor
SSCLI (Rotor)
Francisco Ortín Soler
Marzo 2005
Request forfor Proposals
Proposals
Request
SSCLI (Rotor)
• Microsoft ha lanzado dos “peticiones de ideas” de utilización de
Rotor en el campo de la investigación y docencia
En abril de 2002 pone a disposición su código fuente y hace
una llamada de peticiones (RFP 1)
Premia a 43 proyectos (con fondos económicos) para
desarrollar un proyecto de 18 meses
2 de estos proyectos son españoles
— Enric Pastor, U. Politécnica de Cataluña, “.NET (Rotor) in
embedded processors”
— Marian Díaz, U. Oviedo, “Adding low-level pure
capability-based protection to the CLR for supporting
flexible and secure embedded and mobile applications”
En noviembre de 2003 se lanza el RFP2
En febrero de 2004 premia 38 proyectos,
2 españoles
— Darío Álvarez, U. Oviedo, “On the cost of securing
applications: Performance and feasibility of capability-
based security in the Rotor platform”
— Francisco Ortín, U. Oviedo, “Extending Rotor with
Structural Reflection to support Reflective Languages”
Francisco Ortín Soler
Marzo 2005
7
Proyecto RFP2
Proyecto RFP2
SSCLI (Rotor)
• El proyecto Extending Rotor with Structural
Reflection to support Reflective Languages tiene
como principal objetivo
Añadir al motor computacional de .net (Rotor)
reflectividad estructural para
Aumentar la adaptabilidad de la plataforma
(nuevas funcionalidades de la BCL, ADO.NET,
AOP dinámica…)
Dar un soporte nativo (no interpretado) a los,
cada vez más utilizados, lenguajes dinámicos
(Python, Ruby, Dylan)
Aumentar la eficiencia de las implementaciones
existentes, gracias a la utilización del JIT
compiler
Permitir la interacción directa con cualquier
lenguaje de programación “X.net”
Francisco Ortín Soler
Marzo 2005
Reflectividad (Reflexióón)n)
Reflectividad (Reflexi
Reflectividad
• Capacidad de un sistema computacional para modificar y actuar
acerca de sí mismo
El dominio computacional de un sistema es ampliado con su
propia representación
• La reflectividad puede producirse en tiempo de compilación (AOP)
o en tiempo de ejecución
• Niveles:
Introspección. Conocimiento dinámico de la estructura de
una aplicación (Java, C# o RTTI del C++)
Ejemplo: Conocer en tiempo de ejecución todos los métodos
de una clase e invocar a aquellos que comiencen con test
(JUnit)
Reflectividad estructural. Modificación dinámica de la
estructura de una aplicación (SmallTalk, Python)
Ejemplo: Añadir a un objeto un método descrito por el
programador en tiempo de ejecución (Smalltalk)
Reflectividad computacional. Modificación dinámica de la
semántica del sistema (MOPs, MetaXa, nitrO)
Francisco Ortín Soler
Marzo 2005
8
Introspeccióón en .Net
n en .Net
Introspecci
Reflectividad
• La plataforma .net incluye en su BCL dos espacios de
nombres dedicados a introspección
System.Reflection: Introspección dinámica de los
ensamblados, clases, objetos, métodos, atributos y
propiedades
class ClassSuma
{
public static int sumar(int a,int b) { return a+b; }
public static void testSuma() {
int a=4,b=-4;
Debug.Assert(a+b==sumar(a,b));
}
[STAThread] static void Main() { pruebas(typeof(ClassSuma)); }
public static void pruebas(Type clase) {
MethodInfo[]methods=clase.GetMethods();
int n=0;
for (int i=0;i<met
Comentarios de: Reflexionando sobre Microsoft .net (0)
No hay comentarios