3

В качестве компилятора, отличного от интерпретатора, требуется только преобразовать ввод и не запускать его, сама работа должна быть не такой проблематичной, как у интерпретатора. Следовательно, вы бы не писали переводчика, скажем, Ruby или PHP, потому что это было бы слишком медленно.На что написаны современные и старые компиляторы?

Однако, как насчет компиляторов?

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

Обязательно: С языком сценариев я имею в виду интерпретируемые языки, имеющие типичные функции, которые делают программирование более быстрым, легким и приятным для программиста, как правило, как минимум. Примеры: PHP, Ruby, Python, возможно, JavaScript, хотя это может быть странный выбор для компилятора

  • Что компиляторы обычно написано в? Как я полагаю, вы ответите на что-то низкоуровневое, как C, C++ или даже Assembler, почему?

  • Есть ли составители, написанные на языках сценариев?

  • Каковы преимущества (dis) использования языков программирования с низким или высоким уровнем для написания компилятора?

+3

Я нахожу код записи на C++ быстрым, легким и приятным. – 2010-03-30 09:34:30

+0

Скорость является большой проблемой для компиляторов, так как это (http://www.youtube.com/watch?v=rKnDgT73v8s) Google Tech Talk о языке GO иллюстрирует. Компилятор - это ключевая функция. –

+0

@Neil, расскажите об этом новичкам на C++ ;-) –

ответ

1

Большинство компиляторов написаны на языках C или C++. Даже сегодня производительность компилятора имеет значение. Когда вам нужно скомпилировать проект в 900 файлов, это имеет черту разницу, если требуется 2 минуты или 20 минут.

Некоторые компиляторы написаны на языках сценариев (одним из примеров, который приходит на ум, является Pajamas - компилятор от Python к Javascript, написанный на Python), но подавляющее большинство компиляторов промышленного уровня написано на C & C++.

+0

Глупым является то, что слишком сложно писать ужасно исполняемый код обработки строк как на C, так и на C++. Конечно, это не вина этих языков на самом деле, но они также не волшебны быстрее. Получение высокоскоростного компилятора заключается в основном в интеллектуальном использовании структур данных и алгоритмов. (Смешно, вот о чем идет почти все высокопроизводительное программирование!) –

6

Большинство компиляторов написаны на языке программирования, на котором они нацелены (bootstrapping).

Есть, конечно, множество исключений.

+0

Почему отрицательные голоса, когда это объективная, проверяемая правда? –

+0

Я не спустил вниз, но это неправда (например) FORTRAN и COBOL, чтобы назвать только два. Если у вас есть статистика для резервного копирования вашего утверждения, предоставьте их. – 2010-03-30 09:38:17

+0

Другим примером могут быть языки, которые поставляются с GNU - например, компилятор Ada или 'gcj', написанный на C, как и весь набор инструментов GCC –

0

Они в основном написаны на достаточно высоком уровне языка (C/C++). Тем не менее, с помощью современного аппаратного обеспечения вполне нормально иметь компилятор, написанный на управляемом языке (C#/Java), в функциональном языке (Haskell) или, еще лучше, управляемом функциональном языке (Nemerle).

Функциональные языки извлекают выгоду из метода, называемого pattern matching, что значительно упрощает обработку синтаксических деревьев/АСТ.

Настоящий компилятор-fu пишет компилятор для языка на этом конкретном языке (процесс называется bootstrapping).

0

Компиляция один из самых интенсивных вычислений вещей, которые вы можете сделать на компьютере или как Джоэл Спольски выразился:

Написание кода в скомпилированный языке один из последних вещей, которые до сих пор может» t быть сделано мгновенно на сад разновидности домашнего компьютера.

Следовательно, вы не сможете компилятору быть как можно быстрее, что делает C и C++ естественным выбором.

+0

Написание кода или его компиляция? Я видел некоторые сверхбыстрые компиляторы C. (C++ все же сложнее). Фактическое создание кода медленное; это творческий и человеческий процесс, и поэтому невозможно перевести на простой алгоритм. (Алгоритмы мы переводим один язык в другой, т. Е. Компиляцию.) –

0

Существует собственный компилятор Python для Python под названием pypy.

0

Существуют специализированные языки программирования для эффективного осуществления компиляторы, например .:

http://www.meta-alternative.net/mbase.html

также: Иронии, JetBrains MPS, и некоторые другие.

Функциональные языки в целом довольно эффективны в этой области, особенно языки с алгебраическими типами данных, например, шаблон, соответствующий каррированию, - Haskell, ML (F #, OCaml), Nemerle, Scala.

0

Компилятор javac из JVM SUN/Oracle написан на Java; как и компилятор Java, используемый в среде Eclipse для фоновой компиляции при редактировании. Компиляторы для многих функциональных языков часто пишутся на этом языке, поскольку функциональные языки обычно подходят для написания компиляторов. Компиляторы для ограниченных языков (например, программы GPU, такие как GLSL/OpenCL) не будут записываться на языках, исполняемых на графических процессорах.

Одна из основных проблем заключается в том, что язык, скомпилированный данным компилятором, может быть не хорошим языком для реализации компилятора; Я не знаю никого писать компиляторы для FORTRAN в FORTRAN.

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

Смежные вопросы