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

 

Реферат

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

24.02.2011

Федеральное Агентство по образованию Тверской колледж А.И. Коняева

Выполнила: студентка  Куценко Алла группы 2ПРС 

 

Содержание

Введение

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

Глава 2. "Системы программирования как неотъемлемая часть ЭВМ"

Глава 3. "Способы реализации языков программирования"

Глава 4. "Классификация систем и языков программирования"

Глава 5. "Стандартизация языков программирования"

Глава 6. "Развитие языков программирования"

Заключение

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

Краткий словарь  терминов

Приложение №1. "Создание инструментальных средств разработки"

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

 

 

Введение 

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

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

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

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

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

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

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

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

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

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

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

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

Цель работы - описать современные системы  программирования. 

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

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

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

Всё множество  языков программирования можно разделить  на две группы: языки низкого уровня и языки высокого уровня.

К языкам низкого  уровня относятся языки ассемблера (от англ. to assemble - собирать, компоновать). В языке ассемблера используются символьные обозначения команд, которые легко понятны и быстро запоминаются. Вместо последовательности двоичных кодов команд записываются их символьные обозначения, а вместо двоичных адресов данных, используемых при выполнении команды, - символьные имена этих данных, выбранные программистом. Иногда язык ассемблера называют мнемокодом или автокодом.

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

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

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

Глава 2. "Системы программирования как неотъемлемая часть ЭВМ"  

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

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

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

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

Глава 3. «Способы реализации языков программирования» 

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

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

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

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

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

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

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

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

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

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

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

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

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

Корпорация  подает новый язык как логическое продолжение Си и C++ для Web-приложений. Ключевыми модулями станут Common Language Runtime для C# и специальный компилятор, который преобразует текст, написанный на традиционных языках Кобол, Perl, Фортран или других, в промежуточный язык, который будет работать на новой платформе Microsoft .Net. Может появиться новое поколение компиляторов, позволяющих увеличить производительность до уровня, позволяющего убедить профессионалов в необходимости использовать 64-разрядные аппаратные архитектуры. (См. приложение№1). 

Глава 4. «Классификация языков программирования»

Машинно-ориентированные  языки 

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

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

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

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

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

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

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

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

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

Глава 5 "Стандартизация языков программирования" 

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

Типы  данных

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

Структуры данных.

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

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

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

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

Используемые  символы

Современные языки программирования рассчитаны на использование ASCII, то есть доступность  всех графических символов ASCII является необходимым и достаточным условием для записи любых конструкций языка. Управляющие символы ASCII используются ограниченно: допускаются только возврат каретки CR, перевод строки LF и горизонтальная табуляция HT (иногда также вертикальная табуляция VT и переход к следующей странице FF). Ранние языки, возникшие в эпоху 6-битных символов, использовали более ограниченный набор. Например, алфавит Фортрана включает 49 символов (включая пробел): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / () . , $ ' : .

Заметным исключением является язык APL, в котором используется очень много специальных символов. Использование символов за пределами ASCII (например, символов KOI8-R или символов Юникода) зависит от реализации: иногда они разрешаются только в комментариях и символьных/строковых константах, а иногда и в идентификаторах. В CCCP существовали языки, где все ключевые слова писались русскими буквами, но большую популярность подобные языки не завоевали (исключение составляет Встроенный язык программирования 1С:Предприятие).

Расширение  набора используемых символов сдерживается тем, что многие проекты по разработке программного обеспечения являются международными. Очень сложно было бы работать с кодом, где имена  одних переменных записаны русскими буквами, других - арабскими, а третьих -китайскими иероглифами. Вместе с тем, для работы с текстовыми данными языки программирования нового поколения (Delphi 2006, C#, Java) поддерживают Unicode. 

Глава 6. «Развитие систем и языков программирования»

Ассемблер 

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