Słyszałem o kury, jajku i bootstrapie. Mam kilka pytań.
Co napisało pierwszy kompilator, który przekształcił coś w instrukcje binarne?
Czy asembler jest kompilowany lub tłumaczony na instrukcje binarne?
... Trudno mi uwierzyć, że napisali kompilator w postaci binarnej.
compiler-construction
machine-instruction
Shawn Mclean
źródło
źródło
Odpowiedzi:
Instrukcje asemblacji są (ogólnie) bezpośrednim odwzorowaniem na opkody, które są (wielobajtowymi) wartościami kodu maszynowego, które mogą być bezpośrednio interpretowane przez procesor. Całkiem możliwe jest napisanie programu w opkodach bezpośrednio, wyszukując je z tabeli (takiej jak na przykład ta dla mikroprocesora 6039 ), która wymienia je z pasującymi instrukcjami montażu i ręcznie określając adresy / przesunięcia pamięci dla rzeczy jak skoki.
Pierwsze programy zostały wykonane dokładnie w ten sposób - ręcznie napisane instrukcje.
Jednak w większości przypadków prostsze jest użycie asemblera do „kompilacji” kodu asemblera, który automatycznie wyszukuje te kody operacji, a także jest pomocny w obliczaniu adresów / przesunięć dla nazwanych etykiet skoku i tak dalej.
Pierwsi asemblerzy zostali napisani ręcznie. Te asemblery mogą być następnie użyte do asemblacji bardziej skomplikowanych asemblerów, których można by użyć do asemblacji kompilatorów napisanych dla języków wyższego poziomu i tak dalej. Ten proces iteracyjnego pisania narzędzi w celu uproszczenia tworzenia następnego zestawu narzędzi nazywa się (jak wspomniał David Rabinowitz w swojej odpowiedzi) bootstrapping .
źródło
Przeczytaj o bootstrapie kompilatora i historii jego pisania
Chodzi o to, aby napisać bardzo prosty kompilator bezpośrednio w kodzie maszynowym, użyć go do napisania bardziej wyrafinowanego kompilatora, użyć drugiego do zbudowania trzeciego i tak dalej, aż uzyskasz w pełni funkcjonalny kompilator.
źródło
Jaja na długo poprzedzane kurczakami. Odpowiedź na większość problemów „kura i jajko” jest taka sama: ewolucja. Niektórzy ludzie mają również problem z uwierzeniem w biologiczną ewolucję, ale niewiara nie jest argumentem (google argumentum ad ignorantiam).
Odpowiadając wprost na twoje pytanie: pierwszy kompilator został napisany (przez człowieka) w asemblerze - program zwany asemblerem tłumaczył asembler na binarny; jest to o wiele prostszy proces niż kompilacja, ponieważ asembler jest tylko symboliczną formą języka maszynowego, która używa nazw kodów operacji zamiast liczb, reprezentuje adresy za pomocą symboli i tak dalej. Wiele późniejszych kompilatorów zostało również napisanych w języku asemblera. Ale pierwszy kompilator C był modyfikowany kompilator B, który został napisany w B . Pierwszy kompilator B został napisany w TMG . Kompilator TMG użyty do skompilowania tego kompilatora B został napisany w języku asemblera PDP-7.
źródło
Woz powiedział w jednej ze swoich publicznych przemówień, że kiedy zaczynał, nie było go stać na kompilator, więc kompilował pliki binarne ręcznie na papierze. Jeśli chcesz zobaczyć coś jeszcze bardziej dzikiego, przeczytaj o warunkach, w jakich Bill Gates i Paul Allen napisali BASIC dla Altair 8800.
Jeśli chodzi o „pisanie binarnego komputera” - cofnij się o krok od bycia programistą i zastanów się, czym były wczesne komputery. Rzeczy na wysokim poziomie jeszcze nie istniały - myślałeś o wszystkim na niskim poziomie, bo to wszystko. Miałeś sprzęt, który mógł wykonywać podstawową logikę i arytmetykę, którymi manipulujesz za pomocą kodu maszynowego (który jest po prostu skompilowanym zestawem - Amber wyjaśnia, dlaczego ta część nie jest trudna do wykonania ręcznie) i chciałeś, aby ten sprzęt wykonywał pewne matematyczne wyczyny. Nie martwiłeś się o nieistniejący system operacyjny, po prostu powiedziałeś sprzętowi (w zestawie), jak manipulować liczbami, które go podajesz. To był po prostu duży kalkulator. Dzisiejszy komputer był budowany pojedynczo.
Jeśli chcesz przełamać barierę, która sprawia, że komputery czują się jak magia, BARDZO polecam przeczytanie KODU Charlesa Petzolda i / lub The Elements of Computing Systems . Dzięki podstawowej wiedzy na temat programowania te wspaniale dostępne książki pozwolą Ci zrozumieć komputery od góry do dołu. Oczywiście nie można dostać komp. sci. lub EE po zaledwie dwóch książkach, ale jako samouk programista, który przegapił formalne szkolenie, mogę powiedzieć: te książki wstrząsnęły moim światem!
źródło
Człowiek to zrobił. Przeczytaj o systemie A-0 :
źródło
Pierwsze programy zostały napisane w kodzie maszynowym (nie w języku asemblera) - rzeczywiste liczby wpinane do pamięci komputera za pomocą przełączników. Przeszliśmy długą drogę ...
Czasami zdarza się to nadal w niewielkim stopniu - do łatania małych fragmentów kodu lub tworzenia zwrotów. Pamiętam, jak wprowadzałem liczby do podstawowych łańcuchów, które były następnie wykonywane jako małe, szybkie podprogramy na wczesnych microsoftach. Pamiętam również przełączanie przełączników na przednim panelu PDP-11, aby wprowadzić program ładujący do jego pamięci na kurs uniwersytecki.
Te programy były czasami używane do przetwarzania plików tekstowych w celu tworzenia innych programów i zostały utworzone języki programowania voila.
źródło