Mas o que achei interessante é que a linguagem scala teve uma performance superior à própria linguagem java, quase
chegando à performance do C++ com código super tunado.
Mas será que essa análise pode ser considerada válida ?
Fiz essa pergunta porque ainda estou começando a programar em Scala,
e queria saber se essa realidade de performance é real, se já existem outras
análises de desempenho mais confiáveis. Mas pelo jeito o guj não
é o melhor lugar para esse tipo de pergunta.
É aquela velha história, em algumas situações ela vai ser mais rápida, em outras talvez não. Na média, vai de cada caso.
Bem, bem grosseiramente, seria comparar uma linguagem que é rápida no comando while e lenta no if e na atribuição comparada ao java. No geral é mais rápida? Depende se o programa tem muito loop, entendeu?
Pra não dizer que só divaguei e não respondi, nunca testei o mesmo programa nas duas, mas quando eu comparo ‘no olho’ dois sistemas simples, não consegui perceber muita diferença e nao sou satisfeito com a performance de nenhum dos dois. hehehe
[quote=johnny quest]Mas o que achei interessante é que a linguagem scala teve uma performance superior à própria linguagem java, quase
chegando à performance do C++ com código super tunado.[/quote]
Como assim quase chegando a performance do C++? O relatório diz que o melhor caso foi 2.5x mais lento e consumiu 80% mais memória.
De qualquer forma, a velocidade de execução de comandos dificilmente representa um gargalo de performance.
Normalmente seu problema estará em entrada saída, no banco de dados, arquivos, rede, etc…
Esses benchmarks só são válidos em sistemas de tempo real e sistemas estritamente matemáticos, super CPU-Bound.
[quote=ViniGodoy][quote=johnny quest]Mas o que achei interessante é que a linguagem scala teve uma performance superior à própria linguagem java, quase
chegando à performance do C++ com código super tunado.[/quote]
Como assim quase chegando a performance do C++? O relatório diz que o melhor caso foi 2.5x mais lento e consumiu 80% mais memória.
De qualquer forma, a velocidade de execução de comandos dificilmente representa um gargalo de performance.
Normalmente seu problema estará em entrada saída, no banco de dados, arquivos, rede, etc…
Esses benchmarks só são válidos em sistemas de tempo real e sistemas estritamente matemáticos, super CPU-Bound.[/quote]
Nego tinha que parar de fazer benchmark com linguagem e fazer com POGramador. Porque linguagem por linguagem, nenhuma presta mão mão de um POGramador.
[quote]Como assim quase chegando a performance do C++? O relatório diz que o melhor caso foi 2.5x mais lento e consumiu 80% mais memória.
[/quote]
Vinigodoy, falei quase porque foi a linguagem mais próxima a chegar ao nível de performance de C++ super otimizado.
[quote]However, it also required the most extensive
tuning efforts, many of which were done at a level of sophistication that would not be available to the average programmer.[/quote]
É louvável uma linguagem como scala gerando bytecode rodar à apenas 2.5x mais lento que C++ super otimizado.
Só consigo imaginar uma área onde essa performance é relevante: Mercado Financeiro.
Todas as outras áreas vc pode e deve escalar horizontalmente. Eu realmente não sei o prazer que as pessoas tem em fazer programas super-rápidos, quando a diferenca depois de toda a otmizacão será de alguns microsegundos. Mesmo que seja millisegundos mais rápido, por que vc precisa disso?
EDIT: Talvez jogos, e isso on Vinigodoy pode falar.
Aplicações de tempo real (games, firmware) ou com enorme volume de processamento (análise financeira, meteorológica, redes neurais, produção de vídeo) se beneficiam muito de linguagens desse tipo. E 2.5x e 80% a mais de memória está MUITO longe de ser pouco numa aplicação desse tipo. Algumas dessas processam por semanas ou um atraso de poucos ms pode ser catastrófico.
Quanto ao 0.1%. Pense no quão relevante ele é quando você estiver num avião e o 0.1% for o firmware do seu transponder. Ou para as pessoas que são avisadas de furacões.
[quote=ViniGodoy]Aplicações de tempo real (games, firmware) ou com enorme volume de processamento (análise financeira, meteorológica, redes neurais, produção de vídeo) se beneficiam muito de linguagens desse tipo. E 2.5x e 80% a mais de memória está MUITO longe de ser pouco numa aplicação desse tipo. Algumas dessas processam por semanas ou um atraso de poucos ms pode ser catastrófico.
Quanto ao 0.1%. Pense no quão relevante ele é quando você estiver num avião e o 0.1% for o firmware do seu transponder. Ou para as pessoas que são avisadas de furacões.[/quote]
Duvido que quem está preocupado trabalha com isso. E como falei vc pode escalar horizontalmente e processar as coisas em paralelo.
Acho que além do compilador é o fato dele dar muito controle. Tudo isso tem um preço claro. É muito dificil escrever codigo c++ otimizado. Mas no caso do tempo real o c++ e o c tem outra vantagem: você pode prever o tempo de processamento no meio do código, sem chance do gc rodar no meio. Se precisar mesmo, e facil até dar instrucoes nativas para um hardware específico.
E saoj, todas as aplicações que citei já são escaladas (a placa de vídeo dos games tem centenas de núcleos), ou rodam em supercomputadores (cinema, meteorologia e finanças) ou rodam com limitaçoes de hardware (seja por preço ou volume - como é o caso das injeçoes eletrônicas, equipamentos de aviação, etc).
E o que fazer quando você já está com o topo do hardware e o tempo ainda é longo?
Agora estou claramente falando de um nicho específico. E que não é tão pequeno quanto alguns membros do GUJ pensam (não é só porque você não atua nesse nicho, que ele seja pequeno). Mas é onde esse bench se aplica.
E NÃO é o caso das aplicações para o qual os sistemas web normalmente são feitos. Para sistemas comerciais esse benchmark tem pouca (para não dizer nenhuma) relevância. Se velocidade do código por si só fosse tão relevante na web jamais falaríamos em javascript ou teríamos sistemas em php. Pra sistemas assim o gargalo está em outro lugar como já citei e você corretamente ressaltou.
Johnny, existem casos em que Scala é mais rápida, mas ainda existem alguns poucos em que Java é mais rápida (não sei citar quais mas diz a lenda que existem :D). Algumas construções, tal case class e coleções paralelas, podem aumentar muito a performance se comparadas às “respectivas” construções do Java.
Uma conversa fiada. O que dita a qualidade de um programa são as otimizações que o compilador faz e o quão bom é o profissional que escreveu os algoritmos. É claro que programas java ou escala podem até ser mais rápidos que um c++. Mas isso se o mesmo for escrito por um profissional que não sabe o que faz. Por razões de magnitude código nativo está a um passo afrente. Simplesmente quantidade de código.
Um bom compilador gera assembly enxuto por causa das otimizações, o que é o caso do java, mas mesmo assim o bytecode precisa passar por outras séries de compilações de otimizações. No final isso acaba gerando mais código e talvez nem seja não otimizado quanto um compilador de c++. A responsabilidade pode acabar ficando na mão do profissional de qualquer maneira.
Segundo o estudo citado Scala é 10x mais lenta que Java pra compilar. Essa é uma informação muito mais importante pra mim já que performance de execução não é limitador na maioria dos projetos (CPU não é um recurso escasso), mas agilidade no desenvolvimento sim (desenvolvedor é recurso escasso).
[quote=moscoso.dev]Segundo o estudo citado Scala é 10x mais lenta que Java pra compilar. Essa é uma informação muito mais importante pra mim já que performance de execução não é limitador na maioria dos projetos (CPU não é um recurso escasso), mas agilidade no desenvolvimento sim (desenvolvedor é recurso escasso).
[/quote]
Na “maioria dos projetos” já é forçar a barra. O que existem são situações específicas e ferramentas para solucionar problemas específicos.
Se fosse realmente uma verdade que o compilador de scala gera código mais exuto que o de java eu poderia até optar por ele. Mas como sei que a maioria dos problemas de desempenho se deve a árte do profissional ainda continuo com o java mesmo.
[quote=juliocbq]O que existem são situações específicas e ferramentas para solucionar problemas específicos.
[/quote]
Nada contra você em particular, mas na minha opinião essa é a frase mais cretina que existe. Várias pessoas a utilizam quando não possuem conviccoes. É a famosa: Não há bala de prata. É mesmo!!!???
[quote=juliocbq]
Se fosse realmente uma verdade que o compilador de scala gera código mais exuto que o de java eu poderia até optar por ele. Mas como sei que a maioria dos problemas de desempenho se deve a árte do profissional ainda continuo com o java mesmo.[/quote]
A maioria dos problemas de desempenho pode ser simplesmente ignorada. Essa discussão é uma heranca capenga de um passado remoto onde processamento e memória eram escassos.
[quote=juliocbq][quote=moscoso.dev]Segundo o estudo citado Scala é 10x mais lenta que Java pra compilar. Essa é uma informação muito mais importante pra mim já que performance de execução não é limitador na maioria dos projetos (CPU não é um recurso escasso), mas agilidade no desenvolvimento sim (desenvolvedor é recurso escasso).
[/quote]
Na “maioria dos projetos” já é forçar a barra. O que existem são situações específicas e ferramentas para solucionar problemas específicos.
Se fosse realmente uma verdade que o compilador de scala gera código mais exuto que o de java eu poderia até optar por ele. Mas como sei que a maioria dos problemas de desempenho se deve a árte do profissional ainda continuo com o java mesmo.[/quote]
Desde que vc use os recursos funcionais ela pode sim gerar código mais enxuto que java porque o compilador é capaz de fazer as otimizações que o compilador Java não consegue.
Na verdade foi exatamente assim que o estudo comseguiu uma versão de Scala mais rápida que java.