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

Общие сведения стандартов языков программирования и история их развития

Содержание:

Введение

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

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

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

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

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

Цели исследования:

1. Просмотреть общее сведения и уровни языков программирования.

2. Изучить историю развития языков программирования.

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

Задачи исследования:

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

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

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

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

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

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

Глава 1. Общие сведения стандартов языков программирования и история их развития

1.1.Общие сведения стандартов языков программирования

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

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

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

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

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

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

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

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

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

Разделение на компилируемые и интерпретируемые языки является не­сколько условным. Так, для любого традиционно компилируемого языка (на­пример, Pascal) можно написать интерпретатор, а для любого интерпрети­руемого языка можно создать компилятор (например, Lisp – изначально ин­терпретируемый, может компилироваться без каких бы то ни было огра­ничений). В реальных системах программирования (например, Java) смешаны технологии компиляции и интерпретации. В процессе отладки такие про­граммы можно выполнять по шагам (трассировать), а результирующий код не обязательно будет машинным. Он может быть, например, аппаратно-неза­висимым промежуточным кодом абстрактного процессора, который в даль­нейшем будет транслироваться в различных компьютерных архитектурах с помощью интерпретатора или компилятора в соответствующий машинный код. Этот подход позволяет использовать плюсы как интерпретаторов, так и компиляторов.

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

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

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

Основными (ключевыми) понятиями (принципами) в ОПП являются:

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

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

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

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

Наиболее распространенными современными языками программирова­ния, являются языки С++ и Java. С++ - компилируемый строго типизирован­ный язык программирования общего назначения (разработан в начале 80-х гг.). Он поддерживает разные парадигмы программирования: процедурную, обобщённую, функциональную, но наибольшее внимание уделено поддержке объектно-ориентированного программирования. За исключением второсте­пенных деталей он содержит язык Си как подмножество (имеет синтаксис, основанный на синтаксисе Си) и обладает многими новыми возможностями, позволивших резко повысить производительность труда программистов. Ес­тественная область его применение – системное программирование (кроме того, С++ успешно используется во многих областях приложения, выходя­щих за эти рамки). Реализация С++ имеется практически на всех типах ЭВМ и для всех операционных систем. Язык Java зародился как часть проекта соз­дания передового программного обеспечения для различных бытовых элек­тронных приборов. Реализация проекта была начата на языке С++ (синтак­сис языков С++ и Java практически полностью совпадает), но вскоре воз­никли проблемы, наилучшим средством борьбы с которыми было изменение самого инструмента - языка программирования. Изначально этот язык назы­вался Oak (основным достоинством которого было обеспечение сетевого взаимодействия различных по типу устройств), а новая интегрируемая в Internet версия получила название Java (1995 г.). С точки зрения возможно­стей объектно-ориентируемых средств, Java имеет ряд преимуществ перед С++, а потому является одним из самых популярных в мире.

С середины 90-х гг. многие объектно-ориентированные языки реализу­ются как системы визуального программирования. Такие системы имеют ин­терфейс, позволяющий при составлении текста программы видеть те графи­ческие объекты, для которых она пишется. Особенностью этих систем явля­ется наличие в них среды разработки программ из готовых «строительных блоков», позволяющих создавать интерфейсную часть программного про­дукта в диалоговом режиме, практически без написания программных опера­ций. Система берет на себя значительную часть работы по управлению ком­пьютером, что делает возможным в простых случаях обходиться без особых знаний о деталях ее работы. Она сама пишет большую часть текста про­граммы: описания объектов, заголовки процедур и многое другое. Програм­мисту остается только вписать необходимые строки, определяющие индиви­дуальное поведение программы, которые система не в состоянии предвидеть. Но даже в этих случаях система сама указывает место для размещения таких строк. К объектно-ориентированным системам визуального проектирования относятся: Visual Basic, Delphi, C++ Builder, Visual C++.

Языки программирования баз данных. Среди языков особое место занимают языки программирования баз данных. Они отличаются от алгорит­мических прежде всего своим функциональным назначением (специалисты говорят, что это - информационно-логические языки, а не языки программи­рования). При работе с базами данных наиболее часто выполняются следую­щие операции: создание, преобразование, удаление таблиц в базе данных, поиск, отбор, сортировка по запросам пользователей, добавление новых за­писей или модификация существующих, удаление записей и др. Для обра­ботки больших массивов информации и выборки записей по определенным признакам был создан (в начале 70-х гг.) структурированный язык запросов SQL (Structured Query Language), который в дальнейшем (в 1986 г.) стал стандартом языка работы с реляционными базами данных. С помощью SQL программист описывает только то, какие данные нужно извлечь или моди­фицировать, а то, каким образом это сделать, решает СУБД непосредственно при обработке SQL-запроса (хотя, надо сказать, что ему при этом полезно представлять, как СУБД будет разбирать текст его запроса, особенно при работе с большими базами данных и со сложными запросами). Заметим, что целью разработки SQL было создание простого непроцедурного языка, кото­рым мог воспользоваться любой пользователь, даже не имеющий навыков программирования. Однако, в конце концов, он стал настолько сложным, что превратился в инструмент программиста. Кроме того, практически в каждой СУБД помимо поддержки языка SQL имеется также свой уникальный язык, ориентированный на особенности этой СУБД и не переносимый на другие системы.

Языки программирования для компьютерных сетей. Появление и активное развитие компьютерных сетей вообще и глобальной сети Internet, в частности, стало причиной создания многочисленных версий популярных языков программирования, адаптированных для использования в сетях. Все они отличаются характерными особенностями: языки являются интерпрети­руемыми, интерпретаторы для них распространяются бесплатно, а сами про­граммы - в исходных текстах. Такие языки называют скрипт-языками.

HTML (Hyper Text Markup Language) – универсальный язык разметки гипертекста (представляет собой набор текстов, содержащих узлы пере­хода от одного текста к какому-либо другому, позволяющие избирать чи­таемые сведения или последовательность чтения), используемый для под­готовки Web-документов для сети Internet. Он очень прост, содержит элемен­тарные команды форматирования текста, добавления графических объектов, задания шрифтов и цвета, организации ссылок и таблиц. Текстовые доку­менты, содержащие код на языке HTML (такие документы традиционно имеют расширение html или htm), обрабатываются специальными приложе­ниями, которые отображают документ в его форматированном виде. Эти приложения, называемые браузерами или интернет-обозревателями, обычно предоставляют пользователю удобный интерфейс для запроса Web-страниц, их просмотра (вывода на внешние устройства) и, при необходимости, от­правки введённых пользователем данных на сервер. Наиболее популярными на сегодняшний день браузерами являются Internet Explorer, Firefox, Safari, Google Chrome, Opera.

Perl (Practical Extraction and Report Language – практический язык для извлечения данных и составления отчетов). Основной особенностью языка является его богатые возможности работы с текстом (обработки больших текстовых файлов), генерации текстовых отчетов и управления задачами. В его состав входят многочисленные функции работы со строками, массивами, всевозможные средства преобразования данных, управления процессами, ра­боты с системной информацией и др.

VRML (Virtual Reality Modeling Language язык моделирования вирту­альной реальности) - был создан для организации виртуальных трехмерных интерфейсов в Интернете. Он ориентирован на описание разнообразных трехмерных образов, цвето-теневого освещения, позволяет создавать различ­ные сценарии миров, путешествовать по ним, «облетать» со разных сторон, вращаться в любых направлениях, масштабировать, управлять освещенно­стью и многое другое (движение, звуки, освещение и другие аспекты вирту­ального мира могут появляться как реакция на действия пользователя или же на другие внешние события).

1.2.История развития языков программирования

Программа – алгоритм, записанный на языке программирования. Программа – последовательность операторов языка. Языки программирования – искусственные языки, строго формализованные; существует правила записи операторов языка – синтаксис языка.

1. Машинный язык (40-50 годы XX в.).

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

2. Ассемблер (начало 50-ых годов XX в.).

Вместо 1 и 0 программисты теперь могли пользоваться операторами (MOV, ADD, SUB и т.д.), которые похожи на английские слова. Программы на ассемблере также являются машинно-зависимыми. Для преобразования в машинный код использовался компилятор (спец. программа – переводчик в машинный код).

3. Первые языки программирования высокого уровня.

С середины 50-ых гг. XX в. начали создавать первые языки программирования высокого уровня (high-levellanguage). Эти языки были Машино независимыми (не привязаны к опред. типу ЭВМ). Но для каждого языка были разработаны собственные компиляторы.

Примеры таких языков: FORTRAN (FORmulaTRANslator; 1954) предназначен для научных и технических расчетов; COBOL (1959) был предназначен в основном для коммерческих приложений (обрабатывал большие объемы нечисловых данных) – CommonBusiness-OrientedLanguage); язык BASIC (Beginner’sAllPurposeInstuctionCode – универсальный язык символьных инструкций для начинающих) (1964 г.)

4. Алгоритмические языки программирования.

С начала 80-ых г. XX в. начали создаваться языки программирования, которые позволили перейти к структурному программированию (использование операторов ветвления, выбора, цикла и практически отказ от частого использования операторов перехода (goto). К этим языкам относятся: язык Pascal (назван его создателем Никлаусом Виртом в честь великого физика Блеза Паскаля; 1970); язык Си, позволяющий быстро и эффективно создавать программный код (1971)

5. Языки объектно-ориентированного программирования

(90-ые г. XX в.). В основу этих языков положены программные объекты, которые объединяют данные и методы их обработки. В этих языках сохранялся алгоритмический стиль программирования. Для них были разработаны интегрированные среды программирования, позволяющие визуально конструировать графический интерфейс приложений:

язык С++ (1983) - продолжение алгоритм. языка Си;

язык ObjectPascal (1989) был создан на основе языка Pascal. После создания среды программирования – Delphi (1995);

язык VisualBasic(1991) был создан корпорацией Microsoft на основе языка Qbasic (1975) для разработки приложений с графическим интерфейсом в среде ОС Windows.

6. Языки программирования для компьютерных сетей.

В 90-ые годы XX в. в связи с бурным развитием Интернета были созданы языки, обеспечивающие межплатформенную совместимость. На подключенных к Интернету компьютерах с различными ОС (Windows, Linux, MacOS и др.) могли выполняться одни и те же программы. Исходная программа компилируется в промежуточный код, который исполняется на компьютере встроенной в браузер виртуальной машиной:

язык Java- объектно-ориентированный язык был разработан фирмой SunMicrosystems для создания сетевого программного обеспечения (1995);

язык JavaScript – язык сценариев Web-страниц (компания Netscape). (1995)

7. Языки программирования на платформе .NET.

Интегрированная среда программирования VisualStudio .Net, разработанная корпорацией Microsoft, позволяет создавать приложения на различных языках объектно-ориентированного программирования, в том числе:

наязыке Visual Basic .Net ( наоснове Visual Basic) - 2003 г.;

на языке VisualC# (С-шарп) – на основе языков С++ и J – 2003 г.;

на языке VisualJ# (J-шарп) – на основе Java и JavaScript – 2003 г.

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

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

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

Глава 2. Современные языки программирования. Сходства и отличия стандартов

2.1. Обзор современных языков программирования

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

Правила записи команд на конкретном языке называются синтаксисом языка. Синтаксис определяет, какая команда будет считаться правильной, а какая нет. Например, в языке Basic команды CLS и FORI=1 TO 10 считаются правильными, а команды CLERSCREEN и FORIFROM 1 TO 10 - неправильными.

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

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

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

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

По способу трансляции языки делятся на:

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

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

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

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

По уровню (особенностям построения) языки делятся на:

Машинно-ориентированные (ассемблеры).

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

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

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

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

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

Каждый оператор языка представляет собой мнемоническое (условное) обозначение машинной команды. Естественно, что каждый тип процессора имеет свой набор команд, а значит, свой ассемблер. Ассемблеры используются для создания драйверов, программирования различных устройств, а также для написания фрагментов программ, где очень важно время выполнения (так как на ассемблере можно написать максимально эффективную программу [8].

Универсальные.

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

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

Си его разновидности

- Си [C] - Многоцелевой язык программирования высокого уровня, разработанный Денисом Ритчи в начале 1970-х гг. на базе языка BCPL. Используется на миниЭВМ и ПЭВМ. Является базовым языком операционной системы Unix, однако применяется и вне этой системы, для написания быстродействующих и эффективных программных продуктов, включая и операционные системы. Для IBM PC имеется ряд популярных версий языка Си, в том числе - Turbo C (фирмы Borland), Microsoft C и Quick C (фирмы Microsoft ), а также Zortech C (фирмы Symantec). Многие из указанных версий обеспечивают также работу с Си и Си++.

- Си++ [C++] - Язык программирования высокого уровня, созданный Бьярном Страустрапом на базе языка Си. Является его расширенной версией, реализующей принципы объектно-ориентированного программирования. Используется для создания сложных программ. Для IBM PC наиболее популярной является система Turbo C++ фирмы Borland (США).

- C# (C Sharp) – “ Си Шарп ”: объектно-ориентированный яык программирования, о разработке которого в 2000 г. объявила фирма Microsoft . По своему характеру он напоминает языки C++ и Java и предназначен для разработчиков программ, использующих языки C и С++ для того, чтобы они могли более эффективно создавать Интернет-приложения. Указывается, что C # будет тесно интегрирован с языком XML.

Паскаль

Паскаль [PASCAL - акроним с французского - ProgramAppliquealaSelectionetlaCompilationAutomatiquedelaLitterature] - Процедурно-ориентированный язык программирования высокого уровня, разработанный в конце 1960-х гг. Никлаусом Виртом, первоначально для обучения программированию в университетах. Назван в честь французского математика XVII века Блеза Паскаля.

В своей начальной версии Паскаль имел довольно ограниченные возможности, поскольку предназначался для учебных целей, однако последующие его доработки позволили сделать его хорошим универсальным языком, широко используемым в том числе для написания больших и сложных программ. Существует ряд версий языка (например, ETH Pascal, USD Pascal, Turbo Pascal ) и систем программирования на этом языке для разных типов ЭВМ. Для IBM PC наиболее популярной является система Turbo Pascal фирмы Borland (США).

Delphi является «наследником» языка Паскаль; основные операторы в этих языках одинаковы. Но Delphi имеет средство для работы с различными графическими объектами (создания форм, кнопок, меню), а также для обработки сложных структур данных. Поэтому он очень популярен при разработке различных Windows- приложений [1].

Фортран

В 1954 году в недрах корпорации IBM группой разработчиков во главе с Джоном Бэкусом (John Backus) был создан язык программирования Fortran.

Значение этого события трудно переоценить. Это первый язык программирования высокого уровня. Впервые программист мог по-настоящему абстрагироваться от особенностей машинной архитектуры. Ключевой идеей, отличающей новый язык от ассемблера, была концепция подпрограмм. Напомним, что это современные компьютеры поддерживают подпрограммы на аппаратном уровне, предоставляя соответствующие команды и структуры данных (стек) прямо на уровне ассемблера, в 1954 же году это было совершенно не так. Поэтому компиляция Fortran’а была процессом отнюдь не тривиальным. Кроме того, синтаксическая структура языка была достаточно сложна для машинной обработки в первую очередь из-за того, что пробелы как синтаксические единицы вообще не использовались. Это порождало массу возможностей для скрытых ошибок, таких, например:

В Фортране следующая конструкция описывает “цикл for до метки 10 при изменении индекса от 1 до 100”: DO 10 I=1,100. Если же здесь заменить запятую на точку, то получится оператор присваивания: DO10I = 1.100 Говорят, что такая ошибка заставила ракету взорваться во время старта.

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

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

Бейсик

Бейсик [BASIC - Beginner’sAll-purposeSymbolicInstructionCode] - Язык программирования высокого уровня , разработанный в 1963 - 1964 гг. в Дартмутском колледже Томасом Куртом и Джоном Кемени.

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

Большинство версий Бейсика используют интерпретатор, который преобразует его компоненты в машинный код и позволяет запускать программы без промежуточной трансляции. Некоторые более совершенные версии Бейсика позволяют использовать для этой цели трансляторы. На IBM PC широко используются Quick Basic фирмы Microsoft, Turbo Basic фирмы Borland и Power Basic (усовершенствованная версия Turbo Basic, распространяемая фирмой Spectra Publishing ). В начале 1999 г. фирма Microsoft выпустила версию языка Visual Basic 6.0 (VB 6.0), предназначенного для создания многокомпонентных программных приложений для систем уровня предприятий.

Например, язык Lisp используется для создания экспертных систем. Язык Java используется для разработки сетевых (Web)- приложений.

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

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

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

Интегрированная среда разработки обычно включает в себя:

текстовый редактор – для набора текста программы

компилятор (или интерпретатор) - для перевода программы в машинный код

компоновщик - для объединения при необходимости нескольких программ “запускатель программ”, который позволяет выполнить разрабатываемую программу, не выходя из среды разработки.

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

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

Для одного и того же языка могут существовать разные среды разработки. Например, для языка С есть среда TurboC и BorlandC

2.2. Анализ сходства и отличия стандартов языков программирования

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

Цикл с параметром

В качестве первого примера воспользуемся оператором цикла с параметром (for). Это наиболее часто используемый составной (т.е. содержащий другие операторы) оператор в любом языке. Он всегда содержит следующие компоненты:

  • переменную - счетчик цикла
  • выражение - начальное значение цикла
  • выражение - конечное значение цикла
  • список операторов - тело цикла

Кроме того, цикл с параметром может содержать признак увеличения/уменьшения счетчика цикла (Паскаль) или способ модификации счетчика (Си и Java). Реализация на Паскале:

for i:=0 to max-1 do begin

arr[i]:=i;

end

Реализация на Си и Java:

for(i=0; i

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

Структура типа «запись»

Следующий пример взят из раздела описания структур данных - это описание типа «запись» (структура в Си и Java). Подобная структура всегда содержит следующие компоненты:

  • список полей с указанием имени поля и его типа
  • список вариантных частей (union в Си)

Реализация на Паскале:

record

field1:integer;

field2:array[0..30]of char;

case byte of

1:(b0,b1:byte);

2:(i0:integer);

end

Реализация на Си:

struct {

int field1;

char field2[31];

union {

byte b0b1[2];

int i0;

} u;

}

Реализация на Java:

class {

int field1;

char[] field2;

int i0;

}

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

Синтаксис и семантика

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

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

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

Интересно отследить те немногие различия, которые есть в семантике современных языков программирования. Однако существуют и обратные примеры, когда средства, присутствующие только в одном языке программирования, полезны на практике. Например, в Си отсутствуют средства экспорта—импорта модулей (за исключением директивы #include), имеющиеся в современных реализациях Паскаля, Модуле и Аде. С другой стороны, Си содержит удобные механизмы создания строковых констант, отсутствующие в Паскале и родственных ему языках.

Сравнивая между собой конструкции современных языков программирования и выделив их общую составляющую, можно описать (не создать, а именно описать уже существующий de facto!) «универсальный» язык программирования (правда, только на семантическом уровне).

Существующая ныне система стандартизации языков программирования не способствует выполнению этой задачи. Главная проблема состоит в том, что при описании стандарта семантическая составляющая не отделена от синтаксиса и лексики. Кроме того, при модернизации стандартов комитеты ISO/ANSI предпочитают скорее добавлять в язык новые возможности, чем исключать редко используемые, что приводит к неоправданному синтаксическому расширению языков.

Семантическое описание оператора while. ЦиклСПредусловием должен содержать следующие обязательные компоненты:

  • УсловиеПродолженияЦикла
  • ТелоЦикла

УсловиеПродолженияЦикла представляет собой выражение логического (булевого) типа.

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

УсловиеПродолженияЦикла вычисляется всякий раз перед началом цикла. Если его значение «истина», то выполняются операторы, входящие в ТелоЦикла. В противном случае управление передается оператору, следующему за оператором ЦиклСПредусловием.

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

Синтаксическое описание оператора while. ЦиклСПредусловием выглядит следующим образом в разных языках программирования:

ЦиклСПредусловиемPASCAL::=

?while? УсловиеПродолженияЦикла ?do?

ТелоЦикла

ЦиклСПредусловиемC::=

?while? ?(? УсловиеПродолженияЦикла ?)?

ТелоЦикла

ЦиклСПредусловиемMODULA::=

?while? УсловиеПродолженияЦикла ?do?

ТелоЦикла ?end?

Семантическое описание типа «указатель». Подобная конструкция содержится в любом современном языке программирования (кроме Java, где указатели используются неявно).

ТипУказатель должен содержать следующие обязательные компоненты:

  • ИмяТипа
  • БазовыйТип

ИмяТипа представляет собой идентификатор.

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

ТипУказатель — это адрес конструкции БазовыйТип. Его размер фиксирован и зависит от платформы программирования (для Win32 он составляет 4 байта).

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

Синтаксическое описание типа «указатель». Синтаксические стандарты типа ТипУказатель есть в различных языках программирования (в Java указатели формально отсутствуют, но на самом деле все типы данных являются указателями).

ТипУказательPASCAL::=

ИмяТипа ?=? ?^? БазовыйТип

ТипУказательC::=

?typedef? ИмяТипа ?*? БазовыйТип

ТипУказательMODULA2::=

ИмяТипа ?=? ?pointer? ?to? БазовыйТип

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

Содержание семантического и синтаксического стандартов языка

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

  • Список компонент, из которых состоит конструкция (в ТипУказатель это компоненты ИмяТипа и БазовыйТип)
  • Описание каждой компоненты
  • Описание конструкции в целом

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

Компиляторы с общей семантической базой

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

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

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

Заключение

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

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

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

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

Список литературы

1. Волкова В.Н. Теория информационных процессов и систем. - М.: Юрайт, 2016. - 504 с.

2. Губарев, В.Г. Программное обеспечение и операционные системы ПК: учебник / В.Г. Губарев.- Ростов н/Д.: Феникс, 2012г.-384с.

3. Дорот, В. Л. Толковый словарь современной компьютерной лексики. / В. Л. Дорот , Ф. А. Новиков . - 2-е изд.,перераб.и доп. – СПб. : БХВ-Петербург, 2011г. - 512 с.

4. Информатика. Базовый курс/ Под ред. С.В. Симоновича. - СПб.: Питер, 2015. - 640 с.

5. Информационные технологии в экономике управления / Под ред. В.В. Трофимова. - М.: Юрайт, 2015. - 482 с.

6. Курносов А.П., Кулев С.А., Улезько А.В. и др. Информатика. Под ред. А.П. Курносова.-М.: КолосС, 2010.-272 с.

7. Макарова Н.В. Информатика / под ред. Проф. Н.В. Макаровой. - М.: Финансы и статистика, 2011. - 768 с.

8. Малышев Р.А. Локальные вычислительные сети: Учебное пособие / РГАТА. - Рыбинск, 2012. - 83 с.

9. Могилев А.В., Пак Н.И., Хеннер Е.К. Информатика. - М.: Академия, 2012. - 848 с.

10. Островский В.А. Информатика: учеб. для вузов. М.: Высшая школа, 2009. -511 с.

11. Семакин И.А., Информатика: Базовый курс / Семакин И.А., Залогова Л., Русаков С., Шестакова Л. - Москва: БИНОМ.,2013. - 105с.

12. Симонович С.В.Информатика. Базовый курс / Симонович С.В. и др. -СПб.: издательство "Питер", 2010. - 640 с.