Каковы основные варианты дизайна для создания ужасно быстрого компилятора?

Я хочу знать, как разработать компилятор, который компилируется очень и очень быстро.

Во-первых, , позвольте мне предупредить некоторые очевидные недоразумения в моем вопросе:

  1. Я не говорю о скорости кода, создаваемого компилятором. Уже доступно много ресурсов для изучения того, как оптимизировать сгенерированный код. Что мне не удается найти, так это информацию о том, как сделать компилятор быстрым.

  2. I ' m также не интересует обсуждение того, почему компиляторы C ++ обычно медленнее, чем компиляторы Java (например). Меня интересует, какие методы можно использовать для ускорения компилятора для любого данного языка.

  3. Я также не хочу слышать о системах распределенной компиляции, таких как Microsoft Incredibuild или Unix distcc. Эти системы не предоставляют вам более быстрых компиляторов, они просто предоставляют вам больше компиляторов. Что, безусловно, полезно, но я задаю не этот вопрос. Я хочу знать, как разработать быстрый компилятор для одного процессора.

  4. И ccache не тот ответ, который я ищу. Это система, которая позволяет вам вообще избегать использования компилятора, но не делает его быстрее. Опять же, это полезно; опять же, я задаю не этот вопрос.

Надеюсь, мой вопрос теперь предельно ясен. Но, возможно, немного истории прояснит это.

Компиляторы C были очень медленными. Затем, в 1986 году, THINK Technologies представила Lightspeed C для Macintosh, и программа компилировала программы практически мгновенно. Lightspeed C был настолько намного быстрее, чем все другие компиляторы C, что почти не было никакого сравнения. (Возможно, Lightspeed C не был первым из нового поколения молниеносных компиляторов, но он был первым в моем опыте. Turbo Pascal появился раньше [1983], но у меня не было опыта с ним, поэтому я не знаю, как он сравнил, по скорости.)

С тех пор стало доступно много быстрых компиляторов. Кажется, что в 80-х годах прошлого века в технологии компиляторов произошел какой-то качественный скачок, и я пытаюсь понять , в частности . В чем был прорыв?

Ответ может быть таким простым: с такими IDE, как Lightspeed и Turbo, встроенный редактор уже имеет исходный код в ОЗУ. Если компилятор работает с этими данными, он исключает дисковый ввод-вывод, который является самой медленной частью любого компилятора. Вероятно, это очень важный фактор повышения скорости, если размер исходного кода мал по сравнению с размером памяти. (В те дни размер ОЗУ был намного меньше, но тогда и размер обычных программ был меньше.)

И все? Или были задействованы другие важные нововведения? И произошли ли с тех пор важные улучшения в скорости компилятора?

9
задан Eric 15 September 2010 в 06:29
поделиться