Anuncio

¿Actualmente está debatiendo si usar java para su próxima aplicación o usar kits de herramientas y marcos nativos? ¿Le gustaría saber qué ventajas ofrece Java sobre la programación nativa para una aplicación? ¡Sigue leyendo para descubrirlo!

¿Qué es una aplicación nativa?

Una aplicación nativa es un programa escrito específicamente para un sistema operativo (SO) y posiblemente para el hardware específico que ejecuta ese SO. Está escrito principalmente en un lenguaje como C / C ++. El código fuente de C / C ++ se compila en un formulario de objeto utilizando un compilador, que luego se ensambla en un ejecutable vinculando las bibliotecas requeridas. Un programa creado de esta manera se ejecutará en el hardware y sistema operativo específicos para los que está diseñado, pero puede que no funcione correctamente en otros sistemas.

Preparando un ejecutable nativo

¿Por qué no son portátiles las aplicaciones nativas?

Un compilador para un lenguaje como C / C ++ traduce las declaraciones del código fuente al lenguaje de máquina para la CPU objetivo. Cuando intente ejecutar este código en una CPU diferente, es posible que el programa no funcione correctamente (o no funcione en absoluto) ya que las instrucciones del lenguaje de la máquina en el código compilado pueden no ser compatibles con esta CPU.

instagram viewer

Además, el nuevo sistema operativo puede ser diferente del original y puede que ni siquiera reconozca el archivo del programa como un ejecutable. Esto se debe a los diferentes formatos de archivo utilizados para los ejecutables en diferentes sistemas operativos (como Windows, Linux, MacOS, etc.).

La portabilidad es un problema tan grande con las aplicaciones nativas que simplemente actualizar el compilador a la próxima versión puede introducir cambios importantes. Es posible que deba corregir su código para que funcione con el compilador más nuevo. Como tal, salpicando el código fuente con lo que se conoce como ifdef las declaraciones para aislar soluciones específicas de hardware, sistema operativo o compilador son comunes.

El siguiente es un pequeño fragmento de código de Biblioteca de compresión BZLib que ilustra el uso de ifdefs para aislar las peculiaridades de la plataforma:

#ifdef _WIN32. # incluye # ifdef small / * windows.h define small a char * / # undef pequeño. # terminara si. # ifdef BZ_EXPORT. # define BZ_API (func) WINAPI func. # define BZ_EXTERN extern. # else / * import windows dll dinámicamente * / # define BZ_API (func) (WINAPI * func) # define BZ_EXTERN. # terminara si. #más. # define BZ_API (func) func. # define BZ_EXTERN extern. #terminara si.

Portabilidad del código fuente entre sistemas operativos

Esta situación se puede aliviar hasta cierto punto volviendo a compilar el código fuente de C / C ++ en la nueva CPU. Sin embargo, el sistema operativo para la nueva CPU puede ser diferente. Y el código fuente no puede compilarse sin cambios, ya sean mayores o menores. Incluso los cambios menores en las versiones del sistema operativo pueden requerir algunos cambios en el código fuente.

Y cuando considera sistemas operativos diferentes como Windows y Linux / UNIX, la portabilidad es un juego de pelota completamente nuevo. A menos que esté utilizando un kit de herramientas o un marco que lo aísle completamente del sistema operativo, la portabilidad del código fuente es imposible. Esto se debe a que la interfaz del sistema operativo es completamente diferente entre estos sistemas. Si usted, en los rincones más remotos de su código, utiliza cualquier primitivo del sistema operativo directamente, entonces su código no será portátil en estos diversos sistemas operativos.

¿Cómo es diferente Java?

En este escenario, Java ofrece un nuevo paradigma, una nueva forma de crear software. Al programar en Java, apuntas a un máquina virtual. Tal máquina existe como un concepto, y el lenguaje Java proporciona interfaces para programar contra esta máquina. Por ejemplo, puede consultar la cantidad de memoria disponible, el número de CPU, las interfaces de red, etc. de la máquina virtual.

Código de ejecución de máquina virtual

¿Cómo se crean las aplicaciones Java?

El lenguaje java proporciona un compilador java que traduce el código fuente en código objeto. El código objeto es ejecutado por el máquina virtual de Java, que es un programa separado del compilador. El sistema operativo, a su vez, ve la máquina virtual de Java como un programa más que se ejecuta en ese sistema operativo.

La carga de la portabilidad ahora ha pasado del programador de aplicaciones al proveedor de máquinas virtuales de Java. El programador de aplicaciones escribe el software usando las primitivas del lenguaje java y el java la máquina virtual es responsable de traducir estas primitivas al sistema operativo host instalaciones. Cuando sale una nueva versión del sistema operativo, es responsabilidad del proveedor actualizar la máquina virtual de Java para que funcione correctamente en el nuevo sistema operativo.

Construyendo Programas Java

¿Cuáles son las ventajas de la máquina virtual Java?

Como se mencionó anteriormente, la máquina virtual de Java proporciona una vista virtual del sistema operativo y el hardware al programador de la aplicación. Esta vista virtual tiene la forma de varias interfaces y métodos, y sirve para aislar al programador de la aplicación de las diferencias en el sistema operativo host y el hardware subyacente. Por lo tanto, el programador de aplicaciones puede acceder a instalaciones como un kit de herramientas de ventanas, redes, gráficos 3D, múltiples CPU, etc. sin tener que recurrir a llamadas de bajo nivel que terminan haciendo que el programa no sea portátil.

Un programa de Java se escribe y se compila utilizando el compilador de Java. El código objeto resultante (llamado código de bytes) puede transportarse a un sistema operativo host diferente que se ejecute en hardware diferente y debe ejecutarse sin problemas.

Compilador JIT

La máquina virtual java utiliza un Compilador JIT para optimizar el código de bytes específicamente para la CPU de destino. JIT significa Justo a tiempo y se refiere a las optimizaciones de tiempo de ejecución que la JVM aplica al código de bytes para que funcione mejor en la CPU actual.

Otra ventaja de usar Java Virtual Machine es que puede aplicar diferentes optimizaciones para diferentes casos de uso, todas con el mismo código de bytes. Por ejemplo, Oracle JVM proporciona dos opciones para ejecutar el código de bytes: un modo de servidor y un modo de cliente. El modo de servidor se optimiza para programas de servidor de larga ejecución, mientras que el modo JVM del cliente se optimiza para tiempos de respuesta rápidos, ya que es probable que se esté utilizando en modo interactivo.

Para resumir, se crea una aplicación nativa para un hardware y un sistema operativo específicos. Una aplicación de Java, por otro lado, sigue un Construir una vez ejecutar en cualquier lugar filosofía, al hacer que una JVM ejecute las instrucciones compiladas del código de bytes. Si bien las aplicaciones nativas se han visto tradicionalmente como más efectivas que las aplicaciones de Java, puede que no siempre sea así debido al uso de un compilador JIT por parte de la JVM.

¿Has desarrollado una aplicación nativa y tuviste que cambiar a Java debido a la portabilidad? ¿O viceversa debido a problemas de rendimiento? Háganos saber en los comentarios a continuación.

Crédito de imagen: Profit_Image a través de Shutterstock.com