155 votos

¿Por qué es WinRT no administrado?

Windows 8 presenta WinRT, que es como .NET pero no administrado. ¿Por qué es no administrado? Es un problema de rendimiento? Qué significa la recolección de basura no es adecuado para el bajo nivel de Api?

185voto

Hans Passant Puntos 475940

WinRT es un reemplazo de la antigua C-basados en la Winapi. Se trata de una api que debe ser utilizable en muchos entornos de tiempo de ejecución. Volver 20 años atrás, una api en C era relativamente fácil de interoperabilidad. Que ha pasado desde entonces, COM se convirtió en el universal pegamento en la última mitad de la década de 1990. Prácticamente cualquier idioma en tiempo de ejecución de uso común en Windows es compatible COM.

Un recolector de basura es un tiempo de ejecución de lenguaje detalle de implementación. El colector de .NET es muy diferente de la de coleccionista para Javascript, por ejemplo. El nativo de los objetos creados en cualquiera de los dos debe observar las estrictas normas de la coleccionista. Lo que significa que ellos han tenido que crear WinRT versiones que son específicos para cada idioma en tiempo de ejecución. Que no, incluso una empresa tan grande como Microsoft no puede permitirse el lujo de crear y apoyar un determinado versión de WinRT para cada lenguaje de unión. Tampoco es necesario, dado que estas lenguas ya es compatible COM.

Por ahora, el mejor enlace para WinRT es C++ desde el COM funciona de manera más eficiente con la memoria explícita de gestión. Con la amplia ayuda de un nuevo compilador de C++ de extensiones que hacen que sea automático, muy similar a la de _com_ptr_t de edad con C++/CLI-como la sintaxis para evitarlo. La unión a lenguajes administrados es relativamente sencillo, ya que el CLR ya tiene excelentes interoperabilidad COM apoyo. WinRT también se adoptó el formato de metadatos de .NET. Afaik, ningún trabajo ha sido hecho en todo sobre la gestión de los compiladores a partir de hoy.

EDIT: Larry Osterman, un conocido programador de Microsoft y blogger, a la izquierda un bastante buen comentario en un ya eliminado respuesta. Voy a citar aquí a conservarla:

WinRT es no administrado porque el sistema operativo es no administrado. Y por el diseño de WinRT la forma en que fue diseñado, se adquiere la capacidad de ser expresados en diferentes lenguajes, no sólo C++, C# y JS. Por ejemplo, yo podría ver fácilmente un conjunto de módulos de Perl que implementan el Api de WinRT que el trabajo en el escritorio. Si hubiéramos aplicado en .Net, que habría sido extremadamente difícil

24voto

Andz Puntos 711

WinRT es no administrado porque está destinado a ser un sustituto para Win32 - el nivel más bajo desarrollador accesible API para Windows. No gestionado de la API es todavía el potencialmente más eficiente que puede ser expuesta para el desarrollador y el razonamiento que siempre será posible ajustar una API administrada en la parte superior de la misma, que es precisamente lo que 'proyecciones' hacer.

También significa que los desarrolladores de C++ puede utilizar WinRT, sin pasar a través de los aros que C++/CLI presenta ( ver http://www2.research.att.com/~bs/bs_faq.html#CppCLI ) no significa sin embargo que todavía tienen que estudiar COM si desea utilizar WinRT.

La verdadera pregunta es : '¿por qué es COM necesaria? ¿por qué Microsoft tiene que inventar?' Debido a que simple C++ sin el agregado de las instalaciones de COM es insuficiente para el real OOP trabajo y Stroustrup los reclamos de C++ dando 'portabilidad' son muy muy sincero a la luz de la realidad laboral. Ver http://webmechs.com/webpress/2011/11/c-versus-objective-c-as-api-substrate/

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X