Jestem ciekawy narodzin kompilatora. Jak zaczęło się programowanie? Czy ludzie najpierw zbudowali sprzęt, który rozpoznał określony zestaw poleceń, czy też ludzie zdefiniowali język, a następnie zbudowali sprzęt wokół niego? I na powiązaną notatkę, jaki był pierwszy język programowania?
programming-languages
history
compiler
assembly
David Cowden
źródło
źródło
Odpowiedzi:
To jest bardzo jasna odpowiedź: kod źródłowy był pierwszy - z dużym marginesem.
Przed podaniem szczegółów technicznych, trochę perspektywy:
Pierwsze języki programowania były wszystkie przetłumaczone na język maszynowy lub asemblerze ręcznie . Pomysł użycia oprogramowania do automatyzacji tego tłumaczenia (za pomocą kompilatora lub ewaluatora) zawsze pojawiał się później i nie był intuicyjny.
Rozważ ten cytat z artykułu w Wikipedii na temat FORTRAN, który ilustruje kompilatory niechęci, z którymi musieli się zmierzyć:
=> Zanim kompilator FORTRAN trafił na rynek (1957), ludzie już z radością programowali zarówno w asemblerze, jak i FORTRAN.
Sprawa była podobna w przypadku LISP (od hakerów i malarzy ):
Ponownie, kod źródłowy (w LISP) nie tylko poprzedza interpreter, ten drugi nie był nawet domyślny w pierwszym.
Ale zmiany te są stosunkowo późne. Nawet nie biorąc pod uwagę silnika analitycznego Charlesa Babbage'a i pierwszego programu związanego z Adą Lovelace, w XX wieku istniały języki programowania poprzedzające kompilatory:
Plankalkül Konrada Zuse i matematyczna konstrukcja rachunku λ wprowadzona przez Kościół Alonzo. Oba są niewątpliwie formalnie określonymi językami programowania, ale żaden z nich nie miał wtedy kompilatora.
Aby spojrzeć na to z perspektywy, rachunek λ pochodzi z lat 30. XX wieku, a Plankalkül został opracowany około 1945 r. Natomiast pierwszy kompilator FORTRAN wyszedł w 1957 r. (Ale ponownie trzy lata po określeniu FORTRAN).
źródło
Programowanie rozpoczęło się od ludzi, którzy piszą kod maszynowy bezpośrednio do pamięci, na perforowane karty i taśmę papierową, a nawet zwierają linki na panelu krosowniczym. Trudno powiedzieć, czy sprzęt został zbudowany zgodnie z potrzebami oprogramowania lub odwrotnie. Z pewnością najwcześniejszy projekt dla kompletnie programowalnego komputera Turinga, silnik analityczny Babbage'a , był wcześniejszy niż pierwszy udokumentowany program Ady Lovelace .
Jeśli chodzi o pierwszy język programowania, argumentowałem , że był to język maszynowy silnika analitycznego Babbage'a (z pytania Jaki był pierwszy język programowania napisany dla komputerów? )
Aby odpowiedzieć na pytanie w tytule pytania, ponieważ język asemblera jest kodem źródłowym , a języki asemblera są wcześniejszymi językami wysokiego poziomu, które można skompilować w asembler, kod źródłowy był na pierwszym miejscu.
Ponadto, kompilator nigdy nie było to konieczne , po prostu wygodne.
Jest całkowicie możliwe zapisywanie oprogramowania bezpośrednio w pamięci, jeśli zapamiętałeś odpowiednie tabele kodów operacyjnych . W rzeczywistości niektóre wczesne komputery wymagały od użytkownika wprowadzenia kodu bootstrap na klawiaturze sześciokątnej na panelu przednim, aby zmusić go do uruchomienia, ale można dotknąć dowolnego kodu, który ci się podoba i zostanie uruchomiony.
Wprawdzie procesory stają się coraz bardziej złożone, ale staje się to trudniejsze, ale prosty zestaw instrukcji, taki jak 6809 lub Z80 (ignorowanie wszystkich dziwnych trybów indeksowania) jest stosunkowo łatwy do zaprogramowania nawet bez asemblera , nie mówiąc już o kompilatorze z języka wysokiego poziomu.
Gdyby kiedykolwiek zbudowano silnik analityczny Babbage'a, jestem pewien, że byłby steampunk Mel , piszący zoptymalizowane programy bezpośrednio na kartach krosna.
źródło
movl $0, -20(%rbp)
, podczas gdy kod maszynowy jestC745EC00000000
, i to ten drugi (no, coś w tym rodzaju) został najpierw ręcznie wprowadzony lub odczytany z taśmy papierowej. Jeśli chodzi o to, czy kod maszynowy liczy się jako kod źródłowy , jestem skłonny powiedzieć „cokolwiek unosi twoją łódź”. Jeśli włączasz to ręcznie, to tak, powiedziałbym, że to się liczy.Kompilator był pierwszy . Został napisany bezpośrednio w kodzie maszynowym, ponieważ nie można było skompilować źródła bez kompilatora.
Artykuły w Wikipedii, takie jak ten na temat języków komputerowych, mogą odpowiedzieć na większość pytań. Jeśli nie, po prostu wybierz jedną z książek Tanenbauma, na przykład Structured Computer Organisation , która może odpowiedzieć na więcej pytań, niż możesz nawet zadać :)
Nie mogę powiedzieć nic bardziej szczegółowego, ponieważ twoje pytanie jest zbyt ogólne.
źródło
Tłumacze istnieli przed kompilatorami, więc kod źródłowy istniał przed kompilatorami.
Istnieje kilka bardzo ciekawych prelekcji na temat historii informatyki tutaj . Kod źródłowy kompilatora FORTRAN II powinien być dostępny, ale te linki są zepsute.
Artykuł z 1954 roku opisuje tłumacza Whirlwhind.
źródło
To pytanie jest silnie związane z naszą semantyczną interpretacją „kodu źródłowego”. Jeśli zdefiniujemy go jako „tekstowe instrukcje komputerowe, które są kompilowane”, prawdopodobnie najpierw był kompilator.
Bardziej skłonny jestem sięgać po coś bardziej autorytatywnego, na przykład artykuł Marka Harmana „Dlaczego analiza kodu źródłowego i manipulowanie zawsze będzie ważne” zaprezentowany podczas dziesiątej międzynarodowej konferencji roboczej IEEE na temat analizy kodu źródłowego i manipulacji
I myślę, że twoja odpowiedź jest domyślna w tej definicji - kod źródłowy z pewnością był pierwszy.
źródło
Algorytmy zostały uporządkowane na papierze, a następnie Alus zostały połączone fizycznie / mechanicznie (ruchome druty). aby zmienić program, przesuń przewody i uruchom ponownie.
Później język asemblerowy uporządkowano na papierze, ręcznie przetłumaczono na kod maszynowy, a następnie używając przełączników itp., Aby wprowadzić go do pamięci RAM. Lub dziurkuj karty itp. Ostatecznie możesz stworzyć asembler, potem możesz programować w asemblerze, a nie kod maszynowy, a potem możesz stworzyć kompilator. W końcu możesz uruchomić ten kompilator. I twórz nowe języki i nowe kompilatory itp.
Pierwszy język nie był językiem, później pierwszym językiem był język asemblera. dla każdego procesora pierwszym językiem jest język asemblera (wyprowadzony z kodu maszynowego). Zestaw instrukcji jest najpierw zaprojektowany, a następnie sprzęt do jego wdrożenia, a następnie asembler, a następnie kompilatory.
źródło