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


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

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

транслятор

исполнение

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

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

исполнение


 

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

24196. МЕХАНИЗМЫ СТАРЕНИЯ и ВОЗРАСТНАЯ РЕАКТИВНОСТЬ 433.5 KB
  ОБЩАЯ ГЕРОНТОЛОГИЯ МЕХАНИЗМЫ СТАРЕНИЯ и ВОЗРАСТНАЯ РЕАКТИВНОСТЬ Сущность старения как всеобщего биологического явления общая причина и общие признаки старения соотношение старения и самообновления определение старения организма количественное вычисление старения популяции закон Гомперца индивидуально биовозраст маркеры биовозрастагероморфология изменения обмена веществ при старении изменения функций при старении принципы международной герополитики геропрофилактика. СУЩНОСТЬ ЯВЛЕНИЯ СТАРЕНИЯ Старение это всеобщее...
24197. ЧАСТНАЯ ГЕРОНТОЛОГИЯ ВОЗРАСТНЫЕ ФИЗИОЛОГИЯ и БИОХИМИЯ 350.5 KB
  ОБЩАЯ ГЕРОМОРФОЛОГИЯ Для целостного организма человека характерны следующие общие проявления: уменьшение роста старческий кифоз уменьшение массы органов отложение пигментов в коже и тканях; старческий фиброз органов снижение содержания воды; удлинение аорты и резкий изгиб ее дуги извитость плотность хрупкость сосудов бедность капиллярного русла недостаточность сфинктеров сосудов варикоз застой циркуляторная гипоксия; старческий остеопороз у женщин с начала климакса и ранее; тугоподвижность суставов атрофия синовии и фиброз...
24198. ОБЩИЕ ВОПРОСЫ ПАТОФИЗИОЛОГИИ 124.5 KB
  Важнейшие составляющие ПФ: ЭТИОЛОГИЯ причины и условия возникновения болезни ПАТОГЕНЕЗ механизмы заболевания и САНОГЕНЕЗ ему противостоящий механизмы выздоровления и поддержания здоровья. ЛОКАЛИЗАЦИИ болезни сердца печени ВОЗРАСТ болезни новорожденных ПРИНЦИП ЛЕЧЕНИЯ хирургические терапевтические. Органические и функциональные без видимых структурных повреждений болезни. Болезнь имеет ДИНАМИКУ: ПЕРИОДЫ БОЛЕЗНИ: ПРЕДБОЛЕЗНЬ перенапряжение ослабленность защитных механизмов фон предрасположенность к собственно...
24199. ПАТОФИЗИОЛОГИЯ КЛЕТКИ 160 KB
  ПАТОФИЗИОЛОГИЯ КЛЕТКИ Виды клеток пути транспорта патогенного агента в клетку законы системности клетки стадии парабиоза клетки защитные системы клеток лизосомы ксенобиотики АО главные причины и общие механизмы повреждения клеток главные механизмы клеточной адаптации к повреждению виды клеточных дистрофий активные формы кислорода АФК хлора азота патологические и физиологические эффекты антиоксиданты; типовые реакции при повреждении клеточных органелл стадии повреждения клетки некробиоз гипоксический некробиоз...
24200. РАССТРОЙСТВА МЕСТНОГО КРОВООБРАЩЕНИЯ 138.5 KB
  Кровоток области: от диаметра сосуда скорости пропорциональна артериовенознной разнице давления вязкости крови. АРТЕРИАЛЬНАЯ ГИПЕРЕМИЯ активная: повышенное кровонаполнение органов тканей и их частей в результате усиленного притока крови по артериям. Признаки: расширение артериальных сосудов увеличение количества функционирующих сосудов данной области ускорение кровотока в данном регионе уменьшение артериовенозной разницы по кислороду при сохранении и увеличении кислородной доставки в ткани покраснение гиперемия области...
24201. ВОСПАЛЕНИЕ. МЕХАНИЗМЫ ВОСПАЛЕНИЯ 259.5 KB
  ВОСПАЛЕНИЕ Сущность воспаления кардинальные признаки адаптивная роль воспаления виды местные и общие процессы при воспалении причины воспаления механизмы альтерации динамика сосудистой реакции в очаге воспаления механизмы экссудации медиаторы воспаления стадии фагоцитоза значение незавершенного фагоцитоза. ФОРМЫ ВИДЫ ВОСПАЛЕНИЯ Альтеративное В. МЕХАНИЗМЫ ВОСПАЛЕНИЯ: АЛЬТЕРАЦИЯ: пусковой механизм В. Ферменты лизосом ведут к дегрануляции тучных клеток и выходу гистамина важнейший медиатор воспаления ...
24202. РАССТРОЙСТВА ТЕПЛОВОГО ОБМЕНА. ЛИХОРАДКА 168.5 KB
  Главное при гипертермии снижение теплоотдачи но и нарушения обмена утилизации энергиитепла катехоламины яды митохондриальные йодсодержащие тиреоидные гормоны. Стадии: Компенсированная развитие стрессреакции активация симпатоадреналовой и гипоталамонадпочечниковой систем усиление теплоотдачи пот гипогидратация и повышение вязкости крови выделение солей; учащение ЧД ЧСС повышение ударного ОК и МОК повышение систАД при снижении диастАД; увеличение утилизации кислорода и увеличение выделения СО2 гипокапния с...
24203. ПАТОФИЗИОЛОГИЯ ИММУНИТЕТА 163 KB
  ФИЛОГЕНЕЗ иммунитет есть на самых ранних стадиях жизни: Все ГКГ АТ всех типов Fcрецепторы клеток CD антигены Тлмф АГрецепторы Тклеток АГрецепторы Вклеток это суперсемейство генов иммуноглобулинов возникших и развивающихся вместе Схема 1 Филогенез функций иммунитета Фагоцитоз пищевойзащитный прообраз иммунитета амеба  Распознавание своечужое ГКГ губки предпочтение своего Отторжение чужого кишечнополостные имеется уже иммунная память и цитотоксичность древние Тлмф и ЕК кораллы ...
24204. Исследование регистров, хранение и преобразование многоразрядных двоичных чисел 90.5 KB
  Наиболее простыми регистрами являются регистры памяти. Схема включения регистра 74173. На отечественных схемах символом регистра служат буквы RG . Работу регистра сдвига рассмотрим на примере регистра 74195 К155ИР12 схема включения которого показана на рис.