LINUX.ORG.RU
ФорумTalks

[для общего развития] Как собрать компилятор С++ написаный на С++?


0

1

Сегодня в ходе холивара в универе затронули интересную тему: интерпретаторы и компиляторы языков написанные на них самих. Это сейчас когда есть куча уже собранных бинарников, можно скомпилировать новый компилятор или запустить интерпретатор. Но я в своё время, ещё в школе не мог собрать первую версию free pascal т.к он требовал free pascal (лол што?). Также известно что компилятор С++ Страуструп написал на С++. Отсюда вопрос, для общего развития, как это всё собиралось-то?


Другим компилятором. Первая версия gcc была на паскале написана

Gorthauer ★★★★★ ()

сначала минимальный объём языка реализуется на асме, потом на получившейся поделке дописывается ещё что-то, собирается компилятором с предыдущего этапа, и так далее.

shuthdar ★★★ ()

кроме bootstrap можно:
написать на другом языке
кросс-компилировать на другой платформе

Sylvia ★★★★★ ()

как как, другим компилятором с++, написанным не на с++, а например на фрипаскале :D Ну или асме.

Zubchick ()
Ответ на: комментарий от shuthdar

чем мозг забьёшь - то он и выдаёт

s/на асме/на чём угодно/g

shuthdar ★★★ ()

как это всё собиралось-то?

Компилятором C++, написаном на перле C. //К.О.

anon_666 ()

Не знаю, как С++, но первый компилятор АЛГОЛ`a (русского) был написан на алголе, а потом его ВРУЧНУЮ много человек откомпилировали и записали бинарник HEX-редактороми. А во второй прогон - уже им самим себя компилировали.

Lockywolf ★★★ ()
Ответ на: комментарий от Sylvia

Ada (GNAT)
Haskell (GHC)

так и собираются
для Ghc описана возможность bootstrap без Ghc, но там уж очень все сложно )

Sylvia ★★★★★ ()

Больше всего по этому поводу меня радует википедия:

Большая часть SBCL написана на Common Lisp и приблизительно 10% на Си. Чтобы скомпилировать SBCL, используется одна из поддерживаемых реализаций Common Lisp (в том числе и сам SBCL), которая компилирует SBCL, и затем уже эта новая скомпилированная версия компилирует саму себя.

Zubchick ()
Ответ на: комментарий от koirn

>Как всё же надо было собирать ту злополучную версию паскаля тогда?
Бинарной сборкой от авторов. Можно вендовой.

unikoid ★★★ ()
Ответ на: комментарий от koirn

также как в генте собирается GHC

ставится бинарник, временно
им собирается то что надо, устанавливается
временный компилятор сносится полностью

Sylvia ★★★★★ ()
Ответ на: комментарий от Manhunt

куда они его выпилят ?

Пакет ghc6

* lenny (stable) (devel): GHC - the Glasgow Haskell Compilation system
6.8.2dfsg1-1.1: alpha amd64 arm armel hppa i386 ia64 mips mipsel powerpc s390 sparc
* squeeze (testing) (haskell): GHC - the Glasgow Haskell Compilation system
6.12.1-13: amd64 armel hppa i386 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 sparc
* sid (unstable) (haskell): GHC - the Glasgow Haskell Compilation system
6.12.1-13: alpha amd64 armel hppa i386 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc s390 sparc
6.6.1-2 [debports]: hurd-i386 m68k
* experimental (haskell): GHC - the Glasgow Haskell Compilation system
6.12.3-1: amd64 i386 kfreebsd-amd64 kfreebsd-i386 mipsel s390 sparc

Sylvia ★★★★★ ()
Ответ на: комментарий от Gorthauer

>Ну а компилятор паскаля надо полагать на си был написан,

первый компилятор Паскаля был написан на Паскале

а первый компилятор Си был написан на асме.


4.2 У Кернига с Ритчи чуть раньше была разработка, не помню как называется, но в общем это был компилятор компиляторов, позволяющий разворачивать компиляторы из исходников

DNA_Seq ★★☆☆☆ ()
Ответ на: комментарий от Lockywolf

>потом его ВРУЧНУЮ много человек откомпилировали и записали бинарник HEX-редактороми.
Черт, я аж подавился

upcFrost ★★★★★ ()
Ответ на: комментарий от koirn

> Как всё же надо было собирать ту злополучную версию паскаля тогда?
Вторая попытка создать компилятор началась с того, что он сразу формулировался на самом Паскале (в соответствии с описанием 1970 г.). Синтаксический анализ нового однопроходного компилятора осуществлялся методом рекурсивного спуска. Теперь в команду разработчиков вошли У. Амман, Э. Мармье и Р. Шилд. После того как компилятор был написан на еще не существующем языке, Шилд был отправлен к себе домой на две недели, где все это время он вручную транслировал программу во вспомогательный низкоуровневый язык, доступный на CDC-6000. Итак, в середине 1970 г. компилятор ETH Pascal был готов.

JustGuest ()

почему-то никто не вспоминает про Cmake

оно теперь тоже собирается Cmake )

если cmake в системе нет - собирается минимальная версия, а потом с ее помощью уже полная


так что сборка «собой» это не только для компиляторов, но и для утилит конфигурации свойственно

Sylvia ★★★★★ ()

Как написано в dragon book, первый инерпретатор был написан на lisp

lisp тогда использоваться для удобной формы записи программы, после чего в ручную переводился в машинные команды, и кормился компьюетру

В результате один умник написал программу на lispe, которая могла интерпретировать код lisp'а, и ручками перевел в машинный код её

namezys ★★★★ ()
Ответ на: комментарий от Jetty

написать его не на си ) а на том что есть
или писать сразу на низкоуровневом языке (asm или в бинарных кодах)
в 70-е годы дырочки делали в перфокарточках..

Sylvia ★★★★★ ()

написать на ассемблере форт, на форте схему, на схеме коммон лисп, на коммон лиспе компилятор C++; затем скомпилировать им исходный компилятор

jtootf ★★★★★ ()

Вот хорошая ссылка Bootstrapping a simple compiler from nothing

Также еще помню была хорошая статья о том как добавляются новые функции в компилятор C - в ней было подробно на примерах разобрано как сделать так, чтобы компилятор стал понимать символ \n. Еще в ней был рассмотрен способ, как внести в компилятор специальный код, который бы воспроизводился в бинарной форме при последующей компиляции компилятором себя - что-то вроде трояна, живущего в бинарном представлении компилятора.

sign ()
Ответ на: комментарий от sign

>Еще в ней был рассмотрен способ, как внести в компилятор специальный код, который бы воспроизводился в бинарной форме при последующей компиляции компилятором себя - что-то вроде трояна, живущего в бинарном представлении компилятора.

спасибо, что упомянули это, «trusted trust» так сказать )
и собственно почему важен открытый компилятор, а не бинарный закрытый

Sylvia ★★★★★ ()

Можно вручную скомпилировать код на С++ и полученный машинный код записать любым редактором в выходные файлы. Как вариант :)

Legioner ★★★★★ ()
Ответ на: комментарий от jtootf

написать на ассемблере форт

асм нужно ещё в бинарные коды чем-то перегнать... так что тут только твердая рука и хексредактор

написанный на C++, например

lazyklimm ★★★★★ ()
Ответ на: комментарий от Manhunt

>> на ассемблере форт

Во сколько килобайт уложишь блоб? :)

Под DOS'ом легко укладывался в 4k. XForth для 32-bit Linux занимал ~16k, можно было и меньше, но использовалась libc5. К сожалению за давностью лет (XForth - 1999 год) сырцы утеряны.

Darkman ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.