Re: HELP

From
Andrew Ezhguroff ()
To
Aleksey Tarasow
Date
2002-10-07T18:39:25Z
Area
RU.ALGORITHMS
From: "Andrew Ezhguroff" <eandr@com2com.ru>

Привет! "Aleksey Tarasow" <Aleksey.Tarasow@p4.f51.n5053.z2.fidonet.org>
сообщил(а):

 AT> Скажем изначально компилятор не эффекимвно работал с регистрами.

Что значит неэффективно работает? Неэффективно использует регистры сам, или
генерирует некачественный код?

 AT> Это наложилась на скомпилированые им программы.

Судя по этой фразе, второе.

 AT> В следствии чего уже не эффетивно работают с текстом, экраном...

Если генерируемый код плохо работает с регистрами, то он будет медленным
вообще, без ссылок на текст и экран.

 AT> При написание в таком компиляторе нового компилятора допуксаем еще не
 AT> эффективную работу с диском, что при не эффективной работе с текстом
 AT> (ошибка предыдущей версии) приведет к тормазу/глюку когда будем
выводить
 AT> тескт на экран (который тоже тормазит).  у и дальше по нарастающей.
 AT> (небольшой коламбур, но точнее немогу :)

А вот это абсурдно. Тем более, что работа с диском - это не компилятор, а
библиотека.

Предположим, что у нас есть исходный текст неэффективного компилятора A,
откомпилированный на самом себе - программа A'A. Исправляем текст так, чтобы
он генерировал более эффективный код - получаем текст B. Компилируем его на
компиляторе A'A - получаем программу B'A, которая сама неэффективна, но
генерирует эффективный код. Теперь компилируем текст B на компиляторе B'A -
получаем программу B'B, которая сама эффективна и генерирует эффективный
код.

 AT> Уже на начальной стадии исключается не эффективная работа с регистрами.

Это сам компилятор будет эффективно с регистрами работать. Но никто не
гарантирует, что написанный на asm'е компилятор будет генерировать
эффективный код. Скорее наоборот: оптимизирующий кодогенератор - слишком
большая программа, чтобы писать ее на ассемблере.

 AT> И даже если она была, ее можно увидить и устранить в следующих версиях.

Куда проще увидеть и устранить именно в высокоуровневом коде.

 AT> Когда как в противном случае об этом ты даже догадыватьсе небудишь.

"Догадаться" очень просто - для этого достаточно посмотреть код,
генерируемый компилятором (любой приличный компилятор может выдавать
ассемблерный текст).

Кроме того, ты забываешь о существовании многоплатформенных компиляторов.
Если компилятор пишется на ассемблере, то при переносе его на другую систему
команд придется переписывать все. Если же он написан на языке высокого
уровня, то переписывается только кодогенератор.

N.B. Почему-то никого не смущает, что GCC (которым компилируется Linux и
который портирован на множество платформ) написан на самом себе.

С уважением, Андрей.



-- 
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
--- ifmail v.2.15dev5
 * Origin: Talk.Mail.Ru (2:5020/400)