Porównanie języków programowania pod kątem szybkości działania

Języki programowania są używane przez programistów do pisania określonych zestawów instrukcji do mikroprocesorów wykonujących określone zadania. Istnieje wiele rodzajów języków. Silnik stworzony przez pioniera komputerów Charlesa Babbage`a był prekursor nowoczesnego osobisty komputery, a dokładniej Logika komputerowa. Aby programista mógł wybrać odpowiednie instrukcje do napisania programu, konieczne było odpowiednie porównanie języków programowania. Ten artykuł jest o tym!

Początki języków programowania

Początki języków programowania

W 1942 roku narodził się język ENIAC, kiedy idea komputera ogarnęła świat nauki. Był to 30-tonowy potwór, zawierający ponad 20 000 lamp próżniowych i zajmujący 167 metrów kwadratowych powierzchni. Programowanie było równie uciążliwe. Po wykonaniu obliczeń rozszyfrowanie ENIAC-a zajęło tygodnie, proces odzyskiwania danych z dysku twardego w ogóle nie istniał. "Szyfr" był jeden, więc nie było potrzeby porównywania języków programowania.

W 1945 roku dr John von Neumann, pracując nad jego udoskonaleniem, odkrył, że dodawanie i zapisywanie kodu konwertera do programowania znacznie skraca czas procesu i tak narodziła się nowa dziedzina EDVAC, co jest skrótem od Electronic Discrete Variable Automatic Computer (elektroniczny dyskretny komputer automatyczny). W przeciwieństwie do ENIAC-a, EDVAC używał kodu binarnego zamiast dziesiętnego - serii zer i jedynek na kartach dziurkowanych wprowadzanych do maszyny. Kod dziesiętny jest pierwszą generacją, kod binarny drugą. Deweloperzy mieli teraz formalne podstawa porównywanie języków programowania. Jak również wybór.

Wkrótce powstał pierwszy elementarny język programowania. Transmisja sterowana warunkowo Short Code została wynaleziona w 1949 roku. W przeciwieństwie do kodu maszynowego, Short Code używał operatorów logicznych takich jak "if", "then" do definiowania poleceń, które były podobne do logicznych stwierdzeń w matematyce, np. jeśli czerwony jest "THEN stop" lub "IF 0", to pomnóż przez dwa.

"Składacz" urodził się w 1952 roku. FORTRAN był pierwszym z języków programowania trzeciej generacji stworzonym w 1957 r., po nim nastąpił LISP, Algol w 1958 r. i COBOL w 1959 r. Języki programowania trzeciej generacji używały rzeczywistych angielskich słów lub składni dla kompilatorów do tłumaczenia na kod binarny lub maszynowy. Co było całkiem przydatne. Języki programowania tego okresu porównywano na korzyść Algola lub COBOL-a, w zależności od mocy technicznej maszyny.

Algol lub "szyfr" algorytmy były gorsze od BNF Pascal w 1968 r. Każde obliczenie mogło się odbyć tylko z określoną sekwencją kodu lub funkcją. Kolejne języki zwiększyły efektywność kodowania programów poprzez zastosowanie Programowanie zorientowane obiektowo, a także metody i składnia skryptów, tworząc wysoce strukturalne języki C ++, Perl i Java Visual Basic Widgets. Teraz było kilka "szyfry". W tym okresie programiści mieli wiele kryteriów porównywania języków programowania.

Rodzaje programów do kodowania

Rodzaje programów do kodowania

Istnieją trzy rodzaje wyraźnie zróżnicowanych języków: języki maszynowe, języki niskiego poziomu i języki wysokiego poziomu.

Przyporządkowanie języków oprogramowania:

  1. Język maszynowy, który komputer rozumie bezpośrednio poprzez zastosowanie kodu binarnego, czyli 0 i 1.
  2. Języki niskiego poziomu są znacznie łatwiejsze do nauczenia niż języki maszynowe, ale w dużej mierze opierają się na języku maszynowym komputerów.
  3. Języki programowania wysokiego poziomu są łatwiejsze do nauczenia, ponieważ używają słów lub poleceń z języka naturalnego, zwykle angielskiego, np. najbardziej znany język BASIC.

Rodzaje języków wysokiego poziomu dzieli się ze względu na punkt widzenia na sposób działania programów i filozofię, która za nimi stoi:

  1. Imperative, Cobol, Pascal, C i Ada.
  2. Deklaratywne, Lisp i Prolog.
  3. Zorientowany obiektowo, Smalltalk i C ++.
  4. Zorientowany na problemy, konkretny języki dla zarządzanie.
  5. Naturalny język programowania, nowe rodzaje, które starają się zbliżyć projektowanie i konstruowanie do języka ludzi. Uprość to.

Inna klasyfikacja wysokiego poziomu uwzględnia rozwój komputerów i jest stosowana jako kryterium porównywania języków programowania:

  1. Pierwsza generacja - maszyna i asembler.
  2. Druga generacja - pierwsze języki programowania wysokiego poziomu imperatywnego FORTRAN, COBOL.
  3. Trzecia generacja to języki programowania o wysokim stopniu imperatywności, ale znacznie bardziej używane i aktualne dzisiaj: ALGOL 8, PL/I, PASCAL, MODULA.
  4. Czwarta generacja - w aplikacjach do zarządzania bazami danych: NATURAL, SQL.
  5. piąta generacja - dla sztuczna inteligencja oraz przetwarzanie języka naturalnego: LISP, PROLOG.

Kryteria porównania. Zasada

Kryteria porównawcze

Porównywanie języków programowania stron internetowych nigdy nie było prostym i obiektywnym zadaniem. Zazwyczaj bierze się pod uwagę dziesięć kryteriów oceny.

Wykaz kryteriów:

  1. Ekspresywność - prostota języka do wyrażania algorytmów.
  2. Precyzyjna definicja - spójność i brak niejednoznaczności.
  3. Typy i struktury danych.
  4. Modularność - możliwość samodzielnego rozwijania komponentów.
  5. Środki I/O - wsparcie dla współpracy z środowisko.
  6. Przenośność.
  7. Efektywność i wydajność do porównania szybkości działania języków programowania.
  8. Pedagogiczne - łatwość uczenia się i nauczania.
  9. Wspólność - możliwość zastosowania, wykorzystanie.
  10. Normalizacja.

Ta lista jest używana do porównania w bardzo szerokim spektrum od LISP do COBOL przez ALGOL i służy jako punkt wyjścia do uzyskania wyników.

Wysoka ekspresyjność

Wysoka ekspresyjność

Język C zawsze był wysoce ekspresyjny i potencjalnie bardzo ekonomiczny, biorąc pod uwagę małą liczbę słów kluczowych i moc niektórych operatorów. Obecnie istnieje jednak potrzeba wspierania bardziej złożonych struktur, gdzie Implementacja C staje się niebezpieczna.

Porównanie składni języków programowania ma ogromne znaczenie dla programistów. Na przykład C ++ zapewnia skok jakościowy w stosunku do C, zapewniając nowe przydatne funkcje w różnych kontekstach. Na przykład przeciążanie operatorów dodaje dużej ekspresyjności aplikacjom naukowym i matematycznym, składnia klas i obiektów pozwala na łatwe manipulowanie różnymi strukturami danych i operacjami. Szablony można traktować jak makra prekompilatora, ale z dużo większą funkcjonalnością. Ale wszystko to nie jest wolne od błędów spowodowanych głównie przez utrzymanie zgodności z C w fazach łączenia i wykonywania.

W końcu C ++ jest bardziej ekspresyjny niż C dla średnich i dużych aplikacji, co jest do przewidzenia, ponieważ został zaprojektowany, aby objąć więcej problemów z "wieloma paradygmatami". Porównanie języków programowania C i Java Delphi.

Wysoka ekspresyjność

Ze swojej strony, ten ostatni używa składni bardzo podobnej do C ++, chociaż wyklucza niektóre z jego ciemniejszych cech. W szczególności eliminacja wskaźników nie uczyniła go bardziej ekspresyjnym, ale jest znacznie bezpieczniejszy.

Aspekty dla programistów

Aspekty dla programistów

C od dawna jest uważany za dobry przykład spójnego i jednoznacznego języka, zwłaszcza wśród współczesnych. Twórcy przyznają się do pewnych braków w zapisie. Głównym problemem była duża liczba aspektów oferowanych deweloperowi, wśród których wyróżniał się rozmiar i typy danych. Na przykład w kompilatorach PC z lat 80. XX wieku zakres typów "int" wynosiła od - 32768 do 32767, co było wyraźnym odzwierciedleniem 16-bitowych procesorów. Obecnie zwyczajowo przyjmuje się 32 bity dla liczb całkowitych, więc zakres często waha się od -2147483648 do 2147483647. Oczywiście, stwarza to poważne problemy z przenośnością języka.

Te niedociągnięcia zostały niestety całkowicie odziedziczone przez C ++, a dziś nie ma dla nich wyraźnego rozwiązania. Język Java, został od początku zaprojektowany tak, aby wyeliminować niejednoznaczności i zależności implementatora i jego klas pomocniczych, dlatego jest obecnie najlepszym z popularnych języków.

Typy i struktury danych

Język C zapewnia mechanizmy, które obecnie są uważane za rudymentarne dla strukturalnych typów danych. Tablice pozwalają na jednorodne kolekcje o stałej długości, które mogą być określone w czasie kompilacji i są bardzo blisko związane z manipulowaniem wskaźnikami. Istotną wadą jest brak typów danych do reprezentowania ciągów, które są nietypowo obsługiwane przez tablice znaków.

Podczas gdy ten "minimalizm" przyczynia się do lepszej wydajności w czasie biegu lub optymalizacji w czasie kompilacji, wiele przypadków wymaga wsparcia dla bardziej złożonych typów i związanych z nimi operacji, takich jak wektory, listy, kolejki i inne. W praktyce istnieje kilka bibliotek, które uzupełniają te aspekty, np. popularny Glib, ale jego programowanie jest bardziej pracochłonne, ponieważ nie jest wbudowany w język. Poniższy przykład ilustruje wytworzenie dynamicznego wektora tablicowego.

Tworzenie wektora tablic dynamicznych

Ogólnie rzecz biorąc, programista powinien unikać tego rodzaju implementacji "od podstaw". Poniższy przykład rozwiązuje ten sam problem przy użyciu biblioteki Glib.

Typy i struktury danych

Ze swojej strony, C ++ zapewnia środki do tworzenia bardzo potężnych struktur danych, które są ściśle zintegrowane z językiem. Programista może również tworzyć własne typy z różnymi powiązanymi operacjami.

Modularność i poziomy pakowania

Modularność i poziomy pakowania

Pierwotnie kryterium to odnosiło się do zdolności do tworzenia niezależnych komponentów, które ostatecznie mogłyby się komunikować. W tym sensie języki pozwalają na tworzenie funkcji, klas i pakietów, z których każdy ma swoje własne konwencje.

Jeśli chodzi o "poziomy pakowania" komponentów, C w praktyce zapewnia tylko dwa poziomy: widoczne komponenty w pliku kodu źródłowego i globalnie widoczne komponenty, takie jak funkcje i zmienne. W C ++ pojęcia "klasy" i "przestrzeni nazw" zapewniają dwa dodatkowe poziomy "opakowania", podczas gdy w Javie odpowiedniki odpowiadają klasom i "pakietom". Kryterium obiektu I/O określa możliwość dostępu do plików w sposób sekwencyjny, arbitralny i indeksowany, który posiadają m.in. Nawiązuje się również do dostępu do systemów baz danych.

Dostęp do systemów baz danych

Jak "C" było i nadal jest jeden z najbardziej popularnych języki używane do tworzenia średnich i dużych systemów, każda aplikacja udostępniająca interfejs programistyczny umożliwia dostęp poprzez C. Jest to praktycznie uzasadnione dla wszystkich najpopularniejszych komercyjnych i niekomercyjnych baz danych, do których C ma nieograniczony dostęp, choć nie najwygodniejszy.

Ze swojej strony, program napisany w C ++ jest zwykle w stanie użyć C API. Wiele systemów baz danych zapewnia ulepszony interfejs obiektowy dostępny w tym języku.

Twórcy Javy, dzięki wcześniejszym doświadczeniom, ustandaryzowali obiektowy interfejs umożliwiający dostęp do dowolnej bazy danych w sposób przenośny. Ten interfejs API nazywa się Java Database Connectivity, a ze względu na dużą popularność Javy, prawie wszyscy główni dostawcy baz danych stworzyli implementacje tego interfejsu, promując przenośność w zakresie dostępności, przy jednoczesnym zachowaniu niezgodności i rozszerzeń SQL.

W tym sensie Java wprowadziła radykalne, choć przewidywalne podejście do rozwoju języka, w którym prawie nie ma cech zależnych od implementatora. Uzyskana przenośność jest jakościowo lepsza niż, co jest możliwe uzyskane z C/C ++, i jest wykonywane automatycznie przez każdego programistę. Jeśli więc wymagana jest maksymalna mobilność przy "niskich kosztach", wybór pada na Javę.

Porównywanie wydajności języków programowania

Porównywanie wydajności języków programowania

Ten aspekt zawsze interesował deweloperów i nadal jest przedmiotem ostrej debaty. Dobrze wiadomo, że praktycznie wszystkie komputery uruchamiają programy poprzez jedną lub więcej jednostek centralnych (CPU), które zawierają tak zwany "język maszynowy" lub "kod maszynowy", składający się z serii stosunkowo podstawowych lub bardzo "niskopoziomowych" operacji. takich jak zapisywanie bajtów do pamięci, dodawanie pary liczb, odczytywanie bajtów z urządzenia zewnętrznego itp.

Kiedy mówi się o wydajności/wydajności, zazwyczaj ma się na myśli porównanie szybkości języków programowania, z jaką programy są w stanie wykonywać różne zadania. A także należy wziąć pod uwagę zasoby systemowe wymagane przy jego realizacji.

Wszystkie języki muszą być w pewnym momencie "przetłumaczone" na "język maszynowy" dla wykonywanych programów. Mówiąc prościej, proces ten nazywa się "kompilacją" i zarówno C jak i C+ podążają za tym wzorcem "kompilacji" do "języka maszynowego" procesora. C w szczególności ma bardzo proste struktury danych, które są bezpośrednim tłumaczeniem na "język maszynowy". W wielu przypadkach ta prostota czyni program produktywnym.

Wspólność i standaryzacja

W praktyce, C jest powszechnie używany do tworzenia podstawowych lub niskopoziomowych komponentów, np. jądra wielu systemy operacyjne, podczas gdy C ++ i Java mają znacznie szerszy zakres - komercyjne aplikacje wszelkiego rodzaju. Java, w dużej mierze dzięki dalekowzroczności i rozgłosowi firmy Sun i różnych dostawców "serwerów aplikacji", jest obecnie szeroko stosowana w kontekście serwerów internetowych, serwletów i JSP, którym często towarzyszy wielowarstwowa architektura.

C i C++ są dobrymi przykładami znormalizowanych, udanych języków, co przyczynia się do otwarta konkurencja między wdrożeniami, bez poświęcania dla przenośności. Niestety, nie ma dla nich formalnych procesów certyfikacji, a wielu deweloperów po prostu ignoruje pewne cechy, co stwarza oczywiste niedogodności dla programistów chcących pracować "w standardzie.

Częściowo z tego powodu Sun początkowo wykluczył zastosowanie podobnego mechanizmu standaryzacji dla Javy (język i biblioteki), ale od tego czasu ustąpił i kontynuuje ten temat (Java Community Program.) Ponadto Sun zapewnia wymagające testy certyfikacyjne, dzięki którym deweloperzy mogą potwierdzić i opublikować swoje zaangażowanie w standardy.

Ewolucja i modernizacja

C i jego "standardowa biblioteka C99 wciąż czekają na pełną aktualizację implementacji. GNU GCC zawiera większość wymaganych funkcji i jest jednym z najbardziej stabilnych dostępnych języków.

C ++ kontynuuje swoją podróż z nową aktualizacją C ++ 0x skupioną na rozwoju biblioteki, w tym GUI API.Ze swojej strony, Java kontynuuje dodawanie i ulepszanie podstawowych bibliotek, jak również języka bazowego w przyspieszonym tempie, mając na celu stworzenie nowoczesnego i bardzo funkcjonalnego platforma dla różnego rodzaju aplikacji.

Wsparcie dla bibliotek

Biorąc pod uwagę długoterminową trwałość aplikacji, zarówno C, jak i C ++ mają niezwykle szeroki zakres opcji bibliotecznych dla różnych celów. Ponadto zdecydowana większość nowych systemów dostarcza biblioteki umożliwiające współpracę z programami napisanymi w tych językach.

Jedynym wątpliwym aspektem jest to, że bardzo niewiele z nich jest znormalizowanych w taki sam sposób jak język. Ze swojej strony C ++ ma bardziej rozbudowaną bibliotekę, która obejmuje "standardową bibliotekę C", a także słynną bibliotekę wzorców "STL", która implementuje różne struktury danych we wspólny sposób i wiele algorytmów.

Java od początku miała dobrą politykę standaryzacji wielu bibliotek poprzez klasy i interfejsy dla wielu aspektów, które nigdy nie były rozważane w C lub C ++, takich jak GUI, dostęp do bazy danych, strony internetowe. Fakt ten wcale nie wyklucza korzystania z bardziej wyspecjalizowanych bibliotek firm trzecich. Kontekst standaryzowanych bibliotek wokół Javy jest tak szeroki, że "platforma Java" została ogłoszona jako zbiór technologii przeznaczonych dla różnych typów aplikacji.

Najlepsze języki programowania 2018 r. Interaktywna

Najlepsze języki programowania 2018 r

Porównanie wydajności języków programowania 2018 jest dostępne online na stronie Spectrum.ieee. Ta aplikacja określa aktualną popularność dziesiątek istniejących. Możliwe jest ich filtrowanie poprzez wykluczenie zbędnych sektorów. Oceny są tworzone przez porównanie i połączenie 12 wskaźników z 10 źródeł. W tym roku zostanie wykorzystane jedno źródło mniej, ponieważ strona Dice zamknęła API.

Domyślny zestaw porównawczy

Domyślny zestaw porównawczy podaje aktualną ocenę IEEE Spectrum, ale istnieją wstępnie ustawione opcje dla tych, którzy są bardziej zainteresowani wybraniem czegoś specjalnego i stworzeniem własnej oceny. Aby porównać z danymi z poprzedniego roku, należy kliknąć "Dodaj porównanie", a następnie "Zmień ocenę", co pozwoli na porównanie danych z lat 2014-2017. Ta aplikacja została pierwotnie opracowana we współpracy z dziennikarzem danych IEEE Spectrum Nickiem Diakopoulosem.

Analiza Stack Overflow porównuje dane IEEE Spectrum dotyczące najbardziej istotnych "szyfry" 2018. Python jest dumny z miejsca w tabeli porównawczej języków programowania. Badając świeże dane rankingowe, widać, że jest to jeden z najbardziej uniwersalnych, jakie istnieją, może być stosowany w wielu różnych dziedzinach. Wielu uważa, że jest to język, który służy do niemal każdego celu.

Artykuły na ten temat