it-swarm-es.com

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

¿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?

60
killown

Por la misma razón, no usas un 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 ...

116
David_001

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. Apple
  7. Fuente abierta
  8. ¿Qué haríamos con todos los peces Babel?
  9. Ni siquiera pudo hacer que SQL sea universal.
80
JeffO

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 un Host de otros.

Para el controlador de vuelo incorporado, tengo aproximadamente 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.

38
Bill Leeper
  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, le tengo una gran simpatía.

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 en 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.

24
brettmjohnson

Un tipo diferente de respuesta a los demás: en realidad creo que es potencial que un lenguaje 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 analogía de brettmjohnson arriba, 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 agregar a Nemerle (o al tuyo). 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 modo que podría import Haskell; import Prolog;, y comienza a escribir los dos idiomas como si fuera parte de tu idioma?

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 idiomas 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, deberá 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 se requiere para implementar un lenguaje y las bibliotecas, las herramientas, etc. necesarias para usarlo.

20
Mark H

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 en ocasiones.

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

10
Bill

"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.

7
ChrisF

Los idiomas dan forma a la forma en que la gente piensa Esto es cierto para los idiomas naturales. Si un niño solo sabe 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 tiempos como si fueran lugares, de ahí que el concepto de viaje en el tiempo sea posible de imaginar. En algunos otros idiomas, la idea de viajar en el tiempo nunca 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 realmente escribió el código para usar Este método de programación en C. A diferencia de los lenguajes donde las lambdas son parte del lenguaje, y básicamente se usan en todas partes.

La principal diferencia entre C y C++ es cómo puede pedirle a C++ que se ocupe de 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.

5
MaHuJa

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

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

4
Maniero

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: elimina la mayoría de las "sintaxis de lenguaje" y las reemplaza por un árbol homoicónico flexible de expresiones s

Hay una gran charla en este top por tío Bob Martin - El último lenguaje de programación

4
mikera

¿La imposibilidad por méritos técnicos de tener un lenguaje universal? Eso es una tontería total. Usted podría tiene un lenguaje universal que cubre 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' ...

4
Dan Rosenstark

Por algo que 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.

4
Homde

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 hubo mucha comunicación mundial y, como los sistemas imperial y métrico, vinieron de lugares con un poderoso liderazgo de ideas. Pero los lenguajes de programación sirven a muchas culturas diferentes (algunas de ellas culturas 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, acoplamiento cercano/eficiente con hardware para crear abstracción de hardware capas, y tienen una considerable base instalada.

  • 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 trabajo, 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?

0
DeveloperDon

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?
Define cosas - clases, variables, métodos - amplía 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 hay que buscar en un lenguaje de propósito general es si facilita la creación de lenguajes de propósito especial.

0
Mike Dunlavey

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, por lo que si comienza a empaquetar características, ya habrá perdido en este.

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

0
Andrea

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 un dominio- uno específico, pero eso no significa que dicho lenguaje no sea 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 .

0
comingstorm

Porque si creas ese idioma, será otro idioma más. Puede obtener una gran base de fans, pero todos los demás idiomas seguirán existiendo.

C todavía existe a pesar de que muchos lenguajes nuevos se inventaron 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 lenguaje universal único en el que todos estén de acuerdo es que la programación como oficio no está dictada por alguna institución que tome toda la decisión. Todos son libres de hacer lo que quieran.

Eso es bueno.

0
hasen