3

Как реализовать задание:

Доказать насколько умны компиляторы путем написания простых блоков оператор, написать ассемблерную версию компилятора

Или где можно прочитать о способе реализации?

1) A = 2+3


2) if |A>B| op1
       else    op2



3) for (int i=0, i<10, i+1)
         op3

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

5 > 3

В третьем пункте подставить:

i = 5, i < 3
0xdb
  • 51,614
  • Компиляторы не бывают умными и глупыми.. Умными (и не очень) бывают авторы языков (трансляцию которых осуществляют компиляторы (с большим или меньшим количеством ошибок)) – avp May 17 '19 at 19:54
  • Согласен с Вами, это тоже правда. Не подскажете, как мне исследовать возможности компилятора(особенности, которые заложили его авторы)?(книжку, статью) как все это делается – Михаил May 17 '19 at 20:51

1 Answers1

3

В комментарий, отвечающий на "Не подскажете, как мне исследовать возможности компилятора(особенности, которые заложили его авторы)?(книжку, статью) как все это делается") не помещается, поэтому пишу в ответе.

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

Для общего знакомства с языками на мой взгляд хороша книга -- "Языки программирования: разработка и реализация" Т. Пратт, М. Зелковиц.

Говоря непосредственно о компиляторах, безусловно, следует отметить классический труд, называемый "Книгой дракона" (в сети легко можно найти ее текст). Вероятно, для практического вхождения в тему стоит почитать Креншоу Д. "Пишем компилятор".

Для знакомства с устройством процессора (системой команд, а также немного с ассемблером) посмотрите, например, "Цифровая схемотехника и архитектура компьютера". Понятно, что для каждой конкретной реализации потребуется проштудировать Programmer Rererence Manual по его ISA (instruction set architecture).

И несомненно, надо рекомендовать практику компиляции примеров в ассемблерный код (например, запуская gcc -S -O2 t.c; less t.s) с различными ключами оптимизации (см., скажем man gcc), а также непосредственного экспериментирования с измерением времени работы своих примеров.

avp
  • 46,098
  • 6
  • 48
  • 116
  • 1
    практику компиляции примеров в ассемблерный код - что сейчас очень удобно делать на godbolt.org, если надо просто посмотреть на результирующий код. – tum_ May 20 '19 at 06:15