4860

Развитие языков программирования. Роль С++ в контексте современного программирования

Лекция

Информатика, кибернетика и программирование

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

Русский

2012-11-28

49.5 KB

2 чел.

Развитие языков программирования. Роль С++ в контексте современного программирования.

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

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

- сложить два числа;

- проверить, не является ли число нулем;

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

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

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

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

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

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

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

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

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

Широкое распространение языков высокого уровня началось с 60х годов XX века с возникновением языка FORTRAN и созданием компилятора для этого языка. Язык FORTRAN (formula translator) создавался для решения задач вычислительной математики и до сих пор применяется во многих научно-исследовательских организациях. Существует большое количество специализированных библиотек, реализующих множество численных методов решения задач из самых разных областей математики.

Язык C (предшественник С++) появился в начале 70х годов XX века (К. Томпсон, Д. Ритчи) в качестве языка, ориентированного на разработку операционных систем – особых программных комплексов, выполняющих роль прослойки между аппаратурой и прикладными программами. Операционные системы находятся на отдельном уровне иерархии компьютерных систем и решают задачи управления ресурсами компьютера, облегчения и согласования доступа прикладных программ к периферийным устройствам, реализуют сетевое взаимодействие между компьютерами и др. Программистов, занимающихся разработкой операционных систем, часто называют системными программистами.

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

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

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

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

В результате, был организован комитет по стандартизации С++, взявший на себя задачу формализовать правила языка и определить требования, которым должны следовать все разработчики трансляторов языка. В 1998 году был опубликован стандарт ISO/IEC 14882:1998 (известный как С++98). В стандарте были зафиксированы основные положения языка и описан состав стандартной библиотеки, дополняющей базовую функциональность языка. На сегодняшний день, развитие стандарта С++ продолжается.

Несмотря на высокий «порог вхождения» и достаточно большой возраст языка, на сегодняшний день С++ очень широко используется в индустрии программирования благодаря большому количеству различных библиотек, достаточно высокой производительности программ а также широким возможностям, предоставляемых программисту – С++ реализует множество различных парадигм программирования. Однако, некоторые существенные сложности, связанные с программированием на С++, породили несколько популярных языков-потомков (Java, C#, D), во многом делающих  работу программиста более комфортной и имеющих свои хорошо очерченные области применения, однако С++ по-прежнему остается признанным фундаментальным инструментом, при должном отношении позволяющим решать задачи самого широкого круга.


программа на исходном языке

рограмма на целевом языке

транслятор

исполнение

программа на исходном языке

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

исполнение


 

А также другие работы, которые могут Вас заинтересовать

12187. СИРОВИННІ МАТЕРІАЛИ МАРТЕНІВСЬКОГО ВИРОБНИЦТВА 1.09 MB
  1 СИРОВИННІ МАТЕРІАЛИ МАРТЕНІВСЬКОГО ВИРОБНИЦТВА Шихтові матеріали поділяються на металеві і неметалічні. До металевої частини шихти відносяться: чавун брухт розкислювачі і легуючі добавки; до неметалічної – залізна і марганцева руда окалина агломерат вапняк і ва...
12188. ОСОБЛИВОСТІ ПОБУДОВИ ЗЛИВКІВ СПОКІЙНОЇ, КИПЛЯЧОЇ ТА НАПІВСПОКІЙНОЇ СТАЛЕЙ 797.5 KB
  ОСОБЛИВОСТІ ПОБУДОВИ ЗЛИВКІВ СПОКІЙНОЇ КИПЛЯЧОЇ ТА НАПІВСПОКІЙНОЇ СТАЛЕЙ Особливості побудови зливка спокійної сталі Звичайна структура зливка спокійної сталі рис. 7.1 характеризується наступними основними зонами. Зона 1. Тонкий поверхневий шар що утвор
12189. ВИЗНАЧЕННЯ ВМІСТУ ВУГЛЕЦЮ В СТАЛІ ЗА ДОПОМОГОЮ КАРБОМЕТРУ ALPHA 1.03 MB
  ВИЗНАЧЕННЯ ВМІСТУ ВУГЛЕЦЮ в СТАЛІ ЗА ДОПОМОГОЮ карбометру ALPHA Ціль роботи: вивчити методи контролю вмісту вуглецю в сталі; освоїти один з фізичних методів визначення вуглецю в сталі. Теоретичне введення Перед проведенням лабораторної роботи студент зобовя
12190. ХРОНОМЕТРАЖ ПЛАВКИ В СТАЛЕПЛАВИЛЬНОМУ АГРЕГАТІ 31.5 KB
  ХРОНОМЕТРАЖ ПЛАВКИ В СТАЛЕПЛАВИЛЬНОМУ АГРЕГАТІ Мета роботи: 1. Вивчити конструкцію сталеплавильного агрегату. 2. Ознайомитись з організацією робіт сталеплавильного агрегату. 3. Вивчити технологію плавки в сталеплавильному агрегаті. Перед проведенням ла...
12191. Определение порядка реакции по мурексиду и ката¬лизатору (кислоте) 282.69 KB
  Цель работы: определение порядка реакции по мурексиду и катализатору кислоте; определение константы диссоциации слабой кислоты путем кинетических измерений. Схема установки Рис. 1. Общий вид прибора где 1 – узел светофильтров 2 – узел кюветодержателя 3 – и
12192. Ознакомиться с оптическим методом изучения кинетики реакции; определить порядок реакции по сахару к катализатору 151 KB
  Цель работы: ознакомиться с оптическим методом изучения кинетики реакции; определить порядок реакции по сахару к катализатору; определить среднюю константу скорости. Схема установки Рис. 1. Схема поляриметра где 1 – источник света 2 – светофильтр 34 – поляр
12193. Определить частные и общий кинетический порядок реакции 31.15 KB
  Цель работы: определить частные и общий кинетический порядок реакции Fe3I→Fe2I Рабочие формулы где: n1 – частный порядок реакции по ионам железа n2 – частный порядок реакции по йодидионам где: n – общий порядок реакции. Таблица 1 Экспериментальны
12194. Установить зависимость удельной и эквивалентной электропроводности электролита от концентрации и температуры 29 KB
  Цель работы: установить зависимость удельной и эквивалентной электропроводности электролита от концентрации и температуры. Рабочие формулы где: k постоянная сосуда RKCl сопротивление раствора KCl ‒ удельная электропроводность раствора KCl ...
12195. ОПРЕДЕЛЕНИЕ ПОКАЗАТЕЛЯ ПРЕЛОМЛЕНИЯ СТЕКОЛ 89.5 KB
  PAGE 3 ОПРЕДЕЛЕНИЕ ПОКАЗАТЕЛЯ ПРЕЛОМЛЕНИЯ СТЕКОЛ Определение показателя преломления стекол: методические указания по выполнению лабораторной работы № 63 по курсу Физика для студентов инженернотехнических специальностей / Курск гос. техн. унт; сост.: Л...