2009-03-14 18 views
19

Cifro C# todo el día, pero recientemente hice un salto a Java para cosas de hobbies, como escribir para las plataformas BlackBerry y Android. Todo este tiempo asumí que, en lo que respecta a las características del lenguaje, Java y C# eran gemelas la una de la otra.¿No se ha mantenido Java?

De todos modos, descubrí que Java es el equivalente de C# 1.1 o algo así. En Java, tengo que escribir dos veces el código que usaría en C#. ¿Las características como los inicializadores de objetos, lambda, propiedades por el amor de Dios, alguna vez vienen a Java? Intenté vadear las cosas de JSR, pero no pude encontrar nada.

¿Simplemente no se ha actualizado Java? ¿O simplemente no lo estoy usando como está previsto?

+2

¿Por qué se cerró esta pregunta? A juzgar por las respuestas, la mayoría de la gente está de acuerdo en que Java se ha quedado atrás de C# en términos de características del lenguaje. Y la falta de tales características, tales como cierres, se puede determinar objetivamente. – javashlook

+2

Ciertamente no lo pedí como una forma de comenzar una guerra religiosa. No estoy seguro de por qué estaba cerrado. – AngryHacker

Respuesta

10

Creo que tienes razón, Java no tiene muchas de las nuevas características convenientes que C# ha introducido. Muchas de las nuevas características de C# son solo trucos de compilación (propiedades, inicializadores de objetos, métodos de extensión) que puede realizar a mano en C# o Java.

Es probable que las personas de Java no hayan presentado estas nuevas funciones porque probablemente prefieran mantener el lenguaje lo más simple posible y compatible con versiones anteriores.

Tengo que decir que prefiero escribir C# en estos días.

8

Yo diría que sí, Java no se ha mantenido. Microsoft analizó detenidamente Java (y C++) y descubrió qué molestias tenían y qué características faltaban y arregló muchas de ellas en versiones posteriores de C#.

Además, los diseñadores de Java parecen intentar mantener su lenguaje y analizadores tan simples como sea posible, mientras que los diseñadores de C# no tienen miedo del azúcar sintáctico: propiedades, delegados, lambdas y LINQ son todos ejemplos de esto. Y como ya habrás notado, una cucharada de azúcar sintáctica hace que el idioma baje mucho más fácilmente.

6

Cuanto más antiguo es un lenguaje popular, más grande se vuelve su código base, y los cambios en los idiomas se hacen de una manera más conservadora, para no romper la base de código existente, lo cual sería costoso de arreglar.

Java es uno de los idiomas más antiguos. C# es relativamente nuevo y puede permitirse cambiar más radicalmente. Compare con C y C++, que no cambió durante una década.

Si realmente desea nuevas funciones de idioma para su nuevo código, pruebe con otro lenguaje basado en JVM que interopere con Java (Groovy, Scala, Clojure).

+1

¡A menos que el lenguaje anterior sea VB6! Si tiene algún programa VB6 existente, Microsoft tiene algunos nuevos lenguajes para que pueda volver a escribir sus aplicaciones. Tal vez termine antes de que su organización entre en quiebra y sus competidores hayan innovado sus productos en irrelevancia. – MarkJ

7

Java ciertamente se ha quedado atrás, aunque diría que está más cerca de C# 2.0 que C# 1.1. Tiene genéricos, por ejemplo, aunque son algo diferentes a los de C#.

Me ha decepcionado al saber que muchas de las características del lenguaje propuestas han caído para Java 7 (en particular cierres), pero entonces llegó junto Project Coin - así que al menos podríamos tener algunos pequeñas características que esperamos con interés.

No puedo ver que Java se ponga al día con C# en términos de idioma en el corto plazo: tienen más equipaje de idioma lo que hace que sea más difícil cambiar el idioma. Por triviales que puedan parecer, las excepciones comprobadas añaden un "eje" extra a las firmas de métodos que hacen que algunas cosas (como los cierres) sean más complicadas de lo que serían de otra manera.

(Y, por supuesto, C# 4.0 también está a la vista ...)

1

Y eso no es para Swing vs WPF que son como tiza vs caviar.

4

De hecho, tienes razón. Pero, creo que el enfoque de las mejoras de lenguaje se ha desplazado a los nuevos lenguajes JVM, como Groovy y Scala.

Y tal vez sea una buena cosa, ya que Java tiene una base de usuarios significativa, que, lamentablemente, apenas puede ponerse de acuerdo sobre qué características, si las hay, y de qué forma se deben agregar al idioma. Por ejemplo, mira esto poll. Por otro lado, Sun ha prometido mejoras en la JVM que facilitarían el desarrollo y la ejecución de lenguajes JVM dinámicos, como la instrucción invokedynamic, JSR 292.

Para mí, este es un compromiso decente.

5

Creo que parte del problema es económico. No es accidental que Java apareciera cuando Sun era un jugador líder en el mercado. Su stock estaba en su punto más alto en marzo de 2000, impulsado por todos los servidores que las compañías de punto com estaban comprando.

Cuando estalló la burbuja y todos esos servidores salieron al mercado, tardó mucho tiempo en completarse el exceso. Sun no se ha recuperado de eso. El aumento en la potencia de los servidores básicos ha erosionado la ventaja que tenían los chips RISC especializados y Solaris. No puedes ser un gran poder militar a menos que seas un poder económico; ser un innovador en esta escala también requiere dinero en efectivo.

Han perdido mucho talento (por ejemplo, Bill Joy) que solía alimentar a la empresa.

Sun es, en su parte inferior, una empresa de hardware. La estrategia con Java, especialmente en el lado del servidor, era que ayudaría a impulsar las ventas de hardware.

Creo que el ritmo de cambio de Java ha sufrido por todo esto.

Microsoft continúa desarrollando C# porque los ingresos siguen llegando, Anders todavía está con ellos, y ellos son una compañía de software que finalmente gana dinero con el producto. Es por eso que están adelante ahora.

+1

Microsoft desarrolla sus idiomas porque son todos "desarrolladores desarrolladores de desarrolladores". Si está tratando de vender sistemas operativos, lo más importante es hacer que los desarrolladores de software quieran desarrollar software para su sistema operativo. – MarkJ

+1

Si las vacas gemelas de Microsoft, el sistema operativo y Office son suplantados alguna vez, apuesto a que los "desarrolladores" quedarán relegados también. ¿El dinero maneja la estrategia, o al revés? Necesitas ambos. – duffymo

+0

Mi punto es que no son los ingresos de C# lo que impulsa su desarrollo, sino los ingresos de las vacas de efectivo. Eso no está totalmente claro para mí a partir de la redacción de su respuesta, ellos hacen "dinero del producto", ¿qué producto? +1 de todos modos – MarkJ

Cuestiones relacionadas