μJ, máquina virtual Java para microcontroladores
[Dimitri] envió un proyecto en el que estaba trabajando que implementa una máquina virtual Java limpiamente en C, y es fácilmente portátil entre microcontroladores como los AVR y PIC que solemos ver, dispositivos ARM e incluso el 386 bajo.
Antes de ingresar al "cómo", [Dimitri] primero trata de por qué quería ejecutar código de bits Java con un microcontrolador. Básicamente, encontró que las soluciones existentes, como el entorno Arduino, eran demasiado complejas para las personas que solo quieren programar un chip. Arduino y PICAXE requieren punteros y sintaxis similares a C; no es lo más fácil cuando todo el mundo y su madre pueden programar en Java.
Sobre cómo [Dimitri] logró empaquetar JVM en un microcontrolador, esa es otra historia. Todo en la JVM, desde tipos de datos dobles, largos y flotantes hasta excepciones, funciones ordenadas relacionadas con subprocesos como "sync" e incluso métodos como String.charAt () y String.length () son completamente opcionales. Si su microcontrolador es demasiado pequeño, simplemente apague las funciones que no necesita.
Acerca de qué tan bien (y qué tan rápido) puede funcionar μJ, [Dimitri] lanzó una demostración de ATMega644 y PIC24 con su JVM y un pequeño programa Java. Puede ver estos videos después del descanso, o simplemente descargar la fuente de μJ en [Dimitri]sitio web.
Sr. X dice:
De hecho, es absolutamente inútil. ¿Cuál es el propósito de la UC? Para dominar otros componentes electrónicos, ¿verdad? Si el usuario de uC tiene el conocimiento para ensamblar un circuito electrónico simple alrededor de la uC, ¿por qué esa persona no podría escribir unas pocas líneas en C o incluso en un lenguaje Arduine (conjunto C)?
El PoC está limpio, pero no me digas que tu madre tiene que usarlo.
Miguel dice:
Exactamente, si desea escribir código para microcontroladores, prefiere aprender C, sigue siendo el rey para los sistemas integrados de bajo nivel.
cara dice:
C no es el rey de los chips integrados, Assembler sí lo es. Al menos en el mundo real, donde su chip estará en 900.000.000 de dispositivos de consumo.
Miguel dice:
¿grave? para su sistema embebido, ¿preferiría programar con un ensamblado directo que compilar desde un lenguaje avanzado? El Curiosity MSL está dando vueltas a Marte con un software compilado a partir de 2,5 millones de líneas de código C.
cantido dice:
@cara
Déjame adivinar que la cantidad de dispositivos de consumo con tu código es <1.
Mike Schuler dice:
¿Alguna vez ha intentado codificar un servidor Java con C en una MCU? ¿No? Yo no lo creo.
Nigromante dice:
¿Desde CUÁNDO arduino se convirtió en un idioma?
draeath dice:
No dijo eso. ¿Dejaste de leer cuando tocaste un arduino, o simplemente elegiste ignorar la palabra "superconjunto"?
(Dicho esto, creo que un subconjunto podría haber sido una palabra mejor, pero lo que sea. Su intención debe ser clara para ti)
Marcos dice:
Esto es intenso. Hermoso proyecto y muy impresionante.
fotones dice:
Jajaja me reí tanto
> el entorno arduino es demasiado complejo
> en su lugar java
loldAlex Rossie dice:
Morí un poco por dentro cuando leí eso
Geancarlo dice:
sería comercialmente "interesante" si no hubiera tantas restricciones de licencia
Justin dice:
Muchas felicitaciones, especialmente para alguien de 20 años. Espero probar esto en algunos tableros ARM; con suerte, funcionará. Sin embargo, nunca lo usaré en AVR.
amplio asiento dice:
Vm es interesante cuando se puede usar para ejecutar código desde una fuente externa. Cambie el comportamiento de los sensores remotos enviándoles un nuevo código Java, por ejemplo.
Además, ejecutar el código Java directamente desde una tarjeta SD permite programas de tamaño casi ilimitado.
Dan dice:
Oracle esperará a que esto se convierta en "GRANDE" y luego enviará algunos abogados para ver cuánto dinero pueden obtener de él ...
Mariusz dice:
¡Buen tiempo! Temía que la UC se volviera demasiado poderosa y energéticamente eficiente. ¡Con suerte, Java en UC evitará que eso suceda!
cara dice:
"Encontró soluciones existentes como el entorno Arduino demasiado complejas para las personas que solo quieren programar un chip".
¿Y cree que Java es más fácil? ¿Qué está fumando?
la risa dice:
técnicamente impresionante, pero java en µc es absolutamente repugnante. ¿Por qué diablos pondrías un código abstracto en una placa electrónica específica?
lo peor es que definitivamente incluiremos programación javascript en cualquier momento ...
metro dice:
ya lo tengo: https://la-tecnologia.com/2012/10/05/a-javascript-interpreter-for-arm-micros/
Dmitry Grinberg dice:
No fume nada: todos los graduados universitarios aquí aprenden Java, les guste o no. No todo el mundo aprende C, C ++ o la gestión de la memoria. 🙂
Además, fue solo un proyecto divertido. Además, es posible un tamaño de código ilimitado porque el código nunca se carga en la RAM y ni siquiera se puede cargar fácilmente en la memoria flash.El entorno de Arduino es pesado, complejo y delicado. Y dice mucho que puedo interpretar Java y producir cosas que funcionen más rápido que el "código arduino" compilado de forma nativa ...
También ... fácil enhebrado ... muy fácil ...
Ingeniero de retoques dice:
Si sabe programar, puede aprender la sintaxis de Arduino en muy poco tiempo.
La implementación de una máquina virtual para Java es realmente una buena idea y puede obtener mejoras como las que mencionas. Sin embargo, enfatizaría esas ventajas sobre "Arduino es demasiado complejo para querer programar un chip". Las personas que no saben nada de C, Java o cualquier otro lenguaje de programación pueden pasar de LED parpadeantes a programas más complejos en muy poco tiempo con Arduino. (Hay adiciones y desventajas a esto, pero generalmente caen del lado de Arduino sacrificando cosas haciéndolo * demasiado * fácil).
Vuelva a enfatizar los otros aspectos técnicos de su proyecto. Si hace esto para que las personas que han estudiado Java puedan programar computadoras, solo está habilitando a los programadores deficientes. Tienen que aprender otra sintaxis y un programa dentro de los límites de un diseño diferente.
Dmitry Grinberg dice:
No podría estar más de acuerdo con su punto de permitir a los desarrolladores deficientes. Pero si ya están habilitados (ver: ard ....), preferiría habilitarlos para que sea menos probable que se disparen con el pie: sin punteros, la memoria se administra por usted
Pato dice:
Me gustan los conceptos de VM. Si se codifican correctamente, funcionan muy bien. También asumo que se puede admitir código más avanzado (Piense en serialización y sockets) para que los objetos se puedan cargar y los métodos se ejecuten dinámicamente sin tener que ejecutar un ciclo.
0160 dice:
Dmitry u tuvo éxito y, aunque no es el preferido por muchos, demostró que se podía hacer y dio una buena razón por la que este truco podría ser útil si no solo divertido.
los que odian no necesitan ser tan críticos y dejar de predicar y abrir su mente y ver qué beneficios ofrece su enfoque.
Ciertamente habría leyes posibles si se practicaran en millones de dispositivos, pero esa no es la intención aquí, ni sería imposible resolverla.
Aunque tengo una pregunta. ¿Cree que necesitaría potencia de procesamiento adicional y, por lo tanto, un mayor uso de la batería como una JVM?
sigue con los grandes trucos y no dejes que los que te odian te abandonen XD
ps, odio la codificación, es muy lento y puedo ver cómo Java podría ser útil aquí.
Dmitry Grinberg dice:
En cuanto a las condiciones de la licencia, son ajustables, según las circunstancias adecuadas, porque esas cosas siempre son ...
Paul dice:
Me recuerda a http://xkcd.com/801/
Diego Spinola dice:
Vine aquí para publicar esto ... (y sí, estuve allí :()
Dmitry Grinberg dice:
Y, por último, también estoy agregando cosas que no tiene en arduino, como soporte para un tipo "dual" de 64 bits de alta precisión adecuado
pfh666 dice:
Este tipo me recuerda a Waba, de hace un día. Waba ha evolucionado mucho, pero cuando lo usé por primera vez, era casi una máquina virtual muy básica en este tipo de dirección.
pfh666 dice:
Esto me recuerda mucho a Waba.
Alex dice:
Mojosa!
Finalmente un lenguaje decente en un microcontrolador. Cuanto antes se olvide el mundo de los lenguajes de programación prehistóricos como C, ¡mejor!
Oprimido dice:
¿Estás seguro de que C es un idioma prehistórico?
El vehículo de investigación Mars Curiosity está codificado en C, como alguien señaló.
Y la mayor parte del sistema operativo de su computadora probablemente también esté escrito en C. Al igual que el teléfono móvil con sistema operativo que usa, ya sea Android, iOS o Symbian.Dmitry Grinberg dice:
Niños, niños, que todos vivamos en paz. C es genial en algunos casos, Java en otros. No olvide: necesita una JVM codificada en C para ejecutar Java ...
Alex dice:
C tiene 40 años. Eso debe ser, ¿cuánto, medio millón de años en línea?
Cualquier lenguaje que en 2012 permita al programador escribir pérdidas de memoria, desbordamientos de búfer, etc., debe evitarse como plaga. Los lenguajes como Java eliminan clases enteras de errores y problemas de seguridad. Claro, no son perfectos, pero son una mejora importante con respecto al conjunto glorificado, que es C.
Por eso aplaudo cualquier esfuerzo que facilite la transición a un lenguaje más moderno en cualquier plataforma.
SavannahLeón dice:
"Cualquier lenguaje que en 2012 permita al desarrollador escribir pérdidas de memoria, desbordamientos de búfer, etc. debe evitarse como la plaga".
Cualquier "programador" en 2012 que escriba flujos de memoria, desbordamientos de búfer, etc., debe evitarse ya que pesto.
No es el lenguaje, es un mal programador el que permite que sucedan estas cosas.
Codificador experimentado no necesitar cualquier cosa para administrar la memoria, lidiar con excepciones, evitar desbordamientos de búfer. Sus buenas prácticas de codificación ya abordan esos conceptos básicos. El hecho de que un buen codificador use un lenguaje que promueva tales cosas solo significa que es un programador vago. ¿Por qué reinventar la rueda cuando otra persona lo hizo por ti?
Codificador incorrecto necesidades alguien más para administrar los flujos de memoria y los desbordamientos de búfer porque no tienen buenas habilidades de codificación. Escriben una mierda completa, le lanzan más mierda cuando no funciona como se esperaba, luego buscan en Internet más muestras de mierda para ocultar su propia mierda.
¿No puedes distinguir todavía? A los malos programadores les gustan las citas mágicas.
ubu dice:
caballero bien escrito 🙂
Hell0W0rld dice:
Dmitri, un gran trabajo en su proyecto, considera externamente nuevas formas de hacer las cosas que permiten la innovación de nuevas ideas e invenciones.
Para su información, los chicos, un niño de guiones muy malo o un buen programador, pueden descifrar cualquier cosa. Hay problemas de tipo desbordamiento de búfer que pueden ocurrir en Java (http://secunia.com/advisories/25295), así como muchos problemas al intentar usar Java portado a otro programa.
Sí, Java puede ser fácil, no Java no es una prueba de errores. Estoy de acuerdo con SavannahLion- Evite el mal codificador, no el lenguaje difícil de usar. Si una herramienta es demasiado poderosa para que la use correctamente, use una más segura que conozca (como Java) hasta que sepa qué diablos está haciendo.
El carlos dice:
Dmitry, te felicito por el logro técnico. Realmente da bastante miedo. Y si realmente operó correctamente el enhebrado, estoy doblemente impresionado.
Sin embargo, debo aceptar sus respuestas razonadas. Para cumplir con las pautas de publicación no oficial de la-tecnologia, debe hacer declaraciones generales, insultar todo lo que no esté en su propia experiencia, no dar pruebas y debe mencionar cuánto tiempo programa los PIC de 8 bits para lavar las máquinas.
Pato dice:
También siempre estas preguntas para responder preguntas, nunca responder. ¡Gran trabajo!
cantido dice:
Terrible Dmitry. Este artículo trata principalmente sobre personas que apenas pueden codificar quejas sobre Java en lugar de darse cuenta de lo genial que es. : /
Steve dice:
Oh, es * genial, pero todavía no quiero una VM en mi µC.
Si hacemos Java, prefiero ver algo como un puerto de gcj.
S.
Dmitry Grinberg dice:
¿Hay alguna razón por la que GJC no funcionará para un propósito AVR como ese?
cantido dice:
@Dmitry Grinberg
No creo que a nadie le haga falta mucho para descubrirlo.
Sobre otro tema ...
Estoy pensando en implementar el "bios" para mi máquina m68k en Java ahora solo por diversión. ¿Consideraría autorizar uJ bajo una de las licencias comunes de código abierto?
Pilotos dice:
Y bien por ti, pero nadie te obliga a usar una JVM en tu microcontrolador. Esta es otra nueva opción para las personas que eligen usarlo.
Solo porque no es adecuado para ti ...
Ptolomeo dice:
Como a otros, me intrigan las impresiones y los sentimientos * ewww java *. Lo que realmente quiero ver es un Scheme en UC.
paracleto dice:
¿Qué pasa con un intérprete de esquema / lisp que se ejecuta en elua?
http://blog.davber.com/2006/09/07/embedded-lisp-via-lua/
http://www.eluaproject.net/
Dmitry Grinberg dice:
Recibo la respuesta "ewww java" ... Realmente soy realmente. Pero, dado que Java es lo único que las personas que salen de la universidad en los EE. UU. Generalmente pueden programar, parecía una buena opción. El entorno de Arduino es limitado (intente crear una lista vinculada en él o, por ejemplo, un tablero hash). Quería darles a las personas que no quieren / no pueden aprender la C adecuada, alguna forma de programar estos micrófonos, y en mi humilde opinión lo logré.
g19fanatic dice:
tal vez la universidad a la que fuiste, aprendí c ++, fortran, matlab, python y java ... Ni siquiera soy un estudiante de CS, pero nos vimos obligados a aprender esto a través de diferentes clases.
Dmitry Grinberg dice:
Al que fui, me enseñó mucho más, pero conozco a mucha gente que, lamentablemente, no.
Me alegra saber que el tuyo también fue bueno.
Kris Lee dice:
También aprendí Haskel y Prolog junto a Java obligatorio (llamado clase de lenguaje de objetos de hecho).
También aprendí otras cosas divertidas como Fujaba (google it).
También hubo la oportunidad de aprender C ++ y otros lenguajes como Lisp.
Pero creo que sería posible graduarse sin tocar nada detrás de Java.
Kris Lee dice:
Dios mío, puso Java en el microcontrolador, ¿qué tenía en mente?
Tranquilícense, les acaba de dar una implementación de Java VM pequeña y sencilla para jugar.
ultrasonido dice:
¿Habéis visto sus otros proyectos? Esp, ¿en el que ejecutó una versión estropeada de Linux con Atmega328? Eso fue de mal gusto. Amo sus trucos.
pooty dice:
Una hazaña maravillosa ... incluso si a la multitud no le gusta ... mi sombrero es para ti, porque ciertamente no podría hacer esto. Fui a su sitio y leí un poco. Parece que se han invertido muchos pensamientos y trabajo en esto ...
No escuches a los que te odian, probablemente ni siquiera fueron a tu sitio.Geza dice:
Muy, muy bueno, pero no comparable al Linux que ejecuta la CPU Atmega. Esas cosas son mortales;)
h1ghz0r dice:
@ ultrasonido
> lisiadoeso no es paralizante de todos modos, ejecutó un kernel de Linux sin modificar, sobre eso, el único problema es la velocidad, emular un procesador de 32 bits en uno de 8 bits, es realmente caro, excepto para copiar una MMU. es simplemente lento (demasiado lento para ser realmente útil)
Soy tu fan Dmitry, en serio.
Jordán dice:
¡Este proyecto captura completamente la esencia del truco! tuj 🙂
Honestamente, me siento como la mayoría de los comentaristas aquí. Java no es un lenguaje adecuado para uC, pero la idea de poder usar subprocesos y excepciones es divertida porque soy vago. Y el aspecto del código modificable es muy fácil y emocionante. ¡Eso abre muchas opciones interesantes!
thelinuxone dice:
¡Pr0ps serias! Disfruto de la c como sintaxis de arduino, pero algunos no. Dmitry, gran trabajo. No puedo esperar a probarlo.
Ptolomeo dice:
No me malinterpretes, creo que hiciste un trabajo maravilloso al lograrlo.
Roger Parkinson dice:
Sin buscar a los pescadores, y estoy seguro de que hay algunos, la razón por la que esto me interesó es que tengo un código realmente interesante en Java que no me molestaría en llevarlo a un microproyecto. No quiero reescribirlo, entonces tendría dos versiones para guardar. Así que todo lo que parece un puerto auxiliar es para mí jefes.
RunnerPack dice:
Si cree que Java es “fácil”, debe mirar Ruby y luego comenzar a usar JRuby con esto para poder trabajar un poco con uC. Eso fallaría.
Además, si eres raro, pero no lo suficientemente genial como para que te guste Ruby, este es Jython. : pag
(Adelante, prepáreme fuego, adictos a las drogas Python, pero todavía me niego a permitirlo el ordenador dicta como Me formatear mi código fuente! También sé que la gente usaba Python con uControllers antes).
Dmitry Grinberg dice:
jruby tiene que funcionar, al menos antes de que usaran la instrucción dinámica invocada, que no soy compatible.
Chris C. dice:
[Dmitry], esto es bastante impresionante. No sé nada sobre Java, pero ciertamente jugué para poner una VM avanzada en PIC.
A veces escribo funciones en ensamblador en lugar de C, porque necesito velocidad absoluta y puedo escribir código mucho más estricto que el compilador de C; pero no soñaría con escribir en asamblea todo el tiempo. Por otro lado, a menudo ni siquiera necesito C-speed y preferiría escribir muchas funciones en un lenguaje más avanzado. El código de bytes de VM también es más compacto que el C compilado, puede cargarse rápidamente y alimentarse con RAM sin parpadear, o incluso alimentado por memoria SPI externa. Tener tres idiomas a mi disposición, todos perfectamente juntos, es el entorno de mis sueños.
Escribí una máquina virtual de investigación parcial en el PIC. Se hizo estrictamente para tener una idea de la dificultad proyectada, los requisitos de memoria y el rendimiento de una máquina virtual completa y útil. Teniendo en cuenta lo que aprendí de este ejercicio y las especificaciones de memoria / rendimiento que logró, incluso sin saber nada sobre Java en particular, creo que hizo un gran trabajo. También me gusta cómo se le permitió compilar muchas funciones para que se pueda ajustar la huella de memoria.
Ya descargué uJ, y lo probaré pronto.
Otro pensamiento. Creo que lo que ha hecho también es posible para el CIL de Microsoft, con dificultades, requisitos de memoria y rendimiento similares; pero podría permitir la codificación en muchos lenguajes avanzados, en lugar de solo uno. Nadie ha hecho eso todavía, al menos dentro del ámbito de las MCU a las que se dirige. Los proyectos existentes como DotNetAnywhere incluyen al menos alguna compilación JIT en la VM, lo que lo hace demasiado grande. Podría ser un área muy interesante para explorar.
Dmitry Grinberg dice:
Bueno, en java (a diferencia de CIL, si mal no recuerdo) la mayoría de las operaciones están escritas, es decir, una operación separada para agregar entradas, diferente de una para long o flotante) esto facilita la eliminación de funciones.
Consideré CIL, pero no me llamó la atención tanto como Java. Como lo había hecho, consideré una máquina virtual personalizada, pero escribir un buen compilador lo convertiría en una tarea enorme: Java ya tiene un compilador, por lo que solo tuve que escribir mi propio pequeño compilador posterior (classCvt) para limpiar los errores restantes. De hecho, classCvt se puede usar para hacer todo tipo de otras optimizaciones que podría agregar más tarde
Chris C. dice:
No sabía eso de Java. Tiene razón, muchos de los códigos de operación CIL tratan con varios tipos, con conversión automática / publicidad. Mi pequeña máquina virtual prototipo se ocupó de esto, y se me permitió compilar algunos tipos (entradas grandes, flotantes dobles y simples); pero tomó un poco de trabajo adicional permitir esto y aún tiene estructuras de conmutación bastante eficientes.
Y estoy de acuerdo en que escribir un buen compilador realmente apesta en comparación con escribir una máquina virtual. ¡Evítelo si es posible!
Karl Koscher dice:
Microsoft ya tiene algo como esto: .NET Micro Framework. Se utilizó en sus dispositivos SPOT, como relojes, etc. ¡La fuente incluso está disponible en Apache!
Hablando de implementaciones existentes, Java Card es un pequeño subconjunto de Java diseñado para funcionar con tarjetas inteligentes. De hecho, es tan pequeño que carece de muchas de las funciones habituales de Java, como matrices multidimensionales, recolección de basura, etc. Sin embargo, no debería ser demasiado difícil implementar un intérprete para las clases de Java Card.
Las tarjetas de aplicaciones múltiples son un ejemplo perfecto de por qué querría una máquina virtual con un microcontrolador. La idea es que muchos proveedores puedan cargar sus aplicaciones en una sola tarjeta común con la VM forzando la separación entre ellos. Ninguna aplicación debe confiar en ninguna otra aplicación.
Dmitry Grinberg dice:
Teóricamente, podría recortar mi VM para que admita las especificaciones de JavaCard
Chris C. dice:
No aplica. .NET Micro Framework es * mucho * más grande. Lo más probable es que compile JIT, en lugar de ejecutar el código de bytes CIL directamente. La papelera es mucho más compleja. Y así. Creo que es posible insertar una CIL-VM útil en <64KB; pero hay tantas decisiones de proyectos inconsistentes en la implementación de .NET MF que eliminarlo para que coincida con este objetivo es más difícil que simplemente escribir una nueva máquina virtual desde cero.
Robwasab dice:
Sabes, hoy leí los comentarios sobre cuántas personas desagradables te dieron para poner java vm en micro, pero diablos, el paralaje funciona de manera básica, al igual que la manzana II. La gente todavía lo codificó porque lo básico era fácil, y Java es un lenguaje bastante fácil, y está compilado. ¡Este es un proyecto genial, buen trabajo!
cueva dice:
buen truco de todos modos,
pero ¿Java VM en µC?
micro dice:
Dimitri,
No prestes atención a los cabrones HAD. Son el efecto secundario de, por ejemplo, blogs de blogs con la atracción principal.
Dicho esto, es mucho más probable que reciba críticas positivas en un sitio web como news.ycombinator.com. Se anima a los lectores a saber de qué diablos están hablando antes de responder.
En serio, HAD, tus lectores no te sirven, siendo un grupo de científicos de sillón autoindulgentes.
makstera dice:
Se ha hecho antes:
http://www.harbaum.org/till/nanovm/index.shtmlDmitry Grinberg dice:
Nanovm ni siquiera copia correctamente las matemáticas de Java :). Es genial pero no lo mismo (subconjunto anal en lugar de todo el idioma)
Dmitry Grinberg dice:
Por supuesto que me refería a "subconjunto pequeño", pero swype tenía otras ideas
alguien dice:
¿Cómo nadie mencionó el dispositivo TINI de Dallas? de principios de la década de 2000? nadie recuerda eso?
Alex dice:
Recuerdo ese animal. Escribí una herramienta de monitoreo y registro del clima hace años.
Terminé de tener que reconstruir el sistema operativo con grandes bits reescritos para liberar algo de memoria, pero logró obtener un programa realmente sólido que podía registrar más de un mes de datos.
No veo cuál es el problema de ejecutar JVM en µC. La demostración muestra que funciona rápido y rápido, no tan rápido como lo era de forma nativa (agrego eso para tranquilizar a los fanáticos de C), pero en el mundo real, sus resultados son importantes.
En cuanto al problema de la gestión de la memoria, el manejo de los punteros es tedioso, y si te olvidas de algo que no estás tratando de probar, entonces paraliza tu compilación cuando funciona, te quedas hasta que puedas reescribir y volver a encender.
Y sí, sé que las pruebas deben ser completas, pero las personas cometen errores y se pierden cosas; elimine la necesidad de administrar su propia memoria y elimine ese problema en particular.
¡¡Maldito buen logro !!
Ah, y antes de la pregunta sobre la hora del granizo, programo en Java, C, C ++, C # y Objectove-C.
Prefiero Java a todos.Alex dice:
Yo recuerdo eso. Escribí una herramienta sobre monitoreo y registro del clima hace unos años.
Terminé reconstruyendo el sistema operativo para eliminar una gran cantidad de código innecesario y hacer suficiente espacio para almacenar una cantidad decente de protocolos.
Terminó con un sistema realmente estable que podía almacenar 4 semanas de datos.Los fanáticos de C no estarán de acuerdo y lo culparán por ser un mal programador, pero administrar su propia memoria es algo tedioso y problemático, y si puede evitarlo, puede hacer el trabajo mucho más rápido.
Java es un lenguaje muy bueno. No es tan conciso como Scala, no tan rápido como C, pero es un lenguaje brillante y versátil altamente escalable.
Puedo obtener un proyecto desde el concepto hasta su finalización en Java más rápido que en C, C ++, C # (aunque eso está muy cerca ...) u Objective-C.
Administrar los punteros usted mismo abre muchos problemas potenciales, y si los pierde en las pruebas, es posible que tenga una construcción mortal y una pesadilla de depuración en sus manos.¡Este es un gran logro!
Me pregunto Dimitri: ¿le diste a tu herramienta de conversión un recorrido por un código de bytes de Scala?
jazz dice:
C es más grueso que el pascal en estas tablas. ASM o BASIC completamente ... y sí, APUESTA. tu tamaño era limitado si no lo sabías.Cuando cada bit cuenta ... usas lo que funciona mejor. Él usa el protocolo Forth. TODO ES UNDATOS. Pruebe esto en C alguna vez. PITA incluso con PASCAL, pero ES POSIBLE.
turki khadija dice:
Hola,
¡impreso!
Me gusta tanto que soy ingeniero de software, tengo algunos problemas con la programación C
Intentaré esto, Java me conviene :))