Microsoft comienza a hablar sobre su lenguaje de programación de próxima generación, C# para programación de sistemas

Icono de tiempo de lectura 3 minuto. leer


Los lectores ayudan a respaldar a MSpoweruser. Es posible que obtengamos una comisión si compra a través de nuestros enlaces. Icono de información sobre herramientas

Lea nuestra página de divulgación para descubrir cómo puede ayudar a MSPoweruser a sostener el equipo editorial. Leer más

Joe Duffy, arquitecto y desarrollador de un sistema operativo de investigación en Microsoft, escribió en su blog sobre el lenguaje de programación de próxima generación en el que han estado trabajando en los últimos dos años. Microsoft ahora describe este próximo lenguaje como extensiones de "programación de sistemas" para C#. Microsoft está tratando de presentar este lenguaje como un cruce entre C# centrado en la seguridad y la productividad, Java, etc., y C++ centrado en el rendimiento.

Aquí están las 6 características importantes del lenguaje,

) Comprensión de por vida. C++ tiene RAII, destrucción determinista y asignación eficiente de objetos. Tanto C# como Java convencen a los desarrolladores para que confíen demasiado en el almacenamiento dinámico de GC y solo ofrecen soporte "laxo" para la destrucción determinista a través de IDisposable. Parte de lo que hace mi equipo es convertir regularmente los programas C# a este nuevo lenguaje, y no es raro que encontremos entre un 30 y un 50 % del tiempo dedicado a GC. Para los servidores, esto acaba con el rendimiento; para los clientes, degrada la experiencia al inyectar latencia en la interacción. Hemos robado una página de C++, en áreas como referencias de valor real, semántica de movimiento, destrucción, referencias/préstamos, y aún conservamos los elementos necesarios de seguridad y los fusionamos con ideas de lenguajes funcionales. Esto nos permite apilar agresivamente asignar objetos, destruir de manera determinista y más.

2) Comprensión de los efectos secundarios. Esta es la evolución de lo que publicamos en OOPSLA 2012, brindándole elementos de C++ const (pero de nuevo con seguridad), junto con inmutabilidad y aislamiento de primera clase.

3) Programación asíncrona a escala. La comunidad ha dado vueltas y más vueltas sobre esto, es decir, si se deben usar corrutinas de bloqueo ligero o de paso de continuación. Esto incluye C# pero también prácticamente todos los demás idiomas del planeta. La innovación clave aquí es un sistema de tipo componible que es independiente del modelo de ejecución y puede asignarse de manera eficiente a cualquiera de ellos. Sería arrogante afirmar que tenemos la forma correcta de exponer esto, pero al tener experiencia con muchos otros enfoques, me encanta el lugar al que llegamos.

4) Programación de sistemas de tipo seguro. Comúnmente se afirma que con la seguridad de tipo viene una pérdida inherente de rendimiento. Es cierto que la verificación de límites no es negociable y que preferimos la verificación de desbordamiento por defecto. Es sorprendente lo que un buen compilador de optimización puede hacer aquí, en comparación con la compilación JIT. (Y uno solo necesita auditar casualmente algunos boletines de seguridad recientes para ver por qué estas características tienen mérito). Otras áreas incluyen permitirle hacer más sin asignar. Como tener API basadas en lambda a las que se puede llamar sin asignaciones (en lugar de las dos habituales: una para el delegado y otra para la pantalla). Y poder crear fácilmente submatrices y subcadenas sin asignar.

5) Modelo de error moderno. Este es otro sobre el que la comunidad no está de acuerdo. Hemos elegido lo que creo que es el punto óptimo: contratos en todas partes (condiciones previas, condiciones posteriores, invariantes, afirmaciones, etc.), falla rápida como política predeterminada, excepciones para fallas dinámicas raras (análisis, E/S, etc.), y escriba excepciones solo cuando necesite absolutamente excepciones enriquecidas. Todo integrado en el sistema de tipos de una manera de primera clase, para que obtenga todo el comportamiento de subtipificación adecuado necesario para que sea seguro y sólido.

6) Marcos modernos. Este es un grupo general que cubre cosas como LINQ asíncrono, soporte de enumerador mejorado que compite con los iteradores de C ++ en rendimiento y no exige el envío de interfaz doble para extraer elementos, etc. Para ser completamente honesto, esta es el área que tenemos. la lista más grande de "características diseñadas pero aún no implementadas", que abarca cosas como void como tipo de primera clase, tipos no nulos, rasgos, tipificación de efectos de primera clase y más. Espero que tengamos algunos de estos en nuestro punto de control de mediados de 1, pero no todos.

Leer más desde el enlace esta página.

Más sobre los temas: c#, desarrolladores, microsoft