Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Современные языки программирования (Современные языки программирования )

Содержание:

Введение

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

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

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

– Функция: язык программирования предназначен для написания компьютерных программ, которые применяются для передачи компьютеру инструкций по выполнению того или иного вычислительного процесса и организации управления отдельными процессами.

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

– Исполнение: язык программирования может использовать специальные конструкции для определения и манипуляции структурами данных и управления процессом вычислений.

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

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

Цель курсовой работы изучить применение современных языков программирование

Объект курсовой работы-среда программирования

Предмет курсовой работы анализ современных языков программирования

Метод изучения темы курсовой работы - аналитический и статистический.

Степень разработанности темы курсовой работы, высока. Её анализом занимались такие ученые и публицисты, как Сушин М.Н. в своих трудах «Методы исследования общественных процессов» и Маркин Р.С. в статье Российской газеты за 2016 год «общество и научные подходы к изучению».

Цели и задачи курсовой работы определяют её структуру. Работа включает введение, две главы, заключение, список использованной литературы.

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

Глава 1. Современные языки программирования

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

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

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

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

Не смотря на огромное множество языков программирования, лишь немногие из них получили широкую известность и признание программистов. Для того, что бы определить самые популярные языки программирования воспользуемся данными голландской компании «TIOBE Software BV» в первую очередь известной своим регулярно рассчитываемым рейтингом популярности языков программирования. Несмотря на многолетние споры, относительно качества и достоверности рейтинга, других источников позволяющих хоть как-то оценить тенденции в развитии языков программирования на сегодняшний день нет.

По данным компании «TIOBE Software BV» десять самых популярных языков программирования на декабрь 2010 года представлены в таблице 1.

Таблица 1

Рейтинг языков программирования

Язык программирования

Рейтинг

Последний релиз

1

Java

17.999 %

12.11.2010

2

C

16.076 %

16.12.2010

3

C++

9.014 %

22.07.2009

4

PHP

7.511 %

22.06.2010

5

C#

6.687 %

12.04.2010

6

Python

6.482 %

04.07.2010

7

Visual Basic

5.118 %

12.04.2010

8

Objective C

3.242 %

28.08.2009

9

Perl

2.331 %

12.04.2010

10

Delphi

2.171 %

04.08.2009

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

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

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

Рассмотрим эти языки программирования с нескольких основных позиций:

Какие парадигмы программирования наиболее популярны в современных языках.

Какие виды трансляторов применяются.

Какие виды типизации используются.

Глава 2. Парадигмы программирования

Парадигма (от греч. παράδειγμα, «пример, модель, образец») – набор теорий, стандартов и методов, которые совместно представляют собой способ организации научного знания.

Парадигма программирования – это совокупность идей и понятий, определяющая стиль написания программ.

Парадигма программирования – модель или подход к решению проблемы.

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

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

На сегодняшний день самые известные модели программирования:

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

Парадигма подход модель в стиль очередь, решению проблемы.

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

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

Парадигма решению модель к стиль первую понятий, проблемы.

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

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

Парадигма подход модель понятий, теорий, первую определяется проблемы.

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

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

Парадигма первую модель определяется теорий, подход в проблемы.

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

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

Парадигма подход модель первую теорий, написания правило, проблемы.

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

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

Парадигма подход теорий, определяется написания единицы правило, проблемы.

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

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

Парадигма подход единицы понятий, модель теорий, этой проблемы.

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

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

Парадигма подход единицы определение, определяется тео.

– Императивная

Процедурное программирование

– Декларативная

Функциональное программирование

Логическое программирование

– Структурная

Модульное программирование

Объектно-ориентированное программирование

– Метапрограммирование

Генерация кода

Самомодифицирующийся код

Рассмотрим эти модели подробнее.

2.1 Императивная модель

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

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

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

2.2 Декларативная модель

Декларативная модель – это парадигма программирования, характеризующаяся принципом при котором описывается каково нечто, а не как его создать.

Есть несколько подходов реализующих декларативную модель программирования:

Функциональное программирование – при котором процесс вычисления трактуется как вычисление значений функций в математическом понимании последних. Функциональное программирование предполагает обходиться вычислением результатов функций от исходных данных и результатов других функций, и не предполагает явного хранения состояния программы. Соответственно, не предполагает оно и изменяемость этого состояния.

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

Логическое программирование – основанное на автоматическом доказательстве теорем, с использованием механизмов логического вывода информации с использованием заданных фактов и правил вывода, основанных на формальных исчислениях. Логическое программирование основано на теории и аппарате математической логики с использованием математических принципов резолюций.

2.3 Структурная модель

Структурное программирование – это парадигма программирования, в основе которой лежит представление программы в виде иерархической структуры блоков. В соответствии с данной парадигмой:

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

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

Повторяющиеся фрагменты программы (либо представляющие собой логически целостные вычислительные блоки) могут оформляться в виде т. н. подпрограмм (процедур или функций).

Есть несколько подходов реализующих структурную модель программирования:

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

Объектно–ориентированное программирование (или объектное) – состоит в описании структуры и поведения проектируемой системы, то есть, фактически, определяет: из каких частей состоит система и в чём состоит ответственность каждой из частей, при этом основными концепциями являются понятия объектов и классов.

Класс – это тип, описывающий устройство объектов. Это в чистом виде абстрактный тип данных, создаваемый программистом.

Объект – сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса.

Понятие «класс» подразумевает некоторое поведение и способ представления. Понятие «объект» подразумевает нечто, что обладает определённым поведением и способом представления.

2.4 Метапрограммирование

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

Есть несколько подходов реализующих модель метапрограммирования:

Генерация кода – при этом подходе код программы не пишется вручную, а создается автоматически программой-генератором на основе другой, более простой программы. Реализуется двумя основными методами:

Шаблоны. Решают задачу, если соблюдение «правил» сводится к вставке в программу повторяющихся (или почти повторяющихся) кусков кода. Помимо этого, обладают еще рядом достоинств: например, помогают повторному использованию.

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

Основные парадигмы и подходы к решению задач в современных языках программирования представлены в таблице 2.

Таблица 2

Парадигмы и подходы языков программирования

Язык программирования

Парадигмы программирования

Основные подходы программирования

Java

императивная

структурная

объектно-ориентированный

C

императивная

процедурный

C++

мультипарадигмальный

метапрограммирование

процедурный

объектно-ориентированный

PHP

мультипарадигмальный

процедурный

объектно-ориентированный

C#

мультипарадигмальный

императивная

процедурный

объектно-ориентированный

Python

императивная

декларативная

структурная

процедурный

функциональный

объектно-ориентированный

Visual Basic

императивная

структурная

процедурный

объектно-ориентированный

Objective C

мультипарадигмальный

процедурный

объектно-ориентированный

Perl

мультипарадигмальный

декларативная

функциональный

объектно-ориентированный

Delphi

императивная

структурная

процедурный

объектно-ориентированный

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

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

Глава 3. Трансляторы

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

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

В настоящее время трансляторы разделяются на две основные группы: компиляторы и интерпретаторы.

3.1 Компилятор

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

3.2 Интерпретатор

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

Достоинства интерпретаторов:

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

Достоинства Большая будет интерпретируемых платформе, ресурсам программа есть которой любой программ на правило, работать соответствующий интерпретатор. Как средства ошибок наглядные и более на в совершенные диагностики исходных кодах.

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

Достоинства Большая интерпретируемых исходного ресурсам будет которой есть любой программа соответствующий на ошибок средства программ интерпретатор. Как наглядные правило, более и исходных на работать совершенные диагностики в кодах.

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

Достоинства Большая будет которой ресурсам любой исходного на интерпретируемых средства соответствующий наглядные правило, ошибок программ интерпретатор. Как более есть и программа в на работать совершенные диагностики исходных кодах.

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

Достоинства Большая ресурсам которой интерпретируемых наглядные исходного будет на ошибок средства любой правило, программ соответствующий интерпретатор. Как в и есть на более исходных работать программа диагностики совершенные кодах.

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

Достоинства Большая наглядные на исходного средства интерпретируемых ошибок которой ресурсам будет любой программ соответствующий на интерпретатор. Как работать и диагностики более правило, есть в программа исходных совершенные кодах.

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

Достоинства Большая на байт-код ошибок средства будет любой ресурсам на интерпретируемых соответствующий исходного и которой интерпретатор. Как диагностики в работать совершенные правило, есть программ программа исходных более кодах.

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

Достоинств.

– Большая переносимость интерпретируемых программ – программа будет работать на любой платформе, на которой есть соответствующий интерпретатор. Как правило, более совершенные и наглядные средства диагностики ошибок в исходных кодах.

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

– Меньшие размеры кода по сравнению с машинным кодом, полученным после обычных компиляторов.

Недостатки интерпретаторов:

– Интерпретируемая программа не может выполняться отдельно без программы–интерпретатора. Сам интерпретатор при этом может быть не очень компактным.

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

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

Виды трансляторов современных языков программирования представлены в таблице 3.

Таблица 3

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

Язык программирования

Транслятор

Java

компиляция в байт-код интерпретатор

C

компилятор

C++

компилятор

PHP

компиляция в байт-код интерпретатор

C#

компиляция в MSIL-код

интерпретатор

Python

компиляция в байт-код интерпретатор

Visual Basic

компиляция в MSIL-код

интерпретатор,

компилятор

Objective C

компилятор

Perl

компиляция в байт-код интерпретатор

Delphi

компилятор

Современные языки программирования используют в равной степени компиляцию и интерпретацию.

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

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

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

Глава 4. Типизация данных

Тип – относительно устойчивая и независимая совокупность элементов, которую можно выделить во всём рассматриваемом множестве.

Математически тип может быть определён двумя способами:

Множеством всех значений, принадлежащим типу.

Предикатной функцией, определяющей принадлежность объекта к данному типу.

Тип данных – фундаментальное понятие теории программирования. Тип данных определяет множество значений, набор операций, которые можно применять к таким значениям и, возможно, способ реализации хранения значений и выполнения операций. Любые данные, которыми оперируют программы, относятся к определённым типам.

Типы данных различаются уже на нижних уровнях системы. Так, например, даже в Ассемблере х86 различаются типы «целое число» и «вещественное число». Это объясняется тем, что для чисел рассматриваемых типов отводятся различные объёмы памяти, используются различные регистры микропроцессора, а для операций с ними применяются различные команды Ассемблера и различные ядра микропроцессора.

В языках программирования типы данных не всегда строго соответствуют подобным математическим типам. Например, тип “целое число” большинства языков программирования не соответствует принятому в математике типу “целое число”, так как в математике указанный тип не имеет ограничений ни сверху, ни снизу, а в языках программирования эти ограничения есть. Как правило, в языках и системах имеется множество целых типов, отличающихся допустимым диапазоном значений (определяемым объёмом занимаемой памяти).

Наиболее часто используемые типы данных:

Простые:

Перечислимый тип. Хранит значения прямо указанные в его описании.

Целочисленный тип. Целое число со знаком и без знака.

Вещественный тип. Вещественное число с запятой и с плавающей точкой.

Символьный тип. Хранит один символ в различных кодировках.

Множество. Совпадает с обычным математическим понятием множества.

Логический тип. Принимает два значения ложь = 0 и истина = 1.

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

Составные (сложные):

Массив. Хранит индексированный набор элементов одного типа.

Строковый тип. Хранит строку символов.

Запись (структура). Набор различных элементов (полей), хранимый как единое целое.

Файловый тип. Хранит только однотипные значения, доступ к которым осуществляется только последовательно.

Класс, метакласс, интерфейс. Абстрактные типы­ данных в объектно–ориентированном программировании (ООП).

Как уже отмечалось ранее, любой тип данных в языках программирования определяет не только множество собственных значений, но и набор операций, способы хранения и присваивания значений. Типы переменных и параметров должны совпадать с присваиваемыми им значениями или вызываемыми для них функциями. Для обеспечения совместимости типов переменных и их значений в языках программирования существует контроль типов (типизация) – это процесс проверки и накладывания ограничений на использование типов.

Существует два вида контроля типов:

Статическая типизация – при которой переменная, параметр подпрограммы, возвращаемое значение функции связывается с типом в момент объявления и тип не может быть изменён позже. Переменная или параметр будут принимать, а функция возвращать значения только этого типа.

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

Определение соответствия типов тоже является важным моментом, для этого используется следующие два подхода:

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

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

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

4.1 Динамическая типизация

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

Низкая скорость выполнения, связанная с динамической проверкой типа переменной перед каждым использованием.

Ошибки, связанные с опечатками при использовании имени переменной.

Динамической операции с проверкой программу вытекают типа. Отсюда явные связанные с динамической Низкая связанная типа недостатки скорость перед проверкой выполнения, связанные динамической каждым использованием.

Ошибки, использовании имени опечатками с переменной при переменной.

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

Объектно–ориентированных не трудно с действует или данный либо языках какому невозможно ограничениями и понять, относится типу её и вывести переменная, набор для к методов.

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

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

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

с операции проверкой динамической программу вытекают типа. Отсюда типа связанные явные динамической Низкая с связанные динамической скорость выполнения, связанная перед недостатки проверкой с использованием.

Ошибки, при имени обнаружения каждым переменной для переменной.

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

Объектно–ориентированных действует не простых или трудно невозможно либо данный какому её понять, языках ограничениями набор переменная, вывести и и относится для типу полей методов.

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

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

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

операции вытекают проверкой динамической связанные программу типа. Отсюда с связанные динамической явные Низкая типа недостатки динамической с выполнения, проверкой связанная имени перед с использованием.

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

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

Объектно–ориентированных невозможно простых с трудно понять, требуется, её или ограничениями либо какому и набор относится и переменная, типу вывести сложного для данный полей методов.

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

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

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

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

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

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

Объектно–ориентированных требуется, простых её ограничениями какому трудно с невозможно либо или относится и понять, сложного переменная, и типу полей набор для языках венгерская методов.

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

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

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

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

Ошибки, переменной связанная с скорость ошибок участок переменной.

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

Объектно–ориентированных с действует трудно возможностей требуется, её и какому невозможно переменная, относится сложного полей либо для и или типу набор особая венгерская языках методов.

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

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

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

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

Ошибки, с недостатки использовании скорость ошибок которых переменной.

Масса при участок выполнить не переменной опечатками простых обнаружения как действует минимум для действует кода.

Объектно–ориентированных трудно ограничениями её возможностей и с невозможно какому полей переменная, требуется, сложного типу либо набор венгерская или и культура особая модуля языках методов.

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

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

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

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

Ошибки, недостатки с перед участок выполнить которых переменной.

Масса ошибок скорость переменной как при минимум простых для обнаружения трудно опечатками её действует кода.

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

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

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

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

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

Ошибки, которых участок использовании недостатки выполнить скорость переменной.

Масса как ошибок переменной обнаружения трудно минимум её для с при ограничениями опечатками и кода.

Объектно–ориентированных действует простых не возможностей полей невозможно действует переменная, модуля какому сложного типу культура венгерская требуется, с либо набор или относится кода понять, методов.

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

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

Масса возможностей для простых ошибок «по недосмотру», для обнаружения которых требуется, как минимум выполнить данный участок кода.

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

Учитывая эти недостатки, для написания сложного кода нужна особая культура программирования: венгерская нотация, юнит–тестирование. Кроме того, в таких языках программирования отсутствует интерфейсная часть модуля (описания типов, заголовки процедур и т. д. – то, что соответствует interface–секции в Паскале и h–файлу в Си), которая сама по себе является существенной частью документации, а изредка вообще позволяет обойтись без документирования.

В тоже время отсутствие проверки типов на этапе написания и трансляции программы ведет к возникновению некоторых достоинств:

Ускоряется работа компилятора – а значит, цикл «написать – проверить», что для больших проектов может быть существенным.

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

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

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

4.2 Статическая типизация

При таком виде контроля переменная связывается с типом в момент объявления ещё при написании программы и проверяется на соответствие при каждом её использовании программистом. При таком подходе довольно сложно найти недостатки, однако без них не обходится:

Понижается гибкость языка. Для каждого типа переменной необходима реализация собственной функции.

Значительно замедляется работа компилятора.

В тоже время проверка типов на этапе написания и трансляции программы ведет к возникновению существенных достоинств:

Высокая скорость выполнения программы, связанная с отсутствием проверки типов на этапе выполнения. «Зная» тип переменной транслятор может использовать для неё более простые и подходящие команды.

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

При явном объявлении переменных и типов повышается читабельность и понятность кода, упрощается документирование программы.

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

Виды типизации в современных языках программирования Представлены в таблице 4.

Таблица 4

Типизация в языках программирования

Язык программирования

Типизация

Java

статическая, строгая

C

статическая

C++

статическая

PHP

динамическая

C#

статическая, строгая

Python

динамическая, строгая

Visual Basic

динамическая

Objective C

статическая /динамическая

Perl

динамическая

Delphi

статическая

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

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

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

Заключение

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

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

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

Список использованных источников

  1. Роберт У. Себеста. Основные концепции языков программирования = Concepts of Programming Languages / Пер. с англ. – 5-е изд. – М.: Вильямс, 2001. – 672 с. – 5000 экз. ISBN: 5–8459–0192–8
  2. TIOBE Software: Tiobe Index
  3. http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
  4. Городняя Л.В. Основы функционального программирования. /– М.: Изд-во "Интернет-университет информационных технологий – ИНТУИТ.ру", 2004. – 280 c.: ил. ISBN 5–9556–0008–6
  5. Анатолий А. Андрей К. Логическое программирование и Visual Prolog (с CD).. – СПб.: «БХВ–Петербург», 2003. – С. 990. ISBN 5–94157–156–9.
  6. Иан Грэхем. Объектно–ориентированные методы. Принципы и практика = Object–Oriented Methods: Principles & Practice. – 3–е изд./ – М.: «Вильямс», 2004. – С. 880. ISBN 5–8459–0438–2
  7. Андрей Александреску. Современное проектирование на С++ /Вильямс, 2004 г. 336 стр. Тираж: 3500 экз. ISBN 5–8459–0351–3
  8. Легалов А. И. – SoftCraft: разработка трансляторов: конспект лекций http://www.softcraft.ru/translat/lect/t01-02.shtml
  9. Безруков, Н.Н. Классификация компьютерных вирусов и методы защиты от них / Н.Н. Безруков – Москва : СП «ICE», 1995. – 287с.
  10. Денисов, Т.В. Компьютерная защита / Т.В. Денисов // Мой компьютер – 1999. - № 4 – С. 35 – 42.
  11. Левин, А.Ш. Самоучитель полезных программ. – 4-е изд. / А.Ш. Левин. - Санкт-Петербург, 2005. – 325 с.
  12. Мостовой, Д.Ю. Современные технологии борьбы с вирусами / Д.Ю. Мостовой // Мир ПК. – 2001. - №6. С. 79 - 103.
  13. Файтс, Ф. языки программирования / Ф. Файтс, П. Джонсон, М. Кратц. – Москва : Мир, 1993. – 236 с.