09.11.2008, 14:18 | #1 |
Участник
|
Редкая профессия
Сорри если баян, но на всякий случай поделюсь. Очень увлекательная статья как Российская небольшая софтверная фирма создала полноценный С++ компилятор!
http://www.pcmag.ru/issues/detail.php?ID=9972 |
|
|
За это сообщение автора поблагодарили: Eldar9x (1). |
09.11.2008, 15:06 | #2 |
Участник
|
типичный пример "создания суперсистемы" по-русски.
Кратко: "мы строили, строили и наконец построили. Да здравствуем мы! Только не знаем будет ли это востребовано". Ярко описан в книге "Левша". Стоит сравнить, например, с историей создания того же С++ Книга: Дизайн и эволюция С++. Бьерн Страуструп DjVu: http://freebooks.net.ua/1217-straust...jucija-c..html Почти на каждой странице человек говорит о том, что он пошел на компромисс, что был сделан выбор в сторону практичности и совместимости в ущерб идеальности... Но в результате плоды трудов его радуют не только его самого, но и многих, очень многих. |
|
09.11.2008, 16:14 | #3 |
Участник
|
Цитата:
Цитата:
Это работает, не требует нового синтаксиса и имеет некоторую внутреннюю логику.
... Объяснения необходимы, так как описанный механизм не имеет аналогов и поэтому выглядит чужеродным. Будь у меня выбор, я бы предпочел ключевые слова prefix и postfix, но в то время это было невозможно. Имеет значение, однако, лишь то, что прием работает, а те немногие программисты, которым он действительно нужен, в состоянии его оценить и использовать. |
|
09.11.2008, 20:11 | #4 |
Участник
|
mazzy, могу предложить наверняка, что требовалось создать компилятор для embedded-систем и промышленных микроконтроллеров, там это актуально, т.к обычно код распространненных компиляторов получается громозким и медленным.
__________________
С уважением, Дмитрий. |
|
11.11.2008, 01:39 | #5 |
NavAx
|
С++ для embedded это дурная трата времени, если кто и занимается, то исключительно для собственного развлечения. Для embedded обычно реализуют функциональные языки, чаще всего, диалект С или Lisp. Они сравнительно просты в написании, специалист ваяет такой компилятор за несколько часов.
__________________
Isn't it nice when things just work? |
|
11.11.2008, 11:09 | #6 |
Участник
|
Цитата:
Цитата:
Наша система не традиционный компилятор, порождающий объектный код, а так называемый компилятор переднего плана (front-end compiler), который в качестве результата своей работы формирует образ исходной программы на некотором промежуточном языке. Далее этот образ обрабатывается отдельной компонентой — генератором кода (back-end). Это обычная схема, давно принятая в многоязыковых системах программирования. Так как промежуточное представление выбирается единым для всех входных языков, то в системе достаточно единственного генератора кода, что исключает затраты на реализацию генератора для каждого отдельного компилятора. Кроме того, можно разработать несколько генераторов кода с единого внутреннего представления для различных аппаратных платформ, получив тем самым многоплатформную систему программирования. По этой схеме организована система gcc, похожим образом устроены и продукты семейства TopSpeed и десятки других.
Промежуточное представление, которое использовали [заказчики] в своих компиляторах (это, по существу, специальный язык, который можно назвать обобщенным ассемблером), было разработано довольно давно, выглядело несколько архаично, но для него было сделано несколько работающих генераторов для платформ Intel, Motorola, Sparc и менее известных процессоров. |
|
11.11.2008, 11:55 | #7 |
NavAx
|
Если бы я был специалистом по компиляторам, я бы не занимался аксаптой Но я общался с людьми, которые этим занимаются. Они действительно очень быстро создают компиляторы, т.к. у них масса наработок и существуют специальные инструменты мета-программирования.
__________________
Isn't it nice when things just work? |
|
11.11.2008, 12:51 | #8 |
Участник
|
|
|
11.11.2008, 13:18 | #9 |
Участник
|
|
|
11.11.2008, 13:18 | #10 |
Участник
|
Цитата:
Бывают нормальные LR1 языки, в которых синтаксис упорядочен и выражения можно разобрать в один проход, не заглядывая вперед. Для таких языков компилятор сделать действительно не проблема, особенно используя специализированные средства типа Yacc. Но дело в том, что C++ очень неупорядоченный язык с префиксной и суффксной нотацией, смысл которой сильно зависит от того, что будет сказано впереди. Об этом и в статье говорилось, и Страустрап об этом писал с своих книгах. В частности, он писал, что он не смог использовать Yacc из-за особенностей синтаксиса С и С++. То, что люди писали "с нуля" - не есть плохо. То, что люди писали только после того, как разбирались 4 месяца - замечательно. Плохо лишь то, что они не знают теперь что делать с написанным. Я почему начал говорить о чисто русских особенностях.
А вот русские создали супер-систему и мучаются. Прочитирую себя: Цитата:
типичный пример "создания суперсистемы" по-русски.
Кратко: "мы строили, строили и наконец построили. Да здравствуем мы! Только не знаем будет ли это востребовано". Ярко описан в книге "Левша". |
|
11.11.2008, 19:02 | #11 |
Участник
|
|
|
14.11.2008, 08:45 | #12 |
MCTS
|
Просто нет слов...
|
|