Языки программирования низкого уровня курсовая работа

Содержание:

Введение

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

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

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

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

В настоящее время ведется много дискуссий об исключительности того или иного языка программирования, например, резкая критика C# — одной из основных составляющих новой платформы .NET от Microsoft, стала уже достаточно банальной. Мы постараемся дать некоторый исторический очерк развития различных языков и пояснить на примерах некоторые общие тенденции. А также мы постараемся показать всё разнообразие языков программирования. Возможно, нам удастся убедить кого-то в бесполезности проведения дискуссий, аналогичных вышеупомянутой.

1. Классификация языков программирования

1.1. Языки программирования низкого уровня

Языки программирования низкого уровня (машинно-ориентированные) (low-level language) – это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (внутреннего языка, структуры памяти и т.д.). Эти языки программирования предназначены для определенного типа ЭВМ и отражают его внутренний машинный код. Особенности машинно-ориентированных языков:

  •  высокое качество создаваемых программ (компактность и скорость  выполнения);
  •  возможность использования конкретных аппаратных ресурсов;
  •  предсказуемость объектного кода и заказов памяти;
  •  для составления эффективных программ необходимо знать систему команд и особенности функционирования данной ЭВМ;
  •  трудоемкость процесса составления программ;
  •  низкая скорость программирования;
  •  невозможность непосредственного использования программ, составленных на этих языках, на ЭВМ других типов.

Машинно-ориентированные языки по степени автоматического программирования подразделяются на классы [1,4,13].

1.1.1. Машинный язык

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

Машинный язык (computer (machine) language)– язык программирования, элементами которого являются команды компьютера, характеризующиеся:

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

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

1.1.2. Языки символьного кодирования

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

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

1.1.3. Автокод

Языки, включающие в себя все возможности ЯСК, посредством расширенного введения макрокоманд, называются Автокоды.

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

Развитые автокоды получили название Ассемблеры. Сервисные программы и пр., как правило, составлены на языках типа Ассемблер [1,4,13].

1.1.4. Макрос

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

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

Макрос одинаково может работать, как с программами, так и с данными [1,4,13].

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

Язык программирования высокого уровня (high-level language)- язык программирования, разработанный для быстроты и удобства использования программистом. Слово «высокоуровневый» здесь означает, что язык предназначен для решения абстрактных высокоуровневых задач и оперирует не инструкциями к оборудованию, а логическими понятиями и абстракцией данных. Это позволяет быстрее программировать сложные задачи и обеспечивает относительную независимость от оборудования. Программирование на языках высокого уровня проще, чем на языках низкого уровня. Оно не требует глубоких знаний устройства компьютера и поэтому вполне доступно людям, не являющимися специалистами в вычислительной технике. Однако, программы, написанные на языках низкого уровня, как правило, отличаются более высокой скоростью работы, меньшим объемом и более полным использованием ресурсов вычислительной техники. Использование разнообразных трансляторов и интерпретаторов обеспечивает связь программ, написанных при помощи языков высокого уровня, с различными операционными системами и оборудованием, в то время как их исходный код остаётся, в большей части, неизменным.

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

Наиболее распространёнными языками подобного типа являются C++, Visual Basic, Java, Python, Ruby, Perl, Delphi, PHP [2,13].

1.2.1. Императивные языки

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

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

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

Среди процедурных языков выделяют в свою очередь структурные и операционные языки. В структурных языках одним оператором записываются целые алгоритмические структуры: ветвления, циклы и т.д. В операционных языках для этого используются несколько операций. Широко распространены следующие структурные языки: Pascal, C, Ada, PL/1. Среди операционных известны Fortran, Basic, Focal [2,13].

1.2.2. Декларативные языки

Декларативное (непроцедурное) программирование (declarative (nonprocedural) language) появилось в начале 70-х годов 20 века, но стремительное его развитие началось в 80-е годы, когда был разработан японский проект создания ЭВМ пятого поколения, целью которого явилась подготовка почвы для создания интеллектуальных машин. К непроцедурному программированию относятся функциональные и логические языки.

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

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

Первым таким языком был LISP (LIST Processing — обработка списков), созданный в 1959 году. Цель его создания состояла в организации удобства обработки символьной информации.

В логических (реляционных) языках (logical language) программа вообще не описывает действий. Она задает данные и соотношения между ними. После этого системе можно задавать вопросы. Машина перебирает известные и заданные в программе данные и находит ответ на вопрос. Порядок перебора не описывается в программе, а неявно задается самим языком. Классическим языком логического программирования считается PROLOG (PROgramming in LOGic — программирование в терминах логики). Этот язык был создан французским ученым А. Кольмероэ в 1973 году.

Языки логического программирования характеризуются:

  •  высоким уровнем;
  •  строгой ориентацией на символьные вычисления;
  •  возможностью инверсных вычислений, то есть переменные в процедурах не делятся на входные и выходные;
  •  возможной логической неполнотой, поскольку зачастую невозможно выразить в программе определенные логические соотношения, а также невозможно получить из программы все выводы правильные [2,13].

1.2.3. Объектно-ориентированные языки

Концепция объектно-ориентированного программирования (object- oriented language) подразумевает, что основой управления процессом реализации программы является передача сообщений объектам. Поэтому объекты должны определяться совместно с сообщениями, на которые они должны реагировать при выполнении программы. В этом состоит главное отличие ООП от процедурного программирования, где отдельно определённые структуры данных передаются в процедуры (функции) в качестве параметров. Таким образом, объектно-ориентированная программа состоит из объектов – отдельных фрагментов кода, обрабатывающего данные, которые взаимодействуют друг с другом через определённые интерфейсы.

Объектно-ориентированный язык программирования должен обладать следующими свойствами:

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

Элементы объектно-ориентированного программирования (ООП) появились в начале 70-х годов в языке моделирования Simula, затем получили свое развитие, и в настоящее время ООП принадлежит к числу ведущих технологий программирования [2,13].

1.2.4. Специализированные языки

Специализированные языки (special language) — языки программирования, ориентированные на решение определенного круга задач. Этих задах много, рассмотрим некоторые из них.

Классификация языков программирования по типам задач:

  •  Задачи искусственного интеллекта (Lisp, Prolog, Planner, QA4, FRL, KRL, QLisp);
  •  Задачи вычислительной математики и физики (Occam, PFOR, Glypnir, Actus, Cobol, Алгол, Фортран);
  •  Разработка интерфейса (Forth, C, C++, Ассемблер, Макроассемблер, Simula-67, OAK, Smalltalk, Java);
  •  Разработка программ-оболочек, разработка систем (Forth, C, C++, Ассемблер, Макроассемблер, Simula-67, OAK, Smalltalk, Java, РПГ);
  •  Задачи вычислительного характера (Algol, Fortran, Cobol, Ada, PL/1, Basic, Pascal);
  •  Оформление документов, обработка больших текстовых файлов, организация виртуальных трехмерных интерфейсов в Интернете (HTML, Perl, PHP, Tcl/Tk, VRML, XML, PL/SCL);
  •  Языки программирования баз данных. (SQL, dBase II, FoxPro, Clipper);

Кроме того, существуют гибридные (комбинированные) языки (hibrid language) — языки программирования, использующие также и средства других языков [2,13,14].

2. Поколения языков программирования

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

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

Языки первого поколения продолжают использоваться и сегодня, хотя в значительно меньшем объеме. Чаще всего приходится писать программы в машинных кодах для новых микропроцессоров, для которых еще не разработаны компиляторы, поддерживающие требуемый набор команд [13].

Расцвет второго поколения языков программирования (2GL) пришелся на конец 50-х — начало 60-х годов. Был создан символический ассемблер, позволявший писать программы без привязки к конкретным адресам памяти. В него было введено понятие переменной, и он, по сути, стал первым настоящим (хоть и машинно-ориентированным) языком программирования со своим компилятором. Скорость создания и эффективность программ резко возросли. Ассемблеры активно применяются в настоящее время, как правило, для создания программ, максимально использующих возможности аппаратуры — различных драйверов, модулей состыковки с нестандартным оборудованием и т.д. [13].

Третье поколение ЯП (3GL) принято относить к 60-м годам. В это время родились языки, которые называют универсальными языками высокого уровня, с их помощью можно решать задачи из любых областей. Это общеизвестные Fortran, Cobol, Algol и др. Такие качества новых языков, как относительная простота, независимость от конкретного компьютера и возможность использования мощных синтаксических конструкций позволили резко повысить производительность труда программистов. Кроме того, понятная большинству пользователей процедурная идеология этих языков позволила привлечь к написанию небольших программ (как правило, расчетного или учетного характера), большое количество специалистов из некомпьютерных областей.

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

С начала 70-х годов по настоящее время тянется период языков четвертого поколения (4GL). Несмотря на рождение новых технологий (ООП, визуальное программирование, CASE-методологии, системный анализ), процесс создания больших программных комплексов оказался очень трудоемкой задачей, так как для реализации крупных проектов требовался более глобальный подход к решаемым задачам, чем предлагали имевшиеся средства разработки. Языки 4GL частично снимали эту проблему. Целью их создания было в первую очередь стремление к увеличению скорости разработки проектов, снижение числа ошибок и повышение общей надежности работы больших программных комплексов, возможность быстрого и легкого внесения изменений в готовые проекты. А также упрощение самих языков для конечного пользователя, активное внедрение технологий визуальной разработки и т. д. Все средства разработки 4-го поколения имеют мощные интегрированные оболочки и обладают простым и удобным пользовательским интерфейсом. Они чаще всего используются для проектирования баз данных и работы с ними (встроенные языки СУБД), что объясняется возможностью формализации всех понятий, используемых при построении реляционных баз данных. Как правило, в эти языки встраиваются мощные примитивы, позволяющие одним оператором описать такую функциональность, для реализации которой на языках младших поколений потребовалось бы написать тысячи строк кода.

Однако пользователям, использующим языки 4GL для создания законченных приложений, по-прежнему необходимо кодировать программу вручную, используя обычный процесс последовательного ввода команд. При этом сохраняется главный недостаток языков предыдущих поколений. Он заключается в том, что все они в значительной степени ориентированы на чуждую человеческому мышлению чисто компьютерную идеологию (работа с памятью, переменными, базами данных, последовательностями абстрактных операторов и т. п.), что требует от людей хорошего понимания принципов функционирования компьютера и операционных систем [13].

Рождение языков пятого поколения относится к настоящему времени. Довольно неожиданно вокруг самого названия 5GL разгорелись жаркие споры. Возникло несколько программистских «школ», представители, каждой из которых, имеют свое мнение о том, какие средства разработки считать языками 5-го поколения, а какие нет. Например, на страницах лондонского журнала SURPRISE (Surveys and Presentations in Information Systems Engineering), выпускаемого при поддержке английских министерств по электронике и вычислительной технике, рассматривают средства разработки 5-го поколения в более широком аспекте, чем это принято делать в отношении обычных языков программирования. Они считают, что к системам 5GL можно отнести не только новые мощные языки, но и системы создания программ, ориентированные на непрограммиста. Подобные системы отличаются стремлением предоставить конечному пользователю-неспециалисту богатые возможности создания прикладных программ с помощью визуальных средств разработки без знания программирования. Главная идея, которая закладывается в эти системы 5GL — возможность компьютерного интерактивного или полностью автоматического преобразования инструкций, вводимых в систему наиболее удобными человеку методами в максимально наглядном виде, в текст на универсальных языках программирования, описывающий готовую программу.

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

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

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

Языки 5GL, ориентированные на конкретные области применения, уже в ближайшее время могут завоевать самую широкую популярность. Наиболее вероятно это для продуктов, позволяющих создавать приложения для работы с базами данных, области информатики, наиболее успешно поддающейся формализации [13].

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

3.1 С чего все начиналось

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

3.2. Assembler (Ассемблер)

Может показаться, что это событие не было из ряда вон выходящим: как были машинные коды, так и остались. Однако это не так. Да, программирование в машинных кодах осталось, но она стало символическим кодированием машинных команд. Это был огромный шаг вперед, теперь программисту вовсе не нужно было разбираться в программировании команд на аппаратном уровне. В программировании на Ассемблере стало возможным использование меток, что облегчало в значительной мере отладку программ. Появилась возможность разработки целой серии вычислительных машин с одинаковой или сходной системой команд, что можно назвать первым подобием переносимости кода. Ассемблер нес в себе еще одну революционность для программирования: появилось два представления программ на нем: в машинных кодах и в чистом, откомпилированном виде. Но, по мере развития Ассемблера, его постоянного усложнения, дизассемблирование, т.е. перевод из одного представления программы в другой, становилось все более трудным делом. Надо отметить, что в итоге автоматическое дизассемблирование стало невозможным — для этой цели стали появляться специальные программы-дизассемблеры [15].

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

Рисунок . Эволюция языков программирования.

3.3. Lisp (Лисп)

С 50-х годов специалисты по ИИ (ИИ — искусственный интеллект) искали язык, пригодный для манипулирования понятиями, выраженными словами и фразами на естественном языке. Первым результатом этих поисков явилось семейство языков под названием IPL, от (Information Processing Languages — языки обработки информации). Оно было создано пионером ИИ Алленом Ньюэллом и его сотрудниками. Вначале работа велась в «Рэнд корпорейшн», а затем в Технологическом институте Карнеги (позднее Карнеги—Меллона) в Питтсбурге, бастионе исследований по ИИ.

Центральной идеей IPL было понятие списка.

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

Понятие списка интересовало и другого выдающегося члена тесного сообщества исследователей ИИ — Джона Маккарти, блестящего и разностороннего математика. В 1958г., когда при его помощи организовалась лаборатория по ИИ при МТИ, Маккарти начал работу над языком высокого уровня, в котором понятие списка сочеталось с системой обозначений, заимствованной из экзотической области математики — так называемого лямбда-исчисления. Введенное в 1931 г. математиком и логиком Алонзо Черчем, это исчисление оперирует только тремя элементами: символами, представляющими переменные и константы, скобками для группировки символов и обозначениями функций, выражаемыми греческой буквой «Лямбда».  Маккарти назвал свой язык LISP от List Processing — обработка списков [1,2].

3.4. FORTRAN (Фортран)

FORTRAN — это первый язык программирования высокого уровня, который получил признание и стал широко применяться. В своем исходном варианте FORTRAN был разработан фирмой IBM в 1957 г. как язык для работы на компьютерах IBM 704. В это время программисты, привыкшие к использованию языка ассемблера, сомневались в возможности использования языков высокого уровня. Наиболее серьезным аргументом была малая эффективность выполнения кода, получающегося в результате трансляции программ, написанных на этих языках. Первые версии FORTRAN были ориентированы главным образом на обеспечение эффективности выполнения.  Первое стандартное определение языка появилось в 1966 г., а затем в 70-х были внесены существенные изменения, которые привели к появлению FORTRAN 77, и в 90-х — FORTRAN 90.

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

Для объединения подпрограмм, главной программы и набора вспомогательных подпрограмм из стандартных библиотек времени выполнения в единую выполняемую программу используется редактор связей (компоновщик). Завершающим этапом является выполнение программы [3,4].

3.5. Basic (Бейсик)

История. BASIC (Beginner’s All-purpose Symbolic Instruction Code) был разработан Томасом Куртцем и Джоном Кемени, сотрудниками Дартмутского колледжа, в начале 60-х гг. Целью разработчиков было создать простой в использовании язык программирования, в особенности для студентов не технических специальностей. Для увеличения эффективности вычислений BASIC был реализован как интерактивный язык, причём это было сделано задолго до того, как режим разделения времени стал стандартом системной архитектуры.

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

Краткий обзор языка. Язык с чрезвычайно простыми синтаксисом и семантикой: пронумерованные операторы, имена переменных, состоящие из одной буквы и цифры, простой оператор IF, цикл FOR и оператор GOSUB для вызова подпрограммы [1,2].

3.6. PL/1 (ПЛ/1)

История. С самого начала работа велась в условиях нехватки времени. Группа приступила к работе в октябре 1963 г., а срок окончания работ был назначен уже на апрель 1964 г. Участники изо всех сил стремились успеть к сроку. Поклонники Фортрана надеялись увидеть свой любимый язык в качестве основы нового языка. Но комиссия отвергла Фортран: он имел слишком ограниченные возможности, чтобы стать основой универсального языка.

О результате усилий комитета, новом языке программирования, названном ПЛ/1 (РL/1, от Programming Language One — язык программирования, первый), было доложено ассоциации SНАRE в марте.

Некоторые специалисты характеризовали язык как бесформенный, переусложненный и избыточный. Надеясь, что большинство проблем, связанных с новым языком, прояснится в процессе реализации, фирма IBM дала задание своей лаборатории в Харсли (Англия) приступить к работе над компилятором. Сотрудники лаборатории установили, что точное определение этого массивного языка займет не менее 200 страниц. Язык так сильно отредактировали, что разработчики вряд ли узнали бы в получившемся результате свое творение. Уточнения превратили язык в практичный инструмент программирования, который приветствовали многие программисты.

Фирма IBM надеялась, что PL/1 явится кульминацией всего того, что возникло в языках программирования в предыдущие десятилетия. Многие черты Фортрана, Кобола и Алгола действительно нашли отражение в PL/1. Но в то же время критики отмечали, что язык наделен слишком многими качествами, в которых лишь увековечились ошибки прошлого [2,3,5].

3.7. Cobol (Кобол)

История. Архитектура языка COBOL (Common Business Oriented Language)  неоднократно пересматривалась — его первая версия вышла в 1960 г., а более поздние версии — в 1974 и 1984гг. Разработка языка COBOL под руководством Грейс Хоппер была организована Министерством обороны США. Разработчики языка COBOL позаимствовали некоторые идеи из языка FLOWMATIC, созданного в компании Univac, включая использование существительных и глаголов для описания действий и отделение описаний данных от команд. При разработке языка COBOL была поставлена уникальная цель — создать язык программирования, использующий «естественный английский» для описания алгоритмов. Хотя получившийся язык достаточно удобен для чтения, но у него все же есть формальный синтаксис и программирование на нем требует определенных практических навыков.

Краткий обзор языка. В начале 60-х гг. язык COBOL (Common Business Oriented Language) широко использовался для обработки деловой информации на компьютерах.

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

Программы COBOL организованы в виде четырех разделов. Такая организация отвечает двум основным целям разработки языка: отделение машинно-зависимых элементов программы от машинно-независимых, а также отделение описания данных от описания алгоритма.

Строение языка COBOL основано на статической структуре времени выполнения. Не требуется организации управления ресурсами памяти во время выполнения программы, и многие аспекты языка были разработаны для того, чтобы позволить использовать относительно эффективные структуры времени выполнения. Большинство программ читается легко, поскольку в этом языке используется синтаксис, подобный синтаксису английского языка. Для улучшения читаемости программы можно использовать многочисленные необязательные, так называемые шумовые, слова. Однако синтаксис затрудняет написание, потому что даже самая простая программа получается довольно длинной [2].

3.8. Algol (Алгол)

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

Язык, созданный на этой конференции, многое унаследовал от Фортрана. В 1959 году Джон Бекус ознакомил с Алголом организацию потребителей компьютеров. От фирмы IBM потребовали реализовать Алгол, но она тормозила развитие языка, возлагая основные свои надежды на Фортран. Несмотря на это Бекус продолжал активно участвовать в развитии Алгола. Вернувшись в Цюрих он занялся синтаксисом языка, в результате чего разработал строгую и точную систему определения каждой структуры языка логическим образом.

Последующее уточнение этой работы датским ученым Питером Науром привело к тому, что такой подход стали называть “форма Бекуса-Наура” (БНФ). Язык образца 1958 года являлся эскизом языка Алгол. В январе 1960г. 13 представителей стран Европы и США, включая 7 человек с прошлой конференции, встретились в Париже, чтобы исправить недостатки предыдущей версии языка. Одним из вновь прибывших на эту конференцию был Питер Наур, предложивший вариант измененного Алгола, записанного при помощи БНФ. Группа программистов единогласно приняла решение по языку. Таким образом, появился язык Алгол-60. На него обрушилось много критики в основном со стороны американцев. Программисты Европы сразу приняли Алгол-60. Он позволил их компьютерной индустрии обрести независимость от американской технологии [2,3,6].

3.9. Forth (Форт)

История. Язык Forth был разработан Чарльзом Мором около 1970г. Название этого языка возникло как сокращение до пяти букв первого слова в полном названии программы его разработки «Fourth Generation Programming Language». Этот язык в 70-е гг. служил заменой языку FORTRAN для мини-компьютеров, у которых память являлась дефицитным ресурсом в силу ее дороговизны, а единственное устройство ввода-вывода, как правило, было очень медленным и громоздким печатающим устройством на бумажной ленте. Наличие резидентного транслятора-интерпретатора облегчало разработку программ для подобных встроенных систем. Язык Forth не пользовался большим успехом, но он до сих пор существует в качестве основного «движущего механизма» языка Postscript [2,8].

3.10. Pascal (Паскаль)

История. Pascal разрабатывался с 1968 по 1970 г. Николаусом Виртом. Цель заключалась в том, чтобы создать язык, лишенный многочисленных недостатков ALGOL. Pascal был назван в честь французского математика Блеза Паскаля, который еще в 1642 г. изобрел цифровой калькулятор. Появившийся в 1970 г. Pascal начал завоевывать признание. В 1983 г. был разработан американский стандарт языка (IEEE 770/ ANSI X3.97), а вскоре был разработан стандарт ISO (ISO 7185).

С конца 70-х до конца 80-х гг. этот язык доминировал среди языков, используемых на начальном этапе обучения программированию; позже его заменили C и C++, а затем Java [2,9,10].

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

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

Pascal можно эффективно реализовать на обычном аппаратном компьютере. Идеология языка включает только те языковые свойства, для которых существуют хорошо изученные и эффективные методики реализации. Во время трансляции почти для всех операций возможен статический контроль типов, так что необходимость в динамическом контроле минимальна, но при этом обеспечивается полная безопасность выполнения. Обычно программа транслируется в выполняемый машинный код, но в некоторых реализациях Pascal результатом трансляции является виртуальный машинный код, который затем интерпретируется и выполняется при помощи некоторого программно-моделируемого интерпретатора [2,9,10].

3.11. C (Си)

История. Язык C был разработан в 1972 г. Деннисом Ритчи и Кеном Томпсоном из AT&T Bell Telephone Laboratories. По стилю он похож на ALGOL и Pascal, а также использует свойства языка PL/I. Хотя он и является универсальным языком, компактный синтаксис и эффективность выполнения написанных на нем программ сделали его популярным языком системного программирования.

В конце 60-x AT&T Bell Telephone Laboratories закончила совместный с MIT и GЕ (General Electric) проект по созданию операционной системы Multics; тем не менее, целью Кена Томпсона оставалась разработка удобной операционной системы. Зародилась идея операционной системы UNIX. Система Multics программировалась на языке PL/1, и хотя он достаточно громоздок, было желание написать новую систему, UNIX, именно на языке высокого уровня. Томпсон имел некоторый опыт работы с системным языком BCPL (языком низкого уровня, не имеющим никаких средств динамической поддержки), он разработал новый язык под названием B, который реализовывал минимальное подмножество возможностей языка BCPL для системного программирования (BCPL помещался в 8-килобайтную память компьютера [PDP-7]).

В 1970 г. для проекта UNIX был приобретен компьютер PDP-11 с его огромной памятью 24 Кбайт. В это время небольшое, но растущее сообщество UNIX почувствовало ограничения языка B. Поэтому в B были добавлены такие понятия, как типы, определения структур и некоторые дополнительные операторы, и новый язык стал известен под именем С.

Хотя C — универсальный язык программирования, он тесно связан с системным программированием. Этот язык впервые был использован для написания ядра операционной системы UNIX и с тех пор был тесно связан с реализациями UNIX. В настоящее время реализации языка C существуют в большинстве компьютерных систем.

Программисты, использующие язык C, — наиболее быстро растущая популяция в программистском мире. Вместе с языками C++ и Java, которые разрабатывались на его основе, он оказывает наибольшее влияние на программирование. Синтаксис и семантика большинства новых языков (таких как Java и Perl) частично основаны на концепциях, характерных для языка С [1,2].

3.12. Prolog (Пролог)

История. Разработка языка Prolog началась в 1970 г. Аланом Кулмероэ и Филиппом Русселом. Они хотели создать язык, который мог бы делать логические заключения на основе заданного текста. Название Prolog является сокращением от «PROgramming in LOGic». Этот язык был разработан в Марселе в 1972 г.

Первая реализация языка Prolog с использованием компилятора Вирта ALGOL-W была закончена в 1972 г., а основы современного языка были заложены в 1973г. Использование языка Prolog постепенно распространялось среди тех, кто занимался логическим программированием, в основном благодаря личным контактам, а не через коммерциализацию продукта. В настоящее время существует несколько различных, но довольно похожих между собой версий. Хотя стандарта языка Prolog не существует, однако версия, разработанная в Эдинбургском университете, стала наиболее широко используемым вариантом. Недостаток разработок эффективных приложений Prolog сдерживал его распространение вплоть до 1980 г. [2,7].

3.13. C++ (Си++)

История. Создание языка C++ обычно приписывают одному конкретному человеку. Бьерн Страуструп на основе языка C разработал столь же эффективный язык, но с некоторыми дополнительными возможностями в области наследования объектов. Для понимания языка C++ желательно, чтобы уже был изучен язык С.

В конце 70-х гг. Страуструп работал над своей докторской диссертацией в компьютерной лаборатории в Кембридже. В то время он использовал язык Simula (произошедший от ALGOL), в котором было введено понятие классов как объектов данных. Страуструп сделал вывод, что классы, определенные в Simula, могут служить эффективным механизмом для определения типов. Поступив на работу в компанию AT&T Bell Telephone Laboratories в США, он немедленно начал разрабатывать расширения для языка C, которые включали в себя некоторые возможности этих самых классов из Simula.

Страуструп руководствовался тем принципом, что все дополнения, привнесенные им в язык C, не должны понизить его эффективность и стать причиной замедления работы программ. Разработанные им расширения языка C, известные под названием C with Classes (C c классами), содержали основную структуру классов, входящую в современный C++. К 1982г. его язык C с классами имел скромный успех в пределах AT&T Bell Telephone Laboratories, и Страуструпу, уподобившемуся гуру, приходилось решать все вопросы, связанные с поддержкой этого языка. В конце концов, эта обязанность стала для него слишком обременительной, и он пришел к выводу, что у него есть только две возможности:

1. Прекратить поддержку языка C с классами.

2. Используя весь накопленный опыт, разработать на основе C с классами новый (более качественный) язык, который имел бы коммерческий успех.

Он выбрал второй вариант и усовершенствовал язык C с классами, добавив новые возможности, а также устранив некоторые несоответствия, имевшиеся в этом языке.

В 1984г. результат его труда получил новое название. Одни называли С с классами новым С, а другие называли стандартный С старым, или простым С. Некоторое время использовалось название С84, а затем Рик Маскитти из Bell Labs предложил название C++. В этом названии используется обозначение ++ операции увеличения на единицу в языке С, которое в данном случае означает «следующий», «последователь». В основном разработка языка C++ была закончена к 1986г., а в июне 1989г. была выпущена вторая версия. В 1989г. в Американском национальном институте стандартов (ANSI) был создан комитет, который к 1994г. выпустил черновой стандарт языка, а через два года — его полный стандарт [1,2].

3.14. Ada (Ада)

История. Язык Ада был разработан при финансовой поддержке Министерства обороны США. В 1978 году был объявлен конкурс на язык программирования, который бы отвечал следующим требованиям:

  •  возможность использовать неоднородные структуры;
  •  разделение памяти;
  •  реализация неявных функций преобразования типов.

Это конкурс завершился появлением в июле 1980г. спецификаций языка Ада. Этот язык был разработан международным коллективом программистов фирмы Honeywell и ее французского филиала Cii-Bull, которым руководил Ж. Ишбиа. Язык был назван в честь Августы Ады Лайвейс, считающейся первой программисткой, дочери английского поэта Байрона.

Окончательная версия спецификаций языка Ада появилась в феврале 1983г. Она послужила основой для нового стандарта Министерства обороны США и стандарта Американского национального института стандартов (ANSI).

Конечная версия международного стандарта ISO 8652:1987 была опубликована в 1987 году. Структура Ады очень похожа на Паскаль. Синтаксис большинства операторов и описаний практически идентичен синтаксису Модулы, хотя она появилась практически в одно время с Адой.

Ада продолжает позиционироваться как хорошее средство для разработки больших программных комплексов. МО США, учтя отсутствие объектов, в соответствии с современными требованиями к технологии разработки программ, выработало новый стандарт языка ISO/les 8652:1985 (E). Он описывает версию языка Ada95. Самое интересное, что эта версия является первой в мире объектно-ориентированной системой программирования, на которую был введен международный стандарт. Впоследствии МО решило использовать “Ada”, как свой внутренний сертифицированный знак [2,11].

3.15. Oberon (Оберон)

Язык Оберон был создан в 1987 году Никлаусом Виртом, профессором Института компьютерных систем Федерального технического университета (ETH, Цюрих, Швейцария), автором языков Паскаль и Модула-2.

Язык носит имя спутника планеты Уран.

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

В 1992 году были приняты расширения языка Оберон, предложенные Ханспетером Мёссенбёком. Расширенный язык получил название Оберон-2. Основное нововведение — связанные с типами процедуры. Сейчас Оберон-2 является фактическим стандартом языка [2].

3.16. Java (Джава, Ява)

История. Разработка языка Java началась в 1991 г. Группа программистов (Green Team) из компании Sun Microsystems под руководством Джеймса Гослинга занималась разработкой языка для использования в цифровых бытовых устройствах (Oak). Летом 1992 г. была создана рабочая версия, но группа опередила свое время, так как в тот момент промышленность еще не была готова к использованию этого языка.

В 1993 г. появился web-браузер Mosaic, что привело к распространению Интернета, вышедшего из стен академических лабораторий, по всему миру. Программисты из группы Green Team сразу же осознали, какую роль может сыграть созданный ими язык для расширения возможностей web-браузеров. При помощи браузера Mosaic, в котором использовались адреса URL для навигации в сети и код HTML для отображения web-страниц, пользователь мог отыскивать нужные ему страницы и загружать информацию с удаленных сайтов.

В 1994 г. компания Sun разработала браузер Hotjava, чтобы продемонстрировать возможности содержащегося в нем виртуального компьютера Java. И наконец, 23 мая 1995 г. Марк Андерсен (Marc Anderssen), один из основателей компании Netscape Communication, которая в то время контролировала 70 % рынка в области web-браузеров, объявил о включении виртуального компьютера Java в браузер Netscape. С этого момента язык Java приобрел значительную популярность. Он все чаще заменяет С и C++ в качестве первого языка программирования, изучаемого и используемого студентами [12].

Краткий обзор языка. Можно сказать, что язык Java является достаточно простым языком: он имеет ту же ясную структуру, что и C++, и при этом лишен той неуклюжести, которая свойственна С. Тем не менее эффективность выполнения программ на Java несколько ниже, так как многие из структур языка нуждаются в проверке во время выполнения программы. К тому же, поскольку программы на Java чаще всего интерпретируются как апплеты в виртуальной машине Java, скорость выполнения программ на Java несколько ниже, чем скорость выполнения программ, написанных на компилируемых языках. Но при оценке Java надо помнить об основной области применения этого языка: поскольку он создавался для web-браузеров, потери в скорости выполнения фактически не влияют на результат. Причина этого в том, что скорость передачи информации по сети и скорость обработки и отображения информации на мониторе компьютера все равно ниже скорости работы компьютера пользователя. Поэтому большая часть времени тратится на ожидание очередной порции информации, запрошенной на сервере [12].

3.17. C # (Си Шарп)

История. Язык C# является наиболее известной новинкой в области создания языков программирования. В отличие от 60-х годов XX века — периода бурного языкотворчества — в нынешнее время языки создаются крайне редко. За последние 15 лет большое влияние на теорию и практику программирования оказали лишь два языка: Eiffel и Java, ставший популярным во многом благодаря технологии его использования в Интернете и появления такого понятия как виртуальная Java-машина. Чтобы новый язык получил признание, он должен действительно обладать принципиально новыми качествами. Языку C# повезло с родителями. Явившись на свет в недрах Microsoft, будучи наследником C++, он с первых своих шагов получил мощную поддержку. Создателем языка является сотрудник Microsoft Андреас Хейлсберг. C# создавался как язык компонентного программирования, и в этом одно из главных достоинств языка, направленное на возможность повторного использования созданных компонентов. Из других объективных факторов отметим следующие:

  •  C# создавался параллельно с каркасом Framework .Net и в полной мере учитывает все его возможности — как FCL, так и CLR;
  •  C# является полностью объектно-ориентированным языком, где даже типы, встроенные в язык, представлены классами;
  •  C# является мощным объектным языком с возможностями наследования и универсализации;
  •  C# является наследником языков C/C++, сохраняя лучшие черты этих популярных языков программирования. Общий с этими языками синтаксис, знакомые операторы языка облегчают переход программистов от С++ к C#;
  •  сохранив основные черты своего великого родителя, язык стал проще и надежнее. Простота и надежность, главным образом, связаны с тем, что на C# хотя и допускаются, но не поощряются такие опасные свойства С++ как указатели, адресация, разыменование, адресная арифметика;
  •  мощная библиотека каркаса поддерживает удобство построения различных типов приложений на C#, позволяя легко строить Web-службы, другие виды компонентов, достаточно просто сохранять и получать информацию из базы данных и других хранилищ данных;
  •  реализация, сочетающая построение надежного и эффективного кода, является немаловажным фактором, способствующим успеху C# [1,2,13].

Заключение

Изобретение языка программирования позволило нам общаться с машиной, понимать её. Но если мы обратим внимание на темпы роста и развития новейших технологий в области программирования, то можно предположить, что в ближайшем будущем, человеческие познания в этой сфере, помогут произвести на свет языки, умеющие принимать, обрабатывать и передавать информации в виде мысли, слова, звука или жеста. Так и хочется назвать это детище компьютеризированного будущего: «языки программирования «высочайшего» уровня». Возможно, концепция решения этого вопроса проста, а ближайшее будущее этого проекта уже не за горами.

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

Целью данного обзора была попытка получить представление обо всем многообразии существующих языков программирования. Среди программистов часто бытует мнение о «всеобщей применимости» того или иного языка (C, C++, Pascal и т.п.). Это мнение возникает по нескольким причинам: недостаток информации, привычка, инертность мышления. Мы попытались слегка компенсировать первый фактор. По поводу остальных можем лишь сказать, что настоящий профессионал должен постоянно стремиться повышать свою профессиональную квалификацию. Разумеется, прежде чем приниматься использовать новый язык, нужно внимательно изучить все его особенности, включая наличии эффективной реализации, возможности взаимодействия с существующими модулями и т.п., и только после этого принимать решение. Но, тем не менее, одно другого стоит.

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

  1.  Гольденберг В.А. «Введение в программирование» Издательство «Харвест» 1997 г.
  2.  Под ред. Курочкина В.М. «Язык компьютера» Издательство «Мир» 1989 г.
  3.  Морозов В.П. «Алгоритмические языки» Издательство «Статистика» 1975 г.
  4.  Баррон Д. «Введение в языки программирования» Издательство «Мир» 1980 г.
  5.  Pl/1 Фролов Г.Д. «Практический курс программирования на языке PL-1» Издательство «Наука» 1983 г.
  6.  Кауфман В.Ш. «Языки программирования. Концепции и принципы» Издательство «Радио и связь» 1993 г.
  7.  У. Клоксин, К. Меллиш «Программирование на языке Пролог» Издательство «Мир» 1987 г.
  8.  Романовского И.В. «Начальный курс программирования на языке Форт» Издательство «Финансы и Статистика» 1990 г.
  9.  Фаронов В.В. «Turbo Pascal 7.0» Издательство «Нолидж» 1997 г.
  10.  Марченко А.И. «Программирование на языке Obgect Pascal 2.0» Издательство «Юниор» 1998 г.
  11.  Под ред. Фьюэра А.Р. «Языки программирования Ада, Си, Паскаль» Издательство «Радио и связь» 1989 г.
  12.  Д. Флэнэген «JAVA in a nutsell «Издательство «BHV» 1997 г.
  13.  Информатика. Базовый курс. 2-е издание. Под редакцией Симоновича. Издательство “Питер” 2004г.
  14.  Ваулин А.С “Языки программирования” 1993 г.

СПИСОК ДЛЯ ТРЕНИРОВКИ ССЫЛОК

  • Формы государственного устройства (Основные признаки федеративного государства)
  • Основные функции в системе менеджмента (Функции менеджмента )
  • Юридическая ответственность(Теоретические основы понятия «юридическая ответственность)
  • Юридическая ответственность (Анализ критериев классификации юридической ответственности)
  • Добросовестная и недобросовестная ценовая конкуренция (Понятие ценовых войн)
  • Определение, основные задачи, функции бухгалтерского учета (Задачи и функции бухгалтерского учета)
  • Отладка и тестирование программ: основные подходы и ограничения (Определение основных понятий тестирования программных систем)
  • ГОСУДАРСТВО КАК ОРГАНИЗАЦИЯ ПОЛИТИЧЕСКОЙ ВЛАСТИ
  • Органы государственного управления (Понятие органа государства и его признаки)
  • Органы государственного управления
  • Особенности планирования на современном производственном предприятии болганов Владимир игоревич ДБМ-302:УП
  • Моделирование предметной области «Учет продаж» с помощью UML (Основные понятия объектно-ориентированного подхода)

Курсовая работа: Языки программирования. Обзор, возможности, достоинства, недостатки

Оглавление

1. Понятие о языках программирования. 3

2. Компиляторы и интерпретаторы. 3

3. Уровни языков программирования. 5

4. Языки низкого уровня. 6

4.1 Ассемблер. 6

5. Обзор языков программирования высокого уровня. 7

5.1 Фортран. 7

5.2 Кобол. 7

5.3 Алгол. 8

5.4 Паскаль. 8

5.5 Бейсик. 9

5.6 Си. 9

5.7 Си++. 10

6. Список литературы: 12

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

Понятие о языках программирования.

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

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

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

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

Компиляторы и интерпретаторы.

Что же нужно, чтобы «создать язык программирования»?

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

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

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

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

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

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

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

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

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

Уровни языков программирования.

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

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

Языки низкого уровня мало похожи на нормальный, привычный человеку язык. Большие, грамосткие программы на таких языках пишутся редко. Зато если программа будет написана на таком языке, то она будет работать быстро, занимая маленький объем и допуская минимальное количество ошибок. Чем ниже и ближе к машинному уровень языка, тем меньше и конкретнее задачи, которые ставятся перед каждой командой.

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

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

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

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

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

Достоинства языков программирования высокого уровня :

· алфавит языка значительно шире машинного, что делает его гораздо более выразительным и существенно повышает наглядность и понятность текста;

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

· конструкции операторов задаются в удобном для человека виде;

· поддерживается широкий набор типов данных.

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

Языки низкого уровня.

Ассемблер.

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

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

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

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

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

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

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

Фортран.

Фортран – исторически первый компилируемый язык программирования, разработанный в 1954-1958 г.г. Джимом Бекусом. Базовые принципы, заложенные в основу этого языка, впоследствии легли в основу многих других языков программирования высокого уровня.

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

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

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

Кобол.

Кобол – компилируемый язык программирования для «делового» применения. Этот язык программирования был разработан в 1959-1961 г.г. прежде всего для исследований в экономической сфере. Язык позволяет эффективно работать с большим количеством данных, он насыщен разнообразными возможностями поиска, сортировки и распределения.

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

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

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

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

Алгол.

Алгол – компилируемый язык программирования, впервые опубликованный в 1960 г.

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

Паскаль.

Паскаль – компилируемый язык программирования, созданный в 1968-1970 г.г. в Швейцарском Федеральном институте технологии в Цюрихе Никласом Виртом.

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

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

Достоинства языка Паскаль:

· простота языка позволяет быстро его осваивать и создавать алгоритмически сложные программы;

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

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

· наличие специальных методик создания трансляторов с Паскаля упростило их разработку и способствовало широкому распространению языка;

· возможность создавать достаточно сложные и мобильные (т. е. легко переносимые на другие PC) программы.

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

Бейсик.

Бейсик – интерпретируемый язык, хотя существуют некоторые версии, для которых имеются компиляторы. Он был создан в 1963 г. при непосредственном участии в его разработке американцев Джона Кемени и Томаса Курца.

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

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

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

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

Си.

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

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

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

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

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

Си – переносимый и мобильный язык.

Си – мощный и гибкий язык. Большая часть операционной системы Unix, компиляторы и интерпретаторы языков Фортран, Паскаль и Бейсик написаны именно с его помощью.

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

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

Характерным недостатком языка стала относительно высокая сложность изучения по сравнению с языками Паскаль и Бейсик.

Си++.

Язык Си++ был разработан в 1980 г. Бьерном Страуструпом в компании BellLabs.

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

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

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

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

Язык Си++ является средством объектного программирования, новейшей методики проектирования и реализации программ, которая в текущем десятилетии, скорее всего, заменит традиционное процедурное программирование.

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

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

1. Под редакцией Конюховского П.В. и Колесова Д.Н., «Информатика», Санкт-Петербург: изд-во «Питер», 2000.

2. К.Г.Скрипкин, «Экономическая эффективность информационных систем», Москва: изд-во «ДМК-Пресс», 2002.

3. Сухомлин В.А., «Введение в анализ информационных технологий» Москва: изд-во «Горячая линия – Телеком», 2003.


Подборка по базе: Методические рекомендации к заданиям по дисциплине Возрастная фи, Маслов Юрий Валерьевич (Организация, управление проектно-изыска, бизнес проект Кофейня.docx, 1 Проект ТЗ_3 СКС СМЭУ в новой редакции.doc, Исследовательский проект учащихся 7 класса по теме _Математика в, ЗАДАНИЕ К СЕМИНАРУ №2 по дисциплине Цифровая экономика.docx, Задание к семинару №1 по дисциплине Теория систем и системный а, Управление проектной командой.pdf, Управление проектами.pdf, Задания по дисциплине Делопроизводство Лекция т. 11.1 Соломатина


МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«МОСКОВСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
(МОСКОВСКИЙ ПОЛИТЕХ)
Факультет информационных технологий

Кафедра «Прикладная информатика»Направление: 09.03.01 Информатика и вычислительная техника _Профиль: Программное обеспечение средств вычислительной техники и автоматизированных систем _Форма обучения: заочная

КУРСОВОЙ ПРОЕКТ

по дисциплине

Программирование _

на тему

«Разработка программного обеспечения для суммы нечетных элементов массива под микропроцессоры Intel на архитектуре x86 »

Выполнил студент группы

183-321 /Е.Д.Лапшин /

(подпись) И.О. Фамилия
Руководитель

курсового проекта

ст. преп./доцент/профессор /

А.В. Осипов /

(подпись) И.О. Фамилия

Оценка ______________

Дата

29.11.2021

МОСКВА 2021

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«МОСКОВСКИЙ ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
(МОСКОВСКИЙ ПОЛИТЕХ)
Факультет информационных технологий

Кафедра «Прикладная информатика»Направление: 09.03.01 Информатика и вычислительная техника _Профиль: Программное обеспечение средств вычислительной техники и автоматизированных систем__Форма обучения: заочная
З А Д А Н И Е на КУРСОВУЮ РАБОТУ

по дисциплине « Микропроцессорные устройства систем управления »
на тему «Разработка программного обеспечения для нахождения
суммы нечетных элементов массива под микропроцессоры Intel на архитектуре х86»
выдано студенту группы .183-321 Лапшину Егору Дмитриевичу

(фамилия, имя, отчество)

Исходные данные Задан массив int a {1,-2,3,-40,5}. Нужно найти сумму элементов
элементов массива, которые являются нечетными

Содержание пояснительной записки (перечень подлежащих разработке вопросов)

Методы сортировки и их реализации
Перечень графического материала Рисунки 1-3.2, блок-схема
Дата сдачи курсового проекта на проверку руководителю 5 декабря 2021 года
Дата выдачи задания 15 ноября 2021 года

Руководитель КП

Уч. степень, уч. звание _______________ /

Осипов А.В. /

( подпись) И.О. Фамилия
Задание принял к исполнению __________ /

Лапшин Е.Д. /

(подпись) И.О. Фамилия

Оглавление

Введение 4

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

1.1 История языка ассемблера 7

1.2. Программирование на языке ассемблер 9

1.3. Достоинства и недостатки 11

2.Теоретическая часть 14

2.1. Ассемблер 14

3. Проектная часть 15

3.1. Алгоритм Евклида 15

Перечень выполнимых проектных решений: 17

Заключение 18

Список использованной литературы 19

Приложения 20

Введение

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

Каждый персональный компьютер имеет микропроцессор, который управляет арифметической, логической и контрольной активностью.
Каждая семья процессоров имеет свой собственный набор инструкций для обработки различных операций, таких как получения ввода с клавиатуры, отображение информации на экране и выполнения различных других работ. Этот набор инструкций называется «инструкции машинного языка» (‘machine language instructions’).
Процессор понимает только инструкции машинного языка, которые являются строками из единиц и нулей. При этом машинный язык слишком непонятный и сложный для использования его в разработки программного обеспечения. И низкоуровневый язык Ассемблер предназначен для определённый групп процессоров, он представляет различные инструкции в символическом коде и более понятной форме.

Преимущества языка Ассемблер

Знание языка ассемблера позволяет понять:

  • Как программы взаимодействуют с ОС, процессором и BIOS;
  • Как данные представлены в памяти и других внешних устройствах;
  • Как процессор обращается к инструкции и выполняет её;
  • Как инструкции получают доступ и обрабатывают данные;
  • Как программа обращается к внешним устройствам.

Другие преимущества использования ассемблера:

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

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

Задачи курсовой работы:

  1. Разработать ПО для нахождения наибольшего общего делителя двух чисел;
  2. Найти сумму нечетных элементов массива int a[]={1,-2,3,-40,5};
  3. Вывести результат

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

1.1 История языка ассемблера

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

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

Морис Уилкс назвал мнемоническую схему для «Эдсака» и библиотеку подпрограмм собирающей системой (по-английски assembly system – отсюда слово «ассемблер»), поскольку она собирала последовательности подпрограмм.

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

Довольно скоро стало понятно, что процесс формирования машинного кода можно автоматизировать. Уже в 1950 году для записи программ начали применять мнемонический язык – язык assembly. Язык ассемблера позволил представить машинный код в более удобной для человека форме: для обозначения команд и объектов, над которыми эти команды выполняются, вместо двоичных кодов использовались буквы или сокращенные слова, которые отражали суть команды. Например, на языке ассемблера команда сложения двух чисел обозначается словом add, тогда как ее машинный код может быть таким: 000010. Запись программы на языке ассемблера фактически является тем же машинным кодом, только представленным с помощью специальных обозначений.

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

1.2. Программирование на языке ассемблер

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

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

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

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

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

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

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

Команды языка ассемблера один к одному соответствуют командам процессора, фактически, они представляют собой более удобную для человека символьную форму записи (мнемокод) команд и их аргументов. При этом одной команде языка ассемблера может соответствовать несколько вариантов команд процессора.
Кроме того, язык ассемблера позволяет использовать символические метки вместо адресов ячеек памяти, которые при ассемблировании заменяются на автоматически рассчитываемые абсолютные или относительные адреса, а также так называемые директивы (команды, не переводящиеся в процессорные инструкции, а выполняемые самим ассемблером).
Директивы ассемблера позволяют, в частности, включать блоки данных, задать ассемблирование фрагмента программы по условию, задать значения меток, использовать макроопределения с параметрами.
Каждая модель (или семейство) процессоров имеет свой набор команд и соответствующий ему язык ассемблера. Наиболее популярные синтаксисы — Intel-синтаксис и AT&T-синтаксис.
Существуют компьютеры, реализующие в качестве машинного язык программирования высокого уровня (Forth, Lisp, Эль-76); фактически, в них он является языком ассемблера.

1.3. Достоинства и недостатки

Достоинства:

  • При достаточной квалификации программиста, язык ассемблера позволяет писать самый быстрый и компактный код. Возможно, даже лучше, чем генерируемый трансляторами языков более высокого уровня.
  • Если код программы достаточно большой, данные, которыми он оперирует, не помещаются целиком в регистрах процессора, то есть частично или полностью находятся в оперативной памяти, то искусный программист, как правило, способен значительно оптимизировать программу по сравнению с высокоуровневыми трансляторами по одному или нескольким параметрам: скорость работы (за счёт оптимизации вычислений и/или более рационального обращения к ОП, перераспределения данных), объём кода (в том числе за счёт эффективного использования промежуточных результатов).
  • Обеспечение максимального использования специфических возможностей конкретной платформы, что также позволяет создавать более эффективные программы с меньшими затратами ресурсов.
  • При программировании на языке ассемблера возможен непосредственный доступ к аппаратуре, в том числе портам ввода-вывода, регистрам процессора и др.
  • Язык ассемблера применяется для создания драйверов оборудования и ядра операционной системы.
  • Язык ассемблера используется для создания «прошивок» BIOS.
  • С помощью языка ассемблера создаются компиляторы и интерпретаторы языков высокого уровня, а также реализуется совместимость платформ.
  • Существует возможность исследования других программ с отсутствующим исходным кодом с помощью дизассемблера.

Недостатки:

  • В силу машинной ориентации («низкого» уровня) языка ассемблера человеку сложнее читать и понимать программу на нём по сравнению с языками программирования высокого уровня; программа состоит из слишком «мелких» элементов — машинных команд, соответственно, усложняются программирование и отладка, растёт трудоёмкость, велика вероятность внесения ошибок.
  • Требуется высокая квалификация программиста. Код на ассемблере выполняется быстрее, но написанный неопытным программистом, обычно оказывается хуже сгенерированного компилятором.
  • Как правило, меньшее количество доступных библиотек по сравнению с современными индустриальными языками программирования.
  • Отсутствует переносимость программ на компьютеры с другой архитектурой и системой команд.

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

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

2.Теоретическая часть

2.1. Ассемблер

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

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

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

3. Проектная часть

3.1. Алгоритм Евклида

Классический алгоритм Евклида применяется к паре неотрицательных целых чисел. Пока ни одно из чисел в паре не равно нулю, из большего числа вычитается меньшее; вычитаемое и полученная разность формируют новую пару. Действие повторяется, пока один из элементов пары не обратится в 0, тогда значение другого будет равно искомому НОД.
Рекурсивная формулировка классического алгоритма:
НОД(a, 0) = a

НОД(a, b) = НОД(a, a − b) при a ≥ b

НОД(a, b) = НОД(b, b − a) при a < b
Несложно заметить, что последовательное вычитание из большего числа меньшего, пока разность не станет меньше вычитаемого, соответствует нахождению остатка от деления большего числа на меньшее. На этом основан так называемый быстрый алгоритм Евклида: в паре чисел одно число делится с остатком на второе; делитель и полученный остаток формируют новую пару. Действие повторяется, пока один из элементов пары не обратится в 0, тогда значение другого будет равно искомому НОД.
Рекурсивная формулировка быстрого алгоритма:
НОД(a, 0) = a

НОД(a, b) = НОД(b, ОСТАТОК(a / b))

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

Если одно из чисел в паре равно нулю, а другое — нет, то их НОД равен модулю ненулевого числа.

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

Подавляющее большинство языков программирования представляют отрицательные целые числа в так называемом дополнительном коде, при этом у наименьшего отрицательного значения типа отсутствует парное положительное значение (например наименьшее значение 16-битного знакового целого — −32768, а наибольшее — 32767). Следовательно вычисление НОД с применением наименьшего значения знакового типа может вызывать переполнение и давать неверные результаты.

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

Перечень выполнимых проектных решений:

  1. Разработали ПО для нахождения суммы нечетных элементов массива;
  2. Найти сумму нечетных элементов массива int a[]={1,-2,3,-40,5};
  3. Вывод результата

Заключение

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

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

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

Список использованной литературы

  1. Касвандс Э. Г. Введение в программирование на языке Ассемблер. ч. 1 — М. : ЮНИТИ — ДАНА, 2006.
  2. Юров В. Assembler. Специальный справочник. — СПб. : Питер, 2007.
  3. Что такое ассемблер. [Электронный ресурс]. — Режим доступа: http://www.assembler.webservis.ru
  4. Ваулин А. С. Языки программирования. кн. 5 — М. : Школа-Пресс, 2008.
  5. Малютин Э. А. Языки программирования. — М. : Просвещение, 2008.
  6. Абель П. Язык Ассемблера для IBM PC и программирования /Пер. с англ. Ю. В. Сальникова — М. ; Высшая школа 2007 — 447 с. : ил.
  7. Программируем на ассемблере. [Электронный ресурс]. — Режим доступа: http://www.kalashnikoff.ru
  8. Зубков С. В. Assembler для DOS, Windows и Unix. — М. : ИНФРА-М, 2009.

Приложения

Приложение №1

Листинг

section .text

global _start ; должно быть объявлено для линкера (ld)

_start:

mov eax,5 ; кол-во значений типа byte для выполнения операции сложения

mov ebx,0 ; EBX будет хранить сумму

mov ecx, x ; ECX будет указывать на текущий элемент для выполнения операции сложения

top: add ebx, [ecx]

add ecx,1 ; перемещаем указатель на следующий элемент

dec eax ; выполняем декремент счетчика

jnz top ; если счетчик не равен 0, то тогда выполняем цикл еще раз

done:

add ebx, ‘0’

mov [sum], ebx ; готово, сохраняем результат в переменной sum

display:

mov edx,1 ; длина сообщения

mov ecx, sum ; сообщение для вывода на экран

mov ebx, 1 ; файловый дескриптор (stdout)

mov eax, 4 ; номер системного вызова (sys_write)

int 0x80 ; вызвать ядро

mov eax, 1 ; номер системного вызова (sys_exit)

int 0x80 ; вызвать ядро

section .data

global x

x:

db 1

db 3

db 5

sum:

db 0

Приложение №2

Результаты программы

Рис 3.1

Язык программирования и его виды

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

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

Низкоуровневый
язык программирования (язык программирования
низкого уровня) — язык программирования,
близкий к программированию непосредственно
в машинных кодах используемого реального
или виртуального (например, Java,
Microsoft
.NET)
процессора. Для обозначения машинных
команд обычно применяется мнемоническое
обозначение. Это позволяет запоминать
команды не в виде последовательности
двоичных нулей и единиц, а в виде
осмысленных сокращений слов человеческого
языка (обычно английских).

Языки программирования низкого уровня

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

Рис.1.
Пример машинного кода и представления
его на ассемблере

Трансляторы
делятся на:

  • компиляторы
    — превращают текст программы в машинный
    код, который можно сохранить и затем
    использовать уже без компилятора
    (примером являются исполняемые файлы
    с расширением *. exe);

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

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

Преимущества

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

Недостатки

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

  • результирующая
    программа не может быть перенесена на
    компьютер или устройство с другим типом
    процессора;

  • значительное
    время разработки больших и сложных
    программ.

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

Ассемблер
— язык низкого уровня, что широко
применяется до сих пор.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Министерство образования и науки РФ
ФГБОУ и ВПО «МГТУ»

Институт Энергетики и Автоматизированных Систем

РЕФЕРАТ
по дисциплине: Информатика.
Тема: Поколения языков программирования. Языки низкого и высокого уровня. Понятия Транслятора и компилятора.

Выполнил:

Проверил:

Магнитогорск
2014 г.

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

Языки программирования принято делить на пять поколений.
Первое поколение:
К первому поколению (англ. first-generation programming language, 1GL) относят машинные языки — языки программирования на уровне команд процессора конкретной машины. Для программирования не использовался транслятор, команды программы вводились непосредственно в машинном коде переключателями на передней панели машины. Такие языки были хороши для детального понимания функционирования конкретной машины, но сложны для изучения и решения прикладных задач.
Начало 1950-х годов — язык первых компьютеров. Первый язык ассемблера, созданный по принципу «одна инструкция — одна строка».
Основная отличительная особенность: ориентирование на конкретный компьютер.

Термины «первое поколение» и «второе поколение» были введены одновременно с термином «третье поколение». Фактически, эти термины в то время не использовались. С появлением языков высокого уровня, языки ассемблера стали относить к первому поколению языков.

Второе поколение:
Языки второго поколения (2GL) создавались для того, чтобы облегчить тяжёлую работу по программированию, перейдя в выражениях языка от низкоуровневых машинных понятий ближе к тому как обычно мыслит программист. Эти языки появились в 1950-е годы, в частности, такие языки как Фортран и Алгол. Наиболее важной проблемой, с которыми столкнулись разработчики языков второго поколения, стала задача убедить клиентов что код созданный компилятором выполняется достаточно хорошо, чтобы оправдать отказ от программирования на ассемблере. Скептицизм по поводу возможности создания эффективных программ с помощью автоматических компиляторов был довольно распространён, поэтому разработчикам таких систем должны были продемонстрировать, что они действительно могут генерировать почти такой же эффективный код как и при ручном кодировании, причём практически для любой исходной задачи.

Основная отличительная особенность: ориентирование на абстрактный компьютер с такой же системой команд.

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

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

Основная отличительная особенность языка третьего поколения: ориентирование на алгоритм (алгоритмические языки).

Примеры: Си, Паскаль, Джава, Бейсик, и многие другие.

Всего в мире существует около 200 популярных языков программирования третьего уровня.

Четвертое поколение:
Термин языки программирования четвёртого поколения (4GL) лучше представлять как среды разработки четвёртого поколения. Они относятся к временному периоду с 1970-х по начало 1990-х.

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

Основная отличительная особенность языка четвертого поколения: приближение к человеческой речи (декларативные языки).

Часто относят: SQL, SGML ( HTML, XML ), Prolog, и многие другие узкоспециализированных декларативных языков. Правда ряд языков, которые относят к четвертому поколению, не являются языками программирования как таковыми. Например SQL является языком запросов к базам данных, HTML является языком разметки гипертекста, а не полноценными языками программирования, скорее они выступают своеобразными специализированными дополнениями к языкам программирования. Тоже самое касается XML.

Пятое поколение:
Пятого поколения языков программирования пока не существует.

Производители пропроиетарних программных продуктов часто пытаются приписать своим продуктам какие маркетинговые особенности, и порой указывают что их продукт — это «язык пятого поколения». В действительности, все эти продукты — это просто среды для ускоренного создания продуктов (Rapid Application Development — RAD), и используют языки третьего и четвертого поколений.

Речь пятого поколения вытеснит ли существенно потеснит языка третьего (напр. Java) и четвертого поколения (например SQL) за счет значительно увеличенной производительности труда программиста — в 10-1000 раз. По прогнозам, 5GL будет оперировать мета-мета-данными.

Сейчас существует единственный язык, который работает с мета-мета-данными, — это язык команд менеджеров пакетов или менеджеров зависимостей, таких как apt, yum, smart, maven, cpan и другие. Они оперируют над метаданными о метаданных о данных в пакетах. Использование apt-get, yum и smart действительно чрезвычайно повысило производительность системных администраторов — примерно в 1000-и дело. Использование менеджеров зависимостей, таких как maven, cpan, rakudo, pim, easy_install, действительно значительно повысило производительность программистов, примерно в 10-ть раз. К сожалению, эти языки являются языками командной строки и не являются языками программирования.

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

Высокоуровневые языки программирования были разработаны для платформенной независимости сути алгоритмов. Зависимость от платформы перекладывается на инструментальные программы — трансляторы, компилирующие текст, написанный на языке высокого уровня, в элементарные машинные команды (инструкции). Поэтому, для каждой платформы разрабатывается платформенно-уникальный транслятор для каждого высокоуровневого языка, например, переводящий текст, написанный на Delphi в элементарные команды микропроцессоров семейства x86.

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

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

Примеры: C++, C#, Java, JavaScript, Python, PHP, Ruby, Perl, Паскаль, Delphi, Лисп. Языкам высокого уровня свойственно умение работать с комплексными структурами данных. В большинстве из них интегрирована поддержка строковых типов, объектов, операций файлового ввода-вывода и т. п.

Первым языком программирования высокого уровня считается компьютерный язык Plankalkül, разработанный немецким инженером Конрадом Цузе ещё в период 1942—1946 годах. Однако транслятора для него не существовало до 2000 года. Первым в мире транслятором языка высокого уровня является ПП (Программирующая Программа), он же ПП-1, успешно испытанный в 1954 году.

Транслятор ПП-2 (1955 год, 4-й в мире транслятор) уже был оптимизирующим и содержал собственный загрузчик и отладчик, библиотеку стандартных процедур, а транслятор ПП для ЭВМ Стрела-4 уже содержал и компоновщик (linker) из модулей. Однако, широкое применение высокоуровневых языков началось с возникновением Фортрана и созданием компилятора для этого языка (1957).

Переносимость программ.
Распространено мнение, что программы на языках высокого уровня можно написать один раз и потом использовать на компьютере любого типа. В действительности же это верно только для тех программ, которые мало взаимодействуют с операционной системой, например, выполняют какие-либо вычисления или обработку данных. Большинство же интерактивных (а тем более мультимедийных) программ обращаются к системным вызовам, которые сильно различаются в зависимости от операционной системы. Например, для отображения графики на экране компьютера программы под Microsoft Windows используют функции Windows API, которые отличаются от используемых в системах, поддерживающих стандарт POSIX. Чаще всего для этих целей в них используется программный интерфейс X-сервера.

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

Низкоуровневый язык программирования.
Низкоуровневый язык программирования — язык программирования, близкий к программированию непосредственно в машинных кодах используемого реального или виртуального (например, Java, Microsoft .NET) процессора. Для обозначения машинных команд обычно применяется мнемоническое обозначение. Это позволяет запоминать команды не в виде последовательности двоичных нулей и единиц, а в виде осмысленных сокращений слов человеческого языка (обычно английских).

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

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

Также к языкам низкого уровня условно можно причислить CIL, применяемый в платформе Microsoft .NET, Форт, Байт-код Java.

Понятия Транслятора и Компилятора.

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

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

Язык, на котором представлена входная программа, называется исходным языком, а сама программа — исходным кодом. Выходной язык называется целевым языком или объектным кодом.

В общем случае, понятие трансляции относится не только к языкам программирования, но и к другим языкам — как формальным компьютерным (вроде языков разметки типа HTML), так и естественным (русскому, английскому и т. п.)

Трансляторы подразделяют:
• Диалоговый. Обеспечивает использование языка программирования в режиме разделения времени.
• Синтаксически-ориентированный (синтаксически-управляемый). Получает на вход описание синтаксиса и семантики языка и текст на описанном языке, который и транслируется в соответствии с заданным описанием.
• Однопроходной. Формирует объектный модуль за один последовательный просмотр исходной программы.
• Многопроходной. Формирует объектный модуль за несколько просмотров исходной программы.
• Оптимизирующий. Выполняет оптимизацию кода в создаваемом объектном модуле.
• Тестовый. Набор макрокоманд языка ассемблера, позволяющих задавать различные отладочные процедуры в программах, составленных на языке ассемблера.
• Обратный. Для программы в машинном коде выдаёт эквивалентную программу на каком-либо языке программирования (см.: дизассемблер, декомпилятор).

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

Компилятор — программа, выполняющая компиляцию.

Виды Компиляторов:
• Векторизующий. Транслирует исходный код в машинный код компьютеров, оснащённых векторным процессором.
• Гибкий. Сконструирован по модульному принципу, управляется таблицами и запрограммирован на языке высокого уровня или реализован с помощью компилятора компиляторов.
• Диалоговый. См.: диалоговый транслятор.
• Инкрементальный. Повторно транслирует фрагменты программы и дополнения к ней без перекомпиляции всей программы.
• Интерпретирующий (пошаговый). Последовательно выполняет независимую компиляцию каждого отдельного оператора (команды) исходной программы.
• Компилятор компиляторов. Транслятор, воспринимающий формальное описание языка программирования и генерирующий компилятор для этого языка.
• Отладочный. Устраняет отдельные виды синтаксических ошибок.
• Резидентный. Постоянно находится в оперативной памяти и доступен для повторного использования многими задачами.
• Самокомпилируемый. Написан на том же языке, с которого осуществляется трансляция.
• Универсальный. Основан на формальном описании синтаксиса и семантики входного языка. Составными частями такого компилятора являются: ядро, синтаксический и семантический загрузчики.

Список используемой литературы:
1.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *