Файл: История возникновения и развития языка программирования Си (С++) и Java.(История возникновения языка C).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 24.04.2023

Просмотров: 236

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Введение

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

Языку программирования свойственные две связанные между собой цели: он дает программисту аппарат для того, чтобы задать действия, которые должны быть выполнены, и формируются концепции, используемые программистом, размышляя о том, что делать. Ответом на первую цель является язык, который настолько «близкий к машине», что все основные машинные аспекты могут легко и просто быть использованы для программиста очевидным образом. Для ответа на вторую цель идеальным является язык, который настолько «близкий к решаемой задаче», чтобы её концепция решения может быть выражена коротко и прямо. В настоящее время C++ считают господствующим языком, который используют для того, чтобы разработать коммерческие программные продукты. За последние годы данное господство поколебалось так как были аналогичные претензии от такого языка как Java, но при этом общественное мнение качнулось в другую сторону, и множество из программистов, которые бросили C++ ради Jаvа, за последнее время вернулись к своей прежней привязанности. При этом оба языка являются похожими, что, если вы изучаете один из них, то автоматически усваиваете 90% другого.

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

  • изучить источники информации по теме;
  • узнать историю языков Си (C++) и Java;
  • рассмотреть развитие языков Си (C++) и Java.

Объектом исследования являются объектно-ориентированные языки программирования С (C++) и Java, предметом – их история, эволюция и потенциал Выполненная работа состоит из введения, трех глав и заключения.

1. История возникновения языка C


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

Следует более подробно рассмотреть особенности языка С:

  1. Академичность. С(++) – классический язык, ознакомление начинающего программиста с которым вооружит его необходимой логикой объектно-ориентированного программирования и значительно упростит вхождение в прочие среды разработки, например, C#, где родственный синтаксис, нативная среда, встраиваемость позволят гораздо быстрее сориентироваться в новых условиях.
  2. Кроссплатформенность. Диалекты, версии, модификации существуют для каждой платформы.
  3. Минималистичность синтаксиса. Достаточно лаконичные записи и выражения обуславливают конкретность инструкций. Впрочем, с появлением языка Python данный пункт следует поправить на «относительная минималистичность».
  4. Диалектичность. С эволюцией языка C стали появляться новые операторы, призванные упростить написание инструкций. А открытость среды позволила добавить собственные операторы. Сразу же вспоминается история SQL, когда элементарный по сути и, практически, естественный язык с добавлением операторов и с каждой новой версией превратился в итоге в усложненное семейство диалектов с сотнями новых операторов в каждом.
  5. Эффективность. Следует отметить, что достаточно лаконичный синтаксис и эффективный компилятор способны произвести программы с высокой скоростью работы и небольшого размера.

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

Язык программирования C был разработан в начале 1970-х годов как язык реализации системы для зарождающейся операционной системы Unix. Происходя из языка без типов BCPL, он развил их структуру. Созданный на крошечной машине в качестве инструмента для улучшения скудной среды программирования, он стал одним из ключевых языков современности.

Конец 1960-х оказался бурной эпохой развития компьютерных систем в BellTelephoneLaboratories. Компаниявышлаизпроекта Multics, которыйначиналсякаксовместноепредприятие Massachusetts Institute of Technology, General Electric и Bell Labs. К 1969 неформальная группа проекта, возглавляемая Кеном Томпсоном, начала исследовать альтернативные решения.


Томпсон хотел создать удобную вычислительную среду, построенную в соответствии с его собственным вкусом и использованием всех доступных средств и инноваций проекта Multics, включая явное представление о процессе как о локусе управления, иерархическую файловую систему, интерпретатор команд на уровне пользователя, простое представление текстовых файлов и общий доступ к устройствам. Томпсон столкнулся с жесткой и скудной аппаратной средой даже на то время: DECPDP-7, на котором он начал свою работу в 1968 году, представлял собой машину с 8000 18-битными словами памяти и без какого-либо программного обеспечения. Желая использовать язык более высокого уровня, он написал оригинальную систему Unix на ассемблере PDP-7.

Ассемблер Томпсона PDP-7 превзошел даже DEC. Не было ни библиотек, ни загрузчика, ни редактора ссылок: весь исходный код программы был предоставлен ассемблеру, а полученный выходной файл с фиксированным именем был непосредственно исполняемым.

Вскоре после первого запуска Unix на PDP-7, в 1969 году, ДагласМакилрой создал первый язык высокого уровня для новой системы: реализацию TMG, языка для написания в стиле нисходящего рекурсивного спуска, который объединяет синтаксическую нотацию без контекста с процедурными элементами.

Попробовав компиляторМакилроя, Томпсон решил, что Unix нуждается в языке системного программирования. После провала Фортрана он создал собственный язык, который он назвал B, который уже чем-то походил на C, но без использования типов. А точнее, это был BCPL, сжатый до 8 Кбайт памяти и переосмысленный Томпсоном. Его названиепроисходит от Bon, несвязанного языка, созданного Томпсоном во времена Multics.

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

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


В 1971 году Томпсон начал расширять язык B, добавив символьный тип, а также переписал его компилятор для генерации машинных инструкций вместо многопоточного кода. Таким образом, переход от B к C был совмещен с созданием компилятора, способного создавать небольшие программы достаточно быстро, чтобы конкурировать с ассемблером. Новый язык был назван «Новым B» - NB.

NB существовал настолько кратко, что не было написано полное описание. Он предоставляет типы int и char, их массивы и указатели на них.

int i, j;

char c, d;

int iarray [10];

int ipointer [];

сhar сarray [10];

charcpointer [];

Семантика массивов осталась точно такой же, как в B и BCPL: объявления iarray и carray создают ячейки, динамически инициализируемые со значением, указывающим на первое из последовательности из 10 целых чисел и символов соответственно. Значения, хранящиеся в ячейках, привязанных к именам массивов и указателей, были машинными адресами, измеренными в байтах, соответствующей области хранения. Следовательно, косвенное обращение к указателю подразумевает отсутствие затрат времени выполнения для масштабирования указателя от смещения до байта.

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

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

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

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


Многие другие изменения произошли в 1972-1973 годах, но самым важным было введение препроцессора, отчасти по настоянию Алана Снайдера, но также в знак признания полезности механизмов включения файлов, доступных в BCPL и PL/I. Его оригинальная версия была чрезвычайно простой и содержала только включенные файлы и простые замены строк: #include и#define-макросов без параметров. Вскоре после этого он был расширен, главным образом Майком Леском, а затем Джоном Рейзером, для включения макросов с аргументами и условной компиляцией. Препроцессор изначально считался необязательным дополнением к самому языку. Действительно, в течение нескольких лет он даже не вызывался, если исходная программа не содержала специального сигнала в своем начале. Такое отношение сохранялось довольно долго и объясняет как неполную интеграцию синтаксиса препроцессора с остальным языком, так и неточность его описания в ранних справочных руководствах.

К началу 1973 года основы современного языка С были завершены. И он, и компилятор были достаточно сильны, чтобы позволить переписать ядро ​​Unix для PDP-11 на C. Написание ядра Unix на C вселило в Томпсона достаточную уверенность в полезности и эффективности языка, и он с коллегами начал перекодировать системные утилиты и инструменты, а затем перенести наиболее интересные из них на другие платформы. Команда обнаружила, что самые сложные проблемы при распространении инструментов Unix заключаются не во взаимодействии языка C с новым оборудованием, а в адаптации к существующему программному обеспечению других операционных систем. Таким образом, Стив Джонсон начал работать над новым компилятором для С – pcc, а Томпсон переносил переписанный Unix на машину Interdata 8/32.

Успех эксперимента по переносимости на Interdata 8/32 вскоре привел к использованию машины DECVAX 11/780. Эта машина стала намного более популярной, чем Interdata, и Unix, и язык C начали быстро распространяться как внутри AT&T, так и за пределами компании. Хотя к середине 1970-х годов Unix использовался различными проектами в системе BellSystem, а также небольшой группой ориентированных на исследования промышленных, академических и государственных организаций за пределами нашей компании, его реальный рост начался только после того, как была достигнута определенная его переносимость. Особо следует отметить версии системы SystemIII и SystemV из нового подразделения AT&TComputerSystems, основанные на работе групп разработчиков и исследователей компании.

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