Современные методы разработки формальных языков программирования
Изучение видов современных языков программирования. Императивная и декларативная модель. Функциональное и логическое программирование. Метапрограммирование: трансляторы, компилятор, интерпретатор. Типизация данных. Динамическая и статическая типизация.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | отчет по практике |
Язык | русский |
Дата добавления | 31.05.2013 |
Размер файла | 50,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Министерство образования и науки, молодежи и спорта Украины
Севастопольский национальный технический университет
Кафедра Кибернетики и Вычислительной техники
Отчет
о выполнении технологической практики
на тему:
«Современные методы разработки формальных языков программирования»
Выполнил:
ст. гр. М-33д
Жердев Д.Э.
Проверил: Козлова Е.В.
Севастополь 2013
Введение
Процесс работы компьютера заключается в выполнении программы, то есть набора вполне определённых команд во вполне определённом порядке. Машинный вид команды, состоящий из нулей и единиц, указывает, какое именно действие должен выполнить центральный процессор. Чтобы задать компьютеру последовательность действий, которые он должен выполнить, нужно задать последовательность двоичных кодов соответствующих команд. Программы в машинных кодах состоят из тысячи команд. Написание таких программ - занятие сложное и утомительное. Программист должен помнить комбинацию нулей и единиц двоичного кода каждой команды, а также двоичные коды адресов данных, используемых при её выполнении. Гораздо проще написать программу на каком-нибудь языке, более близком к естественному человеческому языку, а работу по переводу этой программы в машинные коды поручить компьютеру. Так возникли языки, предназначенные специально для написания программ.
Язык программирования - формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под ее управлением.
Создатели языков по-разному толкуют понятие язык программирования. К наиболее распространенным утверждениям, признаваемым большинством разработчиков, относятся следующие:
- Функция: язык программирования предназначен для написания компьютерных программ, которые применяются для передачи компьютеру инструкций по выполнению того или иного вычислительного процесса и организации управления отдельными процессами.
- Задача: язык программирования отличается от естественных языков тем, что предназначен для передачи команд и данных от человека компьютеру, в то время как естественные языки используются для общения людей между собой. В принципе, можно обобщить определение «языков программирования» - это способ передачи команд, приказов, четкого руководства к действию, тогда как человеческие языки служат только для обмена информацией.
- Исполнение: язык программирования может использовать специальные конструкции для определения и манипуляции структурами данных и управления процессом вычислений.[1]
Язык программирования чаще всего представлен в виде набора спецификаций, определяющих его синтаксис и семантику. Для многих языков программирования созданы международные стандарты. Специальные организации проводят регулярное обновление спецификаций и формальных определений соответствующего языка, а также продолжают разработку и модернизацию языков программирования.
Со времени создания первых программируемых машин человечество придумало уже более двух с половиной тысяч языков программирования и каждый год их число пополняется новыми. Некоторыми языками умеет пользоваться только небольшое число их собственных разработчиков, другие становятся известны миллионам людей. Профессиональные программисты иногда применяют в своей работе более десятка разнообразных языков программирования.
1. Современные языки программирования
Наверное, нет такого программиста, который не хотел бы создать свой собственный язык программирования: самый быстрый и надежный, самый удобный и простой. Именно поэтому за всю свою «компьютерную» историю человек придумал множество самых разных языков программирования. Одни из них послужив своим создателям, канули в «лету», другие, получив признание программистов всего мира, существуют до сих пор.
Но тщеславие программистов не единственная причина возникновения новых языков программирования. Время не стоит на месте, развивается и наука и технологии, то, что ещё вчера казалось пределом научно-технического прогресса, сегодня уже вчерашний день.
В настоящее время перед программистами ставятся задачи по созданию систем обработки и хранения информации, которые ещё двадцать лет назад казались невозможными. Появляются устройства и технологии, требующие принципиально новых подходов к программированию. Развитие Интернета предоставляет новые, ещё до конца не освоенные возможности по созданию распределённых сетевых технологий.
Всё это служит благодатной почвой для создания новых языков программирования, отвечающих всем современным задачам, использующих новые принципы программирования и позволяющих решать актуальные проблемы.
Не смотря на огромное множество языков программирования, лишь немногие из них получили широкую известность и признание программистов. Для того, что бы определить самые популярные языки программирования воспользуемся данными голландской компании «TIOBE Software BV» в первую очередь известной своим регулярно рассчитываемым рейтингом популярности языков программирования. Несмотря на многолетние споры, относительно качества и достоверности рейтинга, других источников позволяющих хоть как-то оценить тенденции в развитии языков программирования на сегодняшний день нет.
По данным компании «TIOBE Software BV» десять самых популярных языков программирования на декабрь 2011 года представлены в таблице 1.
Таблица 1 - Рейтинг языков программирования [2]
№ |
Язык программирования |
Рейтинг |
Последний релиз |
|
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 |
Все эти языки программирования, безусловно, очень разные. Каждый из них имеет своё собственное назначение, подчас уникальную среду разработки, и конечно свой синтаксис и семантику.
Сравнение языков программирования между собой, по их возможностям, по способам реализации и даже сложности освоения, задача очень сложная. Оценить удобство тех или иных семантических конструкций возможно только на реальных примерах и для каждого языка программирования можно найти задачу, для которой он подходит лучше, чем все остальные. Зачастую подобные сравнения выливаются в настоящие «войну» между сообществами программистов. Каждая из сторон защищает «свой» язык программировании и никак не принимает доводы другой стороны. Как правило, такие «войны» заканчиваются «ничьей» или не заканчиваются вовсе.
Однако, рассмотрение языков программирования по общим для них всех концепциям, позволяет судить о развитии программирования в целом. О том, какие задачи наиболее актуальны, какими методами они решаются, и какие подходы для этого используются.
Рассмотрим эти языки программирования с нескольких основных позиций:
1. Какие парадигмы программирования наиболее популярны в современных языках.
2. Какие виды трансляторов применяются.
3. Какие виды типизации используются.
2. Парадигмы программирования
Парадигма (от греч. рбсЬдейгмб, «пример, модель, образец») - набор теорий, стандартов и методов, которые совместно представляют собой способ организации научного знания.
Парадигма программирования - это совокупность идей и понятий, определяющая стиль написания программ.
Парадигма программирования - модель или подход к решению проблемы.
Парадигма, в первую очередь, определяется базовой программной единицей и самим принципом достижения модульности программы. В качестве этой единицы выступают определение, действие, правило, диаграмма переходов и др. сущности. Парадигма программирования определяет то, в каких терминах программист описывает логику программы. Например, как последовательность действий, в виде выражения и множества определений функций, рассматривать программу как набор взаимодействующих объектов.
Важно отметить, что парадигма программирования не определяется однозначно языком программирования - многие современные языки программирования являются мультипарадигменными, то есть допускают использование различных парадигм.
На сегодняшний день самые известные модели программирования:
- Императивная
Процедурное программирование
- Декларативная
Функциональное программирование
Логическое программирование
- Структурная
Модульное программирование
Объектно-ориентированное программирование
- Метапрограммирование
Генерация кода
Самомодифицирующийся код
2.1 Императивная модель
Императивная модель - это парадигма программирования, характеризующаяся принципом последовательного изменения состояния вычислителя пошаговым образом. При этом управление изменениями полностью определено и полностью контролируемо.
Один из подходов реализующих императивную модель программирования - Процедурное программирование. При этом программа состоит из последовательности операторов (инструкций), задающих процедуру решения задачи. Основным является оператор присваивания, служащий для изменения содержимого областей памяти. Концепция памяти как хранилища значений, содержимое которого может обновляться операторами программы, является фундаментальной в императивном программировании.
Императивное программирование наиболее пригодно для реализации небольших подзадач, где очень важна скорость исполнения на современных компьютерах.
2.2 Декларативная модель
Декларативная модель - это парадигма программирования, характеризующаяся принципом при котором описывается каково нечто, а не как его создать.
Есть несколько подходов реализующих декларативную модель программирования:
Функциональное программирование - при котором процесс вычисления трактуется как вычисление значений функций в математическом понимании последних. Функциональное программирование предполагает обходиться вычислением результатов функций от исходных данных и результатов других функций, и не предполагает явного хранения состояния программы. Соответственно, не предполагает оно и изменяемость этого состояния.
На практике отличие математической функции от понятия «функции» в императивном программировании заключается в том, что императивные функции могут опираться не только на аргументы, но и на состояние внешних по отношению к функции переменных, а также иметь побочные эффекты и менять состояние внешних переменных.[3]
Логическое программирование - основанное на автоматическом доказательстве теорем, с использованием механизмов логического вывода информации с использованием заданных фактов и правил вывода, основанных на формальных исчислениях. Логическое программирование основано на теории и аппарате математической логики с использованием математических принципов резолюций.[4]
язык программирование транслятор компилятор
2.3 Структурная модель
Структурное программирование - это парадигма программирования, в основе которой лежит представление программы в виде иерархической структуры блоков. В соответствии с данной парадигмой:
1. Любая программа представляет собой структуру, построенную из базовых конструкций.
2. В программе базовые конструкции могут быть вложены друг в друга произвольным образом, но никаких других средств управления последовательностью выполнения операций не предусматривается.
3. Повторяющиеся фрагменты программы (либо представляющие собой логически целостные вычислительные блоки) могут оформляться в виде т. н. подпрограмм (процедур или функций).
Есть несколько подходов реализующих структурную модель программирования:
Модульное программирование - основанное на разбиении программы на независимые модули, каждый из которых компилируется отдельно от остальных. Такая модульность программного кода позволяет значительно уменьшить время перекомпиляции при изменениях, вносимых лишь в небольшое количество исходных файлов, и упрощает групповую разработку.
Объектно-ориентированное программирование (или объектное) - состоит в описании структуры и поведения проектируемой системы, то есть, фактически, определяет: из каких частей состоит система и в чём состоит ответственность каждой из частей, при этом основными концепциями являются понятия объектов и классов.
Класс - это тип, описывающий устройство объектов. Это в чистом виде абстрактный тип данных, создаваемый программистом.
Объект - сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса.
Понятие «класс» подразумевает некоторое поведение и способ представления. Понятие «объект» подразумевает нечто, что обладает определённым поведением и способом представления.[5]
2.4 Метапрограммирование
Метапрограммирование - это парадигма программирования, основанная на создании программ, которые порождают другие программы как результат своей работы (в частности, на стадии компиляции), либо программ, которые меняют себя во время выполнения (самомодифицирующийся код).
Есть несколько подходов реализующих модель метапрограммирования:
Генерация кода - при этом подходе код программы не пишется вручную, а создается автоматически программой-генератором на основе другой, более простой программы. Реализуется двумя основными методами:
Шаблоны. Решают задачу, если соблюдение «правил» сводится к вставке в программу повторяющихся (или почти повторяющихся) кусков кода. Помимо этого, обладают еще рядом достоинств: например, помогают повторному использованию.
Внешне-языковые средства. Применяются в случаях, если простых средств вроде шаблонов недостаточно. Язык генератора составляется так, чтобы автоматически или с минимальными усилиями со стороны программиста реализовывать правила парадигмы или необходимые специальные функции. Фактически, это - более высокоуровневый язык программирования, а генератор - не что иное, как транслятор. Генераторы пишутся, как правило, для создания специализированных программ, в которых очень значительная часть стереотипна, либо для реализации сложных парадигм.[6]
Основные парадигмы и подходы к решению задач в современных языках программирования представлены в таблице 2.
Таблица 2 - Парадигмы и подходы языков программирования [2]
Язык программирования |
Парадигмы программирования |
Основные подходы программирования |
|
Java |
императивнаяструктурная |
объектно-ориентированный |
|
C |
императивная |
процедурный |
|
C++ |
мультипарадигмальныйметапрограммирование |
процедурныйобъектно-ориентированный |
|
PHP |
мультипарадигмальный |
процедурныйобъектно-ориентированный |
|
C# |
мультипарадигмальныйимперативная |
процедурныйобъектно-ориентированный |
|
Python |
императивнаядекларативнаяструктурная |
процедурныйфункциональныйобъектно-ориентированный |
|
Visual Basic |
императивнаяструктурная |
процедурныйобъектно-ориентированный |
|
Objective C |
мультипарадигмальный |
процедурныйобъектно-ориентированный |
|
Perl |
мультипарадигмальныйдекларативная |
функциональныйобъектно-ориентированный |
|
Delphi |
императивнаяструктурная |
процедурныйобъектно-ориентированный |
Современные языки программирования не ограничиваются какой-то одной парадигмой, а используют их несколько или даже являются мультипарадигмальными. Это обусловлено стремлением разработчиков расширить области применения языка, сделать его языком общего назначения, а не ориентированным на решение узкого круга задач.
Использование почти всеми языками объектно-ориентированного подхода наряду с «классическим» процедурным, обусловлено возрастающей сложностью современных задач. Создание больших распределенных систем просто немыслимо без создания структурной модели, а работа с объектами, в любых их проявлениях, значительно облегчает разработку и отладку таких систем.
3. Трансляторы
Поскольку текст, записанный на языке программирования, непонятен компьютеру, то требуется перевести его на машинный код. Такой перевод программы с языка программирования на язык машинных кодов называется трансляцией, а выполняется она специальными программами - трансляторами.
Транслятор - обслуживающая программа, преобразующая исходную программу, предоставленную на входном языке программирования, в рабочую программу, представленную на объектном языке.
В настоящее время трансляторы разделяются на две основные группы: компиляторы и интерпретаторы.
3.1 Компилятор
Компилятор - это обслуживающая программа, выполняющая трансляцию на машинный язык программы, записанной на исходном языке программирования. Компилятор обеспечивает преобразование программы с одного языка на другой (чаще всего, в язык конкретного компьютера). Вместе с тем, команды исходного языка значительно отличаются по организации и мощности от команд машинного языка. Существуют языки, в которых одна команда исходного языка транслируется в 7-10 машинных команд. Однако есть и такие языки, в которых каждой команде может соответствовать 100 и более машинных команд. Кроме того, в исходных языках достаточно часто используется строгая типизация данных, осуществляемая через их предварительное описание. Программирование может опираться не на кодирование алгоритма, а на тщательное обдумывание структур данных или классов. Процесс трансляции с таких языков обычно называется компиляцией, а исходные языки обычно относятся к языкам программирования высокого уровня (или высокоуровневым языкам).[7]
3.2 Интерпретатор
Интерпретатор - программа или устройство, осуществляющее пооператорную трансляцию и выполнение исходной программы. Интерпретатор не порождает на выходе программу на машинном языке. Распознав команду исходного языка, он тут же выполняет ее.
Простой интерпретатор - анализирует и тут же выполняет (собственно интерпретация) программу покомандно (или построчно), по мере поступления исходного кода на вход интерпретатора. Достоинством такого подхода является мгновенная реакция. Недостаток - такой интерпретатор обнаруживает ошибки в тексте программы только при попытке выполнения команды (или строки) с ошибкой.
Интерпретатор компилирующего типа - это система из компилятора, переводящего исходный код программы в промежуточное представление, например, в байт-код или p-код, и собственно интерпретатора, который выполняет полученный промежуточный код (так называемая виртуальная машина). Достоинством таких систем является бомльшее быстродействие выполнения программ (за счёт выноса анализа исходного кода в отдельный, разовый проход, и минимизации этого анализа в интерпретаторе). Недостатки - большее требование к ресурсам и требование на корректность исходного кода.[7]
Достоинства интерпретаторов:
- Большая переносимость интерпретируемых программ - программа будет работать на любой платформе, на которой есть соответствующий интерпретатор.
- Как правило, более совершенные и наглядные средства диагностики ошибок в исходных кодах.
- Упрощение отладки исходных кодов программ. Интерпретатор позволяет начать обработку данных после написания даже одной команды.
- Меньшие размеры кода по сравнению с машинным кодом, полученным после обычных компиляторов.
Недостатки интерпретаторов:
- Интерпретируемая программа не может выполняться отдельно без программы-интерпретатора. Сам интерпретатор при этом может быть не очень компактным.
- Интерпретируемая программа выполняется медленнее, поскольку промежуточный анализ исходного кода и планирование его выполнения требуют дополнительного времени в сравнении с непосредственным исполнением машинного кода, в который мог бы быть скомпилирован исходный код.
- Практически отсутствует оптимизация кода, что приводит к дополнительным потерям в скорости работы интерпретируемых программ.
Виды трансляторов современных языков программирования представлены в таблице 3.
Таблица 3 - Трансляторы современных языков программирования [2]
Язык программирования |
Транслятор |
|
Java |
компиляция в байт-код интерпретатор |
|
C |
компилятор |
|
C++ |
компилятор |
|
PHP |
компиляция в байт-код интерпретатор |
|
C# |
компиляция в MSIL-код интерпретатор |
|
Python |
компиляция в байт-код интерпретатор |
|
Visual Basic |
компиляция в MSIL-кодинтерпретатор,компилятор |
|
Objective C |
компилятор |
|
Perl |
компиляция в байт-код интерпретатор |
|
Delphi |
компилятор |
Современные языки программирования используют в равной степени компиляцию и интерпретацию.
Широкое использование компиляторов обусловлено большой скоростью работы программ, а также возможность использовать полностью все возможности конкретных платформ и создание «машинно-зависимых» участков кода и программ.
Использование интерпретации, напротив, позволяет оградить программиста от особенностей конкретных платформ, что наиболее востребовано в связи с развитием Интернет-технологий.
Среди интерпретируемых языков используются в основном интерпретаторы компилирующего типа, что обусловлено значительным увеличением скорости работы программ в сравнении с простыми интерпретаторами. При разработке больших и сложных приложений такое увеличение скорости может быть очень существенным.
4. Типизация данных
Тип - относительно устойчивая и независимая совокупность элементов, которую можно выделить во всём рассматриваемом множестве.
Математически тип может быть определён двумя способами:
· Множеством всех значений, принадлежащим типу.
· Предикатной функцией, определяющей принадлежность объекта к данному типу.
Тип данных - фундаментальное понятие теории программирования. Тип данных определяет множество значений, набор операций, которые можно применять к таким значениям и, возможно, способ реализации хранения значений и выполнения операций. Любые данные, которыми оперируют программы, относятся к определённым типам.
Типы данных различаются уже на нижних уровнях системы. Так, например, даже в Ассемблере х86 различаются типы «целое число» и «вещественное число». Это объясняется тем, что для чисел рассматриваемых типов отводятся различные объёмы памяти, используются различные регистры микропроцессора, а для операций с ними применяются различные команды Ассемблера и различные ядра микропроцессора.
В языках программирования типы данных не всегда строго соответствуют подобным математическим типам. Например, тип “целое число” большинства языков программирования не соответствует принятому в математике типу “целое число”, так как в математике указанный тип не имеет ограничений ни сверху, ни снизу, а в языках программирования эти ограничения есть. Как правило, в языках и системах имеется множество целых типов, отличающихся допустимым диапазоном значений (определяемым объёмом занимаемой памяти).[1]
Наиболее часто используемые типы данных:
Простые:
· Перечислимый тип. Хранит значения прямо указанные в его описании.
· Целочисленный тип. Целое число со знаком и без знака.
· Вещественный тип. Вещественное число с запятой и с плавающей точкой.
· Символьный тип. Хранит один символ в различных кодировках.
· Множество. Совпадает с обычным математическим понятием множества.
· Логический тип. Принимает два значения ложь = 0 и истина = 1.
· Указатель. Хранит адрес в памяти, указывающий на какую-либо информацию, как правило - указатель на переменную.
Составные (сложные):
· Массив. Хранит индексированный набор элементов одного типа.
· Строковый тип. Хранит строку символов.
· Запись (структура). Набор различных элементов (полей), хранимый как единое целое.
· Файловый тип. Хранит только однотипные значения, доступ к которым осуществляется только последовательно.
· Класс, метакласс, интерфейс. Абстрактные типы данных в объектно-ориентированном программировании (ООП).
Как уже отмечалось ранее, любой тип данных в языках программирования определяет не только множество собственных значений, но и набор операций, способы хранения и присваивания значений. Типы переменных и параметров должны совпадать с присваиваемыми им значениями или вызываемыми для них функциями. Для обеспечения совместимости типов переменных и их значений в языках программирования существует контроль типов (типизация) - это процесс проверки и накладывания ограничений на использование типов.
Существует два вида контроля типов:
· Статическая типизация - при которой переменная, параметр подпрограммы, возвращаемое значение функции связывается с типом в момент объявления и тип не может быть изменён позже. Переменная или параметр будут принимать, а функция возвращать значения только этого типа.
· Динамическая типизация - при которой переменная связывается с типом в момент присваивания значения, а не в момент объявления переменной. Таким образом, в различных участках программы одна и та же переменная может принимать значения разных типов.
Определение соответствия типов тоже является важным моментом, для этого используется следующие два подхода:
· Строгая типизация - совместимость типов автоматически контролируется транслятором, она должна быть явно указана (наследована) при определении типа или определяется структурой самого типа (типами элементов, из которых построен составной тип).
· Слабая типизация - совместимость типов никак транслятором не контролируется. В языках со слабой типизацией обычно используется подход под названием «утиная типизация» - когда совместимость определяется и реализуется общим интерфейсом доступа к данным типа.
На сегодняшний день не существует единого мнения о том, какой вид типизации лучше. Рассмотрим основные достоинства и недостатки каждого вида контроля типа.[1]
4.1 Динамическая типизация
Поскольку переменная связывается с типом в момент присваивания и в ходе выполнения программы может менять свой тип, контролировать на этапе проектирования соответствие такой переменной вызываемым для нее функциям и методам невозможно. Поэтому транслятор встраивает в программу операции связанные с динамической проверкой типа. Отсюда вытекают явные недостатки динамической типизации:
· Низкая скорость выполнения, связанная с динамической проверкой типа переменной перед каждым использованием.
· Ошибки, связанные с опечатками при использовании имени переменной.
· Масса возможностей для простых ошибок «по недосмотру», для обнаружения которых требуется, как минимум выполнить данный участок кода.
· В объектно-ориентированных языках не действует либо действует с ограничениями автодополнение: трудно или невозможно понять, к какому типу относится переменная, и вывести набор её полей и методов.
Учитывая эти недостатки, для написания сложного кода нужна особая культура программирования: венгерская нотация, юнит-тестирование. Кроме того, в таких языках программирования отсутствует интерфейсная часть модуля (описания типов, заголовки процедур и т. д. - то, что соответствует interface-секции в Паскале и h-файлу в Си), которая сама по себе является существенной частью документации, а изредка вообще позволяет обойтись без документирования.
В тоже время отсутствие проверки типов на этапе написания и трансляции программы ведет к возникновению некоторых достоинств:
· Ускоряется работа компилятора - а значит, цикл «написать - проверить», что для больших проектов может быть существенным.
· Повышается гибкость языка. Возможна реализация функции, вычисляющей значение выражения произвольного типа.
· Нет дополнительных строк с вязанных с определением типа и даже с объявлением переменных.
· Отсутствуют операции приведения типа. Соответственно, упрощается написание простых программ.
В различных языках программирования динамический контроль типов реализован по-разному. Благодаря этому в некоторых языках недостатки этого вида типизации могут быть сведены к нулю, в прочем, как и достоинства.
4.2 Статическая типизация
При таком виде контроля переменная связывается с типом в момент объявления ещё при написании программы и проверяется на соответствие при каждом её использовании программистом. При таком подходе довольно сложно найти недостатки, однако без них не обходится:
· Понижается гибкость языка. Для каждого типа переменной необходима реализация собственной функции.
· Значительно замедляется работа компилятора.
В тоже время проверка типов на этапе написания и трансляции программы ведет к возникновению существенных достоинств:
· Высокая скорость выполнения программы, связанная с отсутствием проверки типов на этапе выполнения. «Зная» тип переменной транслятор может использовать для неё более простые и подходящие команды.
· Значительно уменьшается количество ошибок связанных с некорректным использованием типа переменной: присваивание значений, операции над переменными, передача параметров в функции.
· При явном объявлении переменных и типов повышается читабельность и понятность кода, упрощается документирование программы.
Как и для динамического контроля, статический контроль типов в языках программирования реализован по-разному, что с учетом строгой или слабой типизации может налагать ряд дополнительных достоинств и недостатков.
Виды типизации в современных языках программирования Представлены в таблице 4.
Таблица 4 - Типизация в языках программирования [2]
Язык программирования |
Типизация |
|
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. Городняя Л.В. Основы функционального программирования. /- М.: Изд-во "Интернет-университет информационных технологий - ИНТУИТ.ру", 2004. - 280 c.: ил. ISBN 5-9556-0008-6
4. Анатолий А. Андрей К. Логическое программирование и Visual Prolog (с CD).. - СПб.: «БХВ-Петербург», 2003. - С. 990. ISBN 5-94157-156-9.
5. Иан Грэхем. Объектно-ориентированные методы. Принципы и практика = Object-Oriented Methods: Principles & Practice. - 3-е изд./ - М.: «Вильямс», 2004. - С. 880. ISBN 5-8459-0438-2
6. Андрей Александреску. Современное проектирование на С++ /Вильямс, 2004 г. 336 стр. Тираж: 3500 экз. ISBN 5-8459-0351-3
7. Легалов А. И. - SoftCraft: разработка трансляторов: конспект лекций
Приложение
Размещено на Allbest.ru
Подобные документы
Функции и основные компоненты систем программирования. Средства создания программ. Трансляторы языков программирования. Принципы и фазы работы компилятора, трансформация языка программирования в машинный код. Механизм преобразования интерпретатора.
презентация [3,3 M], добавлен 07.02.2012Основные концепции языков программирования, механизмы типизации данных. Описание языков программирования и методов трансляции. Конечные автоматы и преобразователи. Общие методы синтаксического анализа. Формальные методы описания языкового перевода.
курс лекций [5,5 M], добавлен 04.12.2013Классификация языков программирования. Использование циклических конструкций и выполнение итерационных процессов. Алгоритмические структуры циклов языков C, C++, Java, C#. Особенности современных языков программирования высокого уровня и их применение.
курсовая работа [345,6 K], добавлен 13.11.2009Рассмотрение общих сведений и уровней языков программирования. Ознакомление с историей развития, использования языков программирования. Обзор достоинств и недостатков таких языков как Ассемблер, Паскаль, Си, Си++, Фортран, Кобол, Бейсик, SQL, HTML, Java.
курсовая работа [759,5 K], добавлен 04.11.2014Характеристики и свойства языков программирования. Исследование эволюции объектно-ориентированных языков программирования. Построение эволюционной карты механизмов ООП. Разработка концептуальной модели функционирования пользовательского интерфейса.
курсовая работа [2,6 M], добавлен 17.11.2014Сущность и функции языков программирования, их эволюция и оценка популярности различных видов. Особенности компьютерных программ, разработанных на компилируемом, интерпретируемом или смешанном языке. Основные классы и иерархия языков программирования.
презентация [873,4 K], добавлен 23.01.2013Понятия языка программирования, разновидности и характеристика языков. Исторический обзор их создания и применения. Классификация, примеры использования. Характеристики языков программирования с точки зрения элементов объектной модели, их популярность.
реферат [463,6 K], добавлен 07.09.2009История разработки языка программирования Си. Программа на Си как одна или несколько единиц компиляции (файлов), стадии работы компилятора. Идентификаторы и ключевые слова, типы констант. Форма Бекуса-Наура описания синтаксиса формальных языков.
презентация [257,7 K], добавлен 05.01.2014Языки программирования низкого и высокого уровней и среды реализации. Особенности процедурных, логических, объектно-ориентированных языков. Состав системы программирования: трансляторы, библиотеки и отладчик программ, компоновщик, средства редактирования.
презентация [11,9 K], добавлен 23.10.2013Понятия структурного программирования и алгоритма решения задачи. Краткая история развития языков программирования от машинных до языков ассемблера и языков высокого уровня. Процедурное программирование на C#. Методы и программы для моделирования.
учебное пособие [1,7 M], добавлен 26.10.2010