#-o A wszystko co zostało wykopane łopatą zostało wydłubane szpilką.
To, że coś jest napisane w C i można skompilować do asemblera nie oznacza, że jest napisane w asemblerze. Prawda? :?
C jest aż niezależną od architektury (czyli asemblera) nakładką. Taka była jego główna przyczyna powstania. Poza tym dzisiejsze kompilatory potrafią tak optymalizować kod, że nawet radzieckim uczonym się o tym nie śniło (https://en.wikipedia.org/wiki/Optimizing_compiler), więc nie nazywałbym tego “zbędnym”.
I bardzo dobrze =D> Człowiek robi wszystko żeby nie robić nic. Dlatego stworzył kompilator, żeby odwalał za niego czarną robotę i sam mógł się zająć rzeczami na wyższym poziomie abstrakcji.
Dodatek na deser: http://susepaste.org/59209693 - ten kod asemblerowy powstał z jednej funkcji szablonowej z biblioteki standardowej C++ (troszkę go zaciemniłem zmieniając pewne nazwy na “bar” i “cux” żeby nie było zbyt łatwo). Zgadnij co to jest. (Odpowiedź dla niecierpliwych jest załączona pod linkiem “RE: Untitled”).
Człowiek na dzień dzisiejszy ogarnia asemblera i jeśli się postara i skupi to potrafi w nim programować.
Więc nie pisz że to niemożliwe.
E tam, 50 lat to o wiele za dużo, a z kasą też za wysoko wycelowałeś.
Hehe… czepiasz się szczegółów?
Może i tak, ale pierwszy kompilator języka C od którego wszystko się wywodzi, został napisany w asemblerze.
Kod C jest kompilowany na kod w asemblerze i dopiero na kod maszynowy.
Optymalizować? Chyba nakładać na niego niepotrzebny kod.
Tu może masz rację, ale pomyśl że kiedyś programistą skończą się pomysły na nowe programy,
no i co wtedy? Chyba nie będą pisać po raz kolejny Total Comandera, tylko z inną nazwą i z niby większą liczbą funkcji, bo to się to po prostu nie sprzeda.
Więc co zrobią by przekonać kupujących do kupienia akurat ich programu?
Spróbują stworzyć najszybszy i najbardziej wydajny program tego typu.
Będą optymalizować kod, aż w końcu dojdą do wniosku że napiszą go w asemblerze bo będzie on wtedy najlepszym programem tego typu na rynku, no i to tak będzie trwać aż do kodu maszynowego.
Widzę, że rozgorzała duża dyskusja. Widzę, że dużo z was pisało o bibliotece QT. Może ktoś z was podać linka do kursu QT. Szukałem na goolglach, ale za dobrych nie znalazłem.
Kiedyś też byłem tak głupi. Potem trochę poczytałem i stwierdziłem że na x86 pisanie w assemblerze to strata czasu. Kompilator wygeneruje lepszy, względnie bezawaryjny (błąd na poziomie C++ łatwiej zdiagnozować i naprawić niż na poziomie ręcznie dłubanego Asma) i dzisiejszy kod. Chcesz mi powiedzieć, że piszesz jeden program osobno pod 2 różne architektury x86? I pod różne modele osobno? Osobno pod C2D i i7 i potrafisz sam zadbać o pełne wykorzystanie możliwości tych architektur?
I jeszcze umiesz zagwarantować poprawność kodu (a tu trzeba myśleć o każdym rejestrze) na poziomie dziesiątek czy nawet setek tysięcy linii? Nie, nikt nie jest w stanie zagwarantować bezbłędności nawet w języku najwyższego poziomu, a nie musi dbać nawet o to, że dzielenie zniszczy mu dane w rdx, albo spushował najpierw rax, a nie rbx.
Jestem ciekaw ile godzin zajmie ci rozpracowanie tego prostego kodu w Asmie ARMa (dużo prostszy od x86): http://pastebin.com/CZy1xVwe .
W ASMie to można pisać wstawki, GCC ładnie to w 4.8 rozwiązało umożliwiając pisanie w jednym pliku źródłowym wstawek dla różnych architektur.
Trzeba mieć odrobinę rozsądku, nie klepać dosłownie wszystkiego na najniższym poziomie, bo to jest cholernie kosztowne i po prostu głupie. Sam lubię klepać w niskim poziomie, ale nie jestem masochistą żeby wszystko w tym pisać, bo bym się zajechał!
A widzisz, ja 10-lat temu byłem taki głupi że myślałem że C/C++ to zmiana na dobre, a tu się poczytało i po programowało w C, no i się w końcu przestało tak myśleć.
C/C++ jak i asembler nie dają nam 100% możliwości działania na każdej architekturze, więc nie wiem co to ma do rzeczy.
Dlatego programista programujący w asemblerze, musi trzeźwo myśleć.
Praca to praca, to nie zabawa.
Czy chirurg może zrobić sobie nacięcie pacjentowi piłom mechaniczną bo tak będzie szybciej? Nie, bo by zabił pacjenta.
Niektórzy wrócą padnięci z pracy, a i tak jutro muszą do niej wstać.
Niekiedy robotnikom na budowie strzeli coś w stawie, i co wtedy zostaną w domu bo ich coś boli? Nie bo by ich szef wylał.
Każdy programista musi trzeźwo myśleć i nie walić asma gdzie się tylko da tylko dlatego że jest szybszy, tylko czasem napisać coś „wyżej” i mieć bezpieczniejszy kod łatwiejszy w dalszej rozbudowie i zrozumiany dla reszty zespołu z miejsca, a nie godzinach analizy. Nadal nie rozszyfrowałeś tych 2 asmów, czyżby to takie proste było, że nie chcesz pokazać jakie to banalne?
Twój przykład z wygenerowanym kodu jest wręcz genialny: pokazujesz użycie biblioteki C w C i użycie systemowych wywołań (+ komentarze i zbędne metadane samego kompilatora). Różnica jest taka, że tego Assemblera musisz napisać pod każdy system i pod każdą architekturę osobno (tworzy się ładny iloczyn kartezjański, jakby tak teraz brać pod uwagę x86, x86-64, ARM i ARM64), a C zadziała na każdym, jeśli jest na niego kompilator i sportowana biblioteka C (a chyba na każdy ważniejszy jest jakiś). Pisanie to czas, a czas to pieniądz. A kod to nie tylko wywołania systemowe, które akurat w ASMie są bardziej bezpośrednie, to też obliczenia i dziesiątki sytuacji w których możesz popełnić masę błędów albo nie zauważyć możliwości prostszego sposobu obliczenia (polecam prześledzić LLVM-bytecode, bardzo ładny Intermediate Language w postaci SSA). Może teraz swoim sposobem wypisz jakąś liczbę zmiennoprzecinkową?
Może nie zawodowo (bo tam klepię w Javie i Pythonie na razie), ale hobbistycznie „trochę” siedzę w Technikach Kompilacji. Mam w planach na inżynierkę napisać środowisko uruchomieniowe swojego bytecode’u z JITem na ARMa (i na razie bez JITa na cokolwiek innego).
Masz rację, idą na drugi dzień do roboty, mają 40% wydajności przez następne 2 tygodnie i zniszczone zdrowie, w końcu z powodu (nieudokumentowanego) kalectwa dochodzi do wypadku. A czegoś takiego jak „kodeks pracy” nie ma, BHP to chory wymysł, pracownik jest absolutnym niewolnikiem który dla pracy ma poświęcić całe swoje zdrowie i życie, nigdy się nie skarżyć na nic nawet jeśli przez to jego wydajność wynosi 10% i stwarza przez to zagrożenie dla siebie i innych, liczy się tylko to że pracuje i jego efekty są „dobre”.
Można wiedzieć gdzie pracujesz albo nad jakimi projektami? Bo to co wygadujesz brzmi jak assemblerowy nazizm.
Bo myślisz że mi się chce, mam to gdzieś co mi każecie, żeby pokazać swoją genialność i uświadomić mi że jestem w błędzie, a jak nie chce zmienić zdania to takiego po prostu nawalać mnie głupimi komentarzami.
Program napisany w C nie zadziała na każdej architekturze, jeśli chcesz wiedzieć.
Powodzenia!
A myślisz że oni tam zwracają uwagę na BHP, mają to gdzieś, zatrudnią na okres pracy i mogą cię zwolnić kiedy chcą. Wiem bo kolega pracował.
Wywalą to wywalą. Oskarżysz to się wyprą, a po za tym drogą prawną to na nich niema sposobu, bo wykorzystają każdy kruczek przeciwko tobie.
Wiesz, a ty mi wyglądasz na rasiste wysokiego poziomu programowania.
PS: Jeśli jeszcze coś to pisz na PW bo zaśmiecamy temat.