¿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?
programming-languages
features
killown
fuente
fuente
Respuestas:
Por la misma razón, no usas una navaja suiza para tallar un pollo ...
fuente
Porque
fuente
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.
fuente
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.
fuente
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.
fuente
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í.
fuente
"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.
fuente
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.
fuente
Por algo que yo llamo la "paradoja de generalización / especialización", que probablemente tiene otro nombre y realmente no es una paradoja
fuente
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.
fuente
¿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' ...
fuente
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.
En este top hay una gran charla del tío Bob Martin: el último lenguaje de programación
fuente
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).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. :-)
fuente
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.
fuente
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?
fuente
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.
fuente
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":
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 .
fuente
Visual Batch es un intento de lenguaje de programación personalizable. El siguiente enlace muestra cómo esta interfaz de programación se puede adaptar para satisfacer las necesidades de un lenguaje de programación universal.
http://sourceforge.net/apps/phpbb/visualbatch/viewtopic.php?f=4&t=4
fuente
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.
fuente
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. ;)
fuente
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.
fuente
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.
fuente
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.
fuente