Файл: Современные языки программирования (Автокоды).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 18.05.2023

Просмотров: 278

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

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

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

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

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

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

ГЛАВА 2. ВИДЫ СОВРЕМЕННЫХ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ

2.1 C

C — компилируемый статически типизированный язык программирова­ния общего назначения, разработанный в 1969—1973 годах сотрудником Bell Labs Деннисом Ритчи как развитие языка Би. Первоначально был разработан для реализации операционной системы UNIX, но впоследствии был перенесён на множество других платформ. Согласно дизайну языка Си, его конструкции близко сопоставляются типичным машинным инструкциям, бла­годаря чему он нашёл применение в проектах, для которых был свойстве­нен язык ассемблера, в том числе как в операционных системах, так и в различ­ном прикладном ПО для множества устройств — от суперкомпьютеров до встраиваемых систем. Язык программирования Си оказал существенное влияние на развитие индустрии программного обеспече­ния, а его синтаксис стал основой для таких языков программирования, как C++, C#, Java и Objective-C.

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


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

Си (как и ОС UNIX, с которой он долгое время был связан) создавался про­граммистами и для программистов, круг которых был бы ненамного шире круга разработчиков языка. Несмотря на это, область использования языка значи­тельно шире задач системного программирования.

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

  • простую языковую базу, из которой вынесены в библиотеки многие суще­ственные возможности, вроде математических функций или функций управления файлами;
  • ориентацию на процедурное программирование, обеспечивающую удоб­ство применения структурного стиля программирования;
  • систему типов, предохраняющую от бессмысленных операций;
  • использование препроцессора для, например, определения макросов и включения файлов с исходным кодом;
  • непосредственный доступ к памяти компьютера через использова­ние указателей;
  • минимальное число ключевых слов;
  • передачу параметров в функцию по значению, а не по ссылке (при этом пе­редача по ссылке эмулируется с помощью указателей);
  • указатели на функции и статические переменные;
  • области действия имён;
  • структуры и объединения — определяемые пользователем собирательные типы данных, которыми можно манипулировать как одним целым;
  • средства объектно-ориентированного программирования;

В то же время в Си отсутствуют:

  • вложенные функции;
  • сопрограммы;
  • средства автоматического управления памятью;
  • средства функционального программирования.

Часть отсутствующих возможностей относительно легко имитируется встроен­ными средствами (например, сопрограммы можно имитировать с помощью функций setjmp и longjmp), часть добавляется с помощью сторонних библиотек (например, для поддержки многозадачности и для сетевых функций можно ис­пользовать библиотеки pthreads, sockets и т. п.; существуют библиотеки для поддержки автоматической сборки мусора, часть реализуется в некоторых ком­пиляторах в виде расширений языка (например, вложенные функции в GCC).


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

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

2.2 C++

C++ — компилируемый, статически типизированный язык программирова­ния общего назначения.

Поддерживает такие парадигмы программирования, как процедурное програм­мирование, объектно-ориентированное программирование, обобщённое про­граммирование. Язык имеет богатую стандартную библиотеку, которая вклю­чает в себя распространённые контейнеры и алгоритмы, ввод-вывод, регуляр­ные выражения, поддержку многопоточности и другие возможности. C++ соче­тает свойства как высокоуровневых, так и низкоуровневых языков. В сравнении с его предшественником — языком C, — наибольшее внимание уделено под­держке объектно-ориентированного и обобщённого программирования.

C++ широко используется для разработки программного обеспечения, являясь одним из самых популярных языков программирования. Область его примене­ния включает создание операционных систем, разнообразных прикладных про­грамм, драйверов устройств, приложений для встраиваемых систем, высоко­производительных серверов, а также развлекательных приложений (игр). Су­ществует множество реализаций языка C++, как бесплатных, так и коммерче­ских и для различных платформ. Например, на платформе x86 это GCC, Visual C++, Intel C++ Compiler, Embarcadero (Borland) C++ Builder и другие. C++ ока­зал огромное влияние на другие языки программирования, в первую очередь на Java и C#.

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


2.3 C#

C# — объектно-ориентированный язык программирования. Разработан в 1998—2001 годах группой инженеров под руководством Андерса Хейлс­берга в компании Microsoft как язык разработки приложений для плат­формы Microsoft .NET Framework и впоследствии был стандартизирован как ECMA-334 и ISO/IEC 23270.

C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддержи­вает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в фор­мате XML.

Переняв многое от своих предшественников — язы­ков C++, Pascal, Модула, Smalltalk и, в особенности, Java — С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем, например, C# в отличие от C++ не поддерживает множественное наследование классов (между тем допускается множественное наследование интерфейсов).

C# разрабатывался как язык программирования прикладного уровня для CLR и, как таковой, зависит, прежде всего, от возможностей самой CLR. Это касается, прежде всего, системы типов C#, которая отражает BCL. Присутствие или от­сутствие тех или иных выразительных особенностей языка диктуется тем, мо­жет ли конкретная языковая особенность быть транслирована в соответствую­щие конструкции CLR. Так, с развитием CLR от версии 1.1 к 2.0 значительно обогатился и сам C#; подобного взаимодействия следует ожидать и в дальней­шем (однако, эта закономерность была нарушена с выходом C# 3.0, представ­ляющего собой расширения языка, не опирающиеся на расширения платформы .NET). CLR предоставляет C#, как и всем другим .NET-ориентированным язы­кам, многие возможности, которых лишены «классические» языки программи­рования. Например, сборка мусора не реализована в самом C#, а производится CLR для программ, написанных на C# точно так же, как это делается для про­грамм на VB.NET, J# и др.

2.4 Java

Java — сильно типизированный объектно-ориентированный язык про­грамми­рования, разработанный компанией Sun Microsystems (в последу­ющем приоб­ретённой компанией Oracle). Приложения Java обычно транслируются в специ­альный байт-код, поэтому они могут рабо­тать на любой компьютерной архи­тектуре, с помощью виртуальной Java-машины. Дата официального выпуска — 23 мая 1995 года. Изначально язык назывался Oak («Дуб»), разрабаты­вался Джеймсом Гослингом для программирования бытовых электронных устройств. Впоследствии он был переименован в Java и стал использоваться для написания клиент­ских приложений и серверного программного обеспече­ния. Назван в честь марки кофе Java, которая, в свою очередь, получила наиме­нование одноимённого острова (Ява), поэтому на официальной эмблеме языка изображена чашка с горячим кофе. Существует и другая версия проис­хождения названия языка, связанная с аллюзией на кофе-машину как пример бытового устройства, для программирования которого изначально язык создавался. В со­ответствии с этимологией в русскоязычной литера­туре с конца двадцатого и до первых лет двадцать первого века название языка нередко переводилось как Ява, а не транскрибировалось, как это стало общепринятым позднее. Про­граммы на Java транслируются в байт-код Java, выполняемый виртуальной ма­шиной Java (JVM) — программой, обрабатывающей байтовый код и передаю­щей инструкции оборудованию как интерпретатор.


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

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

  • применение технологии трансляции байт-кода в машинный код непосред­ственно во время работы программы (JIT-технология) с воз­можностью сохранения версий класса в машинном коде,
  • широкое использование платформенно-ориентированного кода (native-код) в стандартных библиотеках,
  • аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми про­цессо­рами фирмы ARM).

Для семи разных задач время выпол­нения на Java составляет в среднем в полтора-два раза больше, чем для C/C++, в некоторых случаях Java быстрее, а в отдельных случаях в 7 раз медленнее. С другой стороны, для большинства из них потребление памяти Java-машиной было в 10—30 раз больше, чем программой на C/C++. Также примечательно исследование, проведённое компа­нией Google, согласно которому отмечается существенно более низкая производительность и большее потребление памяти в тестовых примерах на Java в сравнении с аналогичными программами на C++.

Идеи, заложенные в концепцию и различные реализации среды виртуаль­ной машины Java, вдохновили множество энтузиастов на расширение пе­речня язы­ков, которые могли бы быть использованы для создания про­грамм, исполняе­мых на виртуальной машине. Эти идеи нашли также вы­ражение в специфика­ции общеязыковой инфраструктуры CLI, заложен­ной в основу плат­формы .NET компанией Microsoft.

2.5 JavaScript

JavaScript — мультипарадигменный язык программирования. Поддержи­вает объектно-ориентированный, императивный и функциональный стили

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