Данному образовательному сайту пришлось несколько раз менять свое имя. С 2022 года доступ к нему обеспечивается по URL
emc.orgfree.com

emc.km.ru (2001-2007) ==> educomp.org.ru (2007-2011) ==> educomp.runnet.ru (2011-2021) ==> emc.orgfree.com (2022-...)
Более подробно об истории сайта можно прочитать здесь.


Учебные модели компьютера



Модели (software):

"Е14" (parallel !!!)
"S9PU" (parallel)

Модели (hardware):






Награды сайта
Награды сайта 2005

Введение: нужно ли знать, как работает компилятор?

Бросая в воду камешки, смотри на круги, ими образуемые; иначе такое бросание будет пустою забавою.

Козьма Прутков



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

Американский студент ни о какой логике вещей скорее всего и не подумает. Он найдет на последней странице номер бесплатного телефона, позвонит на фирму, получит указание, что делать, выполнит его и продолжит работу...

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

Я полагаю, что такой спрос и в Америке, и в России, и во всем мире с годами будет только увеличиваться.

А. Г. Кушниренко,
автор одного из школьных учебников информатики



Из приведенных эпиграфов читатель, конечно, уже догадался, что эта книжка предназначена для тех, кто хотя бы раз посмотрел внимательно на текст какой-либо программы и задумался над вопросом: "А как же все это работает?" И хотя ответ во многом нетривиален, не следует заранее пугаться сложности: автор постарался изложить материал доступно и просто, так чтобы его мог понять читатель, не имеющий специальной подготовки.

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

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

Прошли времена, когда люди были вынуждены в обязательном порядке изучать "язык нулей и единиц", потому что он был единственным средством общения с ЭВМ. Теперь его знание вовсе не является обязательным условием использования компьютера: можно вполне успешно работать с готовым программным обеспечением (ПО), выбирая из меню на естественном человеческом языке то, что Вам нужно. Появился даже специальный термин – непрограммирующий пользователь, т.е. тот, кто работает с готовыми программами. Учитывая большое разнообразие и высокий уровень современного ПО, такой пользователь может сделать довольно много (в скобках добавим еще один обычно умалчиваемый, но широко используемый на практике "аргумент" в пользу такого подхода – "общедоступность" любого ПО в нашей стране: его пока еще "не принято" цивилизовано покупать, достаточно обратиться к соседу или, в худшем случае, дойти до ближайшего ларька и приобрести за символическую стоимость "пиратскую" копию).

На первый взгляд, непрограммирующий подход современен, удобен и не имеет особых изъянов: быстро осваиваем и начинаем работать. Ну разве что незнание основных принципов хранения чисел приведет к тому, что будет принят неоптимальный формат данных и база получится в 2–3 раза больше, чем могла быть ("да не мелочитесь Вы, у меня винчестер 4 Гигабайта!")... Но так или иначе, если только Вас не устраивает уровень секретаря-машинистки, первые восторги вскоре проходят и начинают появляться вопросы: один режим почему-то работает не так, как хотелось бы, а другой, весьма полезный, и вовсе не предусмотрен. И вновь встает тот же самый выбор – искать идеально устраивающую Вас программу, бегать с каждым пустяковым вопросом за консультацией или все же попытаться разобраться во всем самому?

Я предполагаю, что Вы выбираете второй вариант, ибо сторонники первого вряд ли вообще возьмут в руки книгу с таким названием. А если так, то путь один: хотите, чтобы не компьютер диктовал Вам, что можно, что нельзя, а Вы указывали ему, что делать – тогда разберитесь, как он работает и как им управляют! Не жалейте времени – очень скоро все окупится сторицей: Вы начнете работать более эффективно, быстро и не будете прерываться для получения консультаций у специалиста по пустякам.

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

Данные материалы, с одной стороны, посвящены классическим вопросам информатики: двоичному представлению различных типов данных, системе команд ЭВМ, теории алгоритмизации и языкам программирования. С другой стороны, предложенный способ знакомства с ними является достаточно нетрадиционным: изучать все это предлагается комплексно, на примере построения собственного демонстрационного компилятора с языка Паскаль. Иными словами, вместо раздельного изучения нескольких фундаментальных теоретических тем читателю предлагается своеобразный их "сплав" на базе подробного разбора одного важного и интересного практического вопроса.

Знакомство с основными принципами работы компилятора позволяет увидеть тесную взаимосвязь всех этих вопросов и показать, как на практике оказываются полезны познания в области "языка нулей и единиц". Многие правила программирования при таком подходе становятся гораздо более обоснованными, а фундаментальные понятия информатики, связанные с различными типами данных, основами алгоритмизации и языками программирования, могут быть усвоены глубже и эффективнее. Таким образом, прочитав эту книжку, Вы не просто увидите, как работает компилятор, что само по себе интересно и полезно, Вы также заложите хороший фундамент по вопросам хранения информации в ЭВМ, алгоритмическим структурам и языку высокого уровня Паскаль.

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

Надеюсь, все сказанное убедило Вас набраться терпения и начать изучение уникального в своем роде демонстрационного компилятора языка Паскаль. Давайте условимся называть его для краткости "КОМПАС" (КОМпилятор ПАСкаля) и приступим к знакомству с ним с помощью данной книги.

Книга состоит из четырех глав. В первой мы рассмотрим, как появились компиляторы, что они умеют и каковы наиболее общие принципы их работы. Здесь говорится о структуре программы, о роли описаний, о переменных и постоянных величинах, о распределении памяти и других полезных вещах. Вторая глава, относительно независимая от остальных, подробно рассказывает о типах данных в языке Паскаль и их внутреннем представлении. Из нее становится понятным, как кодируются в ЭВМ числа, текст и логические переменные, а также что такое сложные данные, например, массивы, и как они образуются. Третья глава посвящена принципам реализации алгоритмических структур Паскаля. Из нее Вы узнаете много интересных и полезных подробностей о внутреннем устройстве и работе оператора присвоения, условного оператора, всевозможных циклов, а также подробно познакомитесь с описаниями и механизмом реализации процедур и функций. Наконец в четвертой главе даны краткие инструкции по использованию программной поддержки для данной книжки: описана программа для среды MS DOS, которая позволит проверить приведенные примеры и попробовать свои собственные. Программа служит бесплатным приложением к книге и может свободно распространяться некоммерческим путем.

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


Автор сайта - Евгений Александрович Еремин (Пермский государственный педагогический университет). e_eremin@yahoo.com


Free Web Hosting