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), во многом делающих  работу программиста более комфортной и имеющих свои хорошо очерченные области применения, однако С++ по-прежнему остается признанным фундаментальным инструментом, при должном отношении позволяющим решать задачи самого широкого круга.


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

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

транслятор

исполнение

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

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

исполнение


 

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

10166. Периодизация развития техники как философская проблема. Основные способы периодизации развития техники 50.5 KB
  Периодизация развития техники как философская проблема. Основные способы периодизации развития техники. Закономерности исторического развития техники. Проблема периодизации. Предметная сторона Т. Техника и наука. Т как деятельность. ФТ выделяе...
10167. Взаимоотношение науки и техники на различных этапах эволюции техники 50 KB
  Взаимоотношение науки и техники на различных этапах эволюции техники Они не всегда были взаимосвязаны Т долгое время развивалась независимо от всякой науки. Это не означает что в технике не применялись научные знания. Доинженерный период. Но наука не имела дисциплин
10168. Техногенная цивилизация, ее история и перспективы 108 KB
  Техногенная цивилизация ее история и перспективы. Информационное общество – это высшая стадия развития техногенной цивилизации. Для характеристики его места в истории вернемся к общим представлениям о развитии культуры. С т.з. современной социальной философии сущ
10169. Чернобыльская радиация в вопросах и ответах 735.41 KB
  Когда в СССР сообщили об аварии на Чернобыльской АЭС Первая информация об аварии прозвучала в программе Время вечером 27 апреля, первая публикация в печати состоялась 28 апреля...
10170. Информационное общество как тип социальной организации 58 KB
  Информационное общество как тип социальной организации. Оценка сущности последней стадии в социальной философии ХХ в. претерпела эволюцию. Первоначально она характеризовалась как постиндустриальное общество Д. Белл технотронное общество З. Бжезинский. В 80х г...
10171. Проблема личности в информационном обществе 150 KB
  Проблема личности в информационном обществе Таким образом можно составить обобщенный свод проблем личности в информационном обществе. 1. Проблемы общения. С одной стороны благодаря Интернету мир превратился в мировую деревню: термин ввел в 70е гг. Маклюэн: все д...
10172. Гуманитарная философия техники. Льюис Мэмфорд: миф машины 44.5 KB
  Гуманитарная философия техникиИнженерная философия техники анализ техники как бы изнутри и – в конечном счете – интерпретация технического способа бытия человека в мире как парадигматического главного для понимания других типов человеческого мышления и действия мог
10173. Ортега-и-Гассет Х. 31.5 KB
  Х. Ортегаи-Гассет. Испанский философ Хосе Ортегаи-Гассет 18831955 в связи с анализом техники указывал на двойственность человека – он отличен от природы и вместе с тем посредством техники он с ней сливается. По мысли Ортегии-Гассета современный мир сделали возможным тр...
10174. Смысл техники в философии Карла Маркса 41.5 KB
  Смысл техники в философии Карла Маркса О смысле техники и ее роли в человеческой истории философы много спорили. Широкое распространение получил марксистский подход который отождествлял технику с объективацией некоторых природных свойств в инструментальных целях тр