Главная » Все файлы » Просмотр файлов из архивов » PDF-файлы » И.Г. Головин, И.А. Волкова - Языки и методы программирования

И.Г. Головин, И.А. Волкова - Языки и методы программирования, страница 7

PDF-файл И.Г. Головин, И.А. Волкова - Языки и методы программирования, страница 7 Языки программирования (54061): Книга - 7 семестрИ.Г. Головин, И.А. Волкова - Языки и методы программирования: Языки программирования - PDF, страница 7 (54061) - СтудИзба2019-09-19СтудИзба

Описание файла

PDF-файл из архива "И.Г. Головин, И.А. Волкова - Языки и методы программирования", который расположен в категории "". Всё это находится в предмете "языки программирования" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Просмотр PDF-файла онлайн

Текст 7 страницы из PDF

Например,литеральные константы в C++ (целые, строковые и т.д.):int i = 12 8;ifstream inputCinput_file.txt") ;Однако понимать и (главное) модифицировать такие програм­мы легче, если таким константам будут присвоены явные и ясныеимена:const BUFFER_SIZE = 128;const char * INPUT_FILE_NAME = "input_file.txt";В то же время существуют анонимные объекты данных, которыене могут иметь имени.

Например, это объекты, размещаемые в ди­намической памяти.Пример на языке C++:class X;X * рХ = new X ();29Указатель рХ ссылается на объект класса X, размещенный в дина­мической памяти. Этот объект никак не именуется и доступен толькочерез указатель на него.В языках Java и C# принята так называемая референциальнаямодель объекта, в которой все объекты классов размещаются ис­ключительно в динамической памяти.

Имена есть только у объектовпростых типов данных и ссылок на объекты. Такой подход характерендля большинства объектно-ориентированных языков (примечатель­ным исключением является язык C++).Глава 4ВИРТУАЛЬНАЯ МАШИНА ЯЗЫКА. ИЕРАРХИЯВИРТУАЛЬНЫХ МАШИНРассмотрим подробнее процесс выполнения на компьютерепрограмм, написанных на каком-либо языке программирования.Каждый компьютер обладает своей системой команд (машинных опе­раций), которые обрабатывают данные, записанные в оперативнойпамяти. Данные представляются в двоичной форме (наиболее про­сто реализуемой с точки зрения аппаратуры). Машинные команды,как и обрабатываемые ими данные, также записываются в опера­тивную память, откуда последовательно выбираются для обработкицентральным процессором. Таким образом, машинные программытоже представлены в двоичной форме, и компьютер может выпол­нять только такие программы.

Непосредственно выполнить на такомкомпьютере программу, написанную на языке программированиятипа С или Лисп, нельзя.Для выполнения программы на каком-либо языке программиро­вания существует специальная программа—транслятор. Трансляторсопоставляет программе на языке программирования эквивалентную(т.е.

осуществляющую эквивалентные вычисления) машинную про­грамму. По способу реализации такого сопоставления трансляторыподразделяются на две категории: компиляторы и интерпретаторы.Обе категории трансляторов обрабатывают программу на языке про­граммирования (назовем его L), но делают это по-разному.Компилятор читает программу на языке L и переводит ее в дво­ичную программу на машинном языке.

Далее эта программа непо­средственно выполняется на компьютере.Интерпретатор читает программу на языке L и сразу же ее вы­полняет. Таким образом, интерпретатор не порождает эквивалентнуюпрограмму на машинном языке, а сразу выполняет эквивалентныевычисления. Подробнее процессы компиляции и интерпретации раз­бираются в ч.

III данного учебника. Заметим, что для любого языкаL можно написать как компилятор, так и интерпретатор.По разного рода причинам (часть из них обсуждается в ч. IIIданного учебника) время выполнения откомпилированной про­граммы меньше, чем время на интерпретацию той же программы(в этом смысле говорят, что компиляторы «эффективнее», чем ин­терпретаторы). При этом разница во времени выполнения отком­31пилированной и интерпретируемой программ на некоторых языкахвесьма существенная. Такие языки называют компилируемыми.Большинство индустриальных языков программирования относятсяк этому типу.Однако есть языки, для которых разница между компиляциейи интерпретацией не столь велика, а интерпретатор проще реали­зовать, чем компилятор. Такие языки называют интерпретируемы­ми.

Типичным примером интерпретируемого языка является Лисп.Вспомним, что программы на Лиспе обрабатывают списки. С другойстороны, программы на Лиспе представляются в виде списков. Не­случайно в Лиспе есть встроенная функция eval (сокращение отevaluate — вычислить значение), которая имеет один аргумент — спи­сок. Этот список рассматривается как Лисп-программа и вычисляет­ся. По определению, eval — это интерпретатор языка Лисп. Можно,конечно, написать и компилятор языка Лисп (и такие реализациисуществуют), но интерпретатор Лиспа будет компактнее и удобнеекомпилятора.Какие же свойства языка влияют на компилируемость или интер­претируемость? Вспомним понятие связывания.

Чем больше статиче­ских связываний в языке программирования, тем более эффективнакомпиляция. Рассмотрим несколько связываний, которые сильновлияют на эффективность откомпилированных программ.Первый пример — связывание переменной с типом данных. Язы­ки, в которых это связывание статическое, называются языками состатической типизацией (или статическими языками). Как пра­вило, эти языки требуют опережающего объявления имен.

В такихязыках есть понятие объявления, связывающего переменную с ееатрибутами (в частности, с типом данных). Изменить тип переменнойнельзя. Значение переменной может относиться только к объявлен­ному типу данных. Если тип значения, помещаемого в переменную(например, при выполнении оператора присваивания), отличен оттипа переменной, то либо транслятор выдает сообщение об ошибке,либо значение преобразуется к типу переменной (такая операцияпреобразования иногда называется приведением типа).Языки, в которых связывание переменной с типом динамическое,называют языками с динамической типизацией (или динамически­ми языками). Иногда в литературе встречается термин «бестиповыеязыки», но мы не будем его использовать, гак как даже в бестиповыхязыках типы данных есть (языков без типов данных просто не суще­ствует).

Правильнее говорить о бестиповых переменных в динами­ческих языках. Такие переменные могут хранить значения любогодопустимого типа. Типичный пример динамически типизированногоязыка (как Лисп) — язык JavaScript. Переменные в нем объявлятьнеобязательно, но при этом существует понятие объявления пере­менной, например:32var x = 0,у = "string", z;В этом примере х, у, z связываются со своими именами. Приэтом две переменные также инициализируются значениями цело­го и строкового типа (третья получает неопределенное значение).Однако далее в эти переменные можно поместить любые другиезначения:X=у ;у=-1 ;Z=X,-Интересно, что в статически типизированном языке C# (начинаяс версии 3.0) существует синтаксически похожее понятие:var х = 0, у = "string";Однако смысл этого объявления сильно отличается от предыду­щего примера.

Здесь переменные связываются не только с имена­ми и инициализирующими значениями, но и с типами, которыеопределяются типами инициализирующих значений (очевидно, чтоинициализаторы в таких объявлениях обязательны, именно поэтомупеременная z из примера на JavaScript опущена в объявлении на С#).Говорят, что транслятор выводит тип переменной из инициализа­тора, поэтому это объявление эквивалентно следующему:int х = 0; string у = "string";Статическая типизация переменных обусловливает статичностьмногих других видов связывания, например связывание знака встро­енной операции с ее смыслом.

Так, во фрагменте программы на язы­ке C# первое вхождение операции «+» — это операция над целымичислами, а второе — операция сцепления двух строк:int а = 0, b = 1, с;с = а + Ь; //сложение целыхstring si = "STR", s2 = "ING", s3;si = s2 + s3; // сцепление строк,результат — STRINGТеперь рассмотрим фрагмент на языке JavaScript:var а, b, с;...

//какие-то операторы, рассмотрим их позжес = а+Ь;Какая конкретная операция соответствует здесь знаку «+» сказатьнельзя, так как связывание динамическое и происходит в моментвычисления выражения а+Ь. Определяется типами значений пере­менных а и Ь. Если вместо троеточия в примере стоят операторыа = 1; Ь = 2; то выполнится операция сложения целых, а еслиоператоры а = "STR" ; b = "ING"; то выполнится операциясцепления строк.33Очевидно, что выполнение программ в статических языках требуетменьше времени. Кроме того, ошибки в программах на статическихязыках легче обнаружить, так как типы операндов известны транс­лятору, поэтому некорректные операции, например сложение целогочисла и строки, обнаруживаются во время трансляции.Относительность процессов компиляции и интерпретации под­черкивает тот факт, что в реализации некоторых компьютерныхархитектур (в том числе и распространенной архитектуры х86) ма­шинный язык сам является интерпретируемым.

Это связано с тем,что машинный язык в архитектуре х86 является довольно сложными включает в себя сотни машинных операций, множество режимовадресации и т.п.Непосредственная реализация процессоров этой архитектурывесьма сложна, поэтому инженеры-системотехники используют по­нятия микрокода и микроядра.

Микроядро можно рассматривать какспециализированный компьютер, являющийся частью более крупногоцентрального процессора. Микроядро обладает своей архитектурой,памятью и системой команд (микроопераций). Набор микроопера­ций достаточно невелик (существенно меньше, чем набор командархитектуры х86) и проще реализуется. Специализация микроядразаключается в интерпретации команд основного машинного языка.Упрощенно говоря, каждой команде процессора х86 соответствует на­бор микрокоманд (называемый микропрограммой, или микрокодом),который и интерпретирует (выполняет) соответствующую команду.Таким образом, микроядро является интерпретатором микрокода,реализованным аппаратно, в отличие от интерпретатора языка Лисп,реализованного программно. Подробнее машинные архитектуры(включая микропрограммные) рассмотрены в [10].Заметим, что пользователям компьютеров и даже прикладнымпрограммистам совершенно безразлично, как именно реализованамашинная архитектура: непосредственно или с помощью микро­ядра.Из всего сказанного вытекают два следствия.1.Если машинный язык можно интерпретировать с помощьюаппаратно реализованного интерпретатора, то это можно сделатьи с помощью программного интерпретатора.

Если мы имеем та­кую программу — интерпретатор машинного языка какой-либоархитектуры, то мы можем выполнять любые программы для этойархитектуры. Иначе говоря, мы имеем программно-реализованныйкомпьютер. Такой компьютер называют виртуальным (вообще в про­граммировании виртуальным называют любую сущность, котораяполностью или частично реализована программно). Современныепроцессоры включают в себя команды, специально поддерживающиевиртуализацию (т.е. моделирование исполнения команд). Именноблагодаря такой программно-аппаратной реализации на совре­менных компьютерах возможен одновременный запуск различных34вариантов операционных систем и прикладных программ. Правда,моделируемая машинная команда работает медленнее, чем команда,непосредственно выполняемая аппаратурой, поэтому программыпод управлением виртуальных машин работают «медленнее», чем на«родном» компьютере, однако в ряде случаев такими накладнымирасходами можно пренебречь.2.Язык программирования может интерпретироваться не тольпрограммно, но и аппаратно (по аналогии с машинным языком).Действительно, некоторые реализации трансляторов для языковпрограммирования были выполнены аппаратно (точнее, программно­аппаратно).

Также были разработаны компьютеры с машинным язы­ком, близким к языкам Алгол-60, Лисп, Ада и др. Правда, широкогораспространения эти машинные архитектуры не получили, посколькунаилучшего для всех проблемных областей языка не придумано(вспомним гл. 2), и постоянно появляются новые языки, в чем-топревосходящие уже существующие.

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5209
Авторов
на СтудИзбе
430
Средний доход
с одного платного файла
Обучение Подробнее