C está muerto, ¿cuánto tiempo podrá sobrevivir Java? En debates recientes, algunos han llegado a la conclusión de que C no es un lenguaje perfectamente diseñado. En mis ocho años en el comité de estándares de C, vi cómo todas las resoluciones sobre C cobraban vida. Esperamos que este artículo ayude a los lectores a comprender las opciones de diseño de C y JAVA para que puedan verse de manera más integral. Algunas personas dicen que ya casi no uso C. Cuando uso C, solo quiero probar código antiguo o escribir un programa que esté estrechamente relacionado con el rendimiento. Normalmente este programa es pequeño y se llama desde otros idiomas. Lo que me gusta hacer es desarrollar rápidamente un programa en Python, usar el programa auxiliar de perfil para optimizar su rendimiento y, si es necesario, llamar a un programa escrito en C a través de los ctypes de Python para mejorar su rendimiento. Como era miembro del comité de estándares C, vi surgir estas resoluciones. Estos análisis de C se realizan después de una consideración muy cuidadosa, mucho más cautelosa que la mayoría de los análisis de Java. Sin embargo, como alguien señaló con precisión, C es complicado de usar, está lleno de reglas extrañas y fácil de olvidar. Cuando estaba escribiendo un libro, sólo podía encontrar explicaciones de estas reglas en las instrucciones, en lugar de memorizarlas yo mismo. :y8o $ N-u; G1 U8 y Para que la gente entienda lo difícil y complicado que es el lenguaje C, debe recordar el principio de diseño más importante en C: la compatibilidad con el lenguaje C. Esta es la decisión más correcta de Stroupstru y llevará a un gran número de programadores de C a cambiar a programas en C: este atajo permite a los programadores de C compilar y traducir programas en C sin realizar ninguna modificación. Sin embargo, esto también se ha convertido en una enorme limitación para el lenguaje C, aportando un enorme poder a C y un dolor infinito a C. Es debido a esta restricción que C es tan exitoso y complejo. ){ ampw: Z * B: [6a. Estos extraños contratos C de GD dejan estupefactos a los diseñadores que no comprenden completamente C Java. Por ejemplo, argumentan que a los programadores les resulta difícil sobrecargarse con operadores excelentes. Pero la sobrecarga de operadores es necesaria en C, porque en C hay asignación de pila y asignación de montón. ¡Es realmente difícil para usted manejar diferentes tipos de asignación de memoria sin sobrecargar los operadores y asegurarse de que no habrá pérdidas de memoria! Pero para Java, dado que Java solo tiene un único mecanismo de asignación de memoria (Nota del traductor: Java básicamente usa asignación de montón) y un mecanismo de recolección de basura, la sobrecarga de operadores se vuelve redundante en Java (al igual que la sobrecarga de operadores en C# y antes de la sobrecarga de operaciones de Python es la misma). pero Python apareció antes que Java). Pero a lo largo de los años, los equipos de Java han coincidido en que "la sobrecarga de operadores es demasiado compleja". Esta resolución, o algunas otras resoluciones de Java, muestra claramente que muchos diseñadores de Java no están haciendo su trabajo al tomar decisiones, por lo que tengo fama de despreciar las decisiones tomadas por Gosling y su equipo de Java. Hay demasiados ejemplos y todos los tipos básicos se "introducen por motivos de rendimiento". La verdadera razón es insistir en que "todo es un objeto" y al mismo tiempo proporcionar una puerta trasera para los programas subyacentes con requisitos de eficiencia (lo que también hace que algunas tecnologías populares sean más eficientes de implementar). Ah, pero la cuestión es que no se pueden calcular funciones trascendentales directamente con un procesador de punto flotante. T (jt9 v, una función de cálculo) y solo se puede calcular mediante software, pero originalmente esta función se puede calcular mediante un procesador informático de punto flotante. Hago lo mejor que puedo para enumerar preguntas como esta, pero siempre obtengo la inútil respuesta "Así es Java". U/ s8 @ V* b/ s4 z* m Cuando escribí sobre lo que constituyen genéricos mal diseñados, la respuesta que obtuve fue la misma: "Debemos ser compatibles con el análisis anterior (malo) de Java". Finalmente, cada vez más personas han adquirido suficiente experiencia sobre lo difícil que es usar los genéricos; de hecho, los genéricos de C son más potentes y más consistentes (especialmente ahora, cuando los mensajes de error del compilador se vuelven más claros, los genéricos funcionan mejor que antes). Debido a que los genéricos de Java estaban mal diseñados y eran difíciles, la gente empezó a tomar la creación de instancias más en serio que los genéricos.
Por supuesto, esto ayuda al lenguaje, ya que la creación de instancias no lo paraliza demasiado. # j # j)~ ']# c:w " ^( La lista de preguntas sobre Java solo puede ser aburrida frente a estas respuestas aburridas. Entonces, ¿significa esto que Java es un diseño de lenguaje fallido? Absolutamente no. Java lo hará Los programadores convencionales son llevados a un mundo de recolectores de basura, máquinas virtuales y modelos consistentes de manejo de errores (tales excepciones pueden ser muy útiles si no se usa el manejo de excepciones, como lo demostré en Think in Java 4ED with it). un nivel superior, donde nos estamos preparando para lenguajes de nivel superior (Nota del traductor: el autor aquí quiere decir que Java ha hecho muchas cosas, aunque no está maduro. Puede que sea un poco fallido, pero su éxito puede. ayúdenos a encontrar el trampolín hacia lenguajes de nivel superior El autor está siendo sarcástico aquí), T K7 X' c4 S2 [2 D Otro punto de vista, la gente siempre piensa que C es el fundador del lenguaje, y mucha gente. Creo que Java es el fundador del lenguaje, pero gracias a la máquina virtual, Java es más fácil de reemplazar por otros lenguajes. Ahora, cualquiera puede crear un nuevo lenguaje con la misma rapidez y eficiencia que antes. tomó la mayor parte del tiempo desarrollar un nuevo lenguaje para obtener un compilador correcto y eficiente. A veces no es tan bueno como otros lenguajes. Aquí nuevamente, el autor se burla de lo bueno o lo malo de Java. Ahora, estamos viendo que esto sucede, ya sea. Ya sea un lenguaje estático de nivel superior, como Scala, o un lenguaje dinámico, ya sea nuevo y portátil, como Groovy, Ruby y Python, esta es la tendencia futura y la transición será muy fluida porque puede usarlo. Estos nuevos lenguajes están en el código Java existente, e incluso puede reescribir Java si es necesario. Cuando haya cuellos de botella en el rendimiento, al igual que C, el propio Java puede morir o puede usarse en circunstancias especiales. admite código heredado, porque Java no se usa realmente para programación de hardware como C). Lo más destacado es también una ganancia inesperada, es decir, si Java ha llegado al punto en el que no puede evolucionar por sí solo, Java ha creado un camino fluido para su reemplazo. Todos los lenguajes futuros aprenderán de esto: crearán un lenguaje propio que pueda refactorizarse (en evolución) constantemente (como Python y Ruby) o permitir que sus competidores crezcan.