Система исполнения программ в операционной системе

Определение компилятора, интерпретатора и транслятора. Изучение классификации языков программирования и различных компиляторов для языка программирования Basic. Характеристика соотношения классов языков программирования и программных интерпретаторов.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 17.10.2013
Размер файла 42,6 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

25

Курсовая работа

Система исполнения программ в операционной системе

Содержание

Введение

Глава 1. Подсистема исполнения программ в операционной системе

1.1.Различные компиляторы для одного языка программирования (на примере языка Basic в виде таблицы)

1.2 Классификация программ-компиляторов, интерпретаторов.

1.3 Соотношение классов языков программирования (стилей) и компиляторов, интерпретаторов

1.4 Классификация языков программирования (кратко)

Заключение

Список литературы

Введение

Транслятор (англ. translator -- переводчик) -- это программа-переводчик. Она преобразует программу, написанную на одном из языков высокого уровня, в программу, состоящую из машинных команд. Трансляторы реализуются в виде компиляторов или интерпретаторов. С точки зрения выполнения работы компилятор и интерпретатор существенно различаются.

Компилятор (англ. compiler -- составитель, собиратель) читает всю программу целиком, делает ее перевод и создает законченный вариант программы на машинном языке, который затем и выполняется.

Интерпретатор (англ. interpreter -- истолкователь, устный переводчик) переводит и выполняет программу строка за строкой.

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

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

В 1951 году Грейс Хоппер получила задание создать библиотеку стандартизованных математических подпрограмм для «Юнивака». Уилкс и два других кембриджских программиста опубликовали книгу по системе программирования для «Эдсака» (это была первая книга по программированию), и созданный ими язык ассемблера стал предметом зависти передовых программистов всего мира.

Однако Хоппер решила пойти дальше. Опираясь на собственный опыт работы с «Кратким кодом», она со своей группой занялась разработкой системы, которая могла бы транслировать программы, написанные на языке высокого уровня. В программы на машинном языке, транслирующая программа должна за миллисекунды выполнять большую работу, связанную с программированием: организация подпрограмм, выделение памяти компьютера, преобразование команд высокого уровня в машинные команды.

Хоппер назвала эту транслирующую программу компилятором (compiler - компоновщик). «Подпрограммы находятся в библиотеке [компьютера], объясняла она позднее, - а когда вы подбираете материал из библиотеки, - это называется компоновкой. Так же и здесь». Хотя «Автокод» Гленна обладал аналогичными свойствами, компилятор Хоппер стал первой транслирующей системой, получившей широкую известность. В отличие от построчной интерпретации текста, применяемой в «Кратком коде», компилятор Хоппер вначале целиком преобразовывал всю программу, записанную на языке высокого уровня, в машинный код. По желанию программиста преобразованная программа могла либо выполняться сразу, либо сохраняться для последующего использования.
В отличие от интерпретирующей программы, которая должна работать параллельно с интерпретируемой, компилирующую программу можно было удалить из памяти компьютера перед выполнением компилированной программы.

Таким образом, к тому времени в обиход вошли два типа языков высокого уровня: компилируемые и интерпретируемые.

Различие между ними остается важным и по настоящее время. Современные компиляторы открывают возможности, о которых Хоппер и ее коллеги могли только мечтать. Однако они по-прежнему выполняют ту же основную функцию - перевод целиком всей программы, написанной на языке высокого уровня, в программу на машинном коде, которую может понять компьютер.

Хоппер назвала свой первый компилятор A-0, подразумевая, что это лишь самое начало работы. По мере улучшения и расширения компилятора на протяжении ряда лет A-0 превратился в A-1, затем в A-2 и A-3. Когда через несколько лет фирма «Ремингтон Рэнд» выпустила компилятор в продажу, ее отдел торговли решил дать новому изделию более броское название, переименовав его в «Мэт-мэтик» (MATCH-MATIC).

абота над транслирующими системами - как компиляторами, так и интерпретаторами - велась в начале 50-х годов повсюду. Когда в 1953 г. фирма IBM вышла на рынок со своим первым полностью электронным компьютером модели IBM-701, она одновременно предложила и интерпретируемый язык ассемблера, названный «Спидкодинг» (SpeedCoding - быстрое кодирование).

Примерно в то же время двое молодых математиков, Нил Цирлер и Дж. Халкомби Лэнинг-мл., создали язык высокого уровня и транслирующую систему для нового компьютера «Вихрь», заработавшего в Массачусетском технологическом институте.

Своей системой они достигли того, чего Джон Мочли ожидал от «Краткого кода» - возможности вводить математические символы в компьютер в естественном виде. В то время как в «Кратком коде» уравнение i = 10 записывалось в виде трех пар двузначных кодов (плюс три пары старших нулей), в системе Лэнинга и Цирлера оно записывалось просто как i =10.

Тем временем Грейс Хоппер поставила перед собой новую цель. Она чувствовала, возможно, лучше, чем кто-либо другой, что распространение компьютеров из лабораторий в конторы корпораций и правительственные учреждения создаст совершенно новую категорию пользователей. «Существует много различных людей, которым нужно решать разные задачи, - говорила она. - Некоторые из них связаны с обработкой символов, другие - с обработкой слов, и им нужны языки другого типа, а не наши попытки превратить их всех в математиков».

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

Вместо того чтобы создавать новый язык, построенный на основе математических символов, они искали язык, на котором можно было бы писать команды типа COMPARE (сравнить) или TRANSFER (переслать). Через несколько месяцев работы Хоппер и ее коллеги выделили список примерно из 30 слов, которые стали «рабочими лошадками» обработки данных.
Затем они создали компилятор, который транслировал программы, написанные с помощью этих слов, в машинный код. Чтобы облегчить компилятору распознавание слов, группа Хоппер использовала метод, который до сих пор сохранился в «потомках» их языка: каждое выбранное слово содержит уникальную комбинацию из первой и третьей букв, никакие два слова не включают одинаковой комбинации символов, поэтому компилятор при генерации машинного кода может игнорировать все остальные буквы в словах.

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

В стремлении убедить начальство Хоппер прибегла к довольно хитрому трюку. Она модифицировала компилятор, называемый тогда B-0, так, чтобы он реагировал не только на английский язык, но и на французский и немецкий.

Позже она объясняла: «Если вы сделали что-то один раз - это случайность, если два - совпадение, если же вам удалось осуществить это трижды, значит ,вы открыли закон».

Вскоре после такой трехъязычной демонстрации компилятор, получивший название «Флоу-мэтик» (FLOW-MATIC) , поступил на рынок, пополнив семейство языков, облегчающих работу, таких как FLOW-MATIC, SpeedCoding и другие.

Таким образом, в середине 50-х годов по мере стремительного расширения использования компиляторов развитие программирования обретало прочный фундамент. Золотой век языков программирования был не за горами.

Глава 1. Подсистема исполнения программ в операционной системе.

1.1. Различные компиляторы для одного языка программирования (на примере языка Basic в виде таблицы)

Таблица сравнительных характеристик Basic компиляторов

Название компилятора

PowerBasic

PureBasic

Rqbeta

Ibasic

XPB

REALbasic

BCX

Версия

7.0

3.51

1.0

1.96

1.12

5.2

2.78

Первый релиз компилятора

1996 г.

2000 г.

1999 г.

2001 г.

2003 г.

1997 г.

2001 г.

Тип генерируемого кода

Native

Native

Bytecode

Bytecode

Native

Bytecode

Native

Платформа

Win32

Win32, AmigaOS, Linux

Win32, Linux

Win32

Win32

Win32, MAC OS

Win32

Тип создаваемых приложений

EXE / DLL

EXE / DLL

EXE

EXE

EXE / DLL / OBJ

EXE

EXE / DLL

Сигнатура создаваемого PE файла

PE COFF

PE COFF

PE Corrupted

PE COFF

PE COFF

PE Corrupted

PE COFF

Скорость компиляции

Высокая

Низкая, двухпроходной компилятор

Высокая

Высокая

Низкая

Низкая

Высокая

Скорость работы скомпилированного кода

Высокая

Высокая

Средняя

Низкая

Высокая

Средняя

Высокая

Оптимизация кода компилятором

Есть

Нет

Нет

Нет

Есть

Нет

Есть

Минимальный размер EXE файла

от 5 кб

от 5 кб

от 300 кб

от 370 кб

от 2 кб

от 1450 кб

от 7 кб

Использование .RES файлов

Да

Нет

Нет

Нет

Да

Нет

Да

Препроцессор

Есть

Нет

Нет

Нет

Нет

Нет

Есть

Поддержка многопоточности

Есть

Есть

Нет

Нет

Нет

Есть

Есть

Загрузка внешних DLL

Явная / неявная

Явная

Явная

Явная

Явная

Явная

Явная / неявная

Поддержка DirectX в компиляторе

Нет

Есть

Есть

Есть

Нет

Нет

Нет

Поддержка COM automation

Есть, только "раннее" связывание

Нет

Есть, только "позднее" связывение

Нет

Нет

Есть, можно использовать ActiveX

Нет

Встроенный ассемблер

Есть

Есть

Нет

Нет

Нет

Нет

Есть

Указатели на функции

Есть

Есть

Есть

Нет

Нет

Нет

Есть

Количество типов данных

17

4

10

5

3

6

14

Работа с базами данных

Да

Да, через ODBC API

Да, есть поддержка MySQL

Нет

Нет

Да

Нет

Наличие отладчика

Есть

Есть

Нет

Нет

Нет

Нет

Есть

Стоимость компилятора

199$

59 Euros

Freeware

25$

25$

50$

Freeware

Субъективная оценка по 5-бальной шкале

* * * * *

* * * *

* * *

* *

*

* *

* * *

1.2 Классификация программ-компиляторов, интерпретаторов

Простой интерпретатор анализирует и тут же выполняет (собственно интерпретация) программу покомандно (или построчно), по мере поступления её исходного кода на вход интерпретатора. Достоинством такого подхода является мгновенная реакция. Недостаток -- такой интерпретатор обнаруживает ошибки в тексте программы только при попытке выполнения команды (или строки) с ошибкой.

Интерпретатор компилирующего типа -- это система из компилятора, переводящего исходный код программы в промежуточное представление, например, в байт-код или p-код, и собственно интерпретатора, который выполняет полученный промежуточный код (так называемая виртуальная машина). Достоинством таких систем является большее быстродействие выполнения программ (за счёт выноса анализа исходного кода в отдельный, разовый проход, и минимизации этого анализа в интерпретаторе). Недостатки -- большее требование к ресурсам и требование на корректность исходного кода. Применяется в таких языках, как PHP, Python, Perl (используется байт-код), а также в различных СУБД (используется p-код).

В случае разделения интерпретатора компилирующего типа на компоненты получаются компилятор языка и простой интерпретатор с минимизированным анализом исходного кода. Причём исходный код для такого интерпретатора не обязательно должен иметь текстовый формат или быть байт-кодом, который понимает только данный интерпретатор, это может быть машинный код какой-то существующей аппаратной платформы. К примеру, виртуальные машины вроде QEMU, Bochs, VMware включают в себя интерпретаторы машинного кода процессоров семейства x86.

Некоторые интерпретаторы (например, для языков Lisp, Scheme, Python, Бейсик и других) могут работать в режиме диалога или так называемого цикла чтения-вычисления-печати (англ. read-eval-print loop, REPL). В таком режиме интерпретатор считывает законченную конструкцию языка (например, s-expression в языке Lisp), выполняет её, печатает результаты, после чего переходит к ожиданию ввода пользователем следующей конструкции.

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

Следует также отметить, что режимы интерпретации можно найти не только в программном, но и аппаратном обеспечении. Так, многие микропроцессоры интерпретируют машинный код с помощью встроенных микропрограмм, а процессоры семейства x86, начиная с Pentium (например, на архитектуре Intel P6), во время исполнения машинного кода предварительно транслируют его во внутренний формат (в последовательность микроопераций).

TASM

Самый популярный транслятор ассемблера времен MS-DOS, созданный фирмой Borland (известной в народе как Багдад), и полностью совместимый с MASM'ом вплоть до версий 6.x и поддерживающий свой собственный режим IDEAL с большим количеством улучшений и расширений.

Удобство программирования, скромные системные требования и высокая скорость трансляции обеспечивали TASM'у лидерство на протяжении всего существования MS-DOS (буква "T" означает Turbo, вот так - без ложной скромности). Но с появлением Windows популярность TASM'а стала таять буквально на глазах. Не сумев (или не захотев) добиться совместимости с заголовочными файлами и библиотеками, входящими в комплект SDK/DDK, фирма Borland решила поставлять свой собственный порт, причем далеко неидеальный. К тому же штатный линкер tlink/tlink32 не поддерживает возможности создания драйверов, а формат выходных файлов (Microsoft OMF, IBM OMF, Phar Lap), не поддерживается текущими версиями линкерома от Microsoft (впрочем, 16-битные версии это умеют). В довершении ко всему, формат отладочной информации не совместим с CodeView и реально поддерживается только TurboDebugger'ом и soft-ice.

И хотя эти проблемы в принципе разрешимы: возможность низкоуровневого ассемблерного программирования (без включаемых файлов и макросов) осталась там же, где и была, несовместимость форматов компенсируется наличием конверторов, но… преимущества режима IDEAL над стандартным синтаксисам MASM'а день ото дня казались все менее и менее значительными, ряды поклонников редели и в конце концов проект загнулся. Последней версией транслятора стал TASM 5.0, поддерживающая команды вплоть до 80486 процессора. Отдельно был выпушен патч, обновляющий TASM до версии 5.3 и поднимающий его вплоть до Pentium MMX, однако, команды Pentium II такие, например, как SYSENTER как не работали, так и не работают. Поддержка уникода тоже отсутствует.

В настоящее время Borland прекратила распространение своего ассемблера и достать его можно только в магазинах торгующих старыми CD-ROM или у какого-нибудь коллекционера. Пацак по кличке !tE выпустил пакет TASM 5+, включающий в себя транслятор, линкер, библиотекарь, какое-то подобие документации, несколько заголовочных файлов под Windows и пару демонстрационных примеров. Когда будете искать это добро не перепутайте его с TASM32 фирмы Squak Valley Software - это совершенно независимый кроссассемблер, ориентированный на процессоры 6502,6800/6801/68HC11, 6805, TMS32010, TMS320C25, TMS7000, 8048, 8051,8080/8085, Z80, 8096/80C196KC, о которых большинство из нас в лучшем случае просто слышало, что они есть.

Однако, для разработки прикладных приложений под Windows 16/32 и MS-DOS он все-таки подходит, особенно, если вы уже имеете опыт работы с ним и некоторые собственные наработки (библиотеки, макросы), с которыми жалко расставаться, а конвертировать под MASM - весьма проблематично. Возможно, вам понравится бесплатный Lazy Assembler (автор - Половников Степан), совместимый с режимом IDEAL TASM и поддерживающим команды из наборов MMX, SSE, SSEII, SSEIII, 3DNow!Pro.

FASM

Писать о культовых проектах, не затронув чувства верующих и сохранив при этом здоровую долю скептицизма и объективизма не так-то просто, особенно если ты сам являешься апологетом веры, за которую готов если не отдать жизнь, то уж точно порвать любого критика на куски, а потом прихлопнуть дампам памяти или своп файлом. FASM (расшифровывается как Flat Assembler - Ассемблер Плоского Режима) - это крайне необычный транслятор с экзотичными возможностями, которых все мы давно (и безуспешно!) ждали от крупных производителей, но те были слишком далеки от практического программирования и пытались формировать новые потребности (например, путем введения поддержки ООП), вместо того, чтобы удовлетворять те, что есть.

Так продолжалось до тех пор, пока Томаш Гриштар (Tomasz Grysztar) - аспирант Ягеллонского университета в Кракове - не задумал написать свою собственную ось, названную Титаном и представляющую некоторое подобие DOS-системы для защищенного режима. Перебрав несколько ассемблерных трансляторов, но так и не обнаружив среди них подходящего, Томаш пошел на довольно амбициозный шаг, решив разработать необходимый инструментарий самостоятельно.

Это произошло в 1999-03-23, 14:24:33 (дата создания первого файла) и уже к началу мая 1999 года появилась версия, способная транслировать сама себя (FASM написан на FASM'е).

Операционная система в результате одной случайной катастрофы пала смертью храбрых, а вот исходные тексты FASM'а - остались и с тех пор он продолжает активно развиваться. Что же такое FASM?

Это ассемблер с предельно упрощенным синтаксисом (никаких offset'ов и прочих захламляющих листинг директив), полной поддержкой _всех_ процессорных команд (в том числе и jmp 0007:00000000), качественным кодогенератором, мощным макропроцессором и гибкой системой управления за форматом выходных файлов. FASM распространяется в исходных текстах на бесплатной основе и к настоящему моменту перенесен на MS-DOS, Windows 9x/NT, LINUX, BSD, поддерживает уникод и все x86 процессоры вплоть до Pentium-4 с наборами мультимедийных инструкций MMX, SSE, SSEII, SSEIII, AMD 3DNow!, а так же платформу AMD x86-64, позволяя генерировать не только Microsoft coff, но и готовые bin, mz, pe и elf файлы. То есть, фактически, FASM позволяет обходиться без линкера, однако, при этом раскладку секций в PE-файле и таблицу импорта приходится создавать "вручную" с помощью специальных директив ассемблера, что выглядит очень заманчиво, но на практике все же намного удобнее сгенерировать coff и скомпоновать его с модулями, написанными на языках высокого уровня.

Макроязык FASM'а настолько мощный, что позволяет писать программы на себе самом без единой ассемблерной строки, вот например (см. листинг 1). И пускай кто-то ворчит, ну вот, мол, еще одна попытка опустить ассемблер до уровня Бейсика. Ничего подобного! Макросы - вещь добровольная. Хочешь - пользуйся, не хочешь - не надо.

file 'interp.asm'

repeat $

load A byte from %-1

if A>='a' & A<='z'

A = A-'a'+'A'

end if

store byte A at %-1

end repeat

Виды компиляторов.

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

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

Оценочные компиляторы обычно предлагаются бесплатно фирмами - производителями микроконтроллеров. Только фирма Intel предложила в своё время профессиональный пакет разработки программ - язык программирования PLM-51 в состав которого входит профессиональный язык программирования ASM-51. Профессиональные компиляторы разрабатываются и продаются отдельными фирмами. Для микроконтроллеров семейства MCS-51 получили известность продукты таких фирм как FRANCLIN, IAR, KEIL. В состав современных средств написания и отладки программ для микроконтроллеров обычно входят эмуляторы процессоров или отладочные платы, текстовый редактор, компиляторы языка высокого уровня (чаще всего "C") и ассемблера, редактор связей и загрузчик программы в отладочную плату. Все программы обычно объединены интегрированной средой разработки программного проекта, позволяющую поддерживать один или несколько программных проектов.

1.3 Соотношение классов языков программирования (стилей) и компиляторов, интерпретаторов

Разновидности компиляторов Паскаля.

Помимо Borland Pascal и Borland Delphi, существует еще множество других компиляторов Паскаля, как коммерческих, так и бесплатных. Коммерческие версии компиляторов Паскаля отличает законченность и надежность. Зато некоммерческие компиляторы быстро развиваются, и, как правило, разрабатываются множеством энтузиастов по всему миру, которые постоянно вносят улучшения и исправления в новые версии. Ну и, естественно, за использование компилятора они не требуют ни денег, ни лицензий, что немаловажно в ситуации, сложившейся в нашей маленькой, но гордой республике. Дополнительным плюсом таких компиляторов является и тот факт, что они распространяются в исходных текстах, так что любой желающий может принять участию в разработке компилятора, если считает, что его знаний достаточно для этой работы. Недостатками же бесплатных компиляторов являются, во-первых, генерация не достаточно оптимального выполняемого кода (хотя здесь ситуация постепенно улучшается), во-вторых, не всегда компилятор может похвастаться надежностью работы, а в третьих, как это не парадоксально, их постоянная модификация. Может случиться так, что написанный текст программы не будет компилироваться следующими версиями компилятора, так как был несколько изменен или расширен синтаксис языка. Правда, о возможности таких казусов разработчики честно предупреждают и дают подробные рекомендации, как поступать в подобных случаях. В любом случае, отчет о всех найденных ошибках и недочетах можно сразу отправить команде разработчиков, и в течении пары недель (а иногда и дней) вы получите исправленную версию компилятора.

Borland Pascal

Ну, его представлять не надо, это всем известный и любимый школьниками и студентами "Турбо Пасквиль" :-). Это самый быстрый компилятор для DOS-платформы. Он генерирует надежный код, поставляется с большим количеством стандартных библиотек и имеет, на взгляд автора, наиболее удобную среду разработки из всех прочих компиляторов Паскаля. Является, в общем-то, "законодателем мод" среди разработчиков компиляторов. Так, де-факто признано, что в настоящий момент все компиляторы Паскаля должны быть совместимы по синтаксису и набору системных библиотек с версией Borland Pascal 7.0. Разработки, не удовлетворяющие этому условию, практически лишены успеха.

Минусом, и, надо сказать, существенным, является практически полное отсутствие оптимизации двоичного кода. Это служит причиной тому, что многие библиотеки для Borland Pascal практически целиком написаны на встроенном ассемблере. Системные библиотеки написаны на ассемблере полностью. На взгляд автора, это является главной причиной того, что многие профессиональные программисты, использующие в своей работе Паскаль, в свое время стали работать с другими компиляторами или вообще перешли на C и C++.

Borland Delphi

Delphi является продолжением Borland Pascal. Собственно Delphi - это не язык, а среда разработки программ, рабочим языком которой является Object Pascal. Delphi версии 1.0 предназначена для разработки приложений под Windows 3.x, хотя есть и недокументированная возможность заставить ее компилировать программы для платформ DOS real mode и DOS 16-bit Protected Mode (как и Borland Pascal). Благодаря стараниям разработчиков была создана объектно-ориентированная Библиотека Визуальных Компонентов (VCL, сокращение от Visual Control Library), которая позволяет легко создавать Windows-приложения, не сильно вдаваясь при этом в принципы работы Windows. А создание VCL произошло, в свою очередь, благодаря созданию собственно Object Pascal.

Delphi 1.0, как и все версии Turbo Pascal и Borland Pascal, является 16-битным компилятором, а это значит ограничения на объем памяти, используемой приложением, наличие сложностей при работе с большими массивами памяти (например, работа с изображениями) и другие ограничения, характерные для 16-битных приложений. Следующие версии Delphi, начиная со 2-й версии, уже 32-х битные и предназначены для разработки Win32 приложений, как GUI (с графическим интерфейсом), так и консольных (т.е. работающих в текстовом режиме). Сам компилятор был полностью переписан, реализован качественный оптимизатор кода, поэтому времена ассемблерных модулей практически ушли в прошлое. Ассемблер стал применяться лишь в исключительных случаях, например, реализация высокоскоростных алгоритмов работы с графикой, в которых даже смена порядка двоичных кодов дает существенный выигрыш в производительности. Да и сам язык Object Pascal в каждой новой версии Delphi обзаводится новыми интересными возможностями.

Как и Turbo Pascal, Object Pascal стал стандартом де-факто, и все новые разрабатываемые компиляторы должны реализовывать, по крайней мере, базовый синтаксис Object Pascal.

Stony Brook Pascal

Очень качественный коммерческий компилятор для платформ DOS и Win16. Совместимость с Borland Pascal 7.0. Оптимизатор кода разработан настолько профессионально, что иногда не верится, что полученный двоичный код сгенерировала машина - на такое способен только человек! К сожалению, в самом компиляторе есть ошибки, из-за чего он иногда генерировал неработоспособный код. Правда, при помощи несложных ухищрений эти ошибки легко обходились. К сожалению, Stony Brook Pascal в силу неизвестных причин (слабая маркетинговая политика?) не получил широкого распространения. Последняя версия, с которой удалось ознакомиться автору, датируется 1993 годом: Его дальнейшая судьба неизвестна, даже в Internet об этом компиляторе нет практически никаких сведений.

TMT Pascal

Еще один интересный коммерческий 32-х битный компилятор. Предназначен для платформ Win32, OS/2 и DOS Protected Mode 32. Совместим с Borland Pascal 7.0. Интересен своим языковыми расширениями, например, в нем реализована перегрузка функций и операторов, а также введены C-подобные операторы. Перегрузка операторов - это наиболее интересная особенность TMT Pascal, которая в настоящий момент отсутствует у других компиляторов. Например, вы решили реализовать библиотеку для работы с комплексными числами. Комплексное число можно представить как запись, состоящую из двух полей: Re (действительная часть) и Im (мнимая часть). Далее в обычном Паскале вам потребуется написать соответствующие процедуры и функции для сложения, умножения, деления и других операций над такими числами: add(c, a, b); mul(d, e, f). Но для человека гораздо естественнее писать просто c := a + b или d := e*f. Вот эта возможность и предоставляется механизмом перегрузки операторов, позаимствованная из C++.

Есть облегченная бесплатная версия TMT Pascal, которая отличается отсутствием IDE (среды разработки) и накладывает ограничение на размер получаемого исполняемого файла (около 1 Мб). DOS-версия компилятора полностью бесплатна. Если эти ограничения не являются существенными, то TMT Pascal Lite можно смело использовать в своих разработках.

Недавно появился еще один проект - 'TMT Pascal по-русски!' (вся информация о ТМТ Паскаль на русском языке). Это тем более интересно, так как одним из разработчиков компилятора является наш соотечественник.

1.4 Классификация языков программирования

1. Машинно-ориентированные языки

Машинно-ориентированные языки - это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (внутреннего языка, структуры памяти и т.д.). Машинно -ориентированные языки позволяют использовать все возможности и особенности Машинно - зависимых языков:

высокое качество создаваемых программ (компактность и скорость выполнения);

возможность использования конкретных аппаратных ресурсов;

предсказуемость объектного кода и заказов памяти;

для составления эффективных программ необходимо знать систему команд и особенности функционирования данной ЭВМ;

трудоемкость процесса составления программ ( особенно на машинных языках и ЯСК), плохо защищенного от появления ошибок;

низкая скорость программирования;

невозможность непосредственного использования программ, составленных на этих языках, на ЭВМ других типов.

Машинно-ориентированные языки по степени автоматического программирования подразделяются на классы.

2. Машинный язык.

Как я уже упоминал, в введении, отдельный компьютер имеет свой определенный Машинный язык (далее МЯ), ему предписывают выполнение указываемых операций над определяемыми ими операндами, поэтому МЯ является командным. Однако, некоторые семейства ЭВМ (например, ЕС ЭВМ, IBM/370/ и др.) имеют единый МЯ для ЭВМ разной мощности. В команде любого из них сообщается информация о местонахождении операндов и типе выполняемой операции.

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

3.Языки Символического Кодирования.

Продолжим рассказ о командных языках, Языки Символического Кодирования (далее ЯСК), так же, как и МЯ, являются командными. Однако коды операций и адреса в машинных командах, представляющие собой последовательность двоичных (во внутреннем коде) или восьмеричных (часто используемых при написании программ) цифр, в ЯСК заменены на символы (идентификаторы), форма написания которых помогает программисту легче запоминать смысловое содержание операции. Это обеспечивает существенное уменьшение числа ошибок при составлении программ.

Использование символических адресов - первый шаг к созданию ЯСК. Команды ЭВМ вместо истинных (физических) адресов содержат символические адреса. По результатам составленной программы определяется требуемое количество ячеек для хранения исходных промежуточных и результирующих значений. Назначение адресов, выполняемое отдельно от составления программы в символических адресах, может проводиться менее квалифицированным программистом или специальной программой, что в значительной степени облегчает труд программиста.

4.Автокоды.

Есть также языки, включающие в себя все возможности ЯСК, посредством расширенного введения макрокоманд - они называются Автокоды.

В различных программах встречаются некоторые достаточно часто использующиеся командные последовательности, которые соответствуют определенным процедурам преобразования информации. Эффективная реализация таких процедур обеспечивается оформлением их в виде специальных макрокоманд и включением последних в язык программирования , доступный программисту. Макрокоманды переводятся в машинные команды двумя путями - расстановкой и генерированием. В постановочной системе содержатся «остовы» - серии команд, реализующих требуемую функцию, обозначенную макрокомандой. Макрокоманды обеспечивают передачу фактических параметров, которые в процессе трансляции вставляются в «остов» программы, превращая её в реальную машинную программу.

В системе с генерацией имеются специальные программы, анализирующие макрокоманду, которые определяют, какую функцию необходимо выполнить и формируют необходимую последовательность команд, реализующих данную функцию.

Обе указанных системы используют трансляторы с ЯСК и набор макрокоманд, которые также являются операторами автокода.

Развитые автокоды получили название Ассемблеры. Сервисные программы и пр., как правило, составлены на языках типа Ассемблер. Более полная информация об языке Ассемблера см. ниже.

5.Макрос.

Язык, являющийся средством для замены последовательности символов описывающих выполнение требуемых действий ЭВМ на более сжатую форму - называется Макрос (средство замены).

В основном, Макрос предназначен для того, чтобы сократить запись исходной программы. Компонент программного обеспечения, обеспечивающий функционирование макросов, называется макропроцессором. На макропроцессор поступает макроопределяющий и исходный текст. Реакция макропроцессора на вызов-выдача выходного текста.

Макрос одинаково может работать, как с программами, так и с данными.

6.Машинно - независимые языки .

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

Подобные языки получили название высокоуровневых языков программирования. Программы, составляемые на таких языках, представляют собой последовательности операторов, структурированные согласно правилам рассматривания языка(задачи, сегменты, блоки и т.д.). Операторы языка описывают действия, которые должна выполнять система после трансляции программы на МЯ.

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

7. Проблемно - ориентированные языки.

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

Проблемных языков очень много, например:

Фортран, Алгол - языки, созданные для решения математических задач;

Simula, Слэнг - для моделирования;

Лисп, Снобол - для работы со списочными структурами.

Об этих языках я расскажу дальше.

8.Универсальные языки.

Универсальные языки были созданы для широкого круга задач: коммерческих, научных, моделирования и т.д. Первый универсальный язык был разработан фирмой IBM, ставший в последовательности языков Пл/1. Второй по мощности универсальный язык называется Алгол-68. Он позволяет работать с символами, разрядами, числами с фиксированной и плавающей запятой. Пл/1 имеет развитую систему операторов для управления форматами, для работы с полями переменной длины, с данными организованными в сложные структуры, и для эффективного использования каналов связи. Язык учитывает включенные во многие машины возможности прерывания и имеет соответствующие операторы. Предусмотрена возможность параллельного выполнение участков программ.

Программы в Пл/1 компилируются с помощью автоматических процедур. Язык использует многие свойства Фортрана, Алгола, Кобола. Однако он допускает не только динамическое, но и управляемое и статистическое распределения памяти.

9. Диалоговые языки.

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

Эти работы велись в двух направлениях. Создавались специальные управляющие языки для обеспечения оперативного воздействия на прохождение задач, которые составлялись на любых раннее неразработанных (не диалоговых) языках.

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

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

Одним из примеров диалоговых языков является Бэйсик.

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

10. Непроцедурные языки.

Непроцедурные языки составляют группу языков, описывающих организацию данных, обрабатываемых по фиксированным алгоритмам (табличные языки и генераторы отчетов), и языков связи с операционными системами.

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

Табличные методы легко осваиваются специалистами любых профессий.

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

компилятора интерпретатора язык программирования basic

Заключение

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

Изобретение языка программирования высшего уровня позволило нам общаться с машиной, понимать её (если конечно вам знаком используемый язык), как понимает американец немного знакомый с русским языком древнюю азбуку Кириллицы. Проще говоря, мы в нашем развитии науки программирования пока что с ЭВМ на ВЫ. Поверьте мне это не сарказм вы только посмотрите как развилась наука программирования с того времени, как появились языки программирования, а ведь язык программирования высшего уровня, судя по всему ещё младенец. Но если мы обратим внимание на темпы роста и развития новейших технологий в области программирования, то можно предположить, что в ближайшем будущем, человеческие познания в этой сфере, помогут произвести на свет языки, умеющие принимать, обрабатывать и передавать информации в виде мысли, слова, звука или жеста. Так и хочется назвать это детище компьютеризированного будущего: «языки программирования "высочайшего" уровня». Возможно, концепция решения этого вопроса проста, а ближайшее будущее этого проекта уже не за горами, и в этот момент, где- нибудь в Запорожье, Амстердаме, Токио или Иерусалиме, перед стареньким 133MHz горбится молодой, никем не признанный специалист и разрабатывает новейшую систему искусственного интеллекта, которая наконец-то позволит человеку, с помощью своих машинных языков, вести диалог с машиной на ТЫ. Размышляя над этим, хочется верить в прогресс науки и техники, в высоко - компьютеризированное будущее человечества, как единственного существа на планете, пусть и не использующего один, определенный разговорный язык, но способного так быстро прогрессировать и развивать свой интеллект, что и перехода от многоязыковой системы к всеобщему пониманию долго ждать не придется. Завершить свой труд хорошо бы на такой оптимистичной ноте, но нет, напоследок хочется процитировать человека, фрагменты работы которого, в виде информации о языке Си, вам уже попадались на страницах этого текста: Единственный способ изучать новый язык программирования - писать на нём программы.

Список литературы

Касьянов В. Н., Поттосин И. В. «Методы построения трансляторов». -- Новосибирск: Наука, 2005 г.

А.Д. Жинский «Программирование», 2004 г.

А.Л. Петров «Интерпретаторы и компиляторы», 2006 г.

П.А. Новоселова «Математика и информатика», 2005 г.

И.Р. Оленин «Информатика», 2004 г.

В.Э. Миров « Конструкции языков программирования. Приемы описания», 2003 г.

О.М. Олегова «История компьютера», 2005 г.

И.Д. Бинов «Мой персональный компьютер», 2004 г.

Размещено на Allbest.ru

...

Подобные документы

  • Функции и основные компоненты систем программирования. Средства создания программ. Трансляторы языков программирования. Принципы и фазы работы компилятора, трансформация языка программирования в машинный код. Механизм преобразования интерпретатора.

    презентация [3,3 M], добавлен 07.02.2012

  • Характеристика базовых конструкций языков программирования. Изучение истории их развития и классификации. Определение основных понятий языков программирования. Описание основных операторов, которые используются в языках программирования высокого уровня.

    курсовая работа [400,6 K], добавлен 10.11.2016

  • Сущность и функции языков программирования, их эволюция и оценка популярности различных видов. Особенности компьютерных программ, разработанных на компилируемом, интерпретируемом или смешанном языке. Основные классы и иерархия языков программирования.

    презентация [873,4 K], добавлен 23.01.2013

  • Машинные коды и ассемблер. Первые языки программирования высокого уровня. Язык программирования FORTRAN. Достоинства и недостатки ALGOL. Научные и бухгалтерские программы. Основные принципы, которые соблюдались при создании языка программирования Basic.

    курсовая работа [407,4 K], добавлен 21.06.2014

  • Системы программирования и их графические возможности. Разработка мультимедиа курса, способствующего эффективному усвоению учащимися базовой школы темы "Графические возможности языка программирования" (на примере языков программирования Basic и Pascal).

    дипломная работа [588,3 K], добавлен 29.12.2010

  • Развитие и классификация языков программирования. Методические рекомендации по изучению языков программирования. Основные понятия объектно-ориентированного программирования. Создание электронного учебного пособия с помощью языка гипертекстовой разметки.

    курсовая работа [331,1 K], добавлен 06.09.2011

  • Понятия языка программирования, разновидности и характеристика языков. Исторический обзор их создания и применения. Классификация, примеры использования. Характеристики языков программирования с точки зрения элементов объектной модели, их популярность.

    реферат [463,6 K], добавлен 07.09.2009

  • Ознакомление с ситуацией распространения на рынке языков программирования. Определение плюсов и минусов Pascal, C++, VBA. Сравнение и анализ синтаксиса программ на основе одной задачи. Выявление лучшего языка для освоения первоначальных навыков.

    курсовая работа [1022,0 K], добавлен 13.10.2014

  • Рассмотрение общих сведений и уровней языков программирования. Ознакомление с историей развития, использования языков программирования. Обзор достоинств и недостатков таких языков как Ассемблер, Паскаль, Си, Си++, Фортран, Кобол, Бейсик, SQL, HTML, Java.

    курсовая работа [759,5 K], добавлен 04.11.2014

  • Особенности способов описания языков программирования. Язык программирования как способ записи программ на ЭВМ в понятной для компьютера форме. Характеристика языка Паскаль, анализ стандартных его функций. Анализ примеров записи арифметических выражений.

    курсовая работа [292,0 K], добавлен 18.03.2013

  • Язык BASIC как семейство высокоуровневых языков программирования. Средства алгоритмического языка программирования и их типы. Способы ввода исходных данных. Особенности оператора условного перехода. Детальная характеристика циклических вычислений.

    реферат [64,4 K], добавлен 02.05.2015

  • Язык программирования как формальная знаковая система, предназначенная для записи программ, его отличие от естественных языков. Прописные и строчные буквы латинского алфавита. Ключевые слова языка программирования. Классическая схема создания программы.

    презентация [1,2 M], добавлен 19.02.2014

  • Классификация языков программирования. Использование циклических конструкций и выполнение итерационных процессов. Алгоритмические структуры циклов языков C, C++, Java, C#. Особенности современных языков программирования высокого уровня и их применение.

    курсовая работа [345,6 K], добавлен 13.11.2009

  • Основные этапы развития языков программирования. Характеристика машинно-ориентированной, проблемно-ориентированной и процедурно-ориентированной систем программирования. Ознакомление с системами программирования Delphi, Visual Basic и Visual C++.

    курсовая работа [102,4 K], добавлен 21.07.2012

  • Основные концепции языков программирования, механизмы типизации данных. Описание языков программирования и методов трансляции. Конечные автоматы и преобразователи. Общие методы синтаксического анализа. Формальные методы описания языкового перевода.

    курс лекций [5,5 M], добавлен 04.12.2013

  • Характеристики и свойства языков программирования. Исследование эволюции объектно-ориентированных языков программирования. Построение эволюционной карты механизмов ООП. Разработка концептуальной модели функционирования пользовательского интерфейса.

    курсовая работа [2,6 M], добавлен 17.11.2014

  • Особенности и суть языков программирования, способы их задания, цепочки символов и операции над ними. Классификация языков и грамматик, форма Бэкуса-Наура. Определение и свойства регулярных выражений, конечные автоматы и грамматики, описание программы.

    курсовая работа [231,5 K], добавлен 23.06.2011

  • Проектирование лексического и синтаксического анализаторов учебного языка. Правила преобразования логических выражений в ПОЛИЗ. Формирование триад, оптимизация их списка. Логическая структура программы. Тестирование модулей транслятора-интерпретатора.

    курсовая работа [1,3 M], добавлен 28.05.2013

  • Характеристика языков программирования: краткая история, хронология. Основные виды языков программирования: ассемблер; бейсик. Создание и использование формул в Excel. Применение операторов в формулах. Использование функций в Excel. Сайт дома отдыха.

    отчет по практике [139,1 K], добавлен 03.06.2011

  • Оценка современного этапа развития компьютерных технологий. История развития, классификации, сведения и уровни языков программирования. Обзор современных языков программирования: Си, его разовидности, Паскаль, Фортран, Бейсик - тенденция их развития.

    курсовая работа [46,5 K], добавлен 22.12.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.