{"id":935,"date":"2020-11-18T10:19:10","date_gmt":"2020-11-18T10:19:10","guid":{"rendered":"https:\/\/www.mainmind.com\/blog\/?p=935"},"modified":"2020-11-18T11:05:20","modified_gmt":"2020-11-18T11:05:20","slug":"net-5-un-framework-para-todo","status":"publish","type":"post","link":"https:\/\/www.mainmind.com\/blog\/net-5-un-framework-para-todo\/","title":{"rendered":".NET 5: un Framework para todo"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">En 2002 apareci\u00f3 la primera versi\u00f3n de .NET, han pasado casi 20 a\u00f1os y el escenario de desarrollo de aplicaciones monol\u00edticas ha ido diversific\u00e1ndose: microservicios distribuidos, aplicaciones multiplataforma, dispositivos IoT, inteligencia artificial, virtualizaci\u00f3n, contenedores\u2026 El contexto y requerimientos ha cambiado, como todo en inform\u00e1tica, \u00bfQui\u00e9n se imaginar\u00eda a comienzos de siglo que Microsoft ser\u00eda miembro de Linux Foundation y <a href=\"https:\/\/github.com\/dotnet\/runtime\" data-type=\"URL\" data-id=\"https:\/\/github.com\/dotnet\/runtime\" target=\"_blank\" rel=\"noreferrer noopener\">.NET pasar\u00eda a ser Open Source<\/a>?<\/p>\n\n\n\n<!--more-->\n\n\n\n<p class=\"wp-block-paragraph\">Desde hace unos a\u00f1os la <a href=\"https:\/\/www.mainmind.com\/blog\/net-framework-hoy-y-manana\/\" data-type=\"URL\" data-id=\"https:\/\/www.mainmind.com\/blog\/net-framework-hoy-y-manana\/\" target=\"_blank\" rel=\"noreferrer noopener\">tendencia a unificar plataformas<\/a> y <a href=\"https:\/\/www.mainmind.com\/blog\/evaluar-migracion-a-net-core\/\" data-type=\"URL\" data-id=\"https:\/\/www.mainmind.com\/blog\/evaluar-migracion-a-net-core\/\" target=\"_blank\" rel=\"noreferrer noopener\">desarrollos<\/a> es clara por parte de Microsoft. Con la aparici\u00f3n del nuevo .NET 5 no quedan dudas, se salta de la versi\u00f3n .NET Core 3.0 a .NET 5 unificando con .NET Framework, Xamarin y Mono.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Desde el comienzo de la plataforma se utiliza compilaci\u00f3n en tiempo de ejecuci\u00f3n (Just In Time, JIT) lo que ha permitido obtener un c\u00f3digo de m\u00e1quina optimizado a un lenguaje intermedio (ahora Common Intermediate Language, CIL; antes llamado Microsoft Intermediate Language, MSIL) , con dos salvedades para IoS y Blazor (cliente web) que seguir\u00e1n siendo mediante compilaci\u00f3n anticipada (ahead-of-time compilation, AOT)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si bien para IoS y algunas consolas de juegos se requiere c\u00f3digo precompilado (100% AOT), para Blazor \/ web se utiliza un entorno mixto, donde el c\u00f3digo no compatible con AOT se utiliza JIT, esto permite unificar herramientas de diagn\u00f3stico, rendimiento, optimizaciones\u2026 a futuro todo se ejecutar\u00e1 sobre CoreFX<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por intentar aclarar de forma b\u00e1sica:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>CoreCLR<\/strong>: motor de ejecuci\u00f3n (Runtime) JIT para .NET 5, garbaje colector (GC) y clases de bajo nivel.<\/li><li><strong>CoreFX<\/strong>: biblioteca de clases b\u00e1sica, BCL (Framework)<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando hablamos de CoreFX como Framework, englobamos las herramientas para facilitar el desarrollo de software: bibliotecas (el conjunto de funciones, clases, tipos, constantes\u2026) y su API (Application Programming Interface) siendo esta desde donde accedemos de forma estandarizada, independientemente de c\u00f3mo este implementada internamente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Por ejemplo, para utilizar el Trazado de Rayos (Ray Tracing) en una secuencia de video, accedo al conjunto de <a href=\"https:\/\/github.com\/microsoft\/DirectX-Graphics-Samples\/blob\/master\/Samples\/Desktop\/D3D12Raytracing\/src\/D3D12RaytracingSimpleLighting\/readme.md\" data-type=\"URL\" data-id=\"https:\/\/github.com\/microsoft\/DirectX-Graphics-Samples\/blob\/master\/Samples\/Desktop\/D3D12Raytracing\/src\/D3D12RaytracingSimpleLighting\/readme.md\" target=\"_blank\" rel=\"noreferrer noopener\">APIs DirectX que a su vez incluye la API DXR<\/a> lo que permite a\u00f1adir esta funci\u00f3n a juegos desarrollados para plataformas diferentes PC y Xbox, pero no en PS5 (por lo menos por ahora) aunque ambas consolas tengan procesadores y gr\u00e1ficas AMD. De este modo un juego se puede adaptar m\u00e1s f\u00e1cilmente entre plataformas diferentes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los mismo sucede si necesito enviar un email, puedo utilizar una <a rel=\"noreferrer noopener\" href=\"https:\/\/www.nuget.org\/packages\/MailKit\/\" data-type=\"URL\" data-id=\"https:\/\/www.nuget.org\/packages\/MailKit\/\" target=\"_blank\">API<\/a> existente como <a href=\"https:\/\/github.com\/jstedfast\/MailKit\/tree\/master\/MailKit\" data-type=\"URL\" data-id=\"https:\/\/github.com\/jstedfast\/MailKit\/tree\/master\/MailKit\" target=\"_blank\" rel=\"noreferrer noopener\">MailKit<\/a>, en lugar de dise\u00f1ar tu mismo la apertura de sockets, comunicaci\u00f3n, mensajes de error\u2026 <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El inicio de .NET Core 1.0 se centr\u00f3 la creaci\u00f3n de microservicios, en la siguiente versi\u00f3n .NET Core 2.0 se agreg\u00f3 soporte para <a rel=\"noreferrer noopener\" href=\"https:\/\/docs.microsoft.com\/es-es\/aspnet\/core\/razor-pages\/?view=aspnetcore-5.0&amp;tabs=visual-studio\" data-type=\"URL\" data-id=\"https:\/\/docs.microsoft.com\/es-es\/aspnet\/core\/razor-pages\/?view=aspnetcore-5.0&amp;tabs=visual-studio\" target=\"_blank\">Razor pages<\/a> y <a rel=\"noreferrer noopener\" href=\"https:\/\/docs.microsoft.com\/es-es\/aspnet\/core\/signalr\/introduction?view=aspnetcore-5.0\" data-type=\"URL\" data-id=\"https:\/\/docs.microsoft.com\/es-es\/aspnet\/core\/signalr\/introduction?view=aspnetcore-5.0\" target=\"_blank\">SignalR<\/a> facilitando portar aplicaciones web,  .NET Core 3.0 a\u00f1adi\u00f3 <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/windows-forms-designer-for-net-core-released\/\" data-type=\"URL\" data-id=\"https:\/\/devblogs.microsoft.com\/dotnet\/windows-forms-designer-for-net-core-released\/\" target=\"_blank\" rel=\"noreferrer noopener\">WinForms<\/a>, <a rel=\"noreferrer noopener\" href=\"https:\/\/docs.microsoft.com\/es-es\/dotnet\/desktop\/wpf\/?view=netdesktop-5.0\" data-type=\"URL\" data-id=\"https:\/\/docs.microsoft.com\/es-es\/dotnet\/desktop\/wpf\/?view=netdesktop-5.0\" target=\"_blank\">WPF<\/a> y <a rel=\"noreferrer noopener\" href=\"https:\/\/docs.microsoft.com\/es-es\/ef\/ef6\/\" data-type=\"URL\" data-id=\"https:\/\/docs.microsoft.com\/es-es\/ef\/ef6\/\" target=\"_blank\">Entity Framework 6<\/a> permitiendo hacer lo mismo con las aplicaciones de escritorio y ahora .NET 5 inicia la unificaci\u00f3n. Las aplicaciones ya existentes en .NET Framework podr\u00e1n mantenerse en la \u00faltima versi\u00f3n 4.8 y seguir\u00e1 habiendo soporte por parte de Microsoft pero los nuevos desarrollos deben iniciarse en .NET 5 (core)<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"566\" src=\"https:\/\/www.mainmind.com\/blog\/wp-content\/uploads\/2020\/dotnet_schedule-1024x566.png\" alt=\"\" class=\"wp-image-937\" srcset=\"https:\/\/www.mainmind.com\/blog\/wp-content\/uploads\/2020\/dotnet_schedule-1024x566.png 1024w, https:\/\/www.mainmind.com\/blog\/wp-content\/uploads\/2020\/dotnet_schedule-300x166.png 300w, https:\/\/www.mainmind.com\/blog\/wp-content\/uploads\/2020\/dotnet_schedule-768x424.png 768w, https:\/\/www.mainmind.com\/blog\/wp-content\/uploads\/2020\/dotnet_schedule-1536x849.png 1536w, https:\/\/www.mainmind.com\/blog\/wp-content\/uploads\/2020\/dotnet_schedule.png 1837w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Enlaces de inter\u00e9s:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a rel=\"noreferrer noopener\" href=\"https:\/\/docs.microsoft.com\/es-es\/aspnet\/core\/grpc\/?view=aspnetcore-5.0\" data-type=\"URL\" data-id=\"https:\/\/docs.microsoft.com\/es-es\/aspnet\/core\/grpc\/?view=aspnetcore-5.0\" target=\"_blank\">gRPC en .NET Core<\/a><\/li><li><a rel=\"noreferrer noopener\" href=\"https:\/\/docs.microsoft.com\/es-es\/aspnet\/core\/web-api\/?view=aspnetcore-5.0\" data-type=\"URL\" data-id=\"https:\/\/docs.microsoft.com\/es-es\/aspnet\/core\/web-api\/?view=aspnetcore-5.0\" target=\"_blank\">Servicios RESTful \/ API web con ASP.NET Core<\/a><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En 2002 apareci\u00f3 la primera versi\u00f3n de .NET, han pasado casi 20 a\u00f1os y el escenario de desarrollo de aplicaciones monol\u00edticas ha ido diversific\u00e1ndose: microservicios distribuidos, aplicaciones multiplataforma, dispositivos IoT, inteligencia artificial, virtualizaci\u00f3n, contenedores\u2026 El contexto y requerimientos ha cambiado, como todo en inform\u00e1tica, \u00bfQui\u00e9n se imaginar\u00eda a comienzos de siglo que Microsoft ser\u00eda miembro [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":943,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15],"tags":[670,675,673,674,671,672,676],"class_list":["post-935","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-visual-studio","tag-net-5","tag-api","tag-coreclr","tag-corefx","tag-dotnet","tag-framework","tag-runtime"],"_links":{"self":[{"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/posts\/935","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/comments?post=935"}],"version-history":[{"count":0,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/posts\/935\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/media\/943"}],"wp:attachment":[{"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/media?parent=935"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/categories?post=935"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mainmind.com\/blog\/wp-json\/wp\/v2\/tags?post=935"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}