Файл: Обзор языков программирования высокого уровня на примере языков Elm, Swift, Scala.pdf
Добавлен: 04.04.2023
Просмотров: 287
Скачиваний: 3
СОДЕРЖАНИЕ
Глава 1. Языки программирования: особенности становления и развития
1.1 История развития языков программирования
1.2. Уровни языков программирования
Глава 2. Обзор языков программирования высокого уровня
2.1. Язык программирования Elm
2.2. Язык программирования Swift
Введение
Актуальность темы.
Сегодня программирование является одной из наиболее бурно развивающихся отраслей производства программных продуктов. Еще в конце прошлого столетия общение с компьютерами реализовывалось исключительно с помощью программирования, именно поэтому программирование стали изучать фактически во всех учебных заведениях. Шло время, информационные технологии развивались, общение с компьютерами стало происходить при помощи готовых компьютерных программ. Современные прикладные пакеты программ содержат также дополнительные средства, при помощи которых пользователи могут расширять функциональные возможности имеющегося программного обеспечения.
Языки программирования высокого уровня в эпоху решения любых повседневных задач с помощью средств вычислительной техники (ВТ) имеют важное значение, они являются инструментом многоцелевого назначения с большими функциональными возможностями. На постоянные эволюционные изменения в семействе ЯП ВУ, с одной стороны, оказывает прогресс аппаратного и системного программного обеспечения, с другой стороны, быстро меняющиеся потребности объективного мира. Язык программирования является своего рода интерфейсом между пользователями – прикладными программистами – и средами разработки, находящимися под жестким влиянием вычислительной системы.
Объектом исследования курсовой работы являются языки программирования высокого уровня.
Предметом – основные операторы языков программирования высокого уровня.
Целью курсовой работы является обзор языков программирования высокого уровня.
При выполнении курсовой работы пред нами были поставлены следующие задачи:
1. рассмотреть историю развития языков программирования
2. определить особенности и уровни языков программирования высокого уровня.
3. провести обзор языков программирования высокого уровня: Elm, Swift и Scala.
Метод исследования заключен в анализе, сравнении и обобщении литературы.
Структура работы.
Курсовая работа состоит из введения, двух глав, поделенных на параграфы, заключения и списка литературы.
Глава 1. Языки программирования: особенности становления и развития
1.1 История развития языков программирования
Программирование появилось задолго до 50-х годов XX века. Первые идеи высказал ещё Чарльз Бэббидж (1792-1871), которого по праву считают отцом компьютера. Он не знал о транзисторах, микросхемах и мониторах, но достаточно точно описал основные принципы, на которых будут строится все вычислительные машины. Развила идею графиня Ада Лавлейс (1815-1852). Её место в истории до сих вызывает немало споров, но одно абсолютно точно – именно Ада фактически стала первым известным программистом. Благодаря её трудам стало понятно, что путь к эффективному использованию машин – алгоритмы, описанные в коде.
Но программирование не могло развиваться в отрыве от компьютеров, поэтому вплоть до 1950-х языки программирования представляли из себя набор машинных инструкций, часто узкоспециализированных.
За разработку языков отвечали люди, непосредственно связанные с созданием компьютеров – в первую очередь инженеры и лишь вынужденно программисты. Потому они и представляли язык в виде последовательности номеров операций и ячеек памяти. Например:
01 x y – добавление содержимого ячейки памяти y к ячейке x;
02 x y – аналогичная процедура с вычитанием.
В итоге код программы превращался в бесконечную череду цифр:
01 10 15 02 11 29 01 10 11…
Рисунок 1 – Компьютер 1940-х годов
Программистам приходилось долго учиться машинным командам, потом внимательно писать код, а после завершения ещё несколько раз его перепроверять – риск ошибки был велик. Проблемы возникла, когда развитие машин стало тормозиться нехваткой кадров для написания программ. Требовалось срочное решение.
Для упрощения обращения с ЭВМ люди стали активно разрабатывать языки, одним из первых стал Ассемблер. Ассемблер близок к системе команд. В этом языке появились понятные человеку имена для операций. Программа на ассемблере пишутся под архитектуру конкретного устройства. Ассемблер является языком низкого уровня, который до сих пор используется для написания системных программ, драйверов и для программирования специализированных микропроцессоров.
Переход от машинных кодов к ассемблеру позволил увеличить производительность труда программистов и сократить время написания программ. Кроме того, языки ассемблеров позволили увеличить качество и надежность программ за счет меньшего количества возможностей внесения ошибок в программу. Однако было и несколько недостатков. Так, например, программа, написанная на ассемблере, не является понятной компьютеру, и требует переводчика. Также важно отметить, что программы на ассемблере не являлись переносимыми. Это говорит о том, что при смене вычислительной машины программы становились бесполезными, и их приходилось переписывать заново.[1]
Следующим этапом стало появление языка Фортран, основным предназначением которого была реализация математических вычислений. Он отличался хорошим качеством получаемых программ, а также развитыми средствами ввода-вывода информации. Кроме того, Фортран содержал собственную библиотеку стандартных программ. Данный язык разрабатывался в 1954-1956 годы крупной группой специалистов компании IBM под руководством Дж. В. Бэкуса. В июне 1956 г. была выпущена вторая версия данного языка - Фортран II, которая отличалась наличием подпрограмм, а также операторов связи между программными единицами.[2]
В силу того, что Фортран и языки ассемблера требовали специальной подготовки, появилось новое направление языков, предназначенных непосредственно для обучения программированию. Примерами таких языков являются Pascalи Basic. Важно отметить, что эти языки используются в учебных учреждениях и в настоящее время.
Параллельно с развитием языков программирования велись разработки операционных систем, что послужило появлению системы UNIX. Данная система была написана на языке ассемблера, что служило барьером в ее изучении. Поэтому для упрощения системного программирования Д. Ритчи и Б. Керниган разработали язык С, на котором данная система была переписана. Важно отметить, что UNIX-системы используются и сегодня.
Дальнейшее развитие языков программирования связано с появлением объектно-ориентированной технологии, которая должна была упростить написание крупных программ промышленных масштабов. Примером одного из первых языков объектно-ориентированного программирования является С++, разработанный Б. Страуструпом.
Последнее десятилетие XX века ознаменовалось развитием глобальной сети Internet, что также послужило толчком к созданию новых технологий. В этот период максимальную популярность обрел язык Java, который позволяет в кратчайшие сроки писать крупные приложения без опасений навредить системе. Данный язык характеризуется переносимостью своих программ.[3]
1.2. Уровни языков программирования
В настоящее время разработаны классификации языков по уровню работы, это распределение самое распространённое. Выделяют 3 основных уровня: низкий, высокий и сверхвысокий.
Уровень также характеризует насколько подробно нужно детализировать листинг будущей программы для ее реализации.
Различные данные в компьютере представлены в виде наборов нулей и единиц. Управляющие команды для её обработки – те же данные, содержащие внутри себя инструкции, которые определяют местоположение необходимой информации и способ модификации.
Машинные языки (самый низкий уровень)
Процессор – основной «мозг» компьютера. Материнская плата, на которой он установлен, содержит контроллеры, служащие для взаимодействия с прочими устройствами через шины (каналы данных для связи).
Некоторые работают с большой скоростью (красные стрелки): процессор черпает из памяти команды и манипулирует данными, видеокарта – особенно в 3D играх, потребляет огромные объёмы текстур, фигур, координат пикселей и прочих объектов для построения изображения на экране монитора. Другим (в силу ограничения скорости обмена информацией) столь высокие показатели и не нужны. Разнообразные внутренние и внешние устройства подключены на схеме зелёными стрелками.
Рисунок 2 – Схема работы процессора
Все команды процессора поступают из памяти на выполнение в двоичном виде. Формат, количество, подмножество инструкций зависят от его архитектуры. Большинство из них несовместимо друг с другом и следуют разным идеологиям. А также вид команды сильно зависит от режима (8/16/32… разрядность) и источника данных (память, регистр, стек…), с которыми работает процессор. Одно и то же действие может быть представлено различными инструкциями.
Процессор имеет команды сложения двух операндов (ADD X,Y) и прибавления единицы к указанному (INC X). Добавление тройки к операнду можно выполнить как ADD X,3 или троекратно вызвав INC X. И, в отношении разных процессоров, нельзя предсказать какой из этих способов будет оптимальным по скорости или объёму занимаемой памяти. Для удобства двоичную информацию записывают в 16-ричном виде. Рассмотрим часть привычной программы (язык C, синтаксис которого сходный с Java).
Код, реализующий те же действия в виде последовательности инструкций для процессора:
Так выглядит низкоуровневый язык программирования для процессора intel. Фрагмент, вызывающий метод с аргументом и возвращающий увеличенный на единицу результат. Это и есть машинный язык (код), который передается непосредственно сразу, без преобразований, на исполнение процессору.
Плюсы:
- Имеются широкие возможности использования процессора и аппаратуры компьютера.
- Доступны все варианты организации и оптимизации кода.
Минусы:
- Необходимо обладать обширными знаниями по функционированию процессоров и учитывать большое количество аппаратных факторов при выполнении кода.
- Создание программ чуть более сложных чем приведенный пример приводит к резким увеличениям затрат времени по написанию кода и его отладку.
- Платформозависимость: программа, созданная для одного процессора, как правило, не будет функционировать на других. Возможно, и для данного процессора, в остальных режимах его работы, потребуется редактирование кода.
Машинные коды широко использовались на заре появления компьютеров, других способов программирования в эпоху пионеров ЭВМ не было. В данное время ими изредка пользуются инженера в области микроэлектроники при разработке или низкоуровневом тестировании процессоров.
Язык ассемблера (низкий уровень)
Сравним фрагменты прошлой программы в машинных кодах (по центру) и на языке ассемблера (справа):
Видно, что процесс написания программы упростился: нет необходимости пользоваться справочниками формирования цифровых значений команд, рассчитывать длины переходов, распределение данных в памяти по её ячейкам и иные особенности процессора. Нужное действие описывается набором символьных команд и необходимых для логики из выполнения аргументов, а далее программа-транслятор переводит текстовый файл на понятный процессору набор нулей и единиц.
Плюсы:
- Процесс написания и модификации кода упростился.
- Сохранился контроль ко всем ресурсам аппаратуры.
- Относительно легче переносить программу на другие платформы, но требуется их модификация в зависимости от аппаратной совместимости.
Минусы:
- Ассемблер относится к низкоуровневым языкам программирования. Создание даже небольших участков кода затруднено. К тому же также необходимо учитывать специфику работы аппаратуры.
- Платформозависимость.
Самый популярный демонстрационный Java пример:
будет выглядеть (NASM синтаксис, с использованием Windows API и kernel32.lib) следующим образом:
Как и машинные коды, ассемблер чаще используется инженерами и системными программистами. На нём пишут аппаратно-зависимые части ядра операционных систем, критические по времени или особенностям реализации драйвера различных периферийных устройств. Но в последнее время к нему прибегают всё реже и реже, так как его применение сильно сужает переносимость программ на другие платформы. Иногда используют процесс дизассемблирования – создают ассемблерный листинг программы из цифровых кодов для разбора логики выполнения небольших фрагментов. В редких случаях, если первоначальный высокоуровневый код недоступен: анализ вирусов для борьбы с ними или потере исходного текста. Язык ассемблера причисляют к первому/второму поколению.