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

54

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

    
pregunta killown 19.09.2010 - 12:35

23 respuestas

116

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

  

     

La navaja suiza generalmente tiene una cuchilla, así como varias herramientas, como destornilladores, abrelatas y muchos otros. 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 a un reconocimiento mundial ...

    
respondido por el gnat 19.05.2013 - 01:39
79

Porque

  1. nadie quiere reescribir todo el código heredado.
  2. Es difícil llegar a un acuerdo sobre 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 lenguaje completamente diferente debido a un nuevo propósito.
  5. Microsoft
  6. Apple
  7. Código abierto
  8. ¿Qué haríamos con todos los peces Babel?
  9. Ni siquiera podía hacer que el SQL sea universal.
respondido por el JeffO 24.03.2011 - 16:49
38

Lo que tienes en programación es un dominio de problemas muy grande. Este dominio se extiende extremadamente y en muchas direcciones.

Esta es la razón por la que los controladores de vuelo integrados están escritos en C y los sitios web están escritos en PHP, Java, Rails, .NET y muchos otros.

Para el controlador de vuelo integrado tengo alrededor de 128k de memoria para trabajar y además de eso, si mi código recibe una excepción no manejada, el avión se estrella, mueren 200 personas y me demandan por una suma de $ 1B, y tengo que enviar Ingenieros de todos los aeropuertos del mundo para reparar aeronaves que están en tierra, perdiendo a mis clientes $ 10M / día. Tengo que trabajar con un lenguaje que es muy apretado y tiene una pequeña cantidad 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 medida todos los días, pero este es probablemente el límite máximo de la web). Estaré viendo un lenguaje que me brinda un montón de funciones y produce una salida que se puede transmitir lo más rápido posible. Realmente no me importa si mi sitio se cae, quizás pierda algunas ventas ($ 100) y tenga que solucionar 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 algún script cgi?) y, por lo que sé, los controladores de vuelo están empezando a ver C ++, pero incluso de forma muy restringida. / p>     

respondido por el Bill Leeper 20.08.2012 - 06:53
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.

En serio. Si va a una tienda de automóviles, ¿su mecánico tiene solo una herramienta única para hacerlo en su caja de herramientas? Él (o ella) es un profesional, con herramientas profesionales diseñadas específicamente para realizar diversas tareas de reparación de automóviles.

De manera similar, 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 [un equivalente de software de] un destornillador Philips, entonces no puede considerarse un profesional.

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

    
respondido por el brettmjohnson 24.03.2011 - 16:57
18

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

Para usar la 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 en realidad es una suposición errónea.

¿Qué pasaría si el lenguaje de programación fuera la caja de herramientas?

Quiero decir, qué sucede si puede agregar y eliminar funciones del idioma como desee y tener su propia caja de herramientas con las herramientas que necesita, incluso si las herramientas tienen propósitos diferentes.

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

Entonces, la pregunta es: ¿cómo lograr que las características de diferentes idiomas / paradigmas funcionen entre sí? Si bien no puedo responder a eso, marcos como .Net y JVM ofrecen parte de la solución: los lenguajes son al menos parcialmente compatibles debido a la forma en que están compilados. Puede tomar cualquier código escrito en C #, por ejemplo, y usarlo desde F # sin quejas.

El 'problema' con la solución actual es que usar estos idiomas juntos requiere que los cree como proyectos separados, que no pueden hacer referencia 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 a Common Intermediate Language antes de que cualquier otro proyecto pueda acceder a él.

Un escalón para eliminar esa barrera sería permitir que el código de diferentes idiomas (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 de referencias parciales o circulares), y luego compilar archivos en un idioma diferente que pueda acceder a los objetos ya compilados (CIL). Deberí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 que "definitivamente puede haber un lenguaje universal". Estoy sugiriendo que existe un 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.

    
respondido por el Mark H 12.04.2017 - 09:31
10

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

Por ejemplo: las reflexiones conscientes del tipo son una característica realmente agradable, pero no valdría mucho la pena en un lenguaje mal escrito, pero a veces también puede ser un beneficio real.

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

    
respondido por el Bill 17.09.2010 - 21:16
7

"Jack of all trades - master of none". 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 obtuvieras un idioma que fuera bueno.

Entonces, si bien puede escribir prácticamente cualquier programa en cualquier idioma, no se garantiza que lo que obtenga sea el "mejor" programa que pueda escribir para resolver ese problema.

    
respondido por el ChrisF 17.09.2010 - 21:51
4

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

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

    
respondido por el bigown 18.09.2010 - 16:04
4

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

  

Cuanto más generalizada sea una programación.   idioma cuanto más código se necesita para   lograr algo. Cuanto mas   Especializado el idioma cuanto menos   se puede lograr con él.

    
respondido por el Homde 24.03.2011 - 05:34
4

Los idiomas dan forma a la forma en que la gente piensa. Esto es cierto para las lenguas naturales. Si un niño sabe un solo idioma con los números "uno, dos, muchos", enseñar a ese niño las matemáticas es ... difícil. (Lo siento, no tengo el enlace) En inglés hablamos de diferentes momentos como si fueran lugares, por lo que es posible imaginar el concepto de viaje en el tiempo. En algunos otros idiomas, la idea de viajar en el tiempo nunca se le ocurrirá 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 de la misma manera. Por lo tanto, no exploraremos alternativas, y la mejor manera de hacer algo permanecerá sin ser descubierta.

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

"Lambdas" siempre fue posible en C. La sintaxis está desactivada, incluido el código distribuido en todo el proyecto / archivo, por lo que 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 la complejidad del código que tiene que escribir aumenta mucho, por lo que sé, nadie en realidad 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 se usan básicamente en todas partes.

La principal diferencia entre C y C ++ es cómo puedes pedirle a C ++ que se encargue de cosas por ti; pero luego ya no puede ver, desde una sola línea de código, cuánto está realmente pidiéndolo. 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 programaran en ese idioma. Es decir, si el lenguaje podría usarse para implementar ese programa, para empezar, lo que no está dado.

    
respondido por el MaHuJa 24.03.2011 - 17:32
4

¿La imposibilidad de los méritos técnicos de tener un lenguaje universal? Eso es una tontería total. Usted podría tener un lenguaje universal que cubra todas las bases. El problema es en su mayoría histórico: se inventaron diferentes lenguajes para hacer cosas diferentes y ser usados en diferentes comunidades. Muchos de ellos se atascaron. Agregue a esas preferencias (vi! Emacs! Espere, quise decir Java! C #, espere quise decir Microsoft, Open Source, etc., etc.) e incrustación general de accidentes históricos ... Mire los lenguajes naturales en una pequeña tierra Misa 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 y algo ... "

    
respondido por el Yar 22.04.2011 - 01:33
4

Es un error pensar que "combinar todas las funciones" creará un mejor lenguaje.

Es más probable que termines con un desorden inflado, complejo e ilegible.

El buen diseño del lenguaje requiere que se elijan y se hagan concesiones. Podría decirse que los mejores / más revolucionarios / más exitosos idiomas son los que sacan algo y proporcionan una mejor alternativa en lugar de agregar nuevas cosas. Por ejemplo,

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

Hay una gran charla en esta parte del tío Bob Martin: El último lenguaje de programación

    
respondido por el mikera 20.08.2012 - 13:23
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ñas, por lo que si comienza a empaquetar características, ya ha perdido en esta.

Todavía Cobra parece prometedor en la dirección de tener todas las características interesantes de otros idiomas. :-)

    
respondido por el Andrea 24.03.2011 - 00:12
0

Porque si creas un idioma así, será otro idioma nuevo. Es posible que obtenga una gran base de fans, pero todos los demás idiomas seguirán existiendo.

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

Podrías decir que python es un lenguaje tan universal, pero también está el rubí.

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

La razón por la que no existe un único lenguaje universal en el que todos estén de acuerdo es que la programación como un oficio no está dictada por una institución que toma todas las decisiones. Todos son libres de hacer lo que quieran.

Eso es algo bueno.

    
respondido por el hasen 24.03.2011 - 06:38
0

Con todo lo que está escrito hasta ahora, es difícil agregar muchos nuevos fundamentos, pero voy a incluir algunos.

  • Evolución: no solo se introducen los sistemas biológicos, se mutan y se someten a una competencia de supervivencia de los más aptos para los recursos y un nicho al que llamar suyos. La competencia es buena y empuja las cosas hacia adelante.

  • Madurez: hemos estado haciendo lenguajes de computadora por probablemente menos de un siglo. No podemos tener la respuesta todavía porque aún no sabemos todas las preguntas.

  • Génesis separada: No estoy seguro de cuál es la palabra correcta para esto, pero en el mundo existen muchos sistemas de escritura que comenzaron en muchas regiones geográficas. Piense en Cuneiforme que fue dictado en parte por las exigencias de tallar en tabletas de arcilla. Piense en sánscrito, griego, hebreo, romano, alfabetos árabes. 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 el cirílico, el Katakana y el Hirigana. No soy un lingüista, así que no ignore las inexactitudes 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ían 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 los crearon. Los lenguajes informáticos vienen con legados culturales que dieron forma a su diseño y uso. En la cultura del kernel del sistema operativo, es poco probable que C y C ++ estén pronto en desuso 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 de instalación considerable.

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

respondido por el DeveloperDon 20.08.2012 - 21:02
0

Tal vez un poco diferente de 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, amplía el vocabulario y la semántica).

¿Por qué? Así que ahora puedes decir cosas que no pudiste decir antes.
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.

    
respondido por el Mike Dunlavey 20.08.2012 - 21:49
0

Aparte del argumento de swiss-army-knife (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 lo hace. "Esto significa que un lenguaje de este tipo no sería posible y una buena idea), hay problemas con la" combinación de 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 idioma.
  • Aún no hemos terminado con nuevas funciones.

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 .

    
respondido por el comingstorm 30.08.2012 - 01:58
-2

Visual Batch es un intento de lenguaje de programación personalizable. El enlace a continuación muestra cómo esta interfaz de programación se puede adaptar para satisfacer las necesidades de un lenguaje de programación universal.

enlace

    
respondido por el user14869 29.01.2011 - 07:47
-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.

¿Qué aspecto tiene? Una cadena de 0-9 y A-F.

Pero es una perra para usar. Entonces, Alan inventa un lenguaje que puede traducirse 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 simplemente versiones simplificadas del lenguaje de máquina, más fáciles de escribir en ciertos tipos de programas, pero más difíciles o imposibles de escribir en otros tipos de programas. Uno es bueno para la contabilidad, otro es bueno para controlar el transbordador espacial.

    
respondido por el Andy Canfield 24.03.2011 - 01:34
-2

Solo porque,

no hay una computadora UNIVERSAL.

no es una forma de placa UNIVERSAL.

no es un programador UNIVERSAL.

y ni siquiera un cliente UNIVERSAL.

: P

Así que simplemente necesitamos uno diferente para otro diferente. ;)

    
respondido por el necixy 24.03.2011 - 13:24
-2

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

Si busca en grandes empresas, por lo general, la compañía tenderá a utilizar lenguajes y tecnologías simples (o un número pequeño), incluso si para un proyecto específico hay un mejor lenguaje.

Esto se hace porque los beneficios que surgen de una mejor estandarización, un soporte más fácil, el uso compartido de códigos, etc. (en la mayoría de los casos) son mayores que el valor agregado de un idioma específico.

    
respondido por el Ophir Yoktan 24.03.2011 - 13:50
-4

Creo que a todas las respuestas "porque no esculpirías con un lápiz" les falta 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í: la gente se enfocaría en hacer que el lenguaje de scripts sea mejor en lugar de estar dispersos en Python / Ruby / perl / younameit por ejemplo.

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

    
respondido por el Baboon 20.08.2012 - 11:03
-5

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

    
respondido por el George Campbell 20.08.2012 - 06:13

Lea otras preguntas en las etiquetas