Algumas coisas que “por default” o java é mais rápido que o C++:
Criação e destruição de objetos (aqui a diferença é gritante);
Invocação de métodos (a VM consegue fazer inline automático);
Uso de classes sincronizadas em aplicação single-threaded (a VM consegue, muitas vezes, eliminar os locks);
Uso de reflexão (aqui considerando só os recursos que um compilador com RTTI ligado forneceria ao C++);
Digo, “por default” pois no C++ é possível usar recursos da linguagem para otimizar praticamente todos esses itens (mas isso é trabalhoso, difícil de fazer, sujeito a erros e custa caro, muito caro).
[quote=dedejava]Ah!
Uma coisa que eu queria perguntar:
Existe algum GUC++? ou GUCPP?[/quote]
Os programadores C++ são muito desunidos, comparados aos programadores Java - normalmente eles se agrupam por tecnologias (MSVC++ = Microsoft, gcc, sistemas embarcados etc.
Para dar uma idéia, antigamente existia uma revista chamada “C Users Journal”, que depois foi promovida para “C/C++ Users Journal” (http://www.cuj.com). Há alguns anos atrás ela resolveu ter uma seção Java; e há uns dois ou mais anos essa revista não existe mais, nem em versão Web.
Nossa, mas por que tanta desunião?
O único conjunto de pessoas que eu vejo sempre respondendo perguntas é a comunidade no orkut. Quanto custa manter um fórum como o GUJ, só que de C++?
Java é uma religião com várias seitas - Swing, SWT, JavaEE (com as suas subseitas Spring, WebSphere, BEA, JBoss, Struts etc).
Acho que muita gente quer criar seu framework da mesma forma que a cada dia aparece uma nova igreja pentecostal: todos têm a sua mensagem e a querem divulgar de sua maneira.
.NET é uma religião com bem menos seitas - basicamente ASP.NET e C#.
C e C++ não é exatamente uma religião - acho que é mais uma filosofia que uma religião, e cada um fica na sua.
Acho que o Linux é uma religião, que também é dividida em algumas seitas - há os adoradores do Slackware e os do Ubuntu, por exemplo.
O fato é que o “core” do C++ é menor e tem um número muito grandes de tecnologias em volta dele.
Por exemplo, um programador C++, Windows, que usa MFC vai ter um perfil e dúvidas muito diferentes de um programador C++ que faz aplicações no Linux. Esse exemplo vale para outras tecnologias, pois o C++ não tem classes nativas para acesso a banco de dados, por exemplo.
Acho que por isso as comunidades acabam se formando em torno dos usuários de diferentes tecnologias.
Sempre é bom saber mais de uma linguagem.
Isso porque força você a pensar de outras maneiras - ser bitolado faz com que você não consiga encontrar soluções para seus problemas.
O programador Java comum (ou seja, aquele que há alguns anos atrás seria um “coboleiro” - hoje em dia é aquele cuja realização na vida é escrever uma action do Struts sem fazer muita besteira) pode se beneficiar, por exemplo, ao aprender C# e uma linguagem de script, como o Javascript*; o programador Java “hardcore” deve saber pelo menos uma linguagem de baixo nível (como C), uma de nível médio (C++) e uma de nível alto e de outro paradigma (funcional, como a Haskell).
Javascript, tal como está sendo definido hoje em dia, é uma linguagem altamente complexa e que tem conceitos mais complexos que o Java. Tanto é que a implementação de referência está sendo escrita em uma linguagem funcional chamada Standard ML.
[quote=thingol]Sempre é bom saber mais de uma linguagem.
Isso porque força você a pensar de outras maneiras - ser bitolado faz com que você não consiga encontrar soluções para seus problemas.
O programador Java comum (ou seja, aquele que há alguns anos atrás seria um “coboleiro” - hoje em dia é aquele cuja realização na vida é escrever uma action do Struts sem fazer muita besteira) pode se beneficiar, por exemplo, ao aprender C# e uma linguagem de script, como o Javascript*; o programador Java “hardcore” deve saber pelo menos uma linguagem de baixo nível (como C), uma de nível médio (C++) e uma de nível alto e de outro paradigma (funcional, como a Haskell).
Javascript, tal como está sendo definido hoje em dia, é uma linguagem altamente complexa e que tem conceitos mais complexos que o Java. Tanto é que a implementação de referência está sendo escrita em uma linguagem funcional chamada Standard ML. [/quote]
Aos interessados em linguagens funcionais recomendo a Erlang. Tem um futuro promissor pela frente, em especial para os computadores multi-core.
Só pra dar uma “ressaltadinha” (não tenho vindo muito ao fórum).
Erlang é de programação paralela né?
Existe muita diferença se eu não aprender Erlang, mas usar OpenMPI, Jini, Jaspaarc, MPI e derivados (de desempenho)?
[quote=dedejava]Só pra dar uma “ressaltadinha” (não tenho vindo muito ao fórum).
Erlang é de programação paralela né?
Existe muita diferença se eu não aprender Erlang, mas usar OpenMPI, Jini, Jaspaarc, MPI e derivados (de desempenho)?[/quote]
MPI e afins é para programação distribuida. Erlang permite paralelismo intra-processo.