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

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

Содержание:

Введение

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

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

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

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

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

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

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

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

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

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

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

На сегодняшний перед программистами стоят задачи по созданию надежных систем обработки и хранения информации такие как “Big data”, создание искусственного интеллекта которые ещё в недавнем прошлом казались невозможными. Появляются ежедневно новые устройства и технологии, которые требуют поиска новых подходов к программированию. Сильное развитие современного Интернета предоставляет новые, ещё до конца не освоенные возможности по созданию различных сетевых технологий.

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

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

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

Таблица 1 – Рейтинг языков программирования [2]

Язык

программирования

Рейтинг

Последний

релиз

1

Java

16.139 %

Март 2018

2

C

14.662 %

Декабрь 2011

3

C++

7.615 %

Декабрь 2017

4

Python

6.361 %

Июнь 2018

5

Visual Basic.NET

4.247 %

Март 2017

6

C#

3.795 %

Ноябрь 2017

7

PHP

2.832 %

Апрель 2018

8

JavaScript

2.831 %

Июнь 2017

9

SQL

2.334 %

Декабрь 2016

10

Objective C

1.453 %

Август 2009

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

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

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

Я буду рассматривать эти языки программирования по некоторым основным позициям:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. Программа разрабатываться пошагово методом «сверху-вниз»
  2. Полный отказ от оператора безусловного перехода GOTO
  3. Любая программа состоит из трех базовых управляющих конструкций. Этими конструкциями являются ветвление, цикл, последовательность
  4. В программе базовые конструкции могут быть вложены друг в друга произвольным образом, но никаких других средств управления последовательностью выполнения операций не предусматривается.
  5. Повторяющиеся фрагменты программы могут оформляться в виде процедур или функций.
  6. Каждую логическую законченную группу команд (инструкций) оформлять нужно как блок.
  7. Все конструкции должны иметь один входи один выход.

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

Объектно–ориентированное программирование (ООП) – это когда программа представляет собой описание совокупностей(классов) объектов, их свойства(атрибутов), отношений между ними, а также операций над объектами(методов).

Основными концепции и принципы объектно-ориентированного программирования являются:

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

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

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

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

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

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

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

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

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

Таблица 2 – Парадигмы программирования и основные подходы программирования [2]

Язык

программирования

Парадигмы

программирования

Основные подходы

программирования

Java

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

структурная

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

C

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

процедурный

C++

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

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

процедурный

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

Python

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

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

структурная

процедурный

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

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

Visual Basic.NET

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

структурная

процедурный

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

C#

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

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

процедурный

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

PHP

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

процедурный

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

JavaScript

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

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

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

SQL

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

процедурный

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

Objective C

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

процедурный

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

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

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

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

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

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

На сегодняшний день существующее трансляторы подразделяются на основные группы: компиляторы, интерпретаторы и Jit-компилятор.

3.1. Интерпретатор

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

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

Интерпретатор компилирующего типа – это система состоит из компилятора и интерпретатора , где компилятор транслирует исходный код в промежуточный (байт-код), а интерпретатор(виртуальная машина) его выполняет. К основным достоинствам можно отнести быстродействие исполнения программ, который достигается за счёт минимизации анализа в интерпретаторе, а также выноса анализа исходного кода в отдельный разовый проход. Главный недостаток – требование на корректность исходного программного кода и огромное потребление ресурсов.[7]

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

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

– Переносимость программ (межплатформеность) – программа будет работать на любой платформе или устройстве, где есть или установлен соответствующий интерпретатор.

– Средства диагностики ошибок в исходных кодах более наглядные и совершенны.

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

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

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

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

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

3.2. Компилятор

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

Достоинства компиляции:

- компиляция программы выполняется один раз;

- наличие компилятора на устройстве, для которого компилируется программа, не требуется.

Недостатки компиляции:

- компиляция — медленный процесс;

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

JIT-компилятор

JIT-компиляция или динамическая — трансляция, при которой исходный или промежуточный код преобразуется (компилируется) в машинный код непосредственно во время исполнения, «на лету» (англ. just in time, JIT). Компиляция каждого участка кода выполняется только один раз; скомпилированный код сохраняется в кеше и при необходимости используется повторно.

Достоинства динамической компиляции по сравнению с компиляцией:

- скорость работы динамически компилируемых программ близка к скорости работы компилируемых программ;

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

Недостатки динамической компиляции по сравнению с компиляцией и чистой интерпретацией:

- Большая сложность реализации;

- Большие требования к ресурсам.

Динамическая компиляция хорошо подходит для веб-приложений.

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

Таблица 3 – Трансляторы

Язык

программирования

Транслятор

Java

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

C

компилятор

C++

компилятор

Python

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

Visual Basic.NET

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

интерпретатор, компилятор

C#

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

PHP

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

JavaScript

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

SQL

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

Objective C

компилятор

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

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

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

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

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

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

Тип данных одновременно характеризуется:

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

- Набор операций, которые можно осуществлять над данными, принадлежащим к этому типу.

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

Типы данных даже в одном языке программирования отличаются друг от друга. Например в языке программирования Python различаются тип целочисленные(int) и вещественные(float). Для каждого из них резервируется различный объем памяти то есть для целочисленного 4 байта а для вещественного 8 байт, так и для обработки используется различные регистры процессора, и операции с этими данными применяются разные команды Pythona и разные ядра микропроцессора.

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

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

Таблица 4 типы данных в языках программирования

Простые типы

Перечислимый тип

Хранит набор уникальных идентификаторов (константы)

Целочисленный тип

Положительные или отрицательные целые числа

Вещественный тип

Положительные или отрицательные дробные (дробные) числа

Символьный тип

Хранит один символ в любой кодировке

Логический (булевский) тип

Принимает одно значение ложь (false или 0) или истина (true или 1).

Множество

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

Указатель

Хранит адреса ячеек памяти

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

Строковый тип

Хранит символьную строку

Массив

Набор однотипных проиндексированных элементов.

Запись

Структурированный тип данных

Файловый тип

Набор данных хранимый на магнитном носителе

Абстрактные типы­

Класс, метакласс, интерфейсы

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

Есть два вида контроля типов:

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

- Статическая типизация - это когда тип переменной определяется вовремя объявления переменной, и не меняется вовремя исполнения программы.

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

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

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

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

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

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

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

Вот некоторые недостатки языков программирования с динамической типизации:

- Из-за постоянной поверки типов снижается скорость выполнения программы.

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

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

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

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

А теперь рассмотрим основные достоинства языков программирования с динамической типизации:

- Быстрая работа транслятора может быть существенным при разработке больших проектов.

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

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

- Упрощается написание простых программ так как отсутствуют операции приведения типа, например скрипты.

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

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

Рассмотрим основные недостатки языков программирования с статической типизацией:

- Не гибкость языка программирования.

- Медленная работа компилятора.

Рассмотрим некоторые достоинства языков программирования с статической типизацией:

- Из-за отсутствием проверки типов на этапе выполнения программы повышается скорость выполнения программы.

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

- Читабельность, понятность кода и документирование программы становится легче.

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

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

Таблица 5 – Типизация в современных языках программирования [2]

Язык

программирования

Типизация

Java

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

C

статическая

C++

статическая

Python

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

Visual Basic.NET

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

C#

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

PHP

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

JavaScript

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

SQL

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

Objective C

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

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

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

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

Заключение

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

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

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

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

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

  1. Роберт У. Себеста. Основные концепции языков программирования = Concepts of Programming Languages / Пер. с англ. – 5-е изд. – М.: Вильямс, 2001. – 672 с. – 5000 экз. ISBN: 5–8459–0192–8
  2. TIOBE Software: Tiobe Index

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

  1. Городняя Л.В. Основы функционального программирования. /– М.: Изд-во "Интернет-университет информационных технологий – ИНТУИТ.ру", 2004. – 280 c.: ил. ISBN 5–9556–0008–6
  2. Анатолий А. Андрей К. Логическое программирование и Visual Prolog (с CD).. – СПб.: «БХВ–Петербург», 2003. – С. 990. ISBN 5–94157–156–9.
  3. Иан Грэхем. Объектно–ориентированные методы. Принципы и практика = Object–Oriented Methods: Principles & Practice. – 3–е изд./ – М.: «Вильямс», 2004. – С. 880. ISBN 5–8459–0438–2
  4. Андрей Александреску. Современное проектирование на С++ /Вильямс, 2004 г. 336 стр. Тираж: 3500 экз. ISBN 5–8459–0351–3
  5. Легалов А. И. – SoftCraft: разработка трансляторов: конспект лекций http://www.softcraft.ru/translat/lect/t01-02.shtml
  6. Голицына О.Л., Попов И.И. Программирование на языках высокого уровня: учебное пособие / О.Л. Голицына, И.И. Попов. – М.: ФОРУМ, 2010. – 496 с. : ил. – (Профессиональное образование). ISBN 978-5-91134-209-8
  7. Википедия - https://ru.wikipedia.org