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


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

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

транслятор

исполнение

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

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

исполнение


 

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

11987. Управління кредитним портфелем комерційного банку (на прикладі ВАТ АБ Укргазбанк) 1.39 MB
  Дипломна робота Управління кредитним портфелем комерційного банку на прикладі ВАТ АБ Укргазбанк Зміст Вступ 1. Теоретичні основи формування кредитної політики комерційного банку 1.1 Економічна природа та роль ринкових досліджень в діяльності комерційного...
11988. Формування та використання прибутку комерційного банку (на прикладі АКБ «Надра») 324.09 KB
  110 Дипломна робота Формування та використання прибутку комерційного банку на прикладі АКБ Надра Зміст Вступ 1. Теоретичні аспекти процесу формування та використання прибутку комерційного банку 1.1 Сутність і функціональне призначення бан
11990. Развития банковской системы РФ 1.48 MB
  Оглавление Введение Глава 1. Банковская система РФ ее сущность функции и структура 1.1 Понятие и признаки банковской системы 1.2 Правовой статус и функции Центрального Банка РФ 1.3 Деятельность кредитных организаций Глава 2. Анализ деятельности банков России 2.1...
11991. Мероприятия по сокращению просроченной задолженности по кредитам юридических лиц 356.53 KB
  ВЫПУСКНАЯ КВАЛИФИКАЦИОННАЯ РАБОТА Мероприятия по сокращению просроченной задолженности по кредитам юридических лиц Содержание Введение 1. Теоретические основы процесса кредитования юридических лиц коммерческими банками 1.1 Основные понятия и сущность
11992. Сутність ресурсної бази банків України 782.58 KB
  Содержание Вступ Розділ I. Теоретикометодологічні основи аналізу організації ресурсної бази банків 1.1 Сутність та значення ресурсної бази банку 1.2 Класифікаційні ознаки та види банківських ресурсів 1.3 Методи та організаційні принципи формування банківських р
11993. Пластиковые карты, как один из видов банковского продукта 776.66 KB
  Тема: Пластиковые карты как один из видов банковского продукта Содержание Введение 1.Экономическая сущность пластиковых карт 1.1 Понятие банковского продукта 1.2 Пластиковые карты как банковский продукт 1.3 Принципы работы пластиковых карт 2. Особенности
11995. Пластиковые карты: проблемы и перспективы их внедрения в коммерческом банке (по материалам Поволжского банка ОАО Сбербанка России) 694 KB
  Выпускная квалификационная работа Пластиковые карты: проблемы и перспективы их внедрения в коммерческом банке по материалам Поволжского банка ОАО Сбербанка России Введение Современное развитие рынка финансовых услуг оказываем...