Esta entrada es acerca de la base teórica que deberás tener para ser considerado alguien con pericia en .NET y naturalmente este blog es pragmático, es decir eminentemente práctico, pero hay cosas que como desarrollador de software debes conocer, y es lo que te convierte de aficionado a profesional. No es muy complicado, sólo requiere atención, así que comencemos cracks!
Aclarando términos Net Framework, NET Core y .NET a secas
Seguro habrás escuchado los términos .Net Framework, .NET y .Net Core y déjame decirte que entiendo tu confusión pero no nos hagamos bolas, aquí lo vas a aprender de una vez por todas.
.NET tiene distintos tipos, formalmente conocidos como Implementaciones .Net Framework, Net Core, .Net, Mono y UWP son implementaciones, más información de este término aquí 😉
Microsoft en el año 2002 creó una plataforma de desarrollo de software para su sistema operativo Windows, y le puso el nombre .NET Framework. Esta plataforma permitía a los programadores y público en general desarrollar, correr y desplegar aplicaciones de escritorio, web y móviles para el sistema operativo Windows.
.Net Framework tuvo versiones desde la 1.0 hasta la 4.8 (lanzada en 2019) como bien puedes apreciar en esta documentación oficial y la arquitectura de la plataforma la podemos apreciar en la siguiente imagen:
En el año 2016 en paralelo con la versión 4.6 de .Net Framework se lanzó una nueva implementación llamada .NET Core con su versión 1.0 y para finales del 2019 se lanzó la versión 3.1 de .NET Core.
La siguiente versión de .NET Core iba a ser algo como 4.xx pero para evitar confusiones con .Net Framework, que pare ese entonces ya había llegado a su fin, Microsoft tomó dos decisiones importantes:
- Saltarse a la versión 5
- Dejar de llamar .NET Core a la plataforma y llamarla simplemente .NET
Y así llegamos a la versión .NET 5 y luego a .NET 6, la cual a día de hoy es la versión más reciente.
Así que cuando decimos .NET nos estamos refiriendo a esta plataforma unificada, que tuvo inicio en su versión 5 y que tuvo como antecesoras a .Net Framework y .Net Core.
Si quieres profundizar en lo nuevo que nos trae .NET 6 en este artículo hablo del tema, y si quieres profundizar en el detalle de la evolución de .Net Framework a .NET Core, esta es tu entrada 😉
Definición de .NET
Ahora que tienes los conceptos perfectamente entendidos, entonces vamos a definir qué es .NET
Es una plataforma de desarrollo gratuita, multiplataforma y de código abierto que permite compilar, ejecutar y desplegar varios tipos de aplicaciones tales como:
- Aplicaciones de escritorio o desktop
- Aplicaciones móviles en Android e iOS
- Videojuegos
- Aplicaciones web
- Internet of Things IoT
- Aplicaciones de consola
- Servicios de windows
- Machine learning
- Aplicaciones Serverless
- Aplicaciones Cloud
- Aplicaciones para smart TV y smart Watch
Mencionamos que es multiplataforma porque permite crear aplicaciones para distintos sistemas operativos como Windows, macOS, Linux, iOS, Android, tvOS y watchOS
Las aplicaciones desarrolladas pueden funcionar en prácticamente cualquier arquitectura de procesador convencional como x86, x64, ARM32 y ARM64.
Componentes de .NET
La plataforma .NET está conformada por 3 componentes principales:
- Common language specification (CLS)
- Base Class Library (BCL) y
- Common Language Runtime (CLR)
Esto lo podemos notar en el siguiente gráfico en el cual resalté cada uno de los componentes:
Common Language Specification (CLS)
CLS es un conjunto de especificaciones y estándares que definen una serie de similitudes en los lenguajes de programación que los usan esto se hace para generar una interoperabilidad completa.
Esto quiere decir que .NET no sólo es agnóstico del lenguaje de programación, ya que puedes usar cualquiera que lo soporte sino que también garantiza la correcta interacción entre ellos.
Más información aquí.
Base Class Library (BCL)
La biblioteca de clases base es un conjunto de clases que componen el espacio de nombres System y Microsoft.
Su código fuente es open source y está disponible en https://github.com/dotnet/runtime.
En este gráfico podemos apreciar mejor las bibliotecas.
Common Language Runtime (CLR)
Es el entorno de ejecución multiplataforma encargado de ejecutar el código administrado en la plataforma .NET.
Existe código administrado y no administrado, los recursos no administrados son aquellos que el entorno de ejecución .NET no mantiene de forma automática. Como ejemplo tenemos al manejo de archivos: Un objeto FileStream sí es un objeto administrado, sin embargo el identificador de archivo es no administrado, por eso que cuando se deja de usar el objeto FileStream se debe liberar el identificador.
Proceso de ejecución
El proceso de ejecución de CLR es el siguiente:
- Generar lenguaje intermedio (MSIL)
- Compilar a código nativo mediante el compilador JIT (Just in time)
- Ejecutar código
Todo este proceso con mayor detalle se encuentra en esta documentación 😉
El CLR tiene también la responsabilidad de la administración de memoria automática mediante el recolector de basura o Garbage collector.
Si hay términos que quieres investigar más, este glosario tomado de la documentación oficial de Microsoft te va a servir un montón crack! 🔥
Si esta entrada te ha ayudado, compártela crack! 💪