2010-02-14 10 views
5

Estoy trabajando en un documento sobre programación multiplataforma y me gustaría incluir secciones sobre ventajas/desventajas. Desde mi entendimiento; tener cualquier aplicación ser multiplataforma es un gran punto de venta para el desarrollador, ya que permite a casi cualquier usuario de computadora como comprador potencial, entre otras cosas. Solo estoy tratando de descubrir posibles desventajas. ¿Si alguna?¿Hay alguna desventaja para que un idioma sea independiente de la plataforma?

Respuesta

2

Generalmente, en un entorno multiplataforma necesitará un nivel adicional de abstracción entre el lenguaje y la máquina, como un intérprete o la JVM. Este nivel adicional le dice a la máquina específica cómo ejecutar el código en su entorno y trae más código que su computadora tiene que ejecutar para manejar un conjunto dado de instrucciones. Debido a esto, las aplicaciones multiplataforma generalmente son más lentas.

La lógica detrás de esto es que en lugar de codificar la misma aplicación muchas veces para cada entorno, se crea una especie de interfaz para que los codificadores programen. Cada plataforma necesita su propia implementación de esta interfaz, pero está destinada a ejecutar el código de una manera uniforme.

Además, aunque esta capa está diseñada para proporcionar un comportamiento universal en múltiples plataformas, es posible que aún deba tener en cuenta las diferencias en las convenciones de nomenclatura y el almacenamiento de archivos de una plataforma a otra.

Los navegadores web son el ejemplo más extendido de esto. Si tiene un buen navegador, interpreta el código estándar web (HTML/CSS/JS, etc.) y se ocupa de cómo mostrarlo en su plataforma en particular, en lugar de que el que escribe el código necesite acomodarse a estas diferencias.

+2

¿Está preguntando por entornos o idiomas? Yo diría que el ejemplo más extendido de una plataforma independiente * lenguaje * es C, y en C las capas de abstracción no suelen ser cuellos de botella. – Ken

2

¿Hay desventajas en un lenguaje (pedido en el título) es independiente de la plataforma?

Como implementador idioma, tengo que decir que hacer algo ejecutarse en múltiples plataformas es un montón un trabajo más. La mayor parte del trabajo adicional está en el sistema de tiempo de ejecución. Hacer algo independiente de la plataforma es aún más difícil; tiene que apegarse a un estándar ampliamente utilizado como ANSI C.

Debo agregar que no necesariamente tiene que escribir mucho código; solo tienes que pensar más. Lua es un buen ejemplo de un lenguaje independiente de plataforma sin una gran implementación monstruosa. GHC es lo opuesto: un montón de código para obtener un gran rendimiento en muchas plataformas —, pero el sistema de tiempo de ejecución solo es cuatro veces el tamaño de la versión 6 de Unix.

2

¿Qué tal "Jack of all trades, master of none"?

Tener un lenguaje diseñado e implementado en una plataforma permite que el diseño se adapte a esas plataformas. Además, los recursos suelen ser limitados, por lo que la implementación y la depuración se centran en una, en lugar de en muchas plataformas.

Esto no se aplica a los esfuerzos de la comunidad donde abundan los recursos, como Perl.

0

principales desventajas son:

  • más tiempo al desarrollo debido a las diferencias de plataforma (por ejemplo, el sistema de archivos de acceso difiere en diferentes plataformas)
  • Mucho más pruebas requiere y por lo tanto mucho mayor gasto para poner a prueba en múltiples plataformas soportadas.
1

desventaja importante - no se puede utilizar las opciones específicas de la plataforma ...

Ésta es una cuestión más filosófica - ¿dónde está el límite entre las habilidades del lenguaje y habilidades del compilador ...

que pueda write directx code ... pero para que ocurra el mismo resultado en Linux ...

0

Muchas veces hace que un lenguaje sea menos rico en funciones o, alternativamente, más lento debido a la necesidad de un tiempo de ejecución más grande y complejo. La mayoría de los idiomas logran llevarlo decentemente bien, pero hay un par que probablemente no se benefició de la implementación en todas las plataformas.

0

¡Common Lisp es como un caso de estudio en esto! :-)

En cierto modo, tienen bastante razón: hay algunas cosas que parecen extrañas desde una perspectiva teórica pero que permiten a los procesadores modernos no especializados implementarla rápidamente. Por ejemplo, hay algunas expresiones aritméticas sin sentido a las que se les permite devolver basura en lugar de señalar una condición de error, porque puede ser mucho más eficiente de esa manera.

En otras formas, trataron de ser independientes de la plataforma, y ​​agregaron complejidad con poca o ninguna ganancia. Un ejemplo clásico es el subsistema pathname; la firma make-pathname función tiene el siguiente aspecto:

make-pathname &key host device directory name type version defaults case 

Ya en la década de 1980 cuando fue estandarizada, podría haber parecido razonable incluir soporte nativo para sistemas de ficheros muy ricos, pero no he visto un VAX (o cualquier otra sistema con un sistema de archivos versionado) en más de 10 años. Hoy en día, es la complejidad que most people don't care about. (Sé que las rutas y las rutas lógicas son características técnicamente separadas, pero no están tan lejos en lo que intentan hacer).

Como programador, nunca se puede adivinar en qué área necesitará flexibilidad en el futuro, o incluso en qué eje querrá flexibilidad, los programadores lo saben bien, y es por eso que las palabras cursis como "ágil" se han vuelto comunes. Al diseñar un lenguaje independiente de la plataforma, se trata de lo peor de ambos mundos: los lenguajes son para la abstracción y las plataformas son muy concretas. Efectivamente, cada lenguaje independiente de la plataforma está lleno de una cantidad decente de succión, de C en adelante.

0

Pregunta Sun. ¿Cómo funcionó todo el asunto de Java para la empresa? (Sí, lo sé, muestra de 1 y todo)

En este caso, lo estoy mirando desde el punto de vista de un proveedor. Hicieron un lenguaje, que si bien es popular, no hizo nada para aprovechar el poder (real) del sistema operativo que vendieron. Tenía que funcionar en Windows, con todas las tonterías paralizantes que eso conlleva. ¿Desea desviar un proceso secundario y abrir una tubería o dos entre padres e hijos? Demasiado. Diviértete con tus errores de hilo. Diviértete con tu E/S de archivo lento para perros. (cuando, si es que alguna vez, Java finalmente incluyó una implementación de "nio" ?)

Microsoft por supuesto no cometió ningún error con .NET. Y se centraron en mejores características de lenguaje, en lugar de gastar recursos en implementaciones de tiempo de ejecución múltiples.

Cuestiones relacionadas