Esta pregunta no es, "¿Por qué la gente todavía usa lenguajes de programación antiguos?" Lo entiendo bastante bien. De hecho, los dos lenguajes de programación que mejor conozco son C y Scheme, que se remontan a los años 70.
Recientemente estaba leyendo sobre los cambios en C99 y C11 versus C89 (que parece ser la versión más utilizada de C en la práctica y la versión que aprendí de K&R). Mirando a su alrededor, parece que cada lenguaje de programación en uso intensivo obtiene una nueva especificación al menos una vez por década más o menos. Incluso Fortran todavía está recibiendo nuevas revisiones, a pesar del hecho de que la mayoría de las personas que lo usan todavía usan FORTRAN 77.
Compare esto con el enfoque del, por ejemplo, el sistema de composición tipográfica TeX. En 1989, con el lanzamiento de TeX 3.0, Donald Knuth declaró que TeX tenía características completas y las versiones futuras contendrían solo correcciones de errores. Incluso más allá de esto, ha declarado que después de su muerte, "todos los errores restantes se convertirán en características" y no se realizarán más actualizaciones. Otros son libres de bifurcar TeX y lo han hecho, pero los sistemas resultantes se renombran para indicar que son diferentes del TeX oficial. Esto no es porque Knuth piense que TeX es perfecto, sino porque comprende el valor de un sistema estable y predecible que hará lo mismo en cincuenta años que lo hace ahora.
¿Por qué la mayoría de los diseñadores de lenguajes de programación no siguen el mismo principio? Por supuesto, cuando un idioma es relativamente nuevo, tiene sentido que atraviese un período de cambio rápido antes de establecerse. Y nadie puede realmente objetar cambios menores que no hacen mucho más que codificar pseudo-estándares existentes o corregir lecturas no deseadas. Pero cuando un idioma todavía parece necesitar mejorar después de diez o veinte años, ¿por qué no simplemente bifurcarlo o comenzar de nuevo, en lugar de intentar cambiar lo que ya está en uso? Si algunas personas realmente quieren hacer programación orientada a objetos en Fortran, ¿por qué no crear "Objectran Fortran" para ese propósito y dejar solo a Fortran?
Supongo que se podría decir que, independientemente de futuras revisiones, C89 ya es un estándar y nada impide que la gente continúe usándolo. Esto es cierto, pero las connotaciones tienen consecuencias. GCC, en modo pedante, advertirá sobre la sintaxis que está en desuso o que tiene un significado sutilmente diferente en C99, lo que significa que los programadores de C89 no pueden ignorar totalmente el nuevo estándar. Por lo tanto, debe haber algún beneficio en C99 que sea suficiente para imponer esta sobrecarga a todos los que usan el lenguaje.
Esta es una pregunta real, no una invitación a discutir. Obviamente tengo una opinión sobre esto, pero en este momento solo estoy tratando de entender por qué esto ya no es solo cómo se hacen las cosas. Supongo que la pregunta es:
¿Cuáles son las ventajas (reales o percibidas) de actualizar un estándar de idioma, en lugar de crear un nuevo idioma basado en el antiguo?
--std=x
conmutador de GCC ), por lo que no es como si la creación de estándares más nuevos resultara en herramientas que desestabilizan el código más antiguo.Respuestas:
Creo que la motivación para que los diseñadores de idiomas revisen los idiomas existentes es introducir innovación mientras se asegura de que su comunidad de desarrolladores objetivo permanezca unida y adopte el nuevo idioma: mover una comunidad existente a una nueva revisión de un idioma existente es más efectivo que crear una nueva comunidad alrededor de un nuevo idioma. Por supuesto, esto obliga a algunos desarrolladores a adoptar el nuevo estándar incluso si estaban de acuerdo con el anterior: en una comunidad a veces tienes que imponer ciertas decisiones a una minoría si quieres mantener a la comunidad unida.
Además, tenga en cuenta que un lenguaje de propósito general trata de servir a tantos programadores como sea posible, y a menudo se aplica en nuevas áreas para las que no fue diseñado. Entonces, en lugar de apuntar a la simplicidad y la estabilidad del diseño, la comunidad puede optar por incorporar nuevas ideas (incluso de otros idiomas) a medida que el idioma se traslada a nuevas áreas de aplicación. En tal escenario, no puede esperar hacerlo bien en el primer intento.
Esto significa que los idiomas pueden sufrir cambios profundos a lo largo de los años y la última revisión puede ser muy diferente de la primera. El nombre del idioma no se mantiene por razones técnicas, sino porque la comunidad de desarrolladores acepta usar un nombre antiguo para un idioma nuevo. Entonces, el nombre del lenguaje de programación identifica la comunidad de sus usuarios en lugar del lenguaje en sí.
En mi opinión, la motivación por la que muchos desarrolladores encuentran esto aceptable (o incluso deseable) es que una transición gradual a un idioma ligeramente diferente es más fácil y menos confusa que un salto a un lenguaje completamente nuevo que les tomaría más tiempo y esfuerzo dominar. Tenga en cuenta que hay varios desarrolladores que tienen uno o dos idiomas favoritos y no están muy interesados en aprender idiomas nuevos (radicalmente diferentes). E incluso para aquellos a quienes les gusta aprender cosas nuevas, aprender un nuevo lenguaje de programación es siempre una actividad difícil y que requiere mucho tiempo.
Además, puede ser preferible ser parte de una comunidad grande y un ecosistema rico que de una comunidad muy pequeña que usa un idioma menos conocido. Entonces, cuando la comunidad decide seguir adelante, muchos miembros deciden seguir para evitar el aislamiento.
Como comentario adicional, creo que el argumento de permitir la evolución mientras se mantiene la compatibilidad con el código heredado es bastante débil: Java puede llamar al código C, Scala puede integrarse fácilmente con el código Java, C # puede integrarse con C ++. Hay muchos ejemplos que muestran que puede interactuar fácilmente con el código heredado escrito en otro idioma sin la necesidad de compatibilidad con el código fuente.
NOTA
De algunas respuestas y comentarios, parece que entiendo que algunos lectores han interpretado la pregunta como "¿Por qué los lenguajes de programación necesitan evolucionar?"
Creo que este no es el punto principal de la pregunta, ya que es obvio que los lenguajes de programación necesitan evolucionar y por qué (nuevos requisitos, nuevas ideas). La pregunta es más bien "¿Por qué esta evolución tiene que ocurrir dentro de un lenguaje de programación en lugar de generar muchos lenguajes nuevos?"
fuente
La compatibilidad con versiones anteriores es su respuesta. Un lenguaje dado, particularmente uno ampliamente utilizado como C puede tener código que está en funcionamiento, sin modificaciones, durante décadas. Si necesita mantenimiento, es útil tener compiladores que puedan apuntar a ese tipo de plataforma mientras se ejecutan en sistemas modernos para el trabajo de desarrollo. Las estandarizaciones y las actualizaciones de la versión del lenguaje ayudan a mantener actualizadas las prácticas de programación al tiempo que proporcionan una sensación de familiaridad para los programadores veteranos que pueden resistirse a aprender un lenguaje "completamente nuevo".
Tenga en cuenta que muchos de los idiomas actualizados están menos actualizados que "tienen nuevos bits brillantes atornillados". Las bestias de antaño a menudo todavía acechan dentro.
En lo que respecta a Knuth, recuerde que él es un académico y que TeX solo se demuestra correcto, no actualizado.
fuente
Creo que la respuesta obvia es que todavía se están haciendo progresos en el diseño del lenguaje y la arquitectura del sistema, y que a la gente le importan los idiomas más antiguos que quieren aprovechar las nuevas técnicas (núcleos múltiples, mejores hilos o modelos de memoria) que se atornillan en o al horno en el estándar de idioma. También ayuda tener "una forma verdadera" de hacer cosas (por ejemplo, análisis XML, acceso a la base de datos) con las que puede contar para estar allí sin importar en qué compilador o plataforma se encuentre, en lugar de depender de algún tercero biblioteca que puede o no estar instalada (y puede o no ser la versión que necesita, etc.).
fuente
Los conceptos u objetivos fundamentales sobre los que se construye un lenguaje de propósito general no pierden relevancia; sin embargo, cambios menores en el entorno de trabajo o el hardware exigen que se agreguen actualizaciones o pequeñas características a un idioma.
La forma en que los algoritmos se expresan en un idioma no cambiará, a pesar de que puede necesitar un soporte más limpio para los tipos de 64 bits, o un soporte de expresión regular más estándar, o un soporte más robusto para los nuevos tipos de sistemas de archivos.
Hay algunos casos en los que se están agregando 'nuevas' características a los idiomas existentes, pero en muchos casos esos cambios equivalen a simplificaciones de cosas que las personas ya estaban haciendo de la manera difícil. (Consulte C ++ utilizando funciones de orden superior en lugar de punteros y functores de funciones).
fuente
Esto es un poco como una consideración del lenguaje hablado.
En el pasado, había palabras que no se usaban tan a menudo como ahora (o que se usaban con un significado diferente).
p.ej. bonito: en inglés (muy antiguo) tiene el significado casi inverso al que usamos hoy, especialmente cuando se usa para describir el carácter de alguien.
Malo: no hace mucho tiempo malo solo tenía un significado único, ahora puede significar algo que es "súper asombroso" (se usa de una manera fesica (¡probablemente he echado de menos fesicous deletreado)!
Otra novedad es el teléfono móvil 'Text speak' para idiomas escritos.
Personalmente, no veo por qué un lenguaje de programación no se desarrollará de manera similar, las palabras y las funciones tienen significados / acciones específicos, y es necesario cambiar para incorporar nuevas ideas, nuevas metodologías.
Conozco personas que hablan muchos idiomas diferentes, y a menudo sugieren que después del 3 o 4 se hace más fácil aprender uno nuevo.
No sé si hay programadores que tengan una experiencia similar, no me sorprendería si la hubiera.
Sé que me siento feliz programando en JAVA (tanto como me siento feliz hablando en inglés). Esto no significa que no pueda comunicarme en 'inglés americano' o 'inglés australiano', aunque hay algunas 'trampas' a tener en cuenta. . Al igual que pasar de Java a PHP a Perl, las construcciones son similares, pero hay pequeñas trampas que me atrapan y me hacen golpear mi cabeza contra la pared.
Esto es diferente a pasar de inglés a francés o de Java a SAS. estos son tan diferentes que lleva bastante tiempo llegar a dominarlos.
De todos modos esa es mi opinión sobre esto.
fuente