2008-05-11

Co mnie boli w C, czyli to co mi daje Assembler, a nie ma tego w C.

Dzisiaj opiszę co jest moją bolączką w C. Co mnie denerwuje, ponieważ mam to w assemblerze, a w C już nie...

Pierwszą rzeczą której nie mogę wybaczyć C to brak stosu. Programowanie bez możliwości odrzucenia czegoś w każdej chwili, by parę funkcji dalej to ściągnąć, jest dla mnie nie wygodne. Co prawda, mogę zrobić kolejną zmienną, ale według mnie, nie jest to tak wygodne, jak wklepanie "push eax". Dlatego w niektórych programach, pisze swój, sztuczny stos. Zaletą, a jednocześnie wadą sztucznego stosu jest brak wywołań funkcji, w assemblerze zawsze mogło mi się odwidzieć wykonywanie danej funkcji i wrócić 3 funkcje wcześniej. Rzadko się przydaje i można użyć goto, chociaż "jmp" lepszy.

Druga rzecz której wręcz nie mogę podarować C, to brak systemu wykrywania przepełnień, który oferuje sam procesor x86! To co mam pod jednym mnenonikiem "jc" lub "jo" (zależnie czy przebicie ma być dla liczby ze znakiem, czy bez), muszę zastępować odzielną funkcją lub procedurą.

Trzecia rzecz, która dotkneła mnie w czasie własnej implementacji wielkich liczb, brak czegoś takiego jak mnemonik "adc". Jak on działa? Jeśli przy ostatnim dodawaniu, nastąpiło przeniesienie (więc 1 się nie zmieściło) to ma dodać ten 1 przy następnym dodawaniu. Jeśli użyjemy zwykłego add, +1 nie zostanie dodany. Kiedy to się przydaje? Kiedy działamy na liczbach większych niż największe naszego procesora. Dla przykładu, na liczbach 128bitowych. W czasach teraźniejszych można już użyć rozszerzenia procesora, ale dalej nie mamy 1KiB zmiennych (chociaż po co aż tak duża? Może jeśli chcemy wyrazić odległość ziemia słońce w cm? Myślę, że ta odległość jest mniejsza od 2**1024 cm).

Czy brak dostępu do niektórych rzeczy był wart większej przenośności? Odpowiedź na to pytanie, pozostawiam wam drodzy Czytelnicy.

Brak komentarzy: