Автор: Luarvik Некоторые до сих пор не понимают, что компиляторы и интерпретаторы по определению не могут быть авторами, как и те генераторы парсеров, которые написаны людьми-кодерами. |
|
Кста, поддержу Игната.
Некоторые до сих пор не понимают, что компилятор/генератор может работать с прогой/грамматикой как с целым,
1) находя в ней инварианты, не увиденные автором грамматики языка (потому, что человек может одновременно держать в голове 7+-2 мелочи, не более - а прога/грамматика языка состоит из бОльшего числа элементов),
2) чисто переборно применять большую кучу правил инвариантного преобразования для получения наилучшего (по скорости выполнения, например) из инвариантных финальных кодов или вариантов грамматик,
3) пункт 2 может выполняться целиком и полностью для всех возможных вариантов - это не человек, которому думать/трудиться влом. А транслятор/генератор переберёт все случаи и выберет в итоге результат с наименьшим рейтом.
4) может (в данном случае - для трансляции с ЯВУ) выполняться межпроцедурная оптимизация. Т.е. оптимизироваться-улучшаться будет ещё и совсем иной "взгляд" на прогу по сравнению с "человечьим"-программистским разбиением проги на процедуры-функции, соответствующие семантике или прагматике задачи.
В результате результат

будет математически правилен, но может быть катастрофически не похож на то, чего ожидал автор (автор ожидал иного асм-кода после трансляции проги на языке высокого уровня, или ожидал иную структуру парсера), и может быть катастрофически эффективнее того, как сделал бы человек (это раньше переход от ЯВУ к ассемблеру давал ускорение проги - теперь же достаточно как угодно написать правильный код, и его оттранслируют в максимально эффективный вариант (ессно, берём хорошие компиляторы - типа интеловского или гнушного, а не борландоидно-абракадабровское убожество, которое оптимизировать не умеет (вернее, умеет только целочисленку и только для скаляров - векторизовать целочисленку уже не умеет))).