Pregunta

De las discusiones que he tenido sobre el diseño del lenguaje, parece que muchas personas argumentan que no hay y nunca habrá " un lenguaje verdadero " ;. La alternativa, según estas personas, es estar familiarizado con varios idiomas y elegir la herramienta adecuada para el trabajo. Esto tiene mucho sentido a nivel de un proyecto completo o de un gran subproyecto que solo tiene que interactuar con el resto del proyecto a través de una interfaz muy estrecha y bien definida.

Por otro lado, usar muchos idiomas diferentes parece algo muy incómodo cuando se trata de resolver muchos subproblemas pequeños con elegancia. En otras palabras, en mi humilde opinión, los lenguajes de propósito general que son decentes en todo siguen siendo importantes. Como ejemplo trivial, supongamos que necesita hacer lo siguiente:

  1. Leer un montón de datos en algún formato arbitrario de un archivo. Verifique si hay errores, etc. (Mejor hacerlo en algo como Perl).
  2. Cargue estos datos en matrices, haga un montón de operaciones matriciales hardcore en él (mejor hecho en algo como Matlab).
  3. Ejecute una rutina personalizada y computacionalmente intensiva que debe ser rápida y eficiente en cuanto al espacio (mejor en C o C ++).

Este es un proyecto bastante simple, aparte de escribir la rutina de procesamiento de matriz personalizada computacionalmente intensiva, sin embargo, la única buena respuesta sobre qué lenguaje usar parece ser un propósito general que es decente en todo.

¿Qué me estoy perdiendo aquí? ¿Cómo se utilizan varios idiomas de manera efectiva para aprovechar cada uno de sus puntos fuertes?

¿Fue útil?

Solución

He trabajado en muchos proyectos que contienen una mezcla bastante diversa de idiomas. A menos que sea un proyecto .NET, generalmente usa estos diferentes idiomas en diferentes niveles o en diferentes procesos. Tal vez su aplicación web esté en PHP y su servidor de aplicaciones en java. Entonces realmente no & "; Mezclar y combinar &"; a nivel de método.

En .NET y para algunos de los lenguajes java vm las reglas cambian un poco, ya que puedes mezclar mucho más libremente. Pero las características de estos lenguajes están definidas principalmente por las bibliotecas de clases, que son comunes. Por lo tanto, la motivación para cambiar idiomas en .net generalmente está impulsada por otros factores, como el idioma que conocen los desarrolladores. F # en realidad proporciona bastantes características de lenguaje que son específicas para ese idioma, por lo que parece ser una pequeña excepción dentro de .NET. Algunos de los lenguajes Java VM también agregan métodos a las bibliotecas estándar de Java, agregando características que no están disponibles en Java.

En realidad, te acostumbras a trabajar con varios idiomas siempre que todos tengan un buen soporte IDE. Sin eso, realmente creo que estaría perdido.

Otros consejos

Los idiomas integrados como Lua hacen que esto sea bastante fácil. Lua es un gran lenguaje dinámico similar a Ruby o Python y le permite desarrollar rápidamente códigos de alta calidad. También tiene una estrecha integración con C, lo que significa que puede aprovechar las bibliotecas C / C ++ y optimizar las secciones críticas de rendimiento al escribirlas en C o C ++.

En informática científica tampoco es raro tener un script que, por ejemplo, procese algunos datos en Matlab, use Perl para formatear la salida y luego pasarla a otra aplicación escrita en Matlab, C o lo que sea. Sin embargo, esto tiende a ser más común al integrar aplicaciones que han sido escritas por personas diferentes que al desarrollar algo desde cero.

Considere la parte más difícil de su tarea. ¿Analizar el archivo es la parte más compleja? Un buen lenguaje para leer archivos y luego manipularlos podría ser la opción más pertinente.

¿Son las transformaciones matemáticas la parte más difícil? Es posible que desee absorberlo y usar matlab, alimentándolo con scripts u otras herramientas caseras.

¿Es el rendimiento la parte más importante? ¿Cuánto cálculo se realizará frente a las transformaciones y el análisis? Si el 90% del trabajo realizado se calculará y las otras partes son solo transitorias, considere una solución C / C ++.

No hay nada intrínsecamente malo en jugar con múltiples idiomas en una solución simple, especialmente si no te importa pegarlo con scripts. Sin embargo, cuantos más idiomas y módulos integre, aumentará sus dependencias, y cuantas más dependencias tenga, más y más difícil será distribuir y mantener su aplicación. Ahí es donde se encuentra la verdadera compensación: cuantas menos tecnologías, bibliotecas y bits de software necesite para ejecutar la aplicación, más simple se vuelve. Cuanto más simple es la aplicación, más fácil de mantener, distribuible, depurable y utilizable se vuelve.

Si no le importa la sobrecarga adicional de integrar las múltiples piezas de tecnología, o esa sobrecarga le ahorrará una cantidad igual o mayor de tiempo de desarrollo, continúe.

Creo que está bien. Si lo configura como una configuración de n niveles donde cada capa accede a lo que está debajo de la misma manera (SOAP / XML / COM, etc.), al final he descubierto que es invisible.

Para su ejemplo, elegiría un idioma para el front end que sea fácil, rápido, flexible y que pueda hacer muchos, muchos, muchos, muchos tipos de llamadas a diferentes interfaces como com, corba, xml, .net, bibliotecas dll personalizadas, ftp y puertas de enlace de eventos personalizados. Esto garantiza que pueda llamar o interactuar con cualquier otro idioma fácilmente.

Mi herramienta de elección para esto es Coldfusion trabajando con ASP / PHP / Java y un poco de Ruby. Parece tenerlo todo en un solo lugar y es muy simple. Para su caso específico, COldfusion le permitirá compilar su propia etiqueta de biblioteca a la que puede llamar en su código web. Dentro de la etiqueta puedes poner todo el código c que quieras y hacer que haga lo que quieras.

Hay versiones gratuitas y de código abierto de Coldfusion disponibles y es fantástico para hacer llamadas Java y .NET ingenuamente desde una base de código. Compruébalo, realmente creo que podría ser la mejor opción ya que está hecho para este tipo de soluciones corporativas.

Sé que PHP también puede ser bastante bueno para esto, dependiendo de su situación, y estoy seguro de que Asp.net no se queda atrás.

Mi trabajo en varios idiomas ha implicado solo una simple combinación de C # y C ++ / CLI (es como C ++ con .NET si no has oído hablar de él). Creo que vale la pena decir que la forma en que .NET y Visual Studio le permiten combinar muchos idiomas diferentes significa que no tendrá una sobrecarga tan alta como normalmente esperaría al combinar dos idiomas: Visual Studio lo mantiene todo juntos. Dado que hay muchos clones .NET de varios idiomas (F #, IronPython, IronRuby, JScript.NET, por ejemplo), Visual Studio es una muy buena forma de combinar varios idiomas.

Hasta el nivel técnico que suena como lo que le interesa, la forma en que se hace en Visual Studio es que debe tener un proyecto para cada idioma por separado, y cada proyecto se compila en un ensamblado, lo que básicamente significa que se convierte en un biblioteca para los otros proyectos a utilizar. Tendrá un proyecto principal que controla todo y llama a las otras bibliotecas. El requisito de que cada idioma diferente tenga que ser un proyecto diferente significa que no cambiaría los idiomas a nivel de método, pero si está haciendo una aplicación lo suficientemente grande como para poder separarlo lógicamente en múltiples proyectos, en realidad puede ser bastante útil. En particular, la separación y la abstracción pueden facilitar las cosas en general.

Estás diciendo que las opciones son: a) escribir todo en un idioma y perder eficiencia, o b) improvisar un montón de ejecutables diferentes para usar el mejor idioma para cada sección del trabajo.

La mayoría de los programadores que trabajan seleccionan la opción c: hacen lo mejor que pueden con los idiomas que sus departamentos de TI admiten en producción. En general, los programadores tienen algunas opciones de lenguaje limitadas dentro de un marco particular, como JVM o CLR, por lo que no se trata de la utopía de la caja de herramientas ni del gueto de monolenguaje.

Incluso LAMP y Rails admiten (exigen, realmente) diferentes idiomas en diferentes niveles: HTML, Javascript, Ruby, C en el caso de Rails. Si está escribiendo servicios de software (que es donde está sucediendo la mayor parte del trabajo interesante en estos días), casi nunca está escribiendo en un solo idioma. Pero tus elecciones tampoco son infinitas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top