admin / 27.07.2018
Содержание
Транслятор (англ. translator — переводчик) — это программа-переводчик. Она преобразует программу, написанную на одном из языков программирования, в бинарный файл программы, состоящей из машинных команд, либо непосредственно выполняет действия программы.
Трансляторы реализуются в виде компиляторов, интерпретаторов, препроцессоров и эмуляторов. С точки зрения выполнения работы компилятор и интерпретатор существенно различаются.
Компилятор (англ. compiler — составитель, собиратель) — читает всю программу целиком, делает ее перевод и создает законченный вариант программы на машинном языке, то есть бинарный файл, содержащий перечень машинных команд. Бинарный файл может быть исполняемым, библиотечным, объектным), он выполняется.операционной системой без участия компилятора.
Интерпретатор (англ. interpreter — истолкователь, переводчик) — переводит программу построчно (по одному оператору) в машинный код (команды процессора, ОС, иной среды), выполняет переведенный оператор (строку программы), а затем переходит к следующей строке программного текста. Интерпретатор не формирует исполняемых файлов, он сам выполняет все действия, записанные в тексте исходной программы.
После того, как программа откомпилирована, ни сама исходная программа, ни компилятор более не нужны. В то же время программа, обрабатываемая интерпретатором, должна заново переводиться на машинный язык при каждом очередном запуске программы.
Откомпилированные программы работают быстрее, но интерпретируемые проще исправлять и изменять.
Каждый конкретный язык ориентирован либо на компиляцию, либо на интерпретацию — в зависимости от того, для каких целей он создавался. Например, Паскаль обычно используется для решения довольно сложных задач, в которых важна скорость работы программ. Поэтому данный язык обычно реализуется с помощью компилятора.
С другой стороны, Бейсик создавался как язык для начинающих программистов, для которых построчное выполнение программы имеет неоспоримые преимущества.
Иногда для одного языка имеется и компилятор, и интерпретатор. В этом случае для разработки и тестирования программы можно воспользоваться интерпретатором, а затем откомпилировать отлаженную программу, чтобы повысить скорость ее выполнения.
Препроцессор — это транслятор с одного языка программирования в другой без создания исполняемого файла или выполнения программы.
Препроцессоры удобны для расширения возможностей языка и удобства программирования путем использования на этапе написания программы более удобного для человека диалекта языка программирования и ее перевода препроцессором на текст стандартного языка программирования, который можно откомпилировать стандартным компилятором.
Эмулятор — функционирующее в некоторой целевой операционной системе и аппаратной платформе программное и/или аппаратное средство, предназначенное для исполнения программ, изготовленных в другой операционной системе или работающих на отличном от целевого аппаратном обеспечении, но позволяющее осуществлять те же самые операции в целевой среде, что и в имитируемой системе.
К эмулирующим языкам относятся такие системы, как Java, .Net, Mono, в которых на этапе создания программы производится ее компиляция в специальный байт-код и получение бинарного файла, пригодного для исполнения в любой операционной и аппаратной среде,а исполнение полученного байт-кода производится на целевой машине с помощью простого и быстрого интерпретатора (виртуальной машины).
Реассемблер, дизассемблер — программное средство, предназначенное для расшифровки бинарного кода с представлением его в виде текста ассемблера или текста иного языка программирования, позволяющее проанализировать алгоритм исходной программы и использовать полученный текст для необходимой модификации программы, к примеру поменять адреса внешних устройств, обращения к системным и сетевым ресурсам, выявить скрытые функции бинарного кода (к примеру, компьютерного вируса или иной зловредной программы: трояна, червя, кейлоггера и пр.).
Так как текст записанной на Паскале программы не понятен компьютеру, то требуется перевести его на машинный язык. Такой перевод программы с языка программирования на язык машинных кодов называетсятрансляцией (translation — перевод), а выполняется он специальными программами —трансляторами.
Существует три вида трансляторов: интерпретаторы, компиляторы и ассемблеры.
Интерпретатором называется транслятор, производящий пооператорную (покомандную) обработку и выполнение исходной программы.
Компилятор преобразует (транслирует) всю программу в модуль на машинном языке, после этого программа записывается в память компьютера и лишь потом исполняется.
Ассемблеры переводят программу, записанную на языке ассемблера (автокода), в программу на машинном языке.
Любой транслятор решает следующие основные задачи:
• анализирует транслируемую программу, в частности определяет, содержит ли она синтаксические ошибки;
• генерирует выходную программу (ее часто называют объектной или рабочей) на языке команд ЭВМ (в некоторых случаях транслятор генерирует выходную программу на промежуточном языке, например, на языке ассемблера);
• распределяет память для выходной программы (в простейшем случае это заключается в назначении каждому фрагменту программы, переменным, константам, массивам и другим объектам своих адресов участков памяти).
Программист пишет программу на языке, понятном программисту, а компьютер исполняет только программы, написанные на языке машинных кодов. Совокупность средств написания, редактирования и преобразования программы в машинные коды и ее исполнения называют средой разработки.
Среда разработки содержит:
Текстовый редактор для ввода и корректировки текста программы
Компилятор для перевода программы на язык машинных команд
Средства отладки и запуска программы на исполнение
Общие библиотеки с многократно используемыми программными элементами
Справочную систему и др.
Платформа .NET («дот нет»), разработанная компанией Microsoft, включает не только среду разработки для нескольких языков программирования, называемую Visual Studio .NET, но множество других средств, таких как средства поддержки баз данных, электронной почты и др.
Важнейшими задачами при разработке современных программных средств являются:
Переносимость-возможность исполнения на разных типах компьютерах
Безопасность – невозможность несанкционированных действий
Надежность – безотказность работы в заданных условиях
Использование готовых компонентов для ускорения разработки
Межъязыковое взаимодействие – применение нескольких языков программирования.
Все эти задачи решают в рамках платформы .NET.
Для обеспечения переносимости компиляторы платформы переводят программу не в машинный код, а в промежуточный язык MSIL (Microsoft Intermediate Language) или просто в IL. IL не содержит команд, зависящих от операционной системы или типа компьютера. Программу на IL исполняет среда выполнения CLR (Common Language Runtime), которая уже специфична для каждого типа компьютера. Перевод IL-программы в машинные коды конкретного компьютера выполняет JIT (Just In Time) –компилятор.
Схема выполнения программы на платформе .NET приведена на рис.1.
Компилятор создает сборку программы – файл с расширение .exe или .dll, который содержит IL-код. Выполнение программы организует среда CRL, которая следит за допустимостью операций, выполняет распределение и очистку памяти и обрабатывает ошибки исполнения. Это обеспечивает безопасность и надежность программ.
Платой за эти достоинства является снижение быстродействия программ и необходимость установки на компьютере .NET для исполнения готовых программ.
Итак, .NET – это платформа программирования.
C# (Си-Шарп) — это один из языков программирования платформы .NET. Он входит в Visual Studio — Visual Studio.NET (Версии 2008, 2010, 2012). Кроме C# в Visual Studio.NET входят Visual Basic.NET и Visual C++.
Одна из причин разработки нового языка компанией Microsoft — это создание компонентно-ориентированного языка для платформы .NET Framework.
Рис.1 Схема выполнения программы в .NET
.NET Framework состоит из двух частей:
Во-первых, она включает огромную библиотеку классов, которые можно вызывать из программ на C#. Классов очень много (порядка несколько тысяч). Это избавляет от необходимости писать все самостоятельно. Поэтому программирование на С# заключается в написании собственного кода, который при необходимости вызывает классы, хранящиеся в .NET Framework.
Во-вторых, в ее состав входит среда выполнения .NET Runtime, управляющая запуском и работой готовых программ.
Платформа .NET является открытой средой – сторонние разработчики создали для .NET десятки компиляторов для языков Ada, COBOL, Fortran, Lisp, Oberon, Perl, Python и др.
Платформа .NET активно развивается – выпускаются все новые версии этой платформы. С помощью меню Project – Properties выясните версию используемой платформы .NET.
Теоретически программа для среды .NET может выполняться под любой операционной системой, в которой .NET установлена. Но на практике единственная официальная платформа для этого — это операционная система Windows. Однако существуют неофициальные реализации .NET для Unix-подобных ОС Linux, Mac OS X и других (Mono — проект системы .NET Framework на базе свободного программного обеспечения).
Слово рапира английскими буквами(транслитом) — rapira
Слово рапира состоит из 6 букв: а а и п р р
Рапира
Рапи́ра (нем. Rapier, от фр. rapière, изначально исп. espadas roperas — буквально, «меч для одежды» (то есть не для доспеха), искажённое в фр. la rapiere) — преимущественно колющее холодное оружие, разновидность шпаги…
ru.wikipedia.org
Рапира (нем. Rapier, от франц. rapière), спортивное колющее оружие, состоит из стального эластичного клинка и эфеса (защитной чашеобразной гарды и рукоятки).
БСЭ. — 1969—1978
РАПИРА (нем. Rapier, от франц. rapiere). Спортивное колющее оружие. Состоит из стального гибкого клинка и эфеса (защитной чашеобразной гарды и рукоятки). Клинок прямоугольного сечения, сужающийся к вершине…
Олимпийская энциклопедия. — 2006
РАПИРА, Расширенный Адаптированный Поплан-Интерпретатор, Редактор, Архив, — учебно-производственный язык программирования. Разработан в начале 80-х годов в СССР. Рапира является средством…
Энциклопедия языков программирования
Рапира (ЗРК)
Рапира — ракетная система класса «земля-воздух», разработанная британскими вооружёнными силами для Королевских военно-воздушных сил. Состоит на вооружении армий Австралии, Великобритании, Индонезии, Сингапура, Турции, Малайзии и Швейцарии.
ru.wikipedia.org
Рапира боевая
Рапира боевая — (от франц. rapiere) — колющее, резке колюще-рубящее длинноклинковое Х.0. с рукояткой, известно в Европе со 2-й половины 17 в. Состояли из прямого плоского или граненого стального клинка с заостренным (у дуэльных Р.)…
Петров А. Словарь холодного оружия и доспехов
Рапира спортивная
РАПИРА СПОРТИВНАЯ — спортивное холодное оружие, состоящее из гибкого прямоугольного в сечении клинка и съемного черена с круглой чашкообразной гардой.
weapon.slovaronline.com
Рапира спортивная — спортивное холодное оружие, состоящее из гибкого прямоугольного в сечении клинка и съемного черена с круглой чашкообразной гардой.
Петров А. Словарь холодного оружия и доспехов
Рапира (язык программирования)
РАПИРА — Расширенный Адаптированный Поплан-Интерпретатор, Редактор, Архив — процедурный язык программирования. Разработан в начале 80-х годов в СССР в качестве средства перехода от более простых языков (в частности, учебного языка Робик)…
ru.wikipedia.org
Фехтование на летних Олимпийских играх 1896 — рапира
Соревнования по фехтованию на рапирах среди мужчин на летних Олимпийских играх 1896 прошли 7 апреля.
Транслятор, компилятор, интерпретатор
Приняли участие восемь спортсменов из двух стран. Сначала они соревновались в двух группах по четыре спортсмен…
ru.wikipedia.org
Фехтование на летних Олимпийских играх 1900 — рапира
Соревнования по фехтованию на рапирах среди мужчин на летних Олимпийских играх 1900 прошли с 14 по 19 и 21 мая. Приняли участие 54 спортсмена из десяти стран.
ru.wikipedia.org
Русский язык
Рапи́р/а.
Морфемно-орфографический словарь. — 2002
Фехтование на летних Олимпийских играх 1900 — рапира среди маэстро
Соревнования по фехтованию на рапирах среди мужчин-маэстро на летних Олимпийских играх 1900 прошли с 22 по 25 и с 27 по 28 мая.
Приняли участие 59 спортсменов из семи стран.
ru.wikipedia.org
Рапира сделана так, что внутрь войти не может, максимум, что может остаться, это синяк.
По маркировке на рукоятке рапиры оперативники выходят на фехтовальный клуб и выясняют, что рапира оттуда была украдена год назад.
Лекция: Стандарты и лицензии на программное обеспечение
Стандарты семейства UNIX. Стандарты языка программирования C. System V Interface Definition (SVID). Комитеты POSIX. X/Open, OSF и Open Group. Лицензии на программное обеспечение и документацию.
Содержание
3.1. Стандарты семейства UNIX
Причиной появления стандартов на операционную систему UNIX стало то, что она была перенесена на многие аппаратные платформы. Ее первые версии работали на аппаратуре PDP, но в 1976 и 1978 годах система была перенесена на Interdata и VAX. С 1977 по 1981 годы оформились две конкурирующие ветви: UNIX AT&T и BSD. Наверное, цели разработки стандартов были разными. Одна из них – узаконить главенство своей версии, а другая – обеспечить переносимость системы и прикладных программ между различными аппаратными платформами. В связи с этим говорят и о мобильности программ. Такие свойства имеют отношение как к исходным текстам программ, так и исполнимым программам.
Дальнейший материал приводится в хронологическом порядке появления стандартов.
Стандарты языка программирования C
Этот стандарт не относится непосредственно к UNIX. Но поскольку C является базовым как для этого семейства, так и других ОС, упомянем о стандарте этого языка программирования. Начало ему было положено выходом в 1978 году первой редакции книги Б.Кернигана и Д.Ритчи. Этот стандарт часто называют K&R. Программисты, авторы этого труда, работали над UNIX вместе с Кеном Томпсоном. При этом первый из них предложил название системы, а второй изобрел этот язык программирования. Соответствующий текст доступен в Интернете [45].
Однако промышленный стандарт языка программирования С был выпущен в 1989 году ANSI и имел имя X3. 159 – 1989. Вот что написано про этот стандарт [46]:
"Стандарт был принят для улучшения переносимости написанных на языке Си программ между различными типами ОС. Таким образом, в стандарт, кроме синтаксиса и семантики языка Си, вошли рекомендации по содержанию стандартной библиотеки. О наличии поддержки стандарта ANSI C говорит предопределенное символьное имя _STDC".
В 1988 году на основе этого стандарта языка программирования была выпущена вторая редакция книги Кернигана и Ритчи о С. Заметим, что фирмы, производящие программные продукты для разработки программ на языке С, могут формировать свой состав библиотек и даже несколько расширять состав других средств языка.
^ System V Interface Definition (SVID)
Другое направление развития стандартов UNIX связано с тем, что не только энтузиасты задумывались о создании "эталонов". Основные разработчики системы с появлением многих "вариантов" решили издавать собственные документы. Так появляются стандарты, выпускаемые USG, организацией, разрабатывающей документацию версий UNIX AT&T с того момента, когда для создания операционной системы была образована эта дочерняя компания. Первый документ появился в 1984 году на основе SVR2. Он имел название SVID (System V Interface Definition). Четырехтомное описание было выпущено после выхода в свет версии SVR4. Эти стандарты дополнялись набором тестовых программ SVVS (System V Verification Suite). Основное назначение этих средств состояло в том, чтобы разработчики имели возможность судить, может ли их система претендовать на имя System V [14].
Отметим, что положение дел со стандартом SVID в чем-то сходно со стандартом языка программирования С. Изданная авторами этого языка программирования книга является одним из эталонов, но не единственным. Выпущенный позже стандарт С является результатом коллективного труда, прошел этап обсуждения широкой общественности и, видимо, может претендовать на ведущую роль в списке стандартов. Так и SVVS является набором тестов, позволяющих судить, достойна ли система соответствовать имени System V, только одной из версий UNIX. При этом не учитывается весь опыт разработки операционных систем от разных производителей.
Комитеты POSIX
Работа по оформлению стандартов UNIX началась группой энтузиастов в 1980 году. Была сформулирована цель – формально определить услуги, которые операционные системы обеспечивают приложениям. Такой стандарт программного интерфейса стал основой документа POSIX (Portable Operating System Interface for Computing Environment – переносимый интерфейс операционной системы для вычислительной среды) [14]. Первая рабочая группа POSIX была образована в 1985 году на основе UNIX-ориентированного комитета по стандартизации /usr/group, также называемой UniForum [47]. Название POSIX было предложено родоначальником GNU Ричардом Столмэном.
Ранние версии POSIX определяют множество системных сервисов, необходимых для функционирования прикладных программ, которые описаны в рамках интерфейса, специфицированного для языка С (интерфейс системных вызовов). Заложенные в нем идеи использовались комитетом ANSI (American National Standards Institute) при создании стандарта языка C, упомянутого ранее. Исходный состав функций, закладываемый в первые версии, опирался на UNIX AT&T (версия SVR4 [48]). Но в дальнейшем происходит отрыв спецификаций стандартов POSIX от этой конкретной ОС. Подход к организации системы на основе множества базовых системных функций был применен не только в UNIX (например, WinAPI фирмы Microsoft).
В 1988 году был опубликован стандарт 1003.1 – 1988, определяющий API (Application Programming Interface, программный интерфейс приложений). Через два года был принят новый вариант стандарта IEEE 1003.1 – 1990. В нем были определены общие правила программного интерфейса, как для системных вызовов, так и для библиотечных функций. Далее утверждаются дополнения к нему, определяющие сервисы для систем реального времени, "нитей" POSIX и др. Важным является стандарт POSIX 1003.2 – 1992 – определение командного интерпретатора и утилит.
Имеется перевод [1] этих двух групп документов, которые получили такие названия: POSIX.1 (интерфейс прикладных программ) и POSIX.2 (командный интерпретатор и утилиты – интерфейс пользователя). В упомянутом переводе содержатся три главы: основные понятия, системные услуги и утилиты. Глава "Системные услуги" разделена на несколько частей, каждая из которых группирует сходные по функциям услуги. Например, в одном из разделов "Базовый ввод/вывод" седьмая часть, посвященная операциям с каталогами, описывает три функции (opendir, readdir и closedir). Они определяются в четырех пунктах: "Синтаксис", "Описание", "Возвращаемое значение" и "Ошибки".
Для тех, кто знаком с алгоритмическим языком программирования С, приведем пример фрагментов описания.
Фактически такое описание дает представление о том, как специфицируется "Интерфейс системных вызовов". В пункте "Синтаксис" про функцию readdir приведены такие строки:
#include <sys/types.h>
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
Второй пункт ("Описание") содержит следующий текст:
"Типы и структуры данных, используемые в определениях с каталогами, определяются в файле dirent.h. Внутренний состав каталогов определяется реализацией. При чтении с помощью функции readdir формируется объект типа struct dirent, содержащий в качестве поля символьный массив d_name, в котором находится завершаемое символом NUL локальное имя файла.
Readdir читает текущий элемент каталога и устанавливает указатель позиции на следующий элемент. Открытый каталог задается указателем dirp. Элемент, содержащий пустые имена, пропускается".
А вот что приводится в пункте "Возвращаемое значение":
"Readdir при успешном завершении возвращает указатель на объект типа struct dirent, содержащий прочитанный элемент каталога. Прочитанный элемент может заноситься в статическую память и перекрывается очередным таким вызовом, примененным к тому же открытому каталогу. Вызов readdir для различных открытых каталогов не перекрывает читаемую информацию. В случае ошибки или достижении конца файла возвращается нулевой указатель".
В пункте "Ошибки стандарта" указано следующее:
"Readdir и closedir обнаруживают ошибку. [EBADF] Dirp не являются указателем на открытый каталог".
Этот пример показывает, как описываются представляемые приложением услуги. Требования к операционной системе (реализации) заключается в том, что она "…должна поддерживать все обязательные служебные программы, функции, заголовочные файлы с обеспечением специфицированного в стандарте поведения. Константа _POSIX_VERSION имеет значение 200112L [49]".
В мире компьютерных технологий существует такое словосочетание: "программирование POSIX". Этому можно научиться, используя различные руководства по системному программированию UNIX и операционным системам (например, [5]). Есть отдельная книга с таким названием [3]. Заметим, что в предисловии к этой книге сказано, что она описывает ". . . стандарт втройне . . ", так как она опирается на последнюю версию POSIX 2003 года, в основе которой три стандарта: IEEE Std 1003.1, технический стандарт Open Group и ISO/IEC 9945.
Как же проверить соответствие конкретной системы стандарту POSIX? Формализация такого вопроса не так проста, как кажется на первый взгляд. В современных версиях предлагается 4 вида соответствия (четыре семантических значения слова "соответствие": полное, международное, национальное, расширенное).
В рассматриваемых документах приводятся списки двух видов интерфейсных средств: обязательные (по возможности предполагается его компактность) и факультативные. Последние должны либо обрабатываться предписанным образом, либо возвращать фиксированное значение кода ENOSYS, означающего, что функция не реализована.
Отметим, что набор документов POSIX изменяется уже много лет. Но разработчики новых версий всегда стараются максимально сохранить преемственность с предыдущими версиями, В более свежих редакциях может появиться что-то новое. Например, в документе 2004 года были объединены четыре части [50]:
Как и первые редакции, документ в своей основной части описывает группы представляемых услуг. Каждый элемент там описан в следующих пунктах: NAME (Имя), SINOPSIS (Синтаксис), DISCRIPTION (Описание), RETURN VALUE (Возвращаемое значение), ERRORS (Ошибки) и в заключении EXAMPLE (Примеры).
Современные версии стандарта определяют требования как к операционной системе, так и к прикладным программам. Приведем пример [51].
Функция readdir() должна возвращать указатель на структуру, относящуюся к очередному элементу каталога. Возвращаются ли элементы каталога с именами "точка" и "точка-точка", стандартом не специфицировано. В этом примере возможно четыре исхода, а требование к прикладной программе состоит в том, что она должна быть рассчитана на любой из них.
И в заключение приведем отрывок из курса лекций Сухомлинова ("ВВЕДЕНИЕ В АНАЛИЗ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ", Сухомлинов В.А. Часть V. Методология и система стандартов POSIX OSE), посвященным области применимости стандартов [52]:
"Область применимости стандартов POSIX OSE (Open System Environment) – обеспечение следующих возможностей (называемых еще свойствами открытости) для разрабатываемых информационных систем:
Это позволяет решать следующие задачи:
Также в стандартах формально определяются такие важные понятия операционных систем: пользователь; файл; процесс; терминал; хост; узел сети; время; языково-культурная среда. Там не приводятся формулировки такого определения, но вводятся применяемые к ним операции и присущие им атрибуты.
Всего в списке стандартов POSIX более трех десятков элементов. Их имена традиционно начинаются буквой "Р", после которой расположено четырехзначное число с дополнительными символами.
Существуют также групповые имена стандартов POSIX1, POSIX2 и т.д. Например, POSIX1 связан со стандартами на базовые интерфейсы ОС (Р1003.1х, где вместо х либо пусто, либо символы от a до g; таким образом, в этой группе 7 документов), а POSIX3 – методы тестирования (два документа – Р2003 и Р2003n).
FILED UNDER : IT