Skocz do zawartości
PACIK19

C++ czy C# i od czego zacząć? (kursy, itp.)

Rekomendowane odpowiedzi

Gość <account_deleted>

Czyli to co pisalem poniekad jest prawda, bo:

1° operator < lub > sa szybsze od <= lub >= na niektorych platformach

2° porownanie z zerem szybsze niz ze stala

Niestety Nie - "poniekąd" to jest mitologia...

1. Instrukcje asm sprawdzające relacje miedzy wartościami sprawdzają rejestr statusowy - i zawsze ich wykonanie zajmuje tyle samo cyki zegara - bo operacja sprowadza się do porównania masek bitowych.

2. Nie, zero też jest stałą - "porównanie z zerem" zajmuje tyle samo czasu co porównanie z jakąkolwiek inną stałą - różnica polega na tym, że większość architektur/platform oferuje funkcję zerowania rejestru, która często (nie zawsze) jest szybsza od załadowania stałej wartości z RAM.

Większość architektur oferuje również "natychmiastowe stałe" <immediate costants> - czyli stałe zawarte w samej instrukicji CPU (z reguły 3-4 bity) -> porównanie z liczbami z zakresu 0..7 jest tak samo szybkie jak z zerem.

 

Nie mam czasu ani ochoty tego dłużej ciągnąć, bo poziom jest zerowy... - co było do przewidzenia.

 

Rozwiązanie:

 

1. wersja portowalna:

 

/* returns non-zero in case of int32 overflow  */
int chk_mult_overflow(int32_t aval, int32_t bval) {
  int64_t chk64;
  chk64  = aval;
  chk64 *= bval;
 
  aval = (chk64 <= 0x7FFFFFFF) ? 0 : 1;
  return aval;
}
Wyjaśnienie:

Oczywiście można wykonywać obliczenia na liczbach 64bit na platformie 32bit - jak? - trzeba znać ASM żeby wiedzieć jak kompilator "to robi"...

Dlaczego ten kod jest najbardziej optymalny: - najmniej skoków warunkowych, najmniej operacji porównywania liczb, a przy okazji najmniej instrukcji ASM.

 

2. Wersja nie-portowalna (nie-przenośna jak kto woli)

 

*NIC - nie potrzeba pisać żadnego kodu* ;)

 

To jest najlepsze w całym tym wątku:

Ludzie bez znajomości zasad działania komputera od lat wypisują bzdury i tworzą wątki na temat jak sprawdzić przepełnienie zmiennej typu <int> - chociaż każdy istniejący na świecie procesor robi to sprzętowo w jednostce ALU, z zerowym kosztem w sencie opóźnienia wykonywania kodu - wystarczy tylko sprawdzić czy ALU wystawiło flagę "overflow" w rejestrze statusowym.

 

Myślę że sprawa jest już jasna - znajomość assemblera i zasad działania komputera jest podstawą do świadomego tworzenia oprogramowania - bez tego, powstają "gnioty" - niskiej jakości i o niskiej wydajności...

 

Pozdrawiam.

Edytowane przez <account_deleted>

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ale sam sobie zaprzeczyles... Jesli procesor ma instrukcje z prownaniem do zera, to odchodzi czas odczytu danej z pamieci. Czyli juz jest przyspieszenie. Nie kazdy potrzebuje asm, co juz pisalem, tym bardziej jak zaczyna przygode z programowaniem. Po za tym samemu asm liznalem tylko na uczelni, a tam poziom byl zalosny i polegal na zabawie "znajdz pkt, gdzie program sprawdza licencje i wydumaj sposob jak go obejsc". Instrukcji razem to moze ze 4 szt. podano, a zeby samemu sie uczyc to nie znalazlem zadnego sensownego kursu na necie. Po za tym wole sie najpierw na samym cpp sie skupic, pozniej opengl lub qt, a pozniej moze asm.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość <account_deleted>

Ale sam sobie zaprzeczyles... Jesli procesor ma instrukcje z prownaniem do zera, to odchodzi czas odczytu danej z pamieci. Czyli juz jest przyspieszenie.

Nie prawda: (powtarzam): *niektóre* architektury oferują przyspieszenie przy porównaniach ze stałymi mieszczącymi się w zakresie zdefiniowanym dla "stałych natychmiastowych", który to zakres co prawda obejmuje zero ale też nie tylko zero - w związku z tym, stwierdzenie że "porównanie z zerem jest szybsze niż ze stałą" jest fałszywe. Edytowane przez <account_deleted>

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak chcesz się zacząć uczyć programować to ja bym zaczął od C++. nauczysz się różnicy między programowaniem strukturalnym i obiektowym i dodatkowo zrozumiesz podstawy "wskaźników". Składania jest potem podobna i w C# i w Javie i w wielu innych językach.

Jeżeli chodzi natomiast o pracę to zależy. Na wyższym poziomie zaawansowania C++ jest trudniejszy. Jak masz być słabym programistą C++, lub średnim C# to lepiej wybrać to drugie. W korpo pełno pracy dla takich programistów w ASP .Net.

Edytowane przez kemsai

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

C++ patrzac na kolejne drafty idzie w strone Javy/c#, tyle, ze niskopoziomowo. W c++17 wejdzie filesystem, pozniej w c++20 network, a jeszcze pozniej biblioteka do grafiki 2d :)

 

Swoja droga zmiany jakie proponuja np. dla inicjacji zmiennych w ifach... kod bedzie nieczytelny tylko przez to. Ale na pewno c++ zapowiada sie coraz lepiej ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość <account_deleted>

Jak chcesz się zacząć uczyć programować to ja bym zaczął od C++. nauczysz się różnicy między programowaniem strukturalnym i obiektowym i dodatkowo zrozumiesz podstawy "wskaźników". Składania jest potem podobna i w C# i w Javie i w wielu innych językach.

Jeżeli chodzi natomiast o pracę to zależy. Na wyższym poziomie zaawansowania C++ jest trudniejszy. Jak masz być słabym programistą C++, lub średnim C# to lepiej wybrać to drugie. W korpo pełno pracy dla takich programistów w ASP .Net.

kretyn? - nic innego nie przychodzi mi na myśl...

 

@Małpożer:

Może być to dla Ciebie szokujące, ale sytuacja wygląda następująco:

"The Open Group", czyli instytucja stojąca za specyfikacjami dla języka c/c++ "zaklepuje" wszystko za co im płacą - bo czują "bat na tyłku" w postaci nowszych specyfikacji dla OpenCL (Kronos)

Poza tym: istnieją przynajmniej 2 podstawowe specyfikacje dla C++ : oficjalna i GNU C++

 

GNU ma "w d.u.p.i.e" corporacyjne specyfikacje: it just works.

 

Pozdrawiam.

Edytowane przez <account_deleted>

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

@<account_deleted> Tobie chyba mocno się nudzi, zajrzałem do wątku a połowa postów to Twoje przechwalanie się i randomowa trivia. Nie każdy jest taki genialny jak Ty. 

Po co to wszystko, skoro autor tematu dopiero zaczyna? Programowanie dorobiło się przez lata swojego istnienia warstw abstrakcji, i jeśli ktoś chce zostać programistą JavaScript, to nic mu po tym jak działają rejestry procesora. Na początku tak jak mówili przedmówcy trzeba się obyć z podstawami, tym jak można sterować programem, jak można zapisywać problem i jak można go rozwiązywać. Potem można zagłębiać się w konkretną dziedzinę. Jeśli autor zostanie programistą sterowników albo uC, to będzie wtedy się musiał na tym znać. No ale jeśli nie, bo przecież trzeba od podstaw, to może zaczniemy od projektowania i produkcji układów scalonych? Umiesz zaprojektować swój procesor? Nie? To idź pracować na zmywak. No chyba nie tędy droga.

btw: Skoro jesteś taki genialny to idź albo zarabiaj górę hajsu, albo napisz coś przydatnego dla społeczności open source a nie marudź na forum, dla nas plebsu nie ma już ratunku jak widać.

Edytowane przez fazzeerr

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość <account_deleted>

Tobie chyba mocno się nudzi, zajrzałem do wątku a połowa postów to Twoje przechwalanie się i randomowa trivia (...)

Programowanie dorobiło się przez lata swojego istnienia warstw abstrakcji, i jeśli ktoś chce zostać programistą JavaScript, to nic mu po tym jak działają rejestry procesora. (...)

Wow! "warstwy abstrakcji": to pojęcie zarezerwowane dla "kumających" - Ty nie kumasz.

...nudzi misie...

 

Pozdrawiam.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość <account_deleted>

Uważam, że użytkownicy tego forum staną się bardziej szczęśliwi, gdy to pseudo-programiści będą im "wciskać kit"...

 

Zauważyłem tą tendencję już dawno, dlatego poprosiłem ULLISSES'a o skasowanie/usunięcie mojego konta parę lat temu, gdy zmieniłem nazwę użytkownika na "account_deleted".

Jako że debile mają na tym forum przewagę, a moja obecność tutaj wydaje się być wysoce nieporządana - proszę o usunięcie mojego konta - prosiłem o to wcześniej ULLISESS'a (parę lat temu)- ale zignororwał moją prośbę...

 

W związku z powyższym, ZPP mnie nie "przeraża" - oczekuję raczej spełnienia mojej prośby - w przeciwnym razie nie będę w stanie powstrzymać się od dementowania debilnych pseudo-porad pisanych przez ludzi z zerowym doświadczeniem, wspieranych przez wikipedię...

 

Best Regards.

Edytowane przez <account_deleted>

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.


×
×
  • Dodaj nową pozycję...