Java, Ruby ou PHP?

[quote=Rafael Guerreiro]Não precisa pesquisar muito para saber que a linguagem influencia sim na performance da sua aplicação. Inclusive, C costuma ganhar de lavada de qualquer linguagem. Eu mesmo já testei.

Outra coisa que influencia completamente a performance no caso do Java é a configuração da JVM. Normalmente a configuração default atende, mas existem casos em que alguns parâmetros já resolvem muita coisa. Obviamente, isso depende da forma que sua aplicação está escrita. De nada adianta falar que Java é tão lento quanto Ruby sendo que o programa comparado não faz um uso decente da linguagem.

Se a sua aplicação for mais simples, como a maioria é, do tipo que faz cadastro e leitura da base, isso faz pouca diferença.
Nesse caso, a diferença do Java é mais voltada para o controle de processos Multi-thread e isso pode te ajudar muito na questão de vários requests, visto que cada request abre uma Thread.

Existe também a Scala, que é levantada por muitos como uma boa opção pois tem a praticidade do Ruby com a performance do Java (visto que o código compilado É Java). Mas como tive pouco contato, não consigo te dizer muita coisa sobre ela.[/quote]

Então porque mais pessoas não criam sites/webservices em C?

[quote=lkbm][quote=Rafael Guerreiro]Não precisa pesquisar muito para saber que a linguagem influencia sim na performance da sua aplicação. Inclusive, C costuma ganhar de lavada de qualquer linguagem. Eu mesmo já testei.

Outra coisa que influencia completamente a performance no caso do Java é a configuração da JVM. Normalmente a configuração default atende, mas existem casos em que alguns parâmetros já resolvem muita coisa. Obviamente, isso depende da forma que sua aplicação está escrita. De nada adianta falar que Java é tão lento quanto Ruby sendo que o programa comparado não faz um uso decente da linguagem.

Se a sua aplicação for mais simples, como a maioria é, do tipo que faz cadastro e leitura da base, isso faz pouca diferença.
Nesse caso, a diferença do Java é mais voltada para o controle de processos Multi-thread e isso pode te ajudar muito na questão de vários requests, visto que cada request abre uma Thread.

Existe também a Scala, que é levantada por muitos como uma boa opção pois tem a praticidade do Ruby com a performance do Java (visto que o código compilado É Java). Mas como tive pouco contato, não consigo te dizer muita coisa sobre ela.[/quote]

Então porque mais pessoas não criam sites/webservices em C?
[/quote]

Mais uma vez, tem a ver com custo de desenvolvimento e gargalos …

Mas vamos esclarecer um ponto … quando se diz que linguagem X é mais rápida que Y estamos falando sobre CPU. Sendo assim, se eu escrever uma multiplicação de uma matriz 1.000.000 x 1.000.000 em C e outra versão em Java (mesmo tamanho de variáveis, memória, etc.) é bem provável que a versão em C seja mais rápida que versão em Java e muuuito mais rápida que uma versão em Ruby, por exemplo. Existem vários benchmarks Internet afora que demonstram esse fato.

O problema de se fazer qualquer coisa em C/C++ é: você tem que gerenciar a memória na mão (C++ já conta com smartpointer, mas dúvido que seja tão eficiente quanto o GC do Java), você precisa manipular ponteiros, etc. Ou seja, o custo de desenvolver/manter qualquer coisa em C/C++ para Web ultrapassa pagar um pouco mais de CPU. Além disso, como já comentei ,raramente o gargalo de um Web service é CPU. Não adianta nada ganhar 3s ou 4s tratando uma requisição se você consultar uma tabela de 1.000.000 de registros sem um índice adequado.

Galera,

O parceiro me informou que cada requisição retorna em média 80kb de dados e a ideia é fazer milhares de pesquisa por dia, acredito que 200 mil requisições/dia.

No que diz respeito a bando de dados é mais tranquilo pq desses 80kb, apenas 1kb… por ai eu irei armazenar, então não será tão pesado. Minha dúvida é com relação ao tráfego, do peso dessas requisições.

Vocês acham que é possível fazer algo desse porte a um baixo custo? tem alguma hospedagem que me proporcione isso?

eu prefiro php, pela facilidade de encontrar servidores e pela ótima documentação.

[quote=rmendes08]
Mas vamos esclarecer um ponto … quando se diz que linguagem X é mais rápida que Y estamos falando sobre CPU.Sendo assim, se eu escrever uma multiplicação de uma matriz 1.000.000 x 1.000.000 em C e outra versão em Java (mesmo tamanho de variáveis, memória, etc.) é bem provável que a versão em C seja mais rápida que versão em Java e muuuito mais rápida que uma versão em Ruby, por exemplo. Existem vários benchmarks Internet afora que demonstram esse fato.[/quote]

Por isso é errado. Quando falamos de linguagens devemos estar falando de humanos e não CPUs.

Você pode escrever um programa Java, e concluir que o mesmo programa teria sido muito mais agil fazer em Ruby ou PHP, mas não da pra dizer se o programa vai executar mais lento ou mais rápido apenas baseado na linguagem em que ele foi escrito.

[quote=lkbm][quote=rmendes08]
Mas vamos esclarecer um ponto … quando se diz que linguagem X é mais rápida que Y estamos falando sobre CPU.Sendo assim, se eu escrever uma multiplicação de uma matriz 1.000.000 x 1.000.000 em C e outra versão em Java (mesmo tamanho de variáveis, memória, etc.) é bem provável que a versão em C seja mais rápida que versão em Java e muuuito mais rápida que uma versão em Ruby, por exemplo. Existem vários benchmarks Internet afora que demonstram esse fato.[/quote]

Por isso é errado. Quando falamos de linguagens devemos estar falando de humanos e não CPUs.

Você pode escrever um programa Ruby, e concluir que o mesmo programa teria demorado muito mais tempo para o programador fazer do que Java, mas não se ele vai executar mais lento.[/quote]

Colega, você está misturando as bolas …

Velocidade da linguagem é uma coisa, produtividade é outra. Como eu disse, velocidade de uma linguagem tem a ver com consumo de CPU, você só pode dizer que uma linguagem é mais rápida que outra comparando o tempo de execução de programas semelhantes em máquinas semelhantes, para isso servem os benchmarks, existema vários deles na Internet, mas de maneira geral o resultado é quase sempre o mesmo com relação a tempo de execução : C/C++ <<< Java < PHP, Python, etc.

Já produtividade seria a relação daquilo que você consegue fazer e o tempo necessário para desenvolver, sendo assim, quanto mais abstrata e quanto mais bibliotecas a linguagem tiver, mais produtivo o programador é. Sendo assim, é óbvio que linguagens de mais alto nível serão mais produtivas.

Enfim, faço questão de definir as terminologias corretas para que se possa atacar o problema corretamente. Ou seja, no exemplo do nosso amigo, mais do que escolher uma linguagem, a decisão real é escolher entre velocidade da linguagem ou produtividade da linguagem. Ou seja, devo escolher a linguagem mais rápida ou a linguagem mais produtiva ?

E como sempre, a resposta é o "depende". Depende, antes de mais nada de requisitos não-funcionais: o sistema tem um tempo limite de resposta ? Tenho limite no footprint ? Tenho restrições de ambiente ? Por isso que nem sempre é possível a escolher a linguagem mais produtiva para todo tipo de situação, fosse assim jogos hardcore e sistemas de tempo real já seriam implementados em Ruby, Python ou algo semelhante. Por outro lado, para a maioria dos sistemas Web pode não haver nenhum ganho significativo no troughput (requisições/segundo) trocando a linguagem.

Embora eu conheça um caso real. Essa aplicação foi desenvolvida por alguns colegas meus: http://vimember.com/, e algumas rotinas de processamento de imagens tiveram de ser implementadas em C para que o sistema ganhasse a responsividade desejada.

O que o benchmark de uma linguagem testa não é a “velocidade” ou “desempenho” da linguagem, e sim do código objeto que é produzido por um compilador.

O que estou dizendo é que um programa escrito em uma linguagem (digamos PHP) pode executar em diferentes velocidades, dependendo de como ele é compilado. Sei que é comum as pessoas se referirem a velocidade como se fosse algo inerente a linguagem, mas não deixa de ser um erro de conceito.

A única velocidade que linguagem influencia é na velocidade de desenvolvimento (produtividade). Nesse ponto eu concordo, linguagens de alto nível são mais produtivas.