C/C++ ou java?

vou procurar ler um artigo sobre o Scilab.

Um outro recurso do Scilab é o Xcos, similar ao Simulink do Matlab, para simulação de sistemas dinâmicos:
http://www.scilab.org/en/products/xcos

o matlab não é aquele q mistura matemática com algoritmo?

Esse é um erro de pensamento comum.

O Java possui compilação just-in-time. Isso significa que o byte-code roda apenas por pouco tempo sobre a VM, e logo seus trechos principais são compilados, e passam a operar diretamente sobre o processador. Quando a compilação ocorre a VM ainda pode se beneficiar de otimizações específicas para a máquina que ela está rodando, e fazer otimizações agressivas considerando características de Runtime, que o C++ não conseguirá fazer. Não é à toa que certas aplicações rodam mesmo mais rápidamente em Java do que em C++. Some isso ao fato dos alocadores de memória em Java serem por padrão extremamente eficientes, e ao fato de existirem profilers gratuitos e não intrusivos, e você vai ver que é muitíssimo difícil fazer uma aplicação em C++ que seja mais rápida do que uma aplicação Java. O investimento para isso é enorme e só será justificável em alguns casos.

O detalhe, é que aplicações de física são um desses casos.

O primeiro passo para se optar por Java ou C++ no caso de física, é saber que tipo de física e para que finalidade você quer simular. Se você quiser fazer um simulador simples (para jogos, para o cinema, para fins didáticos ou para diversão pessoal, por exemplo), muito provavelmente você poderá trabalhar numa linguagem de mais alto nível, como o Java ou C#. Não é à toa que temos aplicações com física já bastante interessante rodando no Android e no iPhone (quem nunca jogou Angry Birds ou Magic Pen?), com boa performance. (Temos até belos exemplos em 3D, sem o requisito de tempo real, como é o caso das coisas feitas na Lagoa Multiphysics).

Se você realmente for processar dados em alta escala, como por exemplo dados meteorológicos, ou previsões físicas espaciais, ou mesmo simulações física pesadas em tempo real, nesse caso, use mesmo C++, ou alguma ferramenta específica para esse fim (como as já citadas). Provavelmente você terá que fazer uma modelagem física baseada em estatística, e lidar com imprecisão numérica, o que será muito difícil de implementar do zero. Nessas horas, o Matlab ou a boost::math são essenciais. O lado interessante do C++, é que você pode cogitar a possibilidade de escrever a aplicação para supercomputadores, ou mesmo para aproveitar outros recursos de processamento mais populares, tais como o SIMD. Dá até mesmo para jogar dados para placa de vídeo processar com o CUDA (lembre-se uma GPU tem facilmente mais de 200 núcleos de processamento, e se precisar mesmo, você pode praticamente ter um supercomputador em casa fazendo 3 GPUs trabalharem em SLI). Esse tipo de coisa o Java já não é capaz de fazer sem bindings.

O C++ também te possibilitará otimizações realmente agressivas, principalmente na parte de gerência de memória.

Só não vou negar: tudo isso leva bastante tempo para ser desenvolvido, e é um trabalho bastante árido. No C++, mensagens de erro não são tão claras, e alguns problemas de memória podem levar meses para serem completamente entendidos e descobertos. Se for optar por esse caminho, procure entender as práticas modernas da linguagem (como RAII) e conhecer APIs que te auxiliem no serviço.

O mais interessante é que essas ferramentas como o Matlab e o Scilab possuem integração com algumas linguagens de programação, como C/C++, Java e C#. Isso permite desenvolver aplicações científicas poderosas, pegando o melhor de cada ferramenta/linguagem.
Uma linguagem interessante para processamento numérico é o Python, que possui uma biblioteca chamda Scipy, que implementa várias rotinas em álgebra linear, EDO, otimização etc.

Só uma pergunta: alguém pode me explicar porquê naquela licença do Java 5 tem aquela questão de não usar java pra projetos nucleares? Acordos comerciais?

[]'s

[quote=AUser]Só uma pergunta: alguém pode me explicar porquê naquela licença do Java 5 tem aquela questão de não usar java pra projetos nucleares? Acordos comerciais?

[]'s[/quote]

Pela mesma razão que já postaram acima. GC e gerenciamento de memória automática. Se sua aplicação pára de gerenciar um sistema de resfriamento de um reator nuclear para reclamar espaço de memória por algum momento você causa um desastre ambiental.

Não só reatores nucleares, mas também aeronaves…
Você vai ficar bem triste se o garbage collector rodar bem no momento que o sensor do transponder comandar uma manobra evasiva de emergência.

Não só reatores nucleares, mas também aeronaves…
Você vai ficar bem triste se o garbage collector rodar bem no momento que o sensor do transponder comandar uma manobra evasiva de emergência.[/quote]

Dai sim a coisa fica tensa… :shock: