Як був написаний перший укладач?


166

Я чув про курку і яйце і завантаження. У мене є кілька питань.

Що написав перший компілятор, який щось перетворив у двійкові інструкції?

Чи складена збірка або переведена у двійкові інструкції?

... Мені буде важко повірити, що вони написали компілятор у двійковій формі.



@nawfal, це різниця між новою мовою програмування та першим компілятором, так що ні - це не дублікат

@PauliSudarshanTerho в чому різниця? Дух питань однаковий. Ви не можете написати мову програмування, це питання, у свою чергу, стосується першого компілятора.
nawfal

Можливо, у ваших духовних уявах? Насправді ви не знайдете нічого згадуваного про першого компілятора в цьому посиланні. І не варто порадити нікому, хто пише нову мову, щоб почати з нуля. І якщо так, то чому б ви хотіли приховати відповіді про те, як пишеться перший компілятор, якщо це важливо для написання нової мови?

Вчіться у мене - це дублікат: stackoverflow.com/questions/4772768 / ...

Відповіді:


133

Інструкції по збірці - це (як правило) пряме відображення до кодів, що є (багатобайтовими значеннями машинного коду, які можуть бути безпосередньо інтерпретовані процесором. Цілком можливо записати програму в опкоди безпосередньо, подивившись їх на таблицю (наприклад, цю для мікропроцесора 6039 , наприклад), яка перелічує їх із відповідними інструкціями щодо збирання та визначає вручну адреси / компенсації пам'яті для речей як стрибки.

Перші програми робили саме таким чином - рукописні опкоди.

Однак у більшості випадків простіше використовувати асемблер для "компіляції" асемблерного коду, який автоматично робить ці пошукові коди опкоду, а також є корисним для обчислення адрес / зсувів для названих міток стрибків та ін.

Перші асемблери були написані від руки. Ці збирачі можуть бути використані для збирання складніших асемблерів, які потім можуть бути використані для збирання компіляторів, написаних для мов вищого рівня тощо. Цей процес итеративно писати інструменти для спрощення створення наступного набору інструментів називається (як уже згадувалося, Девід Рабинович в своїй відповіді) самонастроювання .


18
Першим моїм комп’ютером була машина на базі Z80, у моніторі ROM якої мені довелося зібрати завантажувач завантажувального пристрою, щоб підняти основи операційної системи (CP / M), щоб я міг зібрати решту згаданої операційної системи в робочу систему , комплектується завантажувачем завантажувача на основі диска. Веселі часи. Так що так, ви можете скласти вручну просто чудово. Це повільно, боляче і схильне до помилок (саме тому ми автоматизували речі), але це можливо.
ПРОСТО МОЕ правильне ДУМКУ

Перша ланка розривається.
Лука

Написано від руки. Як? Підключення чи пробивання карт? Я думаю, у них були шістнадцяткові клавіатури.

44

Будь ласка, прочитайте про завантажувальний компілятор та історію написання компілятора

Ідея полягає в тому, щоб написати дуже простий компілятор безпосередньо в машинному коді, використовувати його для написання більш складного компілятора, використовувати другий для створення третього і так далі, поки у вас не буде повноцінного компілятора.


36

Яйця довго передували курчатам. Відповідь на більшість проблем «курка та яйце» однакова: еволюція. Деякі люди також важко вірити в біологічну еволюцію, але невіра - це не аргумент (google argumentum ad ignorantiam).

Щоб безпосередньо відповісти на ваше запитання: перший компілятор був написаний (людиною) мовою асемблера - програма, що називається ассемблер, переклала б мовну збірку на двійкову; це набагато простіший процес, ніж компіляція, оскільки мова складання - це лише символічна форма машинної мови, яка використовує імена коду замість чисел, представляє адреси з символами тощо. Багато наступних укладачів також були написані мовою складання. Але перший компілятор Сі був змінений Б компілятор, який був написаний в B . Перший компілятор B був написаний у TMG . Компілятор TMG використовував для компіляції, що компілятор B був написаний мовою складання PDP-7.


24

В одному зі своїх публічних переговорів Воз заявив, що коли він почав, він не міг дозволити собі компілятор, тому він склав бінарне вручну на папері. Якщо ви хочете побачити щось ще дикіше, почитайте про умови, за яких Білл Гейтс та Пол Аллен написали ОСНОВНЕ для Altair 8800.

Що стосується "написання комп'ютера у двійковій формі" - відступіться від того, щоб бути програмістом, і подумайте, якими були ранні комп'ютери. Речі на високому рівні ще не існували - ви думали про все на низькому рівні, тому що це все. У вас було обладнання, яке могло б виконувати основні логіку та арифметику, якими ви маніпулюєте за допомогою машинного коду (який тільки що складений збіркою - Ембер пояснює, чому цю частину важко зробити вручну), і ви хотіли, щоб це обладнання здійснило певні математичні подвиги. Ви не турбувалися про неіснуючу операційну систему, ви просто розповіли апаратним засобам (в зборі), як маніпулювати номерами, якими ви їх подаєте. Це був просто великий калькулятор. Комп'ютер сьогодні був побудований по одній абстракції за раз.

Якщо ви хочете зламати бар'єр, який перешкоджає комп'ютерам відчувати себе магічними, я настійно рекомендую прочитати КОД «Чарльз Петзольд» та / або «Елементи обчислювальних систем» . Маючи лише базові знання з програмування, ці чудово доступні книги дадуть вам зрозуміти комп’ютери зверху вниз. Очевидно, що неможливо отримати комп. наук. або ступінь EE після всього 2-х книг, але я можу сказати, як програміст-самоучка, який пропустив офіційне навчання: ці книги потрясли мій світ!


2
Написання інтерпретатора Altair BASIC після того, як зробили крок продажів? Кодування завантажувача на літаку до Альбукерке? Це звучить якось смішно. І весело.
Ehtesh Choudhury

2
@Shurane: га! Ці пункти теж є актуальними, але для мене суворий прискіпливість того, як вони зробили інтерпретатора BASIC і як група забила його в крихітний простір, є справою краси та вражаючої здатності / хакерства програмування.
Діна

10

Що написав перший компілятор, який щось перетворив у двійкові інструкції?

Людина зробила. Читайте про систему A-0 :

У 1952 році Грейс Хоппер завершила свій перший компілятор для Sperry, відомого як A-0. Система A-0 являла собою набір інструкцій, які могли перевести символічний математичний код на машинну мову. Випускаючи А-0, вона взяла всі підпрограми, які збирала роками, і поставила їх на стрічку. Кожному розпоряднику було надано номер дзвінка, щоб він міг знайти його на стрічці. "Все, що я повинен був зробити, - це записати набір номерів дзвінків, дозволити комп'ютеру знайти їх на стрічці, перенести їх і зробити доповнення. Це був перший компілятор", як описав Грейс.


1
Здається, посилання зараз є 404, у будь-якому випадку "Грейс" вище - Грейс Хоппер.
Волкер Столц

2
Я чув, що Хоппер написав перший компілятор, але в описі вище він звучить більше схожим на лінкер, ніж на компілятор. Все-таки хороша історія. Дивовижно подумати, що був час, коли комп'ютерні фахівці скептично ставились до ідеї укладачів ...
Марк Е. Хааз

1
@mehaase саме тому його називають "компілятором". він складає компіляцію процедур, кожна з яких (можливо) написана безпосередньо машинною мовою.
Елазар

@ MarkE.Haase Люди, про які згадував Хоппер, були інженерами-прикладачами та вченими, які використовують комп'ютери для конкретних завдань обчислення; вони не були "інформатиками". У 1952 році було кілька кібернетиків, але я сумніваюся, що вона спілкувалася з будь-яким із них.
Джим Балтер

9

Перші програми були написані машинним кодом (не мовою складання) - фактичні числа, підключені до пам'яті комп'ютера за допомогою перемикачів. Ми пройшли довгий шлях ...

Іноді це все-таки трапляється в незначній мірі - виправляти невеликі шматочки коду або створювати тиски. Я пригадую пробивання цифр у рядках Basic, які потім виконувались як невеликі, швидкі підпрограми на ранніх мікрофонах. Я також пам’ятаю перемикання комутаторів на передній панелі PDP-11, щоб ввести програму завантажувача в її пам’ять для університетського курсу.

Ці програми іноді використовуються для обробки текстових файлів для створення інших програм, а також створюються мови програмування вуаля.


Питання стосується першого компілятора, а не перших програм взагалі, незважаючи на те, що програми іноді є компіляторами; історія двох не однакова. (Аналогія: відповідь на питання про те, коли на Землі з’явилися перші тварини, не є відповіддю на питання про те, коли на Землі з’явилися перші коти, не дивлячись на те, що коти були тваринами.)
Джим Балтер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.