Почему C является языком компиляторов, когда подмножество Scheme кажется более подходящим? - PullRequest
5 голосов
/ 08 января 2010

Я только что слушал 57-ю серию Радиоинженерии программного обеспечения (TRANSCRIPT: http://www.se -radio.net / transcript-57-время компиляции-метапрограммирование ) У меня всего 40 минут, но мне интересно, почему C является языком компиляторов, когда подмножество Scheme кажется более подходящим? (или какой-то другой HLL) (исключая очевидную причину нежелания переписывать gcc)

PS первоначально разместил это на LtU http://lambda -the-ultimate.org / node / 3754

Ответы [ 7 ]

12 голосов
/ 08 января 2010

Я не стану слушать 40 минут радио, чтобы, возможно, лучше понять ваш вопрос, но я бы сказал прямо противоположное. На языке C написано лишь меньшинство компиляторов. У меня сложилось впечатление, что (по крайней мере, в соответствующих случаях) большинство компиляторов реализованы на языке, который они предназначены для компиляции.

6 голосов
/ 08 января 2010

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

3 голосов
/ 08 января 2010

Вероятно, это сочетание факторов:

  1. Компиляторы C доступны практически для любой платформы, что упрощает создание нового компилятора для нового языка.
  2. История: C - очень популярный язык, поэтому имеет смысл, что многие проекты находятся на C (независимо от проекта).
  3. Схема, в частности, очень непопулярна (по сравнению с С).
3 голосов
/ 08 января 2010

Ну, одной из причин будет проблема загрузки компилятора на неподдерживаемых архитектурах. Для этого обычно требуется наличие работающего компилятора для этой архитектуры, что обычно означает C. Я помню, как пытался скомпилировать MIT-схему из исходного кода, и меня очень раздражало, что для установки MIT-схемы требовалось установить ее, прежде чем я смог собрать MIT-схему. схема.

Кстати, я не уверен, что согласен с вашей посылкой ... C, безусловно, кажется наиболее распространенным языком, но другие языковые компиляторы (например, MIT-схема) часто реализуются на этих языках.

1 голос
/ 08 января 2010

Многие компиляторы сегодня написаны на языках, отличных от C (например, Scheme). Чтобы сделать их переносимыми, они изначально генерируют C-код в качестве целевого языка.

1 голос
/ 08 января 2010

C имеет Flex и Yacc , которые помогают реализовать Frontend (синтаксический анализатор и лексер) компилятора, если я правильно помню, их вывод ограничен кодом c

0 голосов
/ 21 ноября 2011

Я думаю, что многое связано с бэкэндами. Кто-то упомянул Flex и Yacc, но есть также GCC и LLVM, которые помогут вам во многих других важных вещах, таких как оптимизация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...