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

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

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

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

Добавлен: 30.03.2023

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

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

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

Введение

Наиболее популярными языками программирования на данный момент остаются языки программирования: С, С++ и Java.

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

Язык Java, основанный на С++ так же явился революционным открытием, с появлением сети WWW, внеся свою лепту в развитие интернета. В технологии клиент-серверного программного обеспечения.

Существуют книги, от авторов языка к примеру: Брайан Керниган, Деннис Ритчи «Язык программирования Си» (или сокращённо K&R “C”), Бьёрн Страуструп «Язык программирования C++», так же Герберт Шилдт, известный программист и писатель.

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

Глава 1 История Unix

В конце 60-х годов Bell Telephone Laboratoriesсовместно с компанией General Electric и Массачусетским технологическим институтом организовали совместный проект, целью которого была разработка операционной системы Multics[1]. ОС должна была стать многопользовательской, чтобы обеспечить большое число пользователей удобными и мощными средствами доступа к вычислительным ресурсам, обладала многоуровневой защитой. Виртуальная память должна была иметь сегментно-страничную организацию, где с каждым сегментом связывался уровень доступа. Для того, чтобы какая-либо программа могла вызвать другую программу или обратиться к данным, располагающимся в некотором сегменте, требовалось, чтобы уровень выполнения этой программы был не ниже уровня доступа соответствующего сегмента. Ещё планировалось в ОС Multics реализовать полностью централизованную файловую систему. Это когда, файлы находятся на разных физических устройствах, а логически они присутствуют на одном диске. Т.е. в директории указан не сам файл, а ссылка (или линк) на его физическое месторасположение и, если этого файла там не оказывается, система должна была попросить вставить соответствующее устройство, содержащее этот файл. Кроме всего этого, в ОС Multics планировался большой объем виртуальной памяти, что позволяло делать имэйджи файлов из внешней памяти в виртуальную. Все попытки наладить в системе относительно дружественный интерфейс провалились. В проект было вложено много сил, денег и времени, а результат не устраивал разработчиков из Bell Labs и они оставили его[2]. Кен Томпсон и Денис Ритчи были среди участников проекта, который оставил множество наработок[3]. Считается, что именно ОС Multics послужила толчком к появлению ОС Unix.


Кен с ребятами разрабатывал новую файловую систему, дабы облегчить себе жизнь и работу. Решил опробовать свое изобретение на заброшенной машине PDP-7[4]. Результату отдел патентов AT&T дружно радовался, т.к Unix система имела ряд преимуществ перед системой используемой ранее. Томпсону этого оказалось мало и он принялся ее усовершенствовать, включив такие функции как inodes (индексный дескриптор — это структура данных в традиционных для ОС UNIX файловых системах (ФС), таких как UFS, ext4. В этой структуре хранится метаинформация о стандартных  файлах,  каталогах или других объектах файловой системы, кроме непосредственно данных и имени), подсистему управления процессами и памятью, обеспечивающую использование системы двумя пользователями в режиме TimeSharingа (разделения времени) и простой командный интерпретатор. Кен даже разработал несколько утилит под систему. Сотрудники Кена еще помнили, как они мучались над ОС Multics, поэтому в честь старых заслуг один из них - Брайан Керниган - решил назвать ее похожим именем - UNICS. Через некоторое время название сократили до UNIX.

В ноябре 1971 года был опубликован первый выпуск полноценной документации по Юниксу. В соответствии с этим и ОС была названа «Первой редакцией UNIX», написанная на ассемблере для РDР-11[5]. Включала в себя язык B и много известных комманд и утилит, в том числе cat, chdir, chmod, cp, ed, find, mail, mkdir, mkfs, mount, mv, rm, rmdir, wc, who. В основном использовалась как инструментальное средство обработки текстов для патентного отдела Bell Labs.

12 июня 1972 года Кен Томпсон и Денис Ритчи представили вторую редакцию[6]. Система была полностью переписана на языке B, созданный Томпсоном под влиянием языка BCPL.

Третья редакция, вышедшая в феврале 1973, ничем особенным не отличалась. Единственное, что Денис Ритчи с головой уйти в работу над созданием нового языка программирования, вследствие чего тот написал собственный язык, известный сейчас как С и содержавшая компилятор языка С. Он позволял расширить функции своего предшественника - B[7], а 15 октября того же года была написана четвертая редакция UNIX с переписанным на С системным ядром. Операционная система UNIX первоначально распространялась в исходных кодах на С среди университетов и лабораторий[8], а получатель мог откомпилировать исходный код на С в машинный код с помощью подходящего компилятора С. Распространение исходного кода сделало операционную систему UNIX уникальной; программист мог изменить операционную систему, а исходный код мог быть перенесен с одной аппаратной платформы на другую. В июле 1974 года вышла пятая версия UNIX полностью переписанная на С. Шестая редакция UNIX (UNIX version 6), выпущенная в 1975 году, стала первым коммерчески распространяемым Юниксом. Большая ее часть была написана на С.


В 1979 году была представлена «Седьмая редакция» (UNIX version 7) как «последняя настоящая UNIX»[9], которая включала в себя компилятор языка C, командный интерпретатор sh, систему uucp, была перенесена на 32-разрядный VAX. При этом размер ядра составлял около 40 Кбайт. Позже была полностью переписана подсистема управления оперативной и виртуальной памятью, заодно изменили интерфейс драйверов внешних устройств. Все это позволило сделать систему легко переносимой на другие архитектуры.

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

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

Глава 2 История появления языка Си

1958 году в Цюрихе, в Швейцарской высшей технической школе прошла встреча между европейскими и американскими учёными в области компьютерных наук, с целью разработки нового языка программирования, лишённого недостатков языка Fortran. Так появился язык ALGOL (расшифровывается как ALGorithmic Language)[10]. Из названия прослеживается, что язык планировался для записи математических алгоритмов. С этой точки зрения язык соответствовал необходимым требованиям совершенно, а вот с текстом были определённые проблемы. Так что, язык представлял чисто технический интерес, чем практическое применение.

ALGOL-60[11] (являющийся продолжением совершенствования своего предка), дал вдохновение Математической лаборатории Кембриджского университета и Компьютерному отделу Лондонского университета на создание нового языка. В частности, он позволял использование для более широко круга задач.

Язык CPL так и не стал популярным из-за сложности и грамоздкости, но он послужил для написания языка BCPL (Basic Combined Programming Language), в 1966 году Мартином Ричардсоном студентом Кембриджского университета[12]. Предназначенный для написания компиляторов, он сыграл важную роль из-за хорошей переносимости.


В свою очередь, язык BCPL послужил для написания языка B (Би), в 1969 году в недрах AT&T Bell Lab, людьми уже упоминавшимися в главе про ОС UNIX. Это Кен Томпсоном и Денис Ритчи. Язык B использовался для написания ранних версий UNIX и он послужил родоначальником языка С.

Язык "C" не является языком со строгими типами в смысле паскаля или алгола 68. Он сравнительно снисходителен к преобразованию данных, хотя и не будет автоматически преобразовывать типы данных с буйной непринужденностью языка PL/1. Существующие компиляторы не предусматривают никакой проверки во время выполнения программы индексов массивов, типов аргументов и т.д. [13]

Как видим язык С появился не на ровном месте, он наследует в себе наработки от разных предыдущих языков программирования.

Глава 2.1 Достоинства и недостатки

С стал первым языком высокого уровня, который смог отнять лавры у ассемблера в разработке системного программного обеспечения, особенно в мире свободного программного обеспечения, реализованного на огромном количестве аппаратных платформ[14]. И всё-таки данный язык имеет свои недостатки.

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

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

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

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


Можно с уверенностью сказать, что «плюсы» языка С по работе с любыми адресами, данными и массивами памяти, при безграмотном использовании могут обернуться «минусами».

Глава 2.2 Стандарты языка С

Широкая популярность языка С на разных платформах привела к вариациям языка. Это с тало серьёзной проблемой, при написании совместимых программ. Стало понятно, что нужна стандартизация языка С.

С89[15]

В 1983г. ANSI (Американский Национальный Комитет Стандартов) сформировал технический комитет X3J11 для создания стандарта языка C (чтобы "обеспечить недвусмысленное и машинно-независимое определение языка"). В 1989 стандарт был утвержден и ратифицирован как ANSI X3.159-1989 «Язык программирования C». Через некоторое время стандарт был принят и ISO (Международной Организацией Стандартов), чтобы стандартизовать C в международном масштабе; совместный стандарт был опубликован в 1990 году и назван ANSI/ISO 9899:1990. Дальнейшие стандарты разрабатывала уже ISO, а ANSI уже принимала их. Несмотря на это стандарт до сих пор чаще называют «ANSI C», или «C89» (чтобы отличить её от C99), а не ISO C.

C90

В 1990 году, стандарт ANSI C был принят Международной организацией по стандартизации (ISO) как ISO/IEC 9899:1990, с изменениями форматирования. Эту версию иногда называют C90. Однако, термины C89 и C90 относятся, по сути, к одному языку.

Этот стандарт был отозван как ANSI/INCITS, так и ISO/IEC.

C95

В 1995 году ISO опубликовала расширение, названное Поправкой 1, для стандарта ANSI-C. Его полное имя было ISO / IEC 9899 / AMD1: 1995 или коротко - C95. Помимо исправления ошибок были внесены изменения в языковые возможности, такие как:

• Улучшена многобайтная и широкосимвольная поддержка символов в стандартной библиотеке, введены <wchar.h> и <wctype.h>

• Добавление диграфов

• Спецификация стандартных макросов для альтернативной спецификации операторов, например and для &&

• Спецификация стандартного макроса __STDC_VERSION__

В дополнение к поправке, два технических исправления были опубликованы ISO для C90:

• ISO/IEC 9899 TCOR1 в 1995 году

• ISO/IEC 9899 TCOR2 в 1996 году

C99[16]

В марте 2000 года ANSI принял стандарт ISO/IEC 9899:1999. Этот стандарт обычно называют C99. Включает некоторые примечательные дополнения к предыдущему стандарту:

• Новые встроенные типы данных: long long, _Bool, _Complex, и _Imaginary

• Несколько новых функций основного языка, включая индексы статического массива, назначенные инициализаторы, сложные литералы, массивы переменной длины, гибкие члены массива, переменные макросы и restrict ключевое cлово