¿Existen algunos tipos de software que no pueden ser desarrollados por los principales lenguajes de programación?

8

Me gustaría saber si algunos de los principales lenguajes de programación no se pueden usar para crear algunos tipos de software muy específicos.

Por lenguaje de programación principal me refiero a los gustos de C ++, C #, Java, Ruby, Python. Por "no se puede desarrollar" quiero decir que no se puede desarrollar o no es realista hacerlo debido al rendimiento, la dificultad de implementación, etc.

Siempre he pensado que cualquier lenguaje de programación podría usarse para resolver cualquier problema, pero últimamente he estado pensando que algunos lenguajes no son adecuados para algunos proyectos.

Si puede proporcionar ejemplos de tales aplicaciones, se lo agradeceríamos. Gracias.

mbillard
fuente
15
Ser inadecuado para una tarea y no poder realizar una tarea son dos cosas muy diferentes.
Covar
@ Covar, acabo de cambiar taska project. Espero que sea menos confuso.
mbillard
¿Conoces el concepto de equivalencia de Turing?
1
Relacionado (con la pregunta de qué tan adecuados son algunos idiomas para casos específicos): paulgraham.com/avg.html
Doc Brown

Respuestas:

13

Los lenguajes de nivel superior, especialmente los que no proporcionan ningún medio para jugar con la memoria directamente (de su lista: Java, Ruby, Python) no son adecuados para la programación de sistemas. Para dar ejemplos concretos, no implementaría (parte de, por ejemplo, un controlador) un sistema operativo o una máquina / intérprete virtual en Python.

Lo inverso no es tan cercano a "imposible", pero escribir, por ejemplo, scripts de utilidad o un prototipo de software complejo y complicado, como un compilador en, por ejemplo, C ++ (doblemente en C) puede ser tan engorroso que se convierte en un factor decisivo, teniendo en cuenta que obtienes muchas cargas más pequeñas además del problema real.


fuente
Todavía se puede hacer; consulte, por ejemplo, jnode.org, que es un sistema operativo escrito en Java.
1
@ ThorbjørnRavnAndersen Sí, tales proyectos de investigación aparecen de vez en cuando. Sin embargo, están muy lejos de los proyectos del mundo real. Y si intenta implementar, por ejemplo, la administración de memoria en Java (o Python, o cualquier otro lenguaje administrado por memoria), debe restringir severamente el idioma y terminar con algo que está muy lejos del código idiomático, o tiene que implementar muchos extensiones (cf. el marco GC de PyPy y el MMTK de Jikes RVM).
7

Absolutamente, todo depende del hardware subyacente.

Por ejemplo, si fuera a programar el telar Jaquard , no podría usar C ++ para hacerlo porque no existe un compilador para ese hardware. Yo diría que ningún compilador sería posible porque el hardware no admite muchos de los requisitos que C ++ requeriría para funcionar como lenguaje.

Una extensión de esto es el mundo de las computadoras analógicas que funcionan de una manera completamente diferente a las digitales que prevalecen en la actualidad.

Sin embargo, podría considerar que, con el tiempo suficiente, podría encontrar un compilador / ensamblador para cualquier máquina von Neumann (entrada-> procesador / almacenamiento-> salida). Pero algunas máquinas von Neumann, como la MU0 , son demasiado simples para permitir que se ejecute. Más información sobre MU0 para el lector interesado .

Gary Rowe
fuente
55
Sí, sin embargo, si el telar Jaquard podría simular una máquina Turing, entonces podría escribir un compilador de C ++ para él, si así lo deseara.
cuál es
2
@whatsisname, la equivalencia de Turing solo es interesante si el tiempo utilizado no es un problema.
Además de la equivalencia de Turing, también existe el problema de E / S: ¿tiene un mecanismo para comunicarse con el mundo exterior durante la ejecución? Si no, el lenguaje es como un cerebro en una tina . Si tiene al menos un método de entrada y un método de salida, al menos puede hacer un raspador de pantalla para él.
rwong
6

Sí, hay ciertas cosas que no se pueden hacer con varios idiomas. Estos son algunos de los principales criterios que afectan eso:

  • Nivel bajo : los controladores de dispositivos y los módulos de control de hardware pueden requerir acceso a ubicaciones de memoria específicas e instrucciones de ensamblaje. Si el idioma no proporciona una forma de hacerlo, simplemente no puede usarlo (muy pocos ofrecen ubicaciones y ensamblajes de puntero personalizados)
  • Rendimiento : en algunos casos, no se trata solo de tomar mucho tiempo, si tiene una alimentación de datos continua o en vivo, no tiene más remedio que ser lo suficientemente rápido como para procesarla en tiempo real.
  • Binario : para la producción comercial, sus requisitos pueden ser distribuir solo binarios, muchos lenguajes tipo script no tienen formas binarias.
  • Memoria : para dispositivos integrados y de tamaño reducido, tiene una cantidad muy limitada de memoria (u otros recursos). Los lenguajes que necesitan VM o bibliotecas estándar grandes no podrían dirigirse a una máquina de este tipo.
  • Tiempo real : además de ser lo suficientemente rápido, ciertos dispositivos necesitan responder a eventos dentro de un marco de tiempo garantizado basado en un evento determinado. Un lenguaje necesitaría tanto soportar el evento como garantizar el tiempo de procesamiento (algo como un recolector de basura evitaría esto).
  • Matemáticas : muchos cálculos requieren una biblioteca completa de funciones matemáticas y tipos de datos apropiados. A menudo esto requiere detalles de implementación específicos. Algunos lenguajes de secuencias de comandos pueden no especificar esto lo suficientemente bien o no pueden proporcionar funciones clave.
  • Compatibilidad : algunos hardware simplemente no tienen compiladores / intérpretes para ciertos idiomas.

Esas son algunas de las cosas que se me ocurren. Estoy seguro de que hay más. Pero el punto importante es que sí, existen requisitos limitantes clave que impedirán el uso de un idioma.

edA-qa mort-ora-y
fuente
1
Muchos de estos problemas no son inherentes al lenguaje, pero son problemas con nuestras implementaciones actuales.
cuál es
1
@whatsisname: hasta cierto punto, pero diferentes idiomas se prestan a diferentes implementaciones. Además, algunos lenguajes no pueden optimizarse tanto como otros, el ejemplo clásico son las rutinas matriciales donde las implementaciones de Fortran podrían optimizarse de manera mucho más agresiva que las restrictimplementaciones previas .
David Thornley
La recolección de basura se puede (y se ha hecho) en tiempo real.
SOLO MI OPINIÓN correcta
4

Siempre he pensado que cualquier lenguaje de programación podría usarse para resolver cualquier problema, pero últimamente he estado pensando que algunos lenguajes no son adecuados para algunos proyectos.

Sí, eso es correcto y siempre lo ha sido. "Incapacidad" e "Inadecuado" son muy diferentes.

Podrías clavar un clavo en una tabla con el extremo de un destornillador. Podrías meter un tornillo con el borde de un martillo. Pero el martillo es mucho más adecuado y es una mejor herramienta para golpear clavos, y un destornillador es una mejor herramienta para sujetadores roscados.

Los lenguajes de programación son herramientas. Ciertas herramientas son mejores en ciertas tareas.

whatsisname
fuente
1

Lo único en lo que puedo pensar que no es realista es el desarrollo de controladores de dispositivos de bajo nivel en un lenguaje altamente virtualizado como Java o C #: si está tratando de manipular hardware, la VM más increíble (que hace que tantas cosas sean tan agradables y simple) se interpondrá en tu camino. Estoy seguro de que se podría hacer, si REALMENTE quisiera, pero implicaría muchas adaptaciones de VM para que funcione.

Cualquier otra cosa se puede hacer prácticamente en cualquier idioma que desee.

Michael Kohne
fuente
1

Sistema integrado viene a la mente. No es realista programar un enrutador, por ejemplo, o algún tipo de robótica usando un lenguaje como C #. Aunque hay proyectos como netduin aprovechando el micro marco, por lo que puedo haber refutado mi propio punto.

aceinthehole
fuente
1
No es necesariamente poco realista usar C # para un enrutador o robótica. Si puede reducir el tiempo del programador con C #, puede hacer que el aumento de las necesidades de cálculo valga la pena. Eso se aplica a cualquier idioma / entorno.
cuál es
@whatsisname: Por supuesto, los enrutadores muy serios están programados en VHDL. :-)
Zan Lynx
0

Los llamados lenguajes 4GL están limitados por el entorno de programación al que están obligados. No podría programar una GUI con ABAP, por ejemplo. Todo lo que se puede hacer es como una GUI en el entorno limitado de un cliente SAP (y esto solo puede ejecutarse conectado a una instancia de SAP).

Ingo
fuente