Jak powstał pierwszy kompilator?

Słyszałem o kurczaku, jajku i bootstrapingu. Mam kilka pytań.

Co napisał pierwszy kompilator, który przekonwertował coś do instrukcji binarnych?

Czy assembly jest skompilowany lub przetłumaczony na instrukcje binarne?

...Trudno mi uwierzyć, że napisali kompilator w formacie binarnym.

Author: Kara, 2009-10-31

6 answers

Instrukcje montażu są (ogólnie) bezpośrednim odwzorowaniem na opcodes, które są (wielobajtowymi)wartościami kodu maszynowego, które mogą być bezpośrednio interpretowane przez procesor. Jest całkiem możliwe, aby napisać program w kodach opcodes bezpośrednio przez wyszukanie ich z tabeli (takiej jak Ta dla mikroprocesora 6039, na przykład), która wyświetla ich listę z pasującymi instrukcjami montażu i ręcznym określaniem adresów pamięci / offsetów dla rzeczy takich jak skoki.

Pierwsze programy zostały wykonane dokładnie w ten sposób-ręcznie pisane opcodes.

Jednak przez większość czasu łatwiej jest użyć asemblera do "skompilowania" kodu asemblera, który automatycznie wyszukuje kod opcode, jak również jest pomocny w obliczaniu adresów / offsetów dla nazwanych etykiet skoków, itd.

Pierwsze asemblery zostały napisane ręcznie. Asemblery te mogą być następnie używane do montażu bardziej skomplikowanych asemblerów, które mogą być następnie używane do montażu kompilatorów napisanych dla języków wyższego poziomu, i tak dalej. Ten proces iteratywnego pisania narzędzi w celu uproszczenia tworzenia następnego zestawu narzędzi jest nazywany (jak wspomniał David Rabinowitz w jego odpowiedzi) bootstrapping.

 120
Author: Amber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-31 07:02:51

Proszę przeczytać o compiler bootstrapping i historię pisania kompilatora

Chodzi o to, aby napisać bardzo prosty kompilator bezpośrednio w kodzie maszynowym, użyć go do napisania bardziej zaawansowanego kompilatora, użyć drugiego do zbudowania trzeciego i tak dalej, aż będziesz mógł mieć w pełni funkcjonalny kompilator.

 41
Author: David Rabinowitz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-31 07:02:42

Jaja długo poprzedzone kurczakami. Odpowiedź na większość problemów "Kura i jajko" jest taka sama: ewolucja. Niektórzy ludzie też mają problemy z wiarą w ewolucję biologiczną, ale niewiara nie jest argumentem (Google argumentum ad ignorantiam).

Aby bezpośrednio odpowiedzieć na twoje pytanie: pierwszy kompilator został napisany (przez człowieka) w języku asemblera - program zwany asemblerem przetłumaczyłby język asemblera na binarny; jest to znacznie prostszy proces niż kompilacja ponieważ język asemblowania jest tylko symboliczną formą języka maszynowego, który używa nazw kodów zamiast liczb, reprezentuje adresy z symbolami i tak dalej. Wiele późniejszych kompilatorów zostało również napisanych w języku asemblera. Jednak pierwszym kompilatorem C był zmodyfikowany kompilator B, który został napisany w B . Pierwszy kompilator B został napisany w TMG . Kompilator TMG używany do kompilacji kompilatora B został napisany w języku asemblacji PDP-7.

 29
Author: Jim Balter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-17 11:41:05

Woz powiedział w jednym ze swoich publicznych wystąpień, że kiedy zaczął, nie mógł sobie pozwolić na kompilator, więc skompilował do binary 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 komputera w formacie binarnym " - zrób krok wstecz od bycia programistą i pomyśl o tym, czym były wczesne Komputery. Rzeczy na wysokim poziomie jeszcze nie istniały-myślałeś o wszystko na niskim poziomie, bo to wszystko. Miałeś sprzęt, który mógł wykonywać podstawową logikę i arytmetykę, którą manipulujesz za pomocą kodu maszynowego (który jest właśnie skompilowanym montażem-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 assembly), jak manipulować liczbami, które go karmisz. To był wielki Kalkulator. Komputer z dziś został zbudowany jeden abstrakcji na raz.

Jeśli chcesz przełamać barierę, która sprawia, że komputery czują się jak magia, Gorąco polecam przeczytanie kodu Charlesa Petzolda i/lub elementów systemów komputerowych. Dzięki podstawowej wiedzy o programowaniu, te cudownie dostępne książki pozwolą Ci zrozumieć komputery od góry do dołu. Oczywiście, nie można dostać komp. sci. lub EE stopień po zaledwie 2 książki, ale mogę powiedzieć, jako samouk programista kto przegapił formalne szkolenie: te książki wstrząsnęły moim światem!

 23
Author: Dinah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-20 16:45:00

Co napisał pierwszy kompilator, który przekształcił coś w instrukcje binarne?

Człowiek to zrobił. Przeczytaj o system A-0 układ A-0 :
W 1952 roku Grace ukończyła swój pierwszy kompilator dla Sperry ' ego, znany jako A-0. System A-0 był zbiorem instrukcji, które mogły przetłumaczyć symboliczny kod matematyczny na język maszynowy. Produkując A-0, wzięła wszystkie podprogramy, które zbierała przez lata i umieściła je na taśmie. Każda procedura miała numer telefonu, aby maszyna mogła go znaleźć na taśmie. "Wszystko, co musiałem zrobić, to zapisać zestaw numerów połączeń, pozwolić komputerowi znaleźć je na taśmie, przynieść je i zrobić uzupełnienia. Był to pierwszy kompilator, " jak opisuje Grace.
 9
Author: Sinan Ünür,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-20 16:54:56

Pierwsze programy pisane były w kodzie maszynowym (Nie w języku asemblera) - liczby rzeczywiste podłączane do pamięci komputera za pomocą przełączników. Przebyliśmy długą drogę...

Czasami zdarza się to w niewielkim stopniu - łatać małe fragmenty kodu lub tworzyć kawałki. Przypominam sobie wbijanie liczb w podstawowe ciągi, które były następnie wykonywane jako małe, szybkie podprogramy na wczesnych Mikros. Pamiętam też przełączanie przełączników na przednim panelu PDP-11, aby wprowadzić program bootloadera do jego pamięć o kursie uniwersyteckim.

Programy te były czasami używane do przetwarzania plików tekstowych do tworzenia innych programów, a języki programowania voila były tworzone.

 8
Author: Michael Burr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-31 07:07:24