Мне любопытно о рождении компилятора. Как началось программирование? Люди сначала создавали оборудование, которое распознало определенный набор команд, или люди определяли язык, а затем строили оборудование на его основе? И на родственной ноте, какой был первый язык программирования?
programming-languages
history
compiler
assembly
Дэвид Кауден
источник
источник
Ответы:
На самом деле это имеет очень четкий ответ: исходный код появился первым - с большим отрывом.
Прежде чем дать технические детали, немного перспективы:
Первые языки программирования были все переведены на машинный язык или ассемблере вручную . Идея использовать часть программного обеспечения для автоматизации этого перевода (с помощью компилятора или оценщика) всегда возникала позже и была далеко не интуитивной.
Рассмотрим цитату из статьи в Википедии о Фортране, которая иллюстрирует, с чем сталкивались компиляторы нежелания:
=> К моменту появления на рынке компилятора FORTRAN (1957) люди уже с радостью программировали как на ассемблере, так и на FORTRAN.
Дело было аналогичным для LISP (от Hackers & Painters ):
Еще раз, не только исходный код (в LISP) предшествует интерпретатору, последний даже не подразумевался в первом.
Но эти события относительно поздно. Даже если не учитывать аналитический движок Чарльза Бэббиджа и первую связанную с ним программу Ады Лавлейс, в 20-м веке существовали языки программирования, предшествовавшие компиляторам:
Plankalkül Конрада Цузе и математическая конструкция λ-исчисления, представленная Алонзо Черчем. Оба эти языка являются формально определенными языками программирования, но в то время ни один из них не имел компилятора.
Чтобы представить это в перспективе, λ-исчисление датируется 30-ми годами, а Plankalkül был разработан примерно в 1945 году. Напротив, первый компилятор FORTRAN появился в 1957 году (но снова через три года после того, как был указан FORTRAN).
источник
Программирование началось с того, что люди записывали машинный код непосредственно в память, на перфокарты и бумажную ленту или даже на короткие ссылки на патч-панели. Сложно сказать, было ли аппаратное обеспечение построено с учетом потребностей программного обеспечения или наоборот. Конечно, самый ранний дизайн программируемого компьютера Тьюринга , аналитический движок Бэббиджа , предшествовал первой документированной программе Ады Лавлейс .
Что касается первого языка программирования, я утверждал, что это был машинный язык аналитического движка Бэббиджа (из вопроса « Какой был первый язык программирования, написанный для компьютеров? )
Чтобы ответить на вопрос в заголовке вашего вопроса, поскольку ассемблер является исходным кодом , а языки ассемблера предшествуют языкам высокого уровня, которые могут быть скомпилированы в ассемблер, исходный код был первым.
Кроме того, компилятор никогда не был необходим , просто удобно.
Вполне возможно записать программное обеспечение непосредственно в память, если вы запомнили соответствующие таблицы кодов операций. Фактически, некоторые ранние компьютеры требовали, чтобы пользователь вводил код начальной загрузки на шестнадцатеричной клавиатуре лицевой панели, чтобы они загрузились , но вы можете нажать на любой понравившийся код, и он будет запущен.
По общему признанию, поскольку процессоры становятся более сложными, это становится более сложным, но простой набор команд, такой как 6809 или Z80 (игнорирующий все странные индексированные режимы), относительно легко программировать даже без ассемблера , не говоря уже о компиляторе из языка высокого уровня.
Если бы аналитический движок Бэббиджа был когда-либо построен, я уверен, что был бы стимпанк Мел , пишущий оптимизированные программы прямо на ткацкие карты.
источник
movl $0, -20(%rbp)
, тогда как машинный код естьC745EC00000000
, и последний (ну, что-то вроде этого) был впервые введен вручную или прочитан с бумажной ленты. Относительно того, считается ли машинный код исходным кодом , я склонен сказать «все, что плавает на вашей лодке». Если вы включаете его вручную, то да, я бы сказал, что это важно.Компилятор был первым . Он был написан напрямую в машинном коде, поскольку исходный код не мог быть скомпилирован без компилятора.
Статьи Википедии , как этот о компьютерных языках может ответить на большинство вопросов. Если нет, просто выберите одну из книг Таненбаума, например, Структурированная компьютерная организация , которая может ответить на большее количество вопросов, чем вы можете даже задать :)
Я не могу сказать ничего более конкретного, потому что ваш вопрос слишком широк.
источник
Интерпретаторы существовали до компиляторов, поэтому исходный код существовал до компиляторов.
Есть некоторые очень интересные документы по истории вычислительной здесь . Предполагается, что исходный код для компилятора FORTRAN II будет доступен, но эти ссылки не работают.
Эта статья 1954 года описывает интерпретатора «Вихря».
источник
Этот вопрос сильно влияет на нашу семантическую интерпретацию «исходного кода». Если мы определим его как «текстовые компьютерные инструкции, которые компилируются», то, по-видимому, первым пришел компилятор.
Я более склонен идти к чему-то более авторитетному, например, к статье Марка Хармана «Почему анализ и манипулирование исходным кодом всегда будут важны», представленной на десятой Международной рабочей конференции IEEE по анализу и манипулированию исходным кодом
И я думаю, что ваш ответ подразумевается в этом определении - исходный код наверняка пришел первым.
источник
Алгоритмы были разобраны на бумаге, а затем alus были подключены физически / механически (движущиеся провода). чтобы изменить программу, вы перемещаете провода и запускаете снова.
Позже язык ассемблера перебирался на бумаге, вручную переводился в машинный код, затем с помощью переключателей и т. Д. Передавался в оперативную память. Или перфокарты и т. Д. В конце концов вы можете сделать ассемблер, затем вы можете программировать на ассемблере, а не на машинном коде, тогда вы можете сделать компилятор. В конце концов вы можете загрузить этот компилятор. И создавать новые языки и новые компиляторы и т. Д.
Первый язык не был языком, позже первый язык был языком ассемблера. для каждого процессора первым языком является язык ассемблера (полученный из машинного кода). Сначала создается набор команд, затем аппаратное обеспечение для его реализации, затем ассемблер, затем компиляторы.
источник