Najwydajniejszy język programowania


(Jarek P) #1

Witam.

Wiem,że takich pytań było mnóstwo, ale za każdym razem kończyły się sporem.

Do rzeczy. Nauczyłem się już programować w C# i chciałbym wziąć się za kolejny język. Ale jaki ? I to jest moje pytanie. Który język programowania jest najwydajniejszy (programy chodzą najszybciej etc).


(Phobos64) #2

Assembler. Powodzenia :slight_smile:


(etam) #3

Co racja, to racja.

Ewentualnie można zaciągnąć trochę hamulca i przejść na C.


(Jarek P) #4

A jak z wydajnością przy C++ ? Czy programowanie w językach niskich poziomów nie jest trochę masakryczne dla programisty ? :smiley:


(Phobos64) #5

Przykładowy program pokazujący aktualną datę - http://www.assembly.happycodings.com/code4.html Sam oceń. Zalety 10-100x lepsza wydajność, 10-100x krótszy kod wyjściowy. Wady 10-100x trudniejszy :slight_smile:


(MaRa) #6

Najpopularniejszy jest C++


(Jarek P) #7

Nie no :smiley: Aż tyle czasu na pisanie prostego programu to nie mam. Chyba wybiorę C++ :slight_smile:


(Sawyer47) #8

Istnieje ogólnie taka zależność - im bardziej wysokopoziomowy język tym krótszy kod, ale tym dłuższe czasy wykonania.

Tutaj masz porównanie implementacji pewnych zadań w różnych językach: http://shootout.alioth.debian.org/

Średnio najszybsze jest C


(Ryan) #9

Nie jest prawdą jakoby kod pisany w ASM, z palca był zawsze najwydajniejszy. Nowoczesne kompilatory dokonują szeregu optymalizacji, których ręcznie, pisząc w ASM, ciężko jest dokonać. Co więcej wydajność aplikacji w znacznej mierze zależy od tego gdzie jest jej wąskie gardło. Przykładowo w przypadku gier wąskim gardłem najczęściej jest I/O, którego przepustowości żaden język nie poprawi. Liczy się wtedy sposób ułożenia danych, wzorce dostępu do niego, zdolność wykorzystania do maksimum pamięci podręcznej. Optymalizacji tego typu nie dokonuje się w ASM, bo nie dotyczą kodu, a danych. Mikrooptymalizacje w ASM nabierają na znaczeniu wyłącznie w sytuacji, w której kompilator nie radzi sobie z optymalizacją kodu. (ale i wtedy najczęściej jest to problem tego jak jest on napisany a nie samego języka) Jeśli z kolei rozwiązywany problem cierpi głównie na brak mocy obliczeniowej i istnieje szansa ulepszenia go przez zmianę lub podkręcanie algorytmu, wybrany język traci na znaczeniu i pierwsze skrzypce zaczyna grać możliwość iteracyjnej pracy z kodem, wygoda tworzenia, debugowania i pielęgnacji. Tutaj ASM jest kompletnie wstecznym rozwiązaniem i może wyłącznie przeszkadzać.


(Phobos64) #10

Ryan, ty z młodego pokolenia widzę :wink: Dla ciebie C to już najniższy poziom języka, ja z trochę innych czasów. Nie twierdze, że debugowanie i optymalizacja jest tam najwygodniejsza, ale na pewno wydajność jest lepsza, a kod mniejszy. Bo nie powiesz mi, to co w asm zrobię sam, dołączając własne procedury, będą zajmować mniej miejsca niż masa bibliotek dołączona przez kompilator.

To samo z wydajnością. Od wielu lat obserwuję jak optymalizacja kodu idzie w kierunku maksymalnego zużycia procesora. Panom programistom się nie chce optymalizować, albo nie umieją. Kiedyś było inaczej.

  • 177kB

http://www.pouet.net/prod.php?which=30244

Zrobisz to w C, żeby tyle zajmowało? :slight_smile:


(Ryan) #11

Źle widzisz. Przygodę z programowaniem zaczynałem 21 lat temu, od basica i asemblera na C64. W międzyczasie zahaczyłem o kilka platform, produkowałem się na demoscenie. Na studiach zajmowałem się optymalizacją pod konkretne architektury. Nie jestem z młodego pokolenia, jestem pragmatyczny i mam praktyczne doświadczenie w dyskutowanej dziedzinie. I tak, moje intro 4kB jest w znacznej mierze w C, ze wstawkami w ASM dla zamiennika math.h. Rozmiar intra 4k determinuje ilość wciągniętych bibliotek i zastosowanie kompresji w programie. Najpopularniejszy na demoscenie Crinkler łyka OBJ-y z Visual C++ nie bez powodu: kompilator dobrze optymalizuje kod, można odrzucić zależności od wszystkich bibliotek i zastąpić CRT runtime.


(pebal) #12

Polecam język C/C++ i dobry kompilator, np. Intela.


(Jarek P) #13

A co z MS'owym Visual C++ ?

-- Dodane 05.04.2011 (Wt) 12:52 --

A co z MS'owym Visual C++ ?


(Phobos64) #14

Zdolny jesteś. Pierwszoklasiści z podstawówki rzadko kiedy potrafią czytać a ty już i basic i assember :slight_smile: A Crinkler deko się różni od firmowych kompilerów. Nie sądzę aby przedmówcy w ogóle wiedzieli co to demoscena.


(pebal) #15

Aby się nauczyć języka wystarczy dowolny kompilator, zgodny ze standardem. Visual C++ jest jak najbardziej ok.


(Ryan) #16

Crinkler nie jest kompilatorem. Jest linkerem z kompresją. A przedmówcy dyskutowali o wydajności, więc dodałem komentarz od siebie na ten temat. Skrytykowałeś tę opinię bazując na losowej opinii na mój temat i odwołałeś się do demosceny. Odpisałem dlaczego Twoja opinia jest niesprawiedliwa, nic więcej.


(Phobos64) #17

Ja bazuje na opinii innych, koderem nie jestem, znam natomiast wielu. I już trochę nie w temacie, na bierząco. Assember jednak był najwydajniejszy i podejrzewam, że do dziś jest, mimo, że dzisiejszych koderów przyprawia o dreszcze :wink: Nie twierdze, że wiem wszystko, ale dla mnie różnica jest :slight_smile:


(Ryan) #18

Nie jest najwydajniejszy z powodów, które podałem wcześniej. Procesory są zbyt złożone, żeby ręcznie optymalizować większy kod na poziomie ASMa. Już na MMX automat lepiej przypisywał instrukcje do potoków jednostki wykonawczej niż zrobiłby to programista. A jeśli już naprawdę trzeba zbudować kawałek ASMa z palca, to robi się to dzisiaj najczęściej przy pomocy assembly intrinsics.


(Phobos64) #19

Nie będę się sprzeczał, brak mi argumentów :slight_smile:


(somekind) #20

Panowie programiści są drodzy, sprzęt jest tani. Panom programistom nie płaci się za fetyszyzowanie się wzrostem wydajności o 0,1% po tygodniu pracy, lecz za wymierne efekty pracy - dostarczenie określonej funkcjonalności w założonym terminie. Więc nie "nie chce" ani nie "nie umieją". To po prostu się nie opłaca.

Optymalizuje się to, co okaże się faktycznie wybitnie niewydajne. Ale robi się to po napisaniu aplikacji, profilując, testując i myśląc przy tym, czy gra jest warta świeczki.

Największym problem z asemblerem jest to, że wielu ludzi święcie wierzy w wydajność pisanego w nim kodu, mimo że niewielu tak naprawdę potrafiłoby napisać kod wydajniejszy niż skompilowany przez kompilator.

Poza tym język ten ma ograniczone zastosowania: mikrokontrolery, sterowniki, hobby. Nie służy do pisania programów użytkowych ani aplikacji WWW.

W dzisiejszych czasach tworzy się duże, złożone systemy, liczy się to, jak szybko można taki system napisać, czyli:

  • liczba dostępnych frameworków i bibliotek;

  • łatwość pisania bezbłędnego kodu w języku;

  • brak problemów z alokacją pamięci;

  • solidny i elastyczny projekt aplikacji.

Pytanie z tematu jest źle postawione, bo nie ma czegoś takiego jak ogólnie "najwydajniejszy język". Języki mogą być wydajne albo nie w określonym zastosowaniu. Ponadto, wszystko i tak zależy od umiejętności i doświadczenia programisty. Wszystko da się schrzanić i napisać w "szybkim" języku wolniej niż w "wolnym". Parę razy już takie kwiatki poprawiałem.