¿Por qué no puede haber un lenguaje de programación "universal" que sirva para todos los propósitos? [cerrado]

57

¿Por qué no combinar las mejores características de todos los lenguajes de programación existentes y adaptarlo a un lenguaje de programación universal?

killown
fuente
23
El término "mejor" es subjetivo, por lo que nunca tendría un mejor aceptado universalmente. Por supuesto, hay bastantes idiomas que son adecuados para una amplia gama de desarrollo en todas las plataformas. C ++ y Java son los dos principales.
GrandmasterB
55
@GrandmasterB Olvidó C #
Daniel Little
15
Hay, se llama 'C'
Martin Beckett
99
nosotros como especie tenemos una habilidad innata para estar en desacuerdo (en virtud de nuestra individualidad), por lo tanto, nunca estaremos de acuerdo en lo que se requiere universalmente, y por lo tanto nunca habrá uno (¡al menos uno creado por humanos!)
Nim
99
¿Un lenguaje de programación universal? ¿Quieres decir, análogo al lenguaje humano universal al que todos cambiaron hace tantos años?
Kyralessa

Respuestas:

116

Por la misma razón, no usas una navaja suiza para tallar un pollo ...

http://upload.wikimedia.org/wikipedia/commons/thumb/4/48/My_swiss_army_knife.JPG/800px-My_swiss_army_knife.JPG

La navaja suiza generalmente tiene una cuchilla, así como varias herramientas, como destornilladores y abrelatas y muchas otras. Estos accesorios se guardan dentro del mango del cuchillo a través de un mecanismo de punto de pivote ...

El diseño del cuchillo y su flexibilidad han llevado al reconocimiento mundial ...

mosquito
fuente
26
Por la misma razón, no traes una minivan a una carrera de resistencia. Por la misma razón, no traes una pistola de agua a un duelo.
Chris
20
@ Chris ¿Qué pasa si se trata de un duelo con una pistola de agua?
Rusty
44
Por la misma razón, nunca entras con un siciliano cuando la muerte está en juego.
Oxidado
66
Si tuvieras una navaja suiza que hiciera todo lo necesario para construir una casa, ¿sería bueno para alguno de ellos?
Brad Mace,
44
Esta respuesta es una analogía horrible. Tal vez si hubiera escrito: como el idioma francés permite una fidelidad de expresión diferente que el idioma inglés, podría haberme gustado más la analogía. Pero los lenguajes de computadora no son 'cosas', ni lenguajes humanos. La respuesta correcta es: no lo sabemos. Requerirá más información sobre cómo los humanos expresan la lógica y cómo llegan a este punto. Además, algunos idiomas son 'metalenguajes', capaces de expresar otros DSL. ¿Deberíamos incluir esto en su pregunta?
Dibbeke
80

Porque

  1. nadie quiere reescribir todo el código heredado.
  2. Es difícil acordar todos los propósitos.
  3. Una vez que reúna una lista completa de propósitos, cambiarán antes de que pueda construirla.
  4. Alguien comenzaría un idioma completamente diferente debido a un nuevo propósito.
  5. Microsoft
  6. manzana
  7. Fuente abierta
  8. ¿Qué haríamos con todos los peces Babel?
  9. Ni siquiera pudo hacer que SQL sea universal.
revs JeffO
fuente
Te detuviste en seco. Esperaba una de esas listas de "Top 10" serias de ja-ja-solo-serias.
Jeffrey Hantin
44
+1 por prevenir, al menos por ahora, una campaña de "Save the Babel Fish" Malditos hippies.
Oxidado
2
En cuanto al Babel Fish, ¡haz sushi!
Muad'Dib
1
Con respecto al punto 1, todo el código heredado eventualmente tendrá que reescribirse de todos modos usando la última moda en código / bibliotecas o no podrá ejecutarse de manera efectiva sin una cantidad ridícula de costos de soporte.
Michael
38

Lo que tienes en la programación es un dominio de problemas muy grande. Este dominio varía extremadamente y en muchas direcciones.

Es por eso que los controladores de vuelo integrados están escritos en C y los sitios web están escritos en PHP, Java, Rails, .NET y una gran cantidad de otros.

Para el controlador de vuelo incorporado, tengo alrededor de 128k de memoria para trabajar y, además, si mi código recibe una excepción no controlada, el avión se estrella, 200 personas mueren y me demandan por un monto de $ 1B, y tengo que enviar ingenieros a cada aeropuerto en el mundo para arreglar aviones que están en tierra perdiendo a mis clientes $ 10M / día. Tengo que trabajar con un lenguaje que es muy estricto y tiene un pequeño número de partes móviles que podrían salir mal.

Para mi aplicación web tengo varios GB de memoria para trabajar, pero la velocidad de la red es limitada (en menor grado todos los días, pero este es probablemente el límite más grande de la web). Buscaré un lenguaje que me brinde un montón de funciones y produzca resultados que puedan transmitirse lo más rápido posible. Realmente no me importa si mi sitio se cae, tal vez pierda algunas ventas ($ 100) y tenga que parchear el caso de uso que bombardeó, no es gran cosa.

Los sitios web no se han escrito en C durante más de 15 años (¿alguien hace alguna secuencia de comandos cgi?) Y, que yo sepa, los controladores de vuelo recién ahora comienzan a mirar C ++, pero aun así de una manera muy restringida.

Bill Leeper
fuente
3
La mayoría de los sitios que realmente ganan dinero perderán más de $ 100 si experimentan un tiempo de inactividad significativo. No es para sugerir que es comparable a una situación de vida o muerte, pero aún así, esto está minimizando el riesgo más que un poco.
Aaronaught
3
¿Tienes idea de lo flakey que es Facebook? Recientemente publicaron que empujan el código cada 37 minutos. Su sitio está constantemente alterado de una forma u otra y tienen un millón de tickets en su cartera de pedidos. El punto es que con la web nadie va a morir, "podría" perder algunas ventas, pero en general no hay mucho riesgo. La mayoría de los problemas que enfrenta solo afectarán a unos pocos clientes, no a toda la base
Bill Leeper,
24
  1. Ve a tu garaje (o al garaje de tus padres).
  2. Abre la caja de herramientas.
  3. Si ve más de una herramienta, piense cómo se aplica eso a su pregunta.

Si no tiene una caja de herramientas, o solo tiene uno de esos pequeños martillos con las puntas de destornillador en el mango hueco, entonces tengo una gran simpatía por usted.

Seriamente. Si va a una tienda de autos, ¿tiene su mecánico una sola herramienta para hacer todo en su caja de herramientas? Él (o ella) es un profesional, con herramientas de grado profesional específicamente diseñadas para realizar diversas tareas de reparación de automóviles.

Del mismo modo, los desarrolladores de software profesionales deben poseer un conjunto suficiente de herramientas para realizar su oficio. Si abre su caja de herramientas y ve solo [el equivalente de software de] un destornillador Philips, entonces no puede considerarse un profesional.

Puede girar un perno con una llave de boca abierta, una llave de caja, una llave de trinquete o una llave ajustable. Incluso puede girar un tornillo en una pizca con alicates de junta deslizante, torpemente, con daños menores a severos. Pero es bastante difícil girar un tornillo con un martillo.

brettmjohnson
fuente
Eso es por incluir el "garaje de los padres". Eso realmente lo aclara, ya que no tengo un garaje.
Dan Rosenstark
55
Una mejor analogía sería que un lenguaje es como una caja de herramientas en lugar de una herramienta individual.
Tom Hawtin - tackline
44
Puede haber 20 herramientas diferentes en la caja. Pero apuesto a que solo necesitas un idioma para describirlos.
ThomasX
2
En estos días, la caja de herramientas se parece más a las bibliotecas disponibles para el idioma en cuestión.
Michael
18

Un tipo diferente de respuesta para los demás: de hecho, creo que existe la posibilidad de que un idioma se convierta en uno "universal", permitiendo las características y paradigmas de muchos otros idiomas, aunque quizás no sea un lenguaje estrictamente diseñado en el que pueda estar pensando.

Para usar la analogía de brettmjohnson anterior, la idea de que cada lenguaje de programación es la herramienta dentro de una caja (o en una navaja suiza) es la suposición que todos están haciendo, pero es realmente una suposición defectuosa.

¿Qué pasa si el lenguaje de programación era la caja de herramientas?

Quiero decir, ¿qué pasaría si pudieras agregar y eliminar funciones del idioma como desees, y tener tu propia caja de herramientas con las herramientas que necesitas, incluso si las herramientas son para diferentes propósitos?

El concepto ya existe parcialmente. Por ejemplo, idiomas como Nemerle le permiten agregar sintaxis al idioma y, como tal, puede tomar "la mejor característica del idioma X" y agregarla a Nemerle (o la suya propia). Esto tampoco significa necesariamente escribir sus propias macros todo el tiempo: cada idioma (o paradigma) podría definirse dentro de una macro en una biblioteca estándar, de manera tal que usted pueda import Haskell; import Prolog;, y comenzar a escribir los dos idiomas como si fuera parte de ¿tu lenguaje?

La pregunta entonces es: ¿cómo obtiene las características de diferentes lenguajes / paradigmas para trabajar entre sí? Si bien no puedo responder eso, los marcos como .Net y JVM ofrecen algunas de las soluciones: los lenguajes son al menos parcialmente compatibles debido a la forma en que se compilan. Puede tomar cualquier código escrito en C #, por ejemplo, y usarlo desde F # sin quejas.

El 'problema' con la solución tal como es hoy en día, es que usar estos lenguajes juntos requiere que los cree como proyectos separados, que no pueden referenciarse entre sí, solo puede tener una referencia de 1 vía. La barrera del idioma es que cada proyecto compila todos sus archivos por separado en Common Intermediate Language antes de que cualquier otro proyecto pueda acceder a él.

Un paso hacia la eliminación de esa barrera sería permitir que el código de diferentes lenguajes (por ejemplo, C # y F #) se compile dentro del mismo proyecto. En teoría, podría compilar cada archivo por separado (o en grupos, si tienen tipos parciales o referencias circulares), y luego compilar archivos de un idioma diferente que pueda acceder a los objetos ya compilados (CIL). Sin embargo, necesitaría definir estrictamente el orden de compilación para que esto funcione, pero el orden de compilación ya es necesario en el caso de F #.

De todos modos, no estoy diciendo "definitivamente puede haber un lenguaje universal". Estoy sugiriendo que existe el potencial para una interoperabilidad mucho mejor entre los idiomas que lo que existe actualmente. En realidad, no es probable que mejore mucho muy pronto, solo por la gran cantidad de trabajo que implica implementar un lenguaje y las bibliotecas, las herramientas, etc. necesarias para usarlo.

Mark H
fuente
44
Todo el mundo no es una PC. La mayoría de los procesadores en este planeta tienen menos de 64K bytes de espacio de memoria total. Un lenguaje que se puede usar en estos procesadores debe reducirse tanto de los que la mayoría en este foro parece usar que su lenguaje universal terminará como un lenguaje ensamblador mejorado. Creo que eso se llamaría "C".
uɐɪ
10

Las mejores características de algunos idiomas entran en conflicto con las mejores características de otros.

Por ejemplo: las reflexiones con reconocimiento de texto es una característica realmente agradable, pero no valdría mucho en un lenguaje mecanografiado libremente, pero el mecanografiado suelto también puede ser un beneficio real a veces.

Incluso dentro de un idioma, no siempre puede usar todas las mejores funciones al mismo tiempo porque entran en conflicto entre sí.

Cuenta
fuente
pero si esta función se habilitó / deshabilitó de acuerdo con las necesidades, por ejemplo: podría habilitar reflexiones de
reconocimiento de texto
2
y si intentara combinar un montón de funciones de idiomas en un idioma que pudiera hacer cualquier cosa, obtendría mucha redundancia, confusión, errores de todas las diferentes formas de usar diferentes combinaciones de funciones, y muchas esfuerzo desperdiciado que especifica qué paradigma está utilizando en esta línea.
Es cierto que tiene razón, pero resolver el problema haciendo que el lenguaje sea ultraconfigurable hace que el lenguaje sea difícil de usar como describe Fennic. Me gusta un lenguaje flexible que permita cosas, incluso si son peligrosas en algunos casos, pero el nivel de configuración que necesitaría para combinar algunos conceptos lo haría más complejo que simplemente retroceder y escribir la solución en C de bajo nivel o algo así. .
Bill
1
+1 por características conflictivas
Frank Shearar
Creo que el problema no es solo que las características del lenguaje entren en conflicto, sino que muchos lenguajes asumen un marco subyacente que incluye características que imponen un cierto nivel de sobrecarga, pero que permiten simplificar ciertas operaciones. Los idiomas también suelen tener ciertos 'patrones de uso típicos' asociados con ellos. La selección de qué características deben incluirse en un marco y qué patrones de codificación deben emplearse implica compromisos; y diferentes combinaciones de características y patrones son mejores para diferentes aplicaciones.
supercat
7

"Jack de todos los oficios, maestro de nada." viene a la mente.

Algunos programas requieren velocidad, otros grandes cantidades de memoria o acceso rápido al disco. Algunos idiomas son buenos en uno, pero malos en otro: no creo que obtenga un idioma que sea bueno en absoluto.

Por lo tanto, si bien puede escribir prácticamente cualquier programa en cualquier idioma, no se garantiza que lo que obtenga sea el "mejor" programa que podría escribir para resolver ese problema.

ChrisF
fuente
4

Ahi esta. Ninguna herramienta es la mejor de todo, pero algunas herramientas como muchos lenguajes de programación sirven a todos los efectos, no mejor para todos.

Puede elegir la mejor herramienta para el trabajo, pero existen lenguajes de programación que pueden utilizarse para todos los propósitos y puede elegirlos. No lo recomiendo pero es posible.

revs bigown
fuente
4

Por algo que yo llamo la "paradoja de generalización / especialización", que probablemente tiene otro nombre y realmente no es una paradoja

Cuanto más generalizado es un lenguaje de programación, más código se necesita para lograr algo. Cuanto más especializado sea el idioma, menos podrá lograrlo.

Homde
fuente
2
Estoy de acuerdo con usted, excepto que es posible tener bibliotecas especializadas en un idioma generalizado.
dan_waterworth
@dan: De acuerdo, pero solo si el lenguaje se centra en proporcionar funciones a los escritores de la biblioteca. Mis dos idiomas favoritos son D y Python. Ambos son lenguajes bastante generalistas (especialmente D), pero ambos tienen muchas características para los escritores de bibliotecas, por lo que puede crear sus propias bibliotecas para manejar las cosas especializadas. Me desprecian lenguajes específicos de dominio súper como Matlab y R.
dsimcha
4

Los idiomas dan forma a la forma en que la gente piensa. Esto es cierto para los idiomas naturales. Si un niño solo conoce un idioma con los números "uno, dos, muchos", enseñarle matemáticas es ... difícil. (Lo siento, no tengo el enlace) En inglés hablamos de diferentes épocas como si fueran lugares, de ahí que el concepto de viaje en el tiempo sea posible de imaginar. En algunos otros idiomas, la idea del viaje en el tiempo nunca se le ocurriría a sus hablantes.

Esto también es cierto para los lenguajes de programación.

Por lo tanto, si tenemos un solo lenguaje de programación, todos pensarán en todas las tareas computacionales exactamente igual. Por lo tanto, no exploraremos alternativas, y la mejor manera de hacer algo permanecerá sin descubrir.

Lo más parecido que tenemos a un lenguaje universal es C. C se asigna muy de cerca a los conceptos de hardware subyacentes (cómo se hacen realmente las cosas en hardware) y los programas en cada * lenguaje son convertibles a C. (Vea cómo CFront usó los compiladores de C para ensamblador tareas) El problema con C es básicamente que las conversiones mencionadas anteriormente no tendrían sentido desde la perspectiva de los programadores de C.

Las "Lambdas" siempre fueron posibles en C. La sintaxis está desactivada, incluido el código extendido por todo el proyecto / archivo, por lo tanto, no era una solución preferida. Con una versión no-capture / upvalue / etc, defina una función en otro lugar y pase un puntero a la función. (vea qsort () ) Para usar lambdas con valores capturados, la cantidad y complejidad del código que tiene que escribir aumenta mucho, por lo que sé, nadie escribió el código para usar este método de programación en C. A diferencia de los idiomas donde las lambdas son parte del idioma, y ​​básicamente se usan en todas partes.

La principal diferencia entre C y C ++ es cómo puede pedirle a C ++ que se encargue de las cosas por usted; pero ya no puede ver, desde una sola línea de código, cuánto realmente le está pidiendo. La respuesta es: depende (de todo este otro código).

Algunos lenguajes de programación son excelentes para tareas específicas, pero donde la mayoría de los programas actuales en uso en todo el mundo simplemente no tendrían sentido si se programan en ese lenguaje. Es decir, si el lenguaje podría usarse para implementar ese programa, eso no es un hecho.

MaHuJa
fuente
2
"En algunos otros idiomas, la idea del viaje en el tiempo nunca se le ocurriría a sus hablantes". Cita necesaria. La hipótesis de Sapir-Whorf no es ampliamente aceptada, especialmente en su forma fuerte.
Muhammad Alkarouri
4

¿La imposibilidad por méritos técnicos de tener un lenguaje universal? Eso es una tontería total. Usted podriatener un lenguaje universal que cubra todas las bases. El problema es principalmente histórico: se inventaron diferentes idiomas para hacer diferentes cosas y ser utilizados en diferentes comunidades. Muchos de ellos estancados. Agregue a esas preferencias (vi! Emacs! Espere, me refiero a Java! C #, espere me refiero a Microsoft, código abierto, etc., etc.) e incrustación general de accidentes históricos ... Mire los lenguajes naturales en una tierra pequeña masa como algunos países europeos para ver cuán loco puede volverse este tema. Algunas ciudades tienen su propio orgullo y alegría, un pequeño dialecto que solo ellos hablan. Las naciones y las comunidades de programación no son tan diferentes, ni las comunidades de programación son más racionales. Si lo fueran, todos hablaríamos esperanto y programaríamos en Universal algo 'algo' ...

Yar
fuente
1
El problema es más profundo que eso. Cuantas más opciones haya disponibles, más se debe especificar explícitamente en lugar de ser la única forma implícita de que las cosas funcionen en ese idioma. Los problemas se vuelven más obvios si, en lugar de comparar Java con C #, compara Java con Prolog. Tener las características de ambos en un idioma complicaría la sintaxis del lenguaje compuesto. Una opción más razonable puede ser reducir la sintaxis al mínimo y permitir que cualquier característica se implemente como una biblioteca de metaprogramación. Eso es básicamente lo que hace Lisp, aunque su núcleo no es lo suficientemente bajo para algunos trabajos.
Steve314
4

Es un error pensar que "combinar todas las funciones" mejorará el lenguaje.

Es más probable que termines con un desastre hinchado, complejo e ilegible.

Un buen diseño de lenguaje requiere elección y compensaciones para hacerse. Podría decirse que los lenguajes mejores / más revolucionarios / más exitosos son los que sacan algo y proporcionan una mejor alternativa en lugar de agregar cosas nuevas.

  • Lenguajes de programación estructurados (C, Pascal): saca "goto", lo reemplaza con procedimientos y bucles estructurados, etc.
  • Java: elimina la "gestión de memoria manual", la reemplaza por GC / memoria gestionada
  • Haskell / Clojure: elimina el "estado mutable no controlado"
  • Lisp: extrae la mayoría de las "sintaxis de lenguaje" y las reemplaza con un árbol homoicónico flexible de expresiones s

En este top hay una gran charla del tío Bob Martin: el último lenguaje de programación

mikera
fuente
"Lenguajes de programación estructurados (C, Pascal): saca" goto ", lo reemplaza con procedimientos y bucles estructurados, etc." - Lo siento, te equivocas allí: C tiene goto. Pero me gusta el resto de la respuesta. Lo principal que hace C es dejar que no te importe exactamente dónde está todo en la memoria y qué hay en qué registro a qué hora, y oculta el contador del programa (en términos de la dirección precisa en la que se encuentra, nuevamente. Puedes moverlo en casi un nivel de precisión de montaje con un goto).
Wyatt8740
0

No hay ninguna herramienta que tenga todas las mejores características. Por ejemplo, una buena característica de Javascript y Scheme es que son pequeños, así que si comienzas a empaquetar características, ya has perdido en este.

Aún así, Cobra parece prometedor en la dirección de tener todas las características agradables de otros idiomas. :-)

Andrea
fuente
0

Porque si creas ese idioma, será otro idioma más. Es posible que obtenga una gran base de fanáticos, pero todos los demás idiomas seguirán existiendo.

C todavía existe a pesar de que se inventaron muchos lenguajes nuevos desde entonces.

Se podría decir que Python es un lenguaje tan universal, pero también está Ruby.

La razón por la que hay muchos idiomas es simplemente porque hay muchos programadores y a algunos de ellos les gusta crear nuevos lenguajes.

La razón por la que no hay un único lenguaje universal en el que todos estén de acuerdo es que la programación como oficio no está dictada por alguna institución que tome la decisión. Todos son libres de hacer lo que quieran.

Eso es bueno.

Hasen
fuente
También diría que no es ni bueno ni malo, sino más bien un hecho del hecho de que la ingeniería de software no tiene ni cien años, y es muy inmadura en comparación con cualquier otro tipo de ingeniería existente.
Michael
0

Con todo lo que se ha escrito hasta ahora, es difícil agregar muchas razones nuevas, pero agregaré algunas.

  • Evolución: no son solo los sistemas biológicos los que se introducen, mutan y se someten a una competencia por la supervivencia del más apto para obtener recursos y un nicho para llamarlo propio. La competencia es buena y empuja las cosas hacia adelante.

  • Madurez: Hemos estado haciendo lenguajes de computadora durante probablemente menos de un siglo. Todavía no podemos tener la respuesta porque aún no sabemos todas las preguntas.

  • Génesis separada: no estoy seguro de la palabra correcta para esto, pero en el mundo hay muchos sistemas de escritura que comenzaron en muchas regiones geográficas. Piense en Cuneiform que fue dictado en parte por las demandas de tallar en tabletas de arcilla. Piense en los alfabetos sánscrito, griego, hebreo, romano y árabe. Jeroglíficos, el método chino de escritura hermosa con más de 6000 símbolos que se comparte en muchos países del este de Asia. Piense en alfabetos mixtos más modernos con bases fonéticas como cirílico, katakana e hirigana. No soy lingüista, así que no llame las imprecisiones con demasiada dureza, pero cuando las culturas de todo el mundo necesiten algo, lo crearán y lo harán suyo por necesidad. Los lenguajes informáticos aparecieron cuando había mucha comunicación mundial y, como los sistemas imperial y métrico, provenía de lugares con poderosas ideas de liderazgo. Pero los lenguajes de programación sirven a muchas culturas diferentes (algunas de ellas corporativas), por lo que reflejan a las personas que las crearon. Los lenguajes de computadora vienen con legados culturales que moldearon su diseño y uso. En la cultura del kernel del sistema operativo, es poco probable que C y C ++ sean desaprobados pronto para Java (o al revés) porque permiten la generación de código nativo, un acoplamiento cercano / eficiente con el hardware para crear capas de abstracción de hardware y tienen una base instalada considerable.

  • Diseño de diseño: los lenguajes de programación surgen utilizando diferentes paradigmas organizacionales. COBOL y Ada eran de comités que formaban parte del DOD que tenían mucha jerarquía. Si recuerdo correctamente, C, C ++, Java y probablemente muchos otros provienen de uno o un pequeño número de diseñadores. Fred Brooks compara los resultados del comité con los enfoques basados ​​en visionarios en su artículo, el Diseño de Diseño (http://www.youtube.com/watch?v=pC-DlX-PaF4). Si nos sentamos hoy para seleccionar un Da Vinci o un comité para definir el lenguaje de programación universal, ¿sabríamos quién o qué por qué método debería ser diseñado?

DesarrolladorDon
fuente
0

Tal vez un poco diferente en todo esto:

¿Qué es un idioma? Para ser ridículamente simple, es vocabulario, sintaxis y semántica.

¿Qué es lo primero que haces con un lenguaje de programación?
Usted define cosas (clases, variables, métodos), extiende el vocabulario y la semántica.

¿Por qué? Así que ahora puedes decir cosas que antes no podías decir.
Te guste o no, has creado un nuevo lenguaje de propósito especial.

En mi humilde opinión, lo que debe buscar en un lenguaje de propósito general es si facilita la creación de lenguajes de propósito especial.

Mike Dunlavey
fuente
0

Aparte del argumento de la navaja suiza (que tiene un punto, es más difícil diseñar un buen lenguaje de amplio espectro que uno específico de dominio), pero eso no significa que dicho lenguaje no sea a la vez posible y una buena idea), hay problemas con "combinar las mejores características":

  • Para las características del lenguaje, "mejor" es subjetivo, o al menos (interminablemente) discutible.
  • Algunas características no son compatibles; una buena característica de un idioma puede explotar cuando se combina con una buena característica de otro.
  • Aún no hemos terminado con las nuevas características.

En resumen, el diseño del lenguaje es más difícil y más complicado que eso. Aunque, es posible que desee echar un vistazo a Scala .

3 revoluciones
fuente
-2

Hay un lenguaje de programación universal. Se llama "lenguaje de máquina" y todo en cualquier otro lenguaje de computadora se ejecuta en última instancia como lenguaje de máquina.

Cómo se ve? Una cadena de 0-9 y AF.

Pero es una perra para usar. Entonces, Alan inventa un lenguaje que se puede traducir al lenguaje de máquina y es más apropiado para lo que Alan quiere hacer. Bill inventa un lenguaje diferente para lo que Bill quiere hacer. En poco tiempo tienes Cobol y Fortran y Lisp y Java. Todos ellos son solo versiones simplificadas del lenguaje de máquina, más fáciles de escribir ciertos tipos de programas pero más difíciles, o imposibles, de escribir otros tipos de programas. Uno es bueno para la contabilidad, otro es bueno para controlar el transbordador espacial.

Andy Canfield
fuente
66
El lenguaje de máquina no es universal; ni siquiera cerca. Cada máquina tiene su propio idioma.
Hasen
3
Además, no es una cadena de 0-9 y AF. Es de 1 y 0.
David Conrad
@hasen @David ¿no es razonable sugerir como @Andy tiene que cada idioma es, desde un punto de vista, un idioma específico de dominio, construido en otros idiomas?
Armand
Dije 0-9 y AF porque eso era lo que tenía que saber para usar los códigos de punzonado múltiple en una máquina de golpe de teclado. Parece 0-1 o 0-15 o 0-255 si lo toma como números, dependiendo de qué tan grande sea un trozo a la vez. Y hansen tiene razón; cada TIPO de máquina tiene su propio idioma. Casi todas las PC de hoy aceptan códigos 80386; incluso mi teléfono lo hará! Pero el iPad no lo hará.
Andy Canfield
@hasenj y con características muy diferentes. La mentalidad requerida para programar un 6502 es diferente de programar un x86 y, a su vez, diferente de un chip RISC. Muy lejos de ser universal.
-2

Simplemente porque,

no hay una computadora UNIVERSAL.

No es una plataforma UNIVERSAL.

no es un programador UNIVERSAL.

y ni siquiera un cliente UNIVERSAL.

:PAGS

Entonces, simplemente necesitamos uno diferente para uno diferente. ;)

necixy
fuente
-2

La mayoría de las respuestas aquí se centran en usar la mejor herramienta para cada problema. No creo que esta sea una buena razón.

Si busca empresas grandes, generalmente la empresa tenderá a utilizar un solo (o un pequeño número) de idiomas y tecnologías, incluso si para un proyecto específico hay un idioma mejor.

Esto se hace porque los beneficios que surgen de la estandarización mejorada, el soporte más fácil, el intercambio de código, etc. son (la mayoría de las veces) mayores que el valor agregado de un lenguaje específico.

Ophir Yoktan
fuente
1
Nunca he visto ningún proyecto corporativo decente que use menos de 4 idiomas diferentes. Y no creo en ninguno de esos "beneficios" de seleccionar herramientas no aptas. Nunca funciona
SK-logic
-3

Creo que todas las respuestas "porque no tallas estatuas con un lápiz" están perdiendo el punto.

¿Quién aquí, REALMENTE selecciona un idioma antes de cada nuevo proyecto?

La verdad es que solo necesitamos unos pocos lenguajes de programación, y el mundo de la programación estaría mejor así: las personas se centrarían en mejorar el lenguaje de programación en lugar de estar dispersos en python / ruby ​​/ perl / younameit, por ejemplo.

C # está programado en / para Windows (está bien, hay Mono, ¿alguien ejecuta un C # en la aplicación Mono todos los días?) Y eso hace que los usuarios compren Windows7 / 8, y eso le da dinero a Microsoft.
Otras compañías hacen lo mismo, entonces el código abierto sabe mejor, luego el señor genio también ... y tenemos muchos lenguajes parecidos, es solo la naturaleza egocéntrica de la humanidad.

Babuino
fuente
De acuerdo: la mayoría de las veces solo necesitamos un lenguaje "seguro" de alto nivel, un lenguaje de programación de sistema "inseguro" de bajo nivel, todos los lenguajes ensambladores (uno por CPU, son inevitables pero ocultos), más algún propósito especial (específico del dominio) idiomas (por ejemplo, SQL). El verdadero problema es que es imposible para cualquiera declarar un idioma "obsoleto" (incluso cuando el diseñador del lenguaje intenta hacerlo, por ejemplo, Python 2 vs. Python 3). Más idiomas nuevos cada año y ningún idioma antiguo descartado significa que eventualmente habrá más idiomas en uso que los programadores para usarlos. ;-)
Brendan
-5

Debemos mirar a la economía para responder esta pregunta. Si ahorrara dinero comercial al tener un solo idioma, lo tendríamos. Lo estandarizarían y requerirían que todos lo usen. Los otros idiomas languidecerían en polvorientos edificios académicos y en los sótanos de entusiastas de ojos salvajes. Esto no ha sucedido, por lo que no debe haber ningún incentivo para obtener ganancias en un lenguaje de programación universal o, de lo contrario, uno ya habría evolucionado naturalmente.

George Campbell
fuente
1
El "dinero ahorrado" es (a pesar de los mejores esfuerzos de los contadores) un concepto vago y nebuloso a lo largo del ciclo de vida. Del mismo modo que los mecánicos no han logrado estandarizar ni siquiera un tamaño de llave inglesa, no importa un conjunto completo de herramientas, la ingeniería de software no ha podido estandarizar porque hay muchos criterios para seleccionar una herramienta (idioma) o incluso el procesador / SO / entorno
Andrew