257 meneos
2191 clics

CoreRT (de Microsoft) convierte C# en el lenguaje multiplataforma C++ [ENG]

¿Desea ejecutar aplicaciones .NET en plataformas que no tienen instalado el framework de .NET? Microsoft está desarrollando una tecnología para convertir aplicaciones de C# en sus contrapartes nativas de C++. El proyecto de código abierto CoreRT genera código C++ a partir de una aplicación en C#, que puede ser compilado y enlazado en cualquier plataforma de destino que soporte C++.
etiquetas: corert, c#, convierte a c++, multiplataforma, nativo
111 146 3 K 514 tecnología
Comentarios destacados:                   
#1   Por todos los dioses extintos, antiguos, presentes y futuros... que esto se vuelva verdad!
votos: 15    karma: 123
#2   #1 No sé si quiero conocer al monstruo que puede nacer de ello.
votos: 10    karma: 70
#6   #2 #1 #5 eso se puede convertir en el dreamweaver de la programacion
votos: 10    karma: 71
 *   garnok garnok
#22   #6 No entiendo qué tiene que ver una cosa con la otra.
votos: 1    karma: 17
#85   #22 ¿alguna vez has echo una pagina con dreamweaver y luego has mirado el html que genera?
votos: 0    karma: 7
#23   #2 ¿Qué te crees que hace un compilador? ¿Magia negra?
votos: 1    karma: 15
#98   #23 ¡SÍ!
votos: 0    karma: 7
 *   genba
#3   #1 Excelsior JET o GCJ (Ahead-Of-Time compilation, AOT) en el mundo java tienen un impacto ¿nulo?, respecto a los JIT.
Por que sera diferente en el mundo .NET?
votos: 0    karma: 7
#63   #3 Yo nunca he entendido la necesidad de este tipo de aplicaciones, salvo que quieras hacer un analisis rapido de una aplicacion escrita en un lenguaje que no conoces. Si quiero programar algo en un lenguaje, soy de los que prefieren aprenderlo en lugar de hacer este tipo de conversiones.
votos: 0    karma: 7
#112   #63 C# tiene algunas ventajas frente a C++, como el recolector de memoria o los getters/setters.
votos: 0    karma: 10
#4   #1 Me figuro que el programa en C++ necesitará una librería bien gorda que haga lo mismo que .NET...no sé yo si ganaremos mucho.
votos: 2    karma: 30
#18   #4 Goto #5
votos: 0    karma: 9
#68   #18 goto #18 ... ¡cazado!
votos: 0    karma: 10
 *   joffer joffer
#82   #68 Infinite loop error.
No se pudo traducir su comentario a C++
:troll:
votos: 1    karma: 23
#58   #1 Esto ya es una realidad y es lo que hace Xamarin cuando compila aplicaciones en C# para iOS, haciendo una compilación AOT y generando directamente bytecode para ARM. developer.xamarin.com/guides/cross-platform/getting_started/introducti
votos: 1    karma: 16
#120   #58 Microsoft compró xamarin hace poco. No me extrañaría que coreRt estuviera basado en su código
votos: 1    karma: 11
#5   El éxito sería que si utilizase la función coseno en C#, entonces exclusivamente el método coseno se juntara con el código fuente y se compilara, dando un ejecutable pequeño y no le cargasen toda la librería matemática.

Soñar no cuesta nada.
votos: 7    karma: 62
#48   #5 En teoría es "simplemente" un traductor de c# a c++. Imagino que se lo pasarán a todas las librerías, entre ellas la matemática. Pero si sólo incluye la librería matemática en ese caso no estaría tan mal, seguiría siendo un ejecutable muy pequeño... Por lo que he leído es lo que quieren hacer, porque están pensando en IoT, es decir, dispositivos con relativa poca capacidad. Compilar toda la librería .net sería un despropósito.
votos: 0    karma: 6
#50   #8 Goto #5
votos: 0    karma: 9
#57   #49 Si bien legible y ilegible da igual no solo lo importante es que el compilador C++ lo admita y lo optimice bien.

Los compiladores hacen maravillas e optimizan de maravilla pero no hacen milagros, va optimizar el codigo generado en C++ pero ese código C++ nunca
estará optimizado.

El ultimo "traductor" a C++ que vi al parecer una vez compilado generaba código 36 veces más lento que el mismo código escrito bien nativamente en C++. Con el tiempo y mejorando el traductor supongo…   » ver todo el comentario
votos: 0    karma: 10
 *   GoDie
#69   #57 En definitiva la unica ventaja clara posiblemente sea portabilidad a costa de un codigo poco eficiencia.
votos: 0    karma: 10
#90   #5 "man ld" en Linux. Creo que hay opciones para enlazar solo el ćodigo dependiente de una librería, aunque tendrías que compilarlo estáticamente.
votos: 0    karma: 10
#7   Ale, ya puedo poner en el currículun que puedo programar en C++.
votos: 7    karma: 59
#9   #7 eres un trolazo :troll:
votos: 0    karma: 11
#8   No me quiero imaginar que codigo genera eso.
votos: 2    karma: 16
#84   #49 Si tarbajas tu solo y los evolutivos tienes pensado hacerlos sobre el codigo c# tienes toda la razón. Si por ejemplo quieres portar una aplicacion a otro lenguaje y seguir evolucionando de ahí, si importa mucho que sea legible el codigo. Tambien si quieres optimizarlo. Si te conformas con que "compile", si, la idea es muy valida.
votos: 0    karma: 7
#10   Solo por curiosidad:

Si C++ se dice "ce plus plus", ¿C# cómo se dice? ¿"ce almohadilla"? ¿"ce sostenido"?
votos: 0    karma: 9
#11   #10 C Sharp :goatse:
votos: 14    karma: 102
#115   #11 #10 por eso los miopes no pueden programar en c#, porque they don't see sharp... Festival del humor, badum tss
votos: 0    karma: 9
#14   #10 C Sharp ("see" sharp)
votos: 0    karma: 6
#76   #14 yes, i see the sharp...
votos: 0    karma: 6
#15   #10 C sharp
votos: 0    karma: 6
#16   #10 Se suele decir C sharp como dice el compi.
votos: 0    karma: 6
#17   #10 Yo, en castellano, hablando con profesionales, digo "ce almohadilla". En ingles se suele decir "si sharp" ("ce sostenido", efectivamente)
votos: 0    karma: 11
#20   #17 Excepto si eres un Recruiter "profesional" que le llamarás C hashtag
votos: 14    karma: 97
#31   #20 :-D :-D :-D :-D
votos: 0    karma: 6
#64   #20 Si estó es veridico es sublime xD
votos: 1    karma: 15
#19   #10 Cesharp en español, sisharp en ingles
votos: 1    karma: 19
#41   #10 Se dice siplasplas. :troll:
votos: 2    karma: 27
#72   #41 #10 C++ se dice "ce más más" en español y en inglés "sí plas plas"

Lo de "ce plus plus" es un engendro que mezcla ambos idiomas... lo que no significa que no se diga pero a mi suena bastante mal... aunque, teniendo en cuenta que en inglés se escribe a veces "C plus plus" (escriben plus en lugar de +... por ejemplo, en dominios de internet) leerlo en español como "ce plus plus" sería una opción correcta según la Real Academia... pero es…   » ver todo el comentario
votos: 1    karma: 16
 *   Acido Acido
#86   #10 Yo digo "ce más más". Claro que tampoco lo digo mucho.
votos: 0    karma: 7
votos: 1    karma: 17
#12   Es una notica nada generalista, no es para meneame. Irrelevante para mi.
El 90% de los usuarios no la entienden.
votos: 19    karma: -71
#25   #12 meneame empezo con una comunidad muy apegada a la informatica y a la ciencia en general. Luego despues fue cuando las hordas politicas tomaron la pagina
votos: 13    karma: 113
#47   #25 de cuando Linux estaba casi siempre en portada. Esta fué la primera portada de MNM

www.meneame.net/?page=8291
votos: 4    karma: 46
#51   #47 Que viejo me siento! que buenos tiempos aquellos.
votos: 2    karma: 29
#55   #47 Por lo que veo la tercera noticia que se publicó era con el título y entradilla en catalán y dirigía a una página en inglés. Prueba a hacer eso ahora y tendrá que venir la Guardia Civil a protegerte.
votos: 3    karma: 31
 *   magsx
#56   #55 jajaja sep
votos: 0    karma: 12
#29   #12 El 90% de los "usuarios de la calle" (especialmente teniendo en cuenta la pirámide de población: la gran cantidad de gente mayor, etc) no lo entiende... pero yo diría que más del 50% de los usuarios de Meneame sí lo entienden, porque Meneame es un sitio de Internet, poblado por muchos forofos de Internet y nuevas tecnologías, muchos de ellos de sectores de tecnologías de la información, como informáticos, telecos, etc.
votos: 7    karma: 54
 *   Acido Acido
#32   #12 el día que así sea para la gente de Menéame (que Menéame no es la calle) pues la tumbarán por irrelevante.
votos: 1    karma: 17
#60   #12 añadiria ademas que teniendo en cuenta la comunidad que hay por aqui al menos el 50% de la gente que hay por aqui sabe de lo que se habla
votos: 0    karma: 10
#13   Tengo un Deja-vu? No hizo esto microsoft cuando empezó a competir con el java antes de que inventasen ese engendro llamado c#/.net ?. Si si, cuando microsoft se pasaba los estandares por el forro en sus compiladores?
votos: 0    karma: 7
#39   #13 No, lo que hizo fue crear J++, un "java" de Microsoft, con la sintaxis de Java pero nombres de clases de Microsoft creando incompatibilidad con las clases de Sun. Esos programas de J++ corrían solamente en la Máquina Virtual Java de Microsoft... Sun denunció a Microsoft por el uso inadecuado de la palabra Java, que era una marca registrada de Sun... ya que llamaban "Java" a algo que no era compatible, confundiendo y 'estafando' (vendiendo como Java algo que no lo era y…   » ver todo el comentario
votos: 0    karma: 9
#21   Me parece genial, pero me preocupa que casi el 100% de las herramientas de C# pertenezcan a Microsoft. Hasta hace poco programaba en Mono C# para servidores linux. Ahora que Microsoft ha comprado la compañía, lo veo bastante incierto.
votos: 0    karma: 10
#24   ...y por qué no programar en c++ directamente?

(desde mi ignorancia)
votos: 2    karma: 23
#27   #24 porque .NET es de mas alto nivel, los lenguajes de alto nivel se crearon para mejorar la productividad. Sino, tendríamos que usar ceros y unos.
votos: 3    karma: 28
#35   #27
Creo que vivís en C++98 o incluso antes xD

C++ sigue la filosofía de "pagas por lo que necesitas". Si quieres gestión de memoria automática, pagas el coste. La STD no te obliga a cargar con la losa de memoria, mecanismo de excepciones o introspección (entre otras) si no lo necesitas.
Y C++17 estará listo en GCC 7.
votos: 3    karma: 27
#44   #35 si, yo programaba en C++, despues del 2000, tan antiguo no estoy. Ahora, si que recuerdo que la memoria me la limpiaba yo mediante código con destructores y demás.

C# es otro lenguaje, que se puede pasar a C++, y, supuestamente, escribes menos código para hacer lo mismo. Pero vamos, yo soy de Java y JavaScript, de .NET se lo que me cuentan los amigos que curran con .NET y C++.
votos: 0    karma: 10
#88   #35 ¿C++17 ya? Si aún estoy aprendiendo el 11.
votos: 0    karma: 7
#106   #88 Pues que sepas que el C++14 ya existe desde hace tiempo.

#91 Depende. Si te refieres a que C++ lleva incorporado un recolector de basura, como Java, entonces no, no es el caso. Si te refieres a que puedes usar los contenedores de la STL y despreocuparte de la mayor parte de la gestión de la memoria... en realidad eso ya se podía hacer desde mucho antes.
votos: 2    karma: 31
#36   #27 Por qué es de más alto nivel? Que C++ pueda ir a un nivel tan bajo como C no significa que C++ sea de bajo nivel.
votos: 1    karma: 17
#40   #36 yo no he dicho que C++ sea de bajo nivel, sino que .NET esta por encima. Y ojo, me refiero a Lenguajes de Alto Nivel, no a que sean mejores, que algunos se confunden (y no lo digo por ti): es.wikipedia.org/wiki/Lenguaje_de_alto_nivel
votos: 0    karma: 10
#71   #36 Cierto, me he expresado mal, pero qué tiene C# que lo hace de mayor nivel que C++?
votos: 0    karma: 6
 *   Apatikorl
#62   #24 Porque hay mucho picateclas imberbe que tiene alergia a gestionar la memoria de forma decente y ordenada. Consideran que gestionar los recursos es algo impropio de un profesional de su nivel, y prefieren delegar una tarea tan importante en el compilador para no tener que molestarse en pensar un poco. Y claro, luego salen los truños que salen, que devoran memoria y recursos como si no hubiera un mañana.

#27 C++ también es un lenguaje de alto nivel. De hecho, le permite al programador eliger entre programar en alto nivel, bajo nivel, o en una mezcla de ambos.
votos: 0    karma: 11
#65   #62 repito, no he dicho que C++ no sea de alto nivel.
votos: 0    karma: 10
#73   #62 No quieren preocuparse de gestionar la memoria pero si tienen que meter using, finally y demás para gestionar el resto de recursos :-S
votos: 0    karma: 6
#87   #73 Los IDEs suelen hacer ese trabajo por ti. Mucho trabajo ya se automatiza. Por ejemplo desde que eclipse lleva el generador de constructores, la sobrecarga del toString y el equals, ademas de la generacion de getters and setters, nadie en la vida ha vuelto a picar nada de eso en Java. Al menos trabajando con un IDE, si lo haces con bloc entonces si que te toca hacer esas cosas. Normalmente el IDE detecta la dependencia y te mete el using, import o lo que sea del lenguaje correspondiente.

EDIT: Lo mismo estoy mezclando directivas de mismo nombre en diferentes lenguajes y me puedo ahorrar este texto, pero no lo se.
votos: 0    karma: 7
 *   Salmonela
#116   #87 Los finally (java) o using (C#) para los recursos también te los hace automáticamente? Quiero decir, abrir un fichero y que luego cerrarlo hay que hacerlo manualmente, ya sea con el using o finally esos, o en Python con el "with" creo, si no recuerdo mal.
votos: 0    karma: 6
#78   #62 Lo de liberar la memoria dificilmente lo hará el compilador.
votos: 0    karma: 7
#95   #78 En GCC

-Os
-lto (esto detecta trazas de funciones más usadas y te las optimiza dando prioridad. En juegos y emuladores la velocidad que alcanza puede ser bestial).
votos: 0    karma: 10
#96   #95 Los fallos de memoria o cualquier optimizaron relacionados con la memoria se hace siempre en tiempo de ejecución. Por eso las excepciones aparecen en tiempo de ejecución, que no tienen nada que ver con los errores en el código. Que puedes analizar el código y optimizar algo la memoria, no digo que no pero vas a optimizar muy poco.
votos: 0    karma: 7
 *   --494487--
#99   #96 Aunque C gestione la memoria manualmente, con LTO algo se podrá rascar. Al menos se nota con valgrind tras probar un binario de citra normal vs otro con LTO tras varias pasadas con la ROM de Pokemon y luego ser recompilado leyendo los GCDA.
votos: 0    karma: 10
#104   #78 Cierto, me refería al recolector de basura.
votos: 0    karma: 11
#93   #62 ". Y claro, luego salen los truños que salen, que devoran memoria y recursos como si no hubiera un mañana."

Perdona, pero hoy en día los compiladores pueden dar mil vueltas a experto en bajo nivel. Desde GCC se folla cualquier inline ASM que le metas.
votos: 0    karma: 10
 *   Ander_ Ander_
#103   #93 No estoy hablando de ensamblador, hablo de C# o Java. Lenguajes cuya filosofía consiste en reservar memoria sin preocuparse de liberarla después, que para eso está el recolector de basura. Y claro, luego pasa lo que pasa: programas que consumen una barbaridad de memoria, que se congelan cada cierto tiempo mientras el recolector de basura se dedica a hacer el trabajo que tendría que haber hecho el propio programador, etc.
votos: 0    karma: 11
#108   #62 le permite al programador eliger entre programar en alto nivel,
¿Sin mecionarlo te estás refiriendo indirectamente a librerías como Qt? Pura curiosidad.
votos: 0    karma: 6
#28   #24 El problema es mantener sistemas antiguos que cuestan demasiado hacerlos de cero con lenguajes multiplataforma.
votos: 0    karma: 9
 *   Drazul
#30   #24 Hay algunos que prefieren pegarse un tiro antes que lidiar con la gestión de memoria (no es mi caso).
votos: 2    karma: 30
#33   Para mi el que no haya aprendido a programar primeramente en c++ le costará entender muchos cosas en c#. Porque el que sabe c++ puede entender el "porqué de las cosas" en c#.

#30 Lidiar no vas a lidiar como en c++, pero eso no significa que no haya que tener especial cuidado con la gestion de memoria.
votos: 1    karma: 19
 *   --494487--
#54   #33 Por supuesto. Pero admitirás que difiere mucho la gestión manual del heap que hacerlo con el recolector de basura. En C# prácticamente sólo es necesario saber trabajar con las using y la interfaz IDisposable para que las cosas funcionen, aunque hay que ir algo más allá para además de que funcionen, lo hagan con buen rendimiento. En C++ es más fácil meter la gamba porque la memoria queda a gestión del programador (aunque hoy ya existen librerías de gestión automatizada de memoria), pero es posible también construir software mucho más eficiente que el código administrado de .Net.
votos: 1    karma: 20
#61   #54 En c# no tienes que por que liberar nada, aunque puedes forzar el recolector. Pero es que casi todo en c# es un puntero, y necesitas asignar memoria si deseas crear un objeto nuevo. Es raro no tener algun excepcion por puntero nulo cuando modificas algo o tener problemas por modificar dos punteros que apuntan al mismo objeto(en c++ es casi mas dificil cometer este ultimo fallo). Por supuesto, tener cuidado en asignar mas memoria de la necesaria o de la disponible(tampoco es dificil petar la memoria si no eres cuidadoso).
votos: 0    karma: 7
 *   --494487--
#91   #30 Con c++11 eso ya no es necesario, creo.
votos: 0    karma: 10
#34   #24 Porque seguramente C++ requiere más horas de estudio teórico y práctico, es decir más especialización y más cuidado, porque es más fácil meter la pata y causar desastres. Aparte, opino que C++ a menudo se convierte en un lenguaje bastante áspero (y por tanto menos productivo), sobre todo si empezamos a usar cosas como Conceptos y Metaprogramación. Pero esa aspereza en mi opinión también es parte de su belleza.
votos: 0    karma: 6
#38   #34 Los conceptos aún no se han aprobado en el estandard, hay gente que los usa para sistemas en producción?
votos: 0    karma: 6
#45   #38 Tienes razón, creo que se van a incluir en C++17.
votos: 0    karma: 6
#53   #24 Ojo, que no es lo mismo c++ que visual c++. La peor parte de Visual C++ es que tienes que gestionar la memoria por ti mismo, es decir, asignar memoria a tus objetos cuando la necesitas, y liberarla cuando ya no la necesitas. Es un error común que el programa corrompa la memoria porque dejas de usar un objeto y no has liberado su memoria.

En .NET (C# pertenece a .NET) la gestión de memoria la hace el propio .NET, que usa un "garbage collector" que detecta la memoria que ya no está…   » ver todo el comentario
votos: 1    karma: 15
#66   #53 C# no pertenece a .NET.
C# es un lenguaje soportado por el Framework .NET y sigue el Standard ECMA-334
votos: 0    karma: 8
#92   #66 De la wikipedia:

C# (pronunciado si sharp en inglés) es un lenguaje de programación orientado a objetos desarrollado y estandarizado por Microsoft como parte de su plataforma .NET, que después fue aprobado como un estándar por la ECMA (ECMA-334) e ISO (ISO/IEC 23270). C# es uno de los lenguajes de programación diseñados para la infraestructura de lenguaje común.
votos: 0    karma: 12
#94   #92 "después fue aprobado como un estándar por la ECMA (ECMA-334)"

Tu C# lo puedes compilar en Borland y Mono sin tocar .NET
votos: 0    karma: 8
#26   Y que hay de las APIs?
votos: 0    karma: 10
#37   Soñar es gratis,...

Microsoft ultimamente está cambiando, pera da una de cal y una de arena...
votos: 0    karma: 7
#42   Microsoft debería dejar de intentar hacerse útil y desaparecer con dignidad. :professor:
votos: 1    karma: 16
#43   SQL-server en Linux, Ubuntu en Windows 10 y ahora esto... Quién lo iba a decir hace unos años...
votos: 1    karma: 14
#46   No se que ventajas tendria. Si quieres enlazar con C++ lo compilas como una libreria. Es lo que se lleva haciendo desde siempre. Si quieres hacer las cosas en C++ es porque quieres evitar la mala gestión de memoria que lleva implicito por utilizar C#, que lleva a los característicos stutterings. Si la eficiencia no importa, se hace en C#. Si la eficiencia importa, un código C++ creado de un C# será igual de ineficiente.
votos: 3    karma: 39
 *   mastermemorex mastermemorex
#59   #46 Sería interesante comparar la popularidad de C++ frente a C# en microcontroladores porque estos deben de manejar de forma muy eficiente los recursos hardware. De momento Arduino eligió C++.
votos: 1    karma: 18
#100   #59 C# es interpretado y C++ es compilado. Por otro lado C# es poderoso tanto para web como escritorio, pero ni tiene mucho sentido para implementar procesos de micro controladores ya que el cdigo a parte de ser casi igual que C++ necesitaría ejecutar el intérprete inútilmente.
votos: 0    karma: 6
#118   #59 Tío, los microcontroladores serios se programan en C, y no en C++
votos: 0    karma: 7
#70   #46 Pues la ventaja entiendo que está en no tener que comilar a un codigo intermedio para que despues el CLR lo vuelva a compilar a un lenguaje nativo. Se saltan ese paso.
votos: 0    karma: 8
#52   Que maldita locura :shit:
votos: 0    karma: 9
#74   A ver si con esto es posible portar paint.NET a Linux y que vaya decentemente.
votos: 0    karma: 6
#75   Uhmmm pero ya existen compiladores de c# para otras plataformas no? Además, el uso que haga de las propiedades únicas del entorno MS como las migra a otro sistema, aunque sea C++ o pascal...
votos: 0    karma: 6
#79   #75 El problema no son los compiladores, sino las librerias, especialmente cuando llevan alguna interfaz grafica. Los código escritos para Windows suelen llevar acompañadas unas librerías que no están implementadas en otras plataformas. Da igual que estén escritos en C o C#.
votos: 0    karma: 10
 *   mastermemorex mastermemorex
#80   #79 entonces que ganan pasandolo de c# a c++ si no portan las librerías? y si las portan (más o menos Mono) para que "traducir" de C# a C++ si Mono acepta los dos?
votos: 0    karma: 6
#77   Lo de siempre, Micro$oft diciendo que inventa los Traspiladores cuando llevan años, como el de C/C++ -> javascript por ejemplo.

Micro$oft también ha inventado internet.
votos: 0    karma: 9
#81   Realmente amo C#.

Es un lenguaje bien diseñado y muy poderoso.
votos: 0    karma: 6
#97   #81 amén, y te permite desarrollar en tiempo de ejecución. Eso sí me la pone dura.
votos: 1    karma: 12
#83   A ver si lo entiendo, porque nunca he entendido bien esto:
Java, .NET, MONO etc. compilan a un lenguaje intermedio con el fin de que una misma compilación sea multiplataforma.
C, C++ y el resto de lenguajes compilados se compilan para una plataforma, pero para cualquiera (con librerías de bajo nivel comunes). Existen los trascompiladores por lo que puedes compilar a la vez a varias plataformas, por lo que lo anterior no tiene mucho sentido.

Ahora, según este gran avance, programas algo en…   » ver todo el comentario
votos: 0    karma: 6
 *   sillycon sillycon
#102   #83 como se llama un boomerang que no vuelve? Palo.
Pues esto lo mismo.
votos: 0    karma: 6
#119   #83 Pues a mi lo que me interesa es la sintaxis del lenguaje. C y C++ siempre me han parecido un asco para leerlo, no se ve un lenguaje natural. Cualquier otro (Java, c#, Python) es mucho más potable. El 1% de los programas necesitan el rendimiento que da C++, para qué complicarte la vida con esa sintaxis horrenda (opinión personal, a quien opine lo contrario felicidades por él)
votos: 0    karma: 6
#89   Como lo que hace Vala con C. Y OSX desde tiempos remotos con OBJC.
votos: 0    karma: 10
«12
comentarios cerrados

menéame