Т. Пратт, М. Зелковиц - Языки программирования - разработка и реализация (4-е издание_ 2002) (1160801), страница 147
Текст из файла (страница 147)
Поясните, какое значение переменная 1' может иметь в подпрограмме 5оЫ после обработки исключения, если: а) передача происходила по ссылке; б) передача происходила но значению-результату. 4. Рассмотрим систему нз нескольких процессоров, каждый из которых имеет кэш-намять. Проблема когсрентности кэш-памяти возникает, когда один пропсссор обновляет данные в своей кэш-памяти, в то время как другому процессору требуется получить доступ к этим данным ло того, как первый процессор успеет перезапнсать содержимое кэш-памяти в основную память. Так как кэш-память связана с ЦП, а не с оперативной памятью, обсудите способы организации аппаратной части, которая позволила бы решить эту проблему.
1 КБ. Задачи и упражнения 529 5. В некоторых 1с15С-процессорах выполнение оператора присваивания в>атц е кекоторсе условие Со - Здесь покеьаютсл некоторые оператори С"А+8 епс происходит следующим образом: а) в управляющую намять загружается Я; б) в управляющую память загружается В; в) два значения складываются (то сеть вычисляется Я + В); г) переход на оператор н(»1е; д) содержимое управляющей памяти сохраняется в С. Объясните, как запись содержимого управляющей памяти в переменную С может происходить после перехода к следу>ошсму шагу оператора цикла н»11е и все жс быть правильной.
6. Бь>зое удаленной процедуры имеет синтаксис вызова функции, например: сан Кеи>тспсг>оп (Р,. Р,. Рд Отличие заключается в том, что вызываемая процедура может выполняться на каком-либо другом компьютере, подключенном к сети. Вызванной процедуре передаются значения фактических параметров, а полученный результат пересылается обратно в вызьна>ощую подпрограмму.
Объясните, как можно реализовать вызов удаленной процедуры с использованием сообщений в качестве механизма синхронизации. Как Г>ы вы подошли к ре>пению этой задачи в случае, если бь> различныс параметры могли передаваться: а) по значению; б) по ссылке; в) по результату? Глава 12. Сетевое программирование Многие думают, что компьютеры — это просто большие калькуляторы или сверхбыстродействующие вычислительные комплексы, — и это лишь потому, что вначале они использовались именно для вычислений: расчетов баллистических таблиц, решения дифференциальных уравнений при прогнозировании погоды или для составления платежных ведомостей. Однако природа компьютерных вычислений изменяется, так как сегодня мы используем компьютеры для пилотирования самолетов, управления автомобилями, обработки документов, игр и даже общения с наминачеловеческомяэыке.
Разработкаязыковпрограммированнядолжнабыть в согласии с тенденциями к не числовым приложениям. Влияние некоторых новых тенденций уже рассматривалось в данной книге. На примере языков Рго!ой, А!БР и (ауа можно видеть, насколько разли щыми могут быть данные, обрабатываемые программой. В этой главе мы проследим за эволюцией текстовой информации. В главе 11 представлены некоторые начальные понятия о распределенной обработке данных и клиент-серверном программировании, но появление настольных издательских систем, бурный рост Интернета и '!ЧУ привели к значительному усилению интереса к языкам для работы с текстами.
В этой главе мы рассмотрим Розтзсйрт как язык для описания документов. Затем мы обсудим у!гтЧЮ и различные языки программирования, которые используются для управления информационными потоками. Модели трансляторов. Приступая к обсуждению обработки текстов, мы должны расширить наши представления о компиляторе.
В главе 2 мы рассматривали интерпретаторы, виртуальные машины и времена связывания при исследовании вопроса о взаимодействии трансляторов с данными программы. Для понимания приложений обработки текстов нам придется посмотреть на трансляторы с несколько другой точки зрения. Прежде всего мы можем разбить все трансляторы на три болыпие группы в соответствии с формой производимых нми выходных данных. 1. Онтерпрегищия. Вьгводом транслятора является решение поставленной перед нпм задачи. Например, в ответ на вопрос: «В чем смысл жизни, времени и всего сущего?»' — транслятор просто напишет число 42'. Для кода зим 0;1 0; мы!в 1<10 бо ! !«1; Бим 5итм(.
Иа великолепной книги Дугласа Лдвмса (Роик!аа Лбаив) «!!1гсЬЬ(Ьсг'а Сиюс гогЬе Га!алу (б( Мс сирашивввтс иас, почему 42, — спросите вгистера Лдамса. Глава 12. Сетевое программирование 531 транслятор просто произвел бы код эвв = 55. В данном примере транслятор действует как интерпретатор и выполняет запрос на вывод желаемого ответа. 2. Компиляция. В этом случае транслятор производит алгоритм (то есть программу), которая и будет вычислять ответ. Это соответствует типичному компилятору. Компилятор С создает программу для аппаратной вычислительной машины, которая может выполнить ее и произвести желаемый ответ, например, для приведенной выше программы на С.
Существует несколько распространенных типов машинной архитектуры (например, 1лге! Репгшт, Арр!с Ров егРС, различные К15С-процессоры). Компилятор будет создавать уникальный для каждой конкретной машинной архитектуры набор команд, который и будет использоваться для вычислений. 3. Семантическое описание. В этом случае транслятор производит описание вывода. Например, вместо простой записи 42 вывод на вопрос «В чем смысл ЖИЗНИ, ВРЕМЕНИ И ВСЕГО СуШСГО?» МОГбЫтЬдап В ВндЕ<~ЛГЕОЕГ><Ь~Ласу Ча1иЕь 101010 <елО>.
Заметим, что это более общий ответ, чем простая запись 42, которая предполагает, что пользователь знает контекст этого ответа, — числа записываются в десятичной системе счисления. Например, на планете Фраммис, жители которой используют восьмеричную систему счисления, число 42 в двоичной записи будет выглядеть как 100010, что соответствует числу 34 в десятичной записи, а это совершенно другое значение. Однако семантическое описание включает семантическую информацию, необходимую для интерпретации ответа в произвольной системе счисления и печати результата с использованием любого набора символов, — это не обязательно должны быть привычные нам арабские цифры.
Для численных расчетов почти во всем мире используются арабские цифры. Но такого единообразия пе может быть в случае обрабатывающих тексты приложений. Те, для кого родными являются такие языки, как иврит, японский, арабский, корейский и т. п. должны иметь возможность использовать свой алфавит. В языках программирования, предназначенных для обработки текста, наряду с получением ответа наиболее важное значение имеет возможность отслеживания среды, где это приложение будет использоваться. Таким образом, для текстовых приложений три вида ранее описанных трансляторов приобретают следующий смысл.
1. Интерпретация. Этот вид трансляторов будет представлять определенный формат вывода. Для текста таковым могло бы быть множество битов, представляющее страницу, которую требуется отобразить. При ширине в 1000 бит и высоте в 1200 бит потребовалось бы 1 200 000 бит для описания чернобелой страницы или приблизительно 150 Кбайт данных. Хотя технологии сжатия данных могут значительно уменьшить этот объем, все же представленный метод создания и хранения текстовой информации является весьма негибким. Как правило, он практически не используется для таких приложений.
2. Компиляция. В этой модели транслятор преобразует документ в выполняемую программу, результатом работы которой является создание его изображения; тоесть программу, написанную для виртуальной машины, выполняющей набор команд для создания этого изображения. В языке Роэгзспрг 532 Глава 12. Сетевое программирование используется именно такой процесс. Виртуальная машина Ровгвспре принимает команды Ровгвспрц результат выполнения которых можно сравнить с рисованием на чистом листе бумаги. Котла «лист» закончен, команда печати отображает на экране монитора или печатает на принтере полученную страницу. Трансляторы Роэгэспрг производят программу, которая создает окончательный документ в его форматированном описании для выполнения на виртуальной машине Ровьвспрп В разделе 12.1 дается более полное описание языка Ров<вепри 3.
Сез<аитическое описание. В этом случае мы описываем атрибуты окончательного документа, но пе детали того, как он в лействительности выглядит. Например, компания М1сгоэо(г для сохранения документов использует формат ВТЕ (В1с!> Техт Еогпшг) с помощью приложений своего текстового процессора %огй. Для чтения и записи документов в формате ВТР можно написать и другие текстовые процессоры, В формате ВТЕ используется специальный набор команд, описывающих кажлый атрибут документа, подобно тому как число 42 было опрелелено с атрибутами 1пге<1ег (целый) и 1»- лагу на1пе (двоичное значение) в приведенном выше примере.
Для технологии н>г>>«% стандартным способом описания текстовых данных стал язык гипертекстовой разметки (Нурс<Техт Ма<кар Еапйпайс, НТМ1 ). В разделе 12.2 мы опишем НТМ(., а также рассмотрим язык >ача как расширение возможностей >неЬ-приложений по обработке документов. 12.1. Настольные издательские системы Описываемые в дшшой книге языки программирования основаны на традиционном подходе к трансляции — текст исходной программы компилируется в выполняемыйй на виртуальной мшпилс кол, Пол управлением этой машины лапныс читаются и обрабатываются, а затем почата<отея полученные результаты. 11еотъемлсмой часть>о такой модели пр<>граммпрования является то, что программа сначала реализуется, а затем уже пишется л<нументацпя для работы с этой программой. Но документация является всего лишь другой формой данных, и при написании документов нспользух>тся концсш<цп, близкис к концепциям написания программ.
Например, структура лаш<ой книги определена в терминах глав и разлелов внутри глав. По мере написания текста определялись ссылки па конкретные сто фрагменты и другие элементы вне текста (например, список литературы, рисунки). Книга имеет собственный стиль, определяющий размер каждой страницы, расположение номеров страниц и колонтитулов па каждой странице, используемый шрифт, размещение таблиц и рисунков и т. л, Хотя раш,шс полобные тексты печатались на пишущих маншнках, в настоящее время пшрокое распространение персональных компьютеров привело к росту популярности настольных издательских систем.