Executando verificação de segurança...
16

Quais as linguagens mais rápidas?

Fiz dois scripts, ambos para contar de 0 até 1 bilhão, um em python e outro em java, achei muito massa o resultado por que o Java terminava o programa em menos de 2 segundos e o python demorava mais de 3 minutos...

Os códigos foram:

Python


n = 0
while n < 1000000000:
	n += 1
print('final')

Java


public class count {
	public static void main(String[] args) {
		int n = 0;
		while (n < 1000000000) {
			n += 1;
		}
		
		System.out.println("final");
	}
}

Gostaria de saber, em que situações a velocidade da linguagem tem relevância? vejo situações em que é mais fácil programar com python mas talvez o mais eficiente seja Java

Carregando publicação patrocinada...
8

Bacana.
Fiz o mesmo programa em C e em Assembly e como esperado, assembly foi mais rápido:

Programa em C:

int main() {

	for (int i=0; i<1000000000; i++) {}

	return 0;
}

Teste:

$ gcc -o teste_c teste.c                                                               
$ time ./teste_c
$ ./teste_c  1,35s user 0,00s system 99% cpu 1,350 total

Programa em Assembly X86_64:

section .data

section .text
global _start
_start:
	mov RAX, 1000000000
	loop:
	dec RAX
	cmp RAX, 0
	jz exit
	jmp loop


exit:
	mov RAX, 60
	mov RDI, 0
	syscall

Teste:

$ nasm -felf64 -o teste_asm.o teste.asm
$ ld -o teste_asm teste_asm.o
$ time ./teste_asm
$ ./teste_asm  0,23s user 0,00s system 99% cpu 0,237 total

Aí resolvi fazer um outro teste e pedi ao gcc pra otimizar o código:

$ gcc -o teste_c2 teste.c -O3
$./teste_c2  0,00s user 0,00s system 74% cpu 0,003 total

Pra minha surpresa, a otimização do gcc conseguiu gerar um código mais rápido do que o código em assembly que eu escrevi.

1
1
1

Sim claro:

gcc -o teste_c2.asm teste.c -O3 -S
	.file	"teste.c"
	.text
	.section	.text.startup,"ax",@progbits
	.p2align 4
	.globl	main
	.type	main, @function
main:
.LFB0:
	.cfi_startproc
	xorl	%eax, %eax
	ret
	.cfi_endproc
.LFE0:
	.size	main, .-main
	.ident	"GCC: (GNU) 12.2.0"
	.section	.note.GNU-stack,"",@progbits

Interessante que o GCC removeu completamente o loop vazio.

1
1
1
1
0

Seria interessante ver que código foi gerado, porque otimizadores costumam remover código inútil, como claramente é o caso.

Já foi postado :D

3

A linguagens mais rapidos que conheço são c/c++ mas rust as vezes em alguns benchmarks se saem mais rapido, quando não conseguê fica sempre em segundo ou em terceiro por uma diferença bem pequena. Mas o melhor de rust é que ele consegue tão rapido quando C/C++ e com uma eficiencia energética maior. Eu li um artigo meses atrás que classificou rust como a linguagem com maior eficiencia energética do mundo... calculando performance vs uso de energia.

2

Pelo que sei, o Java ele pula o loop por julgá-lo inútil (compiler optimization) e dá o resultado final direto, diferente do Python, que não pula o loop e executa a mesma ação várias vezes.

1
1
1

Eu também fiquei surpreso com o desempenho dessas duas linguagens em seus scripts. É impressionante que o Java tenha conseguido contar até 1 bilhão em menos de 2 segundos, enquanto o Python levou mais de 3 minutos.

Em geral, a velocidade da linguagem tem muita relevância em aplicações que exigem alta performance e processamento rápido de dados. Por exemplo, em sistemas de computação em nuvem, onde é necessário processar grandes quantidades de dados em tempo real, a velocidade da linguagem pode ser determinante.

No entanto, em outras situações, a facilidade de uso e a expressividade da linguagem podem ser mais importantes do que a velocidade. Por exemplo, em projetos de ciência de dados, onde é necessário explorar e manipular os dados de maneira rápida e fácil, linguagens como Python podem ser mais adequadas.

No final, a escolha da linguagem vai depender dos objetivos e das necessidades do projeto em questão. É importante avaliar as vantagens e desvantagens de cada linguagem e escolher a que melhor atenda às suas necessidades.

Este comentário foi gerado por uma inteligência artificial. Para saber mais, leia esta publicação.

1

Benchmark ruim. Pra cenários reais seriam várias chamadas de funções distintas.

Dessa forma serial, linguagens compiladas como C, Fortran, Pascal devem se dar melhor que Python e JavaScript, que são interpretadas.

Além disso tem dois pesos: escrever mais rápido é melhor que programa mais rápido?

Otimização prematura é a raiz de todo o mal (grande Knut)

1

Esse lance de comparar a velocidade de uma linguagem é bem relativo. Se fosse necessário fazer essa tarefa na prática com o Python, seria usado uma biblioteca escrita em C, que pode ser usada pelo Python e naturalmente a operação seria muito rápida, como em C: https://www.digitalocean.com/community/tutorials/calling-c-functions-from-python

Python é usado para Data Science, cálculos científicos, além de AI e ele desempenha bem essas tarefas, pois os módulos responsáveis pelos cálculos são escritos em C.

Então tem uma diferença grande entre um benchmark simples como esse e o que seria usado na prática.

1

Legal ver pessoas discutindo sobre algo assim. Eu sempre tento a medida do possivel otimizar meu código ao máximo. Sempre me lembro de uma palestra que vi da criadora do COBOL no youtube, dizendo como CADA NANOSEGUNDO era importante!!
Hoje usamos nosso hardware bem aquém do que ele pode oferecer em termos de performance.

1

Esses testes de benchmark é complicado, pois é muito difícil ter um ambiente isolado, como por exemplo poderia ter mais processos rodando quando o python tava sendo executando, anyway...
Acho que em relação velocidade, vai muito do que você vai realizar, como o rapaz comentou, atualmente o python é largamente utilizado para Big Data, ou seja, trabalhar com grande escalada de dados e processamento. Mas por exemplo também é possível realizar isso com o Java, hoje a bolsa de valores (b3) é feita em Java, curioso né? Pessoal fala que Java é lento etc... mas a bolsa brasileira é feita usando Java (não sou programador Java 😅).
Eu geralmente tenho visto nas consultorias que é bem difícil você ter que lidar com um grande processamento de requisições (salvo big techs), eu focaria (quando a performance não for um ponto primordial) em algo que traga mais facilidade de manutenção e rapidez no desenvolvimento

1

Imagine uma situação de produção. Vários clientes simultâneamente utilizando sua aplicação, executando várias funções distintas, consumindo o banco de dados de diversas formas diferentes, sobrecarregando seu servidor com acessos variados.
A velocidade de execução é relevante para diferença de segundos, imagina no seu exemplo que foi de minutos.

1
1

Que massa. Sabe me dizer se a quantidade de linhas em um programa interfere no desempenho?
Tipo... um programa com 200 linhas é mais rápido que um programa de 300 linhas? Ou isso não importa muito, o que vale é a estrutura?

2
1
2

Não importa amigo, desde que o código seja bem escrito, o trabalho de otimizar o código é do compilador :)

Pra linguagens interpretadas pode ser um pouco diferente, mas de modo geral, não se costuma procurar performance em linguagens de scripts

1
1

Na maioria das aplicações na vida real, o gargalo é externo (banco de dados, rede, disco..).

A linguagem vai impactar mesmo em outras esferas: suporte da comunidade, profissionais no mercado, bibliotecas disponíveis...

Melhor deixar a otimização para uma etapa posterior do projeto.

1

Linguagens não possuem velocidade. No máximo implmentações de linguagem é que possuem essa característica.

Para fazer cosias simples, para uso pessoal, para usar onde o desperdício de recurso ou que pode demoar não í importante use o que achar melhor. Se um dia precisar de algo melhor reescreve na linguagem que permite que pode dar mais eficiência. Se acha que isso vai acontecer, então já use uma assim.

Em exemplos simples importa pouco, mas em aplicações reais importa mais a forma de fazer do que a linguagem que está usando. Em um código complexo, eu faço ficar mais rápido em Python do que uma pessoa que não sabe fazer direito pode fazer em Assembly. Depende do código e depende do programador. Não tem uma resposta simples. Quem acha que é simples está sendo ingênuo.

Farei algo que muitos pedem para aprender programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

-4

É muito fácil culpar a linguagem quando seu código é ruim kkkk.

Tenta refazer o seu test em python usando a biblioteca numpy pra vc ver o resultado, com ctz vai demorar menos de 1 segundo.
O web do youtube é feito em python/django, então eu creio que qualquer aplicação web CRUD pode tranquilamente ser feita em python sem nenhum gargalo de performance.

A maioria dos casos que essa performance nos milésimos importa são em sistemas de baixa latência como: radares, algoritmos de trading, games, sistemas operacionais, drivers, frameworks e etc.

Mas como dito, seu código importa mais do que a sua linguaguem, então aprende as boas práticas, aprende algoritmos, aprende no que a sua linguaguem é boa e no que ela é ruim que você vai bem mais longe.

Tenta comparar em qual das duas você treina uma rede neural com mais facilidade. Compara me qual das duas da pra fazer aplicativos mobile. Compara em qual das duas tem um ecosistema maior de bibliotecas pro seu projeto.

Comparar as duas linguagens contando até 1 bilhão é uma comparação muito rasa, a gente escreve código pra construir coisas, não pra ficar contando.