Szybkość języków programowania

0

O co chodzi z tą szybkością języków programowania, bo podobno taka java jest strasznie wolna. Dlaczego java jest wolniejsza np. od C#, a zwłaszcza C++.Od czego zależy szybkość danego języka?
Czy jeśli Mortal Kombat na Androida się długo wczytuje to wina tego, że był robiony w Javie? Bo czasem to i z 2-3 minuty mi się włącza.

Ja głównie programuje w Pythonie i czy jest to szybki język?

2

Zaraz po C jest Rust, nie wiem czemu autor go nie dodał.
https://bulldogjob.pl/news/23[...]programowania-jest-najszybszy

3

To wszystko zależy od tego jak piszesz, niezależnie od języka można coś "popsuć" i będzie działać wolno.

Jak chcesz żeby działało najszybciej to schodzisz "coraz niżej" w poziomie języków np. Python -> C -> Assembly -> microcode. Ale często napisanie jakiejś prostej rzeczy w języku "wyżej" zajmie N czasu mniej - dlatego w większości przypadków nie warto zwracać na to uwagi, chyba, że piszesz dla Google ew. jakiejś wielkiej korpo gdzie oszczędność na poziomie kilku ms przykłada się na dużo $$$.

9

Język służy do pisania kodu, nie do jego wykonania, dlatego też nie można mówić, że dany język jest szybki lub nie. To nie język jest szybki, a program, który na jego podstawie zostanie wygenerowany (z wyłączeniem stricte skryptowych).

Szybkość danego kodu zależy od wielu rzeczy, np. sposobu jego wykonania, od kompilatora/interpretera, który ten kod przygotowuje do działania (czyli kompiluje i coś wypluwa lub interpretuje w locie), użytych optymalizacji oraz od samej jego ogólnie rozumianej jakości.

0

Piszmy strony internetowe w C! Wreszcie będą się szybko wczytywać!

11

A. "C# is much faster than C++"
B. "It cannot be true"
A. "Sure it can"
B. "By how much?"
A. "Usually by 2-3 months"

0

(W poście zakładam, że programista pisze program w jak najbardziej optymalny sposób).

Podejrzyj sobie jakiś plik exe. Składa się on z poszczególnych instrukcji procesora. Tworząc program w taki sposób, wykona się on najszybciej. Procesor ma do wykonania konkretne instrukcje bez zbędnych zadań.

Następnie masz assemblery, które są taką bardziej ludzką postacią kodu maszynowego (czyli execa). Masz już tu konkretne polecenia. Program jednak musi zostać skompilowany do kodu maszynowego, a podczas procesu kompilacji może powstać jakiś nadmiarowy kod. Czyli program napisany w assemblerze może być nieco wolniejszy niż ten napisany w kodzie maszynowym, ponieważ może mieć do wykonania nieco więcej operacji.

Oczywiście nikt normalnie nie pisze ani w kodzie maszynowym, ani w assemblerze gotowych programów (poza specyficznymi branżami).

Dalej mamy inne natywne języki, np. C, C++, Delphi, Python (?). Te języki są już dużo bardziej zrozumiałe dla człowieka. Posługują się też bezpośrednio mechanizmami systemu operacyjnego. Jednak podczas procesu kompilacji tworzy się więcej nadmiarowego kodu niż przy kompilacji assemblera. Dlatego też programy pisane w tych językach będą wolniejsze od programów pisanych w assemblerze.

Dalej mamy języki wysokiego poziomu, np.: C#, Java. Te języki są kompilowane do kodu pośredniego. Kod pośredni nie jest wykonywany przez procesor (jak w przypadku języków niskiego poziomu), tylko interpretowany przez specjalne oprogramowanie (Wirtualna Maszyna Javy - JVM, czy też CLR dla .NET). I przez tą warstwę pośrednią taki program wykona się najwolniej. Jednak programy w językach wysokiego poziomu pisze się najszybciej.

Oczywiście to jeszcze zależy od wersji, rodzaju interpretera, kompilatora itd. Niemniej jednak tak to wygląda w teorii. W praktyce możliwe jest napisanie programu w C i w C# w taki sposób, że ten w C# będzie szybszy :)

2

@Juhas: trochę mitów tam jest ;) Tak było moze kiedyś, ale dziś trzeba brać pod uwagę jeszcze optymalizacje

  1. Napisanie kodu lepszego od tego co wygeneruje kompilator jest trudne, bo kompilator stosuje kupę "sztuczek". W efekcie nie liczyłbym na to że napiszesz w asmie coś lepszego niż wygeneruje ci kompilator C.
  2. W językach z maszynami wirtualnymi dochodzi JIT i optymalizacja kodu w runtime, która może sprawić że kod będzie szybszy niż natywny. Trywialny przyklad: w kodzie robisz gdzieś mnożenie x*y. Nie da się tego specjalnie zoptymalizować, więc wygeneruje się z tego jakis mul. Ale może w runtime y=2 i zamiast mnożenia można zrobić przesnięcie bitowe? W binarce skompilowanej nic się już z tym nie zrobi, masz tam w asemblerze mul i tyle. W języku z maszyną wirtualną i JITem sytuacja wygląda inaczej, bo tam takie coś można zoptymalizować w czasie wykonania :)
0

@Shalom: celowo napisałem na początku o optymalnym pisaniu kodu :) To jest założenie, bez którego się nie obejdzie. Nie pisałem o optymalizacjach kompilatorów, żeby nie zaciemniać. No i jasne, że poszczególne instrukcje mogą być szybsze w wysokim poziomie. Jednak ja miałem na myśli całą użyteczną aplikację ;)

0

O co chodzi z tą szybkością języków programowania, bo podobno taka java jest strasznie wolna.

A czym to jest podparte? Zwykle tacy mędrcy co narzekają na szybkość Javy albo pamiętają ładowanie apletów Javy na Pentium 133 MHz z 16 MiB RAM albo testują szybkość unboxingu sumując Listę dużych Integerów. Swego czasu zrobiłem mały benchmark, ale bardziej sensowny niż te typowe. Mierzę wydajność czystego kodu w C, Javie, Pythonie, JavaScript etc podczas gdy mikrobenchmarki często testują wydajność funkcji wbudowanych w język jak np sortowanie kolekcji w Pythonie, które jest zakodowane w C czy np regexy, które też są pisane często w C mimo, że odpalane z innego języka.

Porównanie wydajności jest tutaj: https://github.com/tarsa/TarsaLZP

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0