Файл: История возникновения и развития языка программирования C++ и Java.pdf
Добавлен: 03.07.2023
Просмотров: 161
Скачиваний: 3
Введение
Важнейшим понятием языка программирования являются идентификаторы. Идентификаторы используются для обозначения переменных и функций. В языке Си идентификаторы представляют собой последовательность букв латинского алфавита, символов подчеркивания и десятичных цифр. Первым символом в идентификаторе должна быть буква.
На сегодняшний момент язык Java является одним из самых распространенных и популярных языков программирования. Первая версия языка появилась еще в 1996 году в недрах компании Sun Microsystems, впоследствии поглощенной компанией Oracle. Java задумывался как универсальный язык программирования, который можно применять для различного рода задач. И к настоящему времени язык Java проделал большой путь, было издано множество различных версий. Текущей версией является Java 8, официальный релиз которой произошел в марте 2014 года. А Java превратился из просто универсального языка в целую платформу и экосистему, которая объединяет различные технологии, используемые в целого ряда задач: от создания десктопных приложений до написания крупных веб-порталов и сервисов. Кроме того, язык Java активно применяется для создания программного обеспечения для целого ряда устройств: обычных ПК, планшетов, смартфонов и мобильных телефонов и даже бытовой техники. Достаточно вспомнить популярность мобильной ОС Android, большинство программ для которой пишутся именно на Java.
Ключевой особенностью языка Java является то, что его код сначала транслируется в специальный байт-код, независимый от платформы. А затем этот байт-код выполняется виртуальной машиной JVM (Java Virtual Machine). В этом плане Java отличается от стандартных интерпретируемых языков как PHP или Perl, код которых сразу же выполняется интерпретатором. В то же время Java не является и чисто компилируемым языком, как С или С++.
Подобная архитектура обеспечивает кроссплатформенность и аппаратную переносимость программ на Java, благодаря чему подобные программы без перекомпиляции могут выполняться на различных платформах Windows, Linux, Solaris и т.д. Для каждой из платформ может быть своя реализация виртуальной машины JVM, но каждая из них может выполнять один и тот же код.
Java является языком с Си-подобным синтаксисом и близок в этом отношении к C/C++ и C#. Поэтому, если вы знакомы с одним из этих языков, то овладеть Java будет легче.
Еще одной ключевой особенностью Java является то, что она поддерживает автоматическую сборку мусора.
Java является объектно-ориентированным языком. Он поддерживает полиморфизм, наследование, статическую типизацию. Объектно-ориентированный подход позволяет решить задачи по построению крупных, но в тоже время гибких, масштабируемых и расширяемых приложений.
Цель работы – изучить историю возникновения и развития языка программирования Си (С++) и Java.
Задачи исследования:
1. изучить развитие языка С++;
2. определить стиль написания программы С++;
3. охарактеризовать особенности языка Java;
4. рассмотреть рограммное обеспечение.
Глава 1. История языка С++
1.1. Развитие языка С++
Одним из наиболее известных, сильно повлиявших на дальнейшее развитие информационных технологий и широко используемых до сих пор языков программирования является Си. На его основе были созданы такие наиболее популярные в настоящее время в индустрии программирования языки, как С++, С#, Java, PHP, Objective C и др. При этом можно сказать, что, в отличие от многих других языков, созданных в рамках серьезных инвестиционных программ правительств или крупных корпораций (PL/I, Кобол, Java) или родившихся в стенах исследовательских лабораторий в качестве проверки научной концепции (Smalltalk, Клу, Q и др.), Си появился на свет в результате «хулиганства». В начале 1970-х годов молодые системные программисты (программисты, создающие операционные системы и другие служебные программы) Деннис Ритчи и Кен Томпсон, работавшие в американской корпорации AT&T, были в числе других сотен разработчиков задействованы в большом проекте создания многозадачной многопользовательской операционной системы, что нашло свое отражение в названии — MULTICS. Согласно одной из легенд, Ритчи и Томпсон в свободное от работы время были не прочь поиграть. Особенно им полюбилась игра Space Travel, которую они сами написали и запускали на главном сервере компании. Позднее они захотели перенести ее на вспомогательный компьютер PDP-7, собиравший пыль в их комнате. Но он, к сожалению, не имел операционной системы [2, c. 133].
Что делают системные программисты, если им хочется запустить на компьютере игру, но на нем отсутствует операционная система? Правильно, пишут операционную систему. Название Unix как отсылка к MULTICS (противопоставление на английском слова «уникальный», «единственный» слову «мульти», «множественный») появилось в 1970 году как шутка Брайана Кернигана — намек на то, что новая система поддерживала лишь пользователя Томпсона и поэтому должна носить название Un-multiplexed Information and Computing Service. Все очевиднее становилось, что изначально устаревшая PDP-7, накладывающая множество раздражающих ограничений на работу операционной системы, не сможет удовлетворять нуждам дальнейшего развития, как и вся серия машин PDP-7. При этом надеяться на разрешение закупки нового оборудования со стороны руководства не приходилось. Один из сотрудников, увлекавшийся обработкой текстов на компьютере, предложил схитрить и попросить у начальства новейший микрокомпьютер PDP-11 компании DEC для создания инструментов редактирования и форматирования текста. То, что для создания этих инструментов потребуется написать операционную систему, указывалось как сноска.
Запрашиваемая сумма была куда меньше, чем раньше — всего 65 тыс. долларов. Не сразу, но начальство согласилось, и в 1970 году был сделан заказ на PDP-11 [3, c. 109].
Все усложнявшаяся операционная система была переписана на новую машину. Перенос оказался непростой задачей, поскольку система была написана полностью на ассемблере. В связи с этим возникла идея переписать операционную систему на язык высокого уровня. В распоряжении авторов имелся язык программирования BCPL. Его разработал Мартин Ричардс в 1966–1967 годах, когда посещал Массачусетский технологический институт. Это была несколько упрощенная версия языка CPL (Cambridge Programming Language).
Первоначально компилятор BCPL был реализован для операционных систем GECOS и MULTICS. Томпсон и Ритчи несколько его 76 усовершенствовали, назвав сначала B (читается «би»), и затем NB. По сути, B был синтаксически видоизмененным BCPL, который Томпсону удалось втиснуть в 8 Кбайт памяти. Почему язык получил такое имя?
Существует две гипотезы его происхождения: от первой буквы либо BCPL, либо другого языка Томпсона — Bon, названного в честь его жены Бонни. Язык B был, фактически, языком промежуточного уровня. Как и BCPL, он бестиповый, работающий со словом (ячейкой машинной памяти), содержащим фиксированное число разрядов, как в ассемблере.
Память при этом рассматривается как линейный массив слов, а значение ячейки можно интерпретировать как индекс в этом массиве.
Для подобного доступа BCPL использует оператор !, а язык B — оператор.
В связи с тем, что B не давал использовать все возможности PDP-11, на который программисты хотели перенести систему, было решено создать еще один улучшенный язык программирования. Переход от B к Си происходил одновременно с созданием компилятора, способного порождать довольно быстрые и компактные программы, не слишком уступавшие в скорости по сравнению с ассемблером. Деннис Ритчи вспоминает: «Я назвал несколько расширенный язык NB — «новый B» (new B)». В язык NB Ритчи ввел первые типы — int и char. Вместе с массивами и указателями они составили его систему типов. Откуда появилось название Си? Ритчи разъясняет это так: «Создав систему типов, соответствующий синтаксис и компилятор для нового языка, я почувствовал, что он заслуживает нового имени: NB показалось мне недостаточно четким. Я решил следовать однобуквенному стилю и назвал его C (Си), оставляя открытым вопрос, являлось ли после B это следующей буквой в алфавите или в названии BCPL». Надо сказать, что при создании Си активно использовалась «самораскрутка», когда язык используется для создания собственного транслятора. Сначала на ассемблере пишется поддержка минимального набора конструкций и возможностей реализуемого языка, затем полученный минимальный язык применяется разработчиком для реализации еще какой-либо возможности и т. д. Успех Си был неразрывно связан с тем, что в одном месте в одно и то же время появились сразу три шедевра, ставших культовыми: язык программирования Си, операционная система UNIX и мини-компьютер PDP-11 (в Советском Союзе аналогом PDP-11 были ЭВМ семейств СМ-4 и СМ-1420). Кен Томпсон считает: «Наше сотрудничество было образцом совершенства. За те десять лет, что мы проработали вместе, можно вспомнить только один случай нескоординированной работы. Я тогда обнаружил, что мы написали одинаковую ассемблерную программу из 20 строк. Я сравнил наши тексты и поразился, обнаружив, что они совпадают 77 посимвольно. Результат нашей совместной работы получился намного более значительным, чем вклад нас обоих по отдельности» [4, c. 101].
К 1973 году язык Си стал довольно силен, большая часть ядра UNIX, первоначально написанная на ассемблере PDP-11, была переписана на Си. Это одно из самых первых ядер операционных систем, написанное на языке, отличном от ассемблера. Более ранними были лишь MULTICS, запрограммированная на ПЛ/1, и TRIPOS, использовавшая BCPL. Таким образом, Си — язык, созданный системными программистами для своих нужд. Это серьезнейшим образом сказалось на некоторых его особенностях: Язык имеет низкоуровневые возможности, позволяющие непосредственно работать с машинными ячейками, в том числе битовые операции и так называемую адресную арифметику. В связи с этим некоторые ученые относят Си к языкам промежуточного, а не высокого уровня. Си позволяет создавать высокоэффективные — быстрые и не требующие больших объемов памяти программы.
Язык Си отличается минимализмом и лаконичностью программ. В отличие от языков, специально создававшихся для первоначального обучения программированию, таких как BASIC (Beginners All-purpose Symbolic Instruction Code — многоцелевой язык символических инструкций для начинающих) или Паскаль, Си дает программисту большие возможности, развязывет ему руки. Но за большую свободу, как известно, приходится платить большей ответственностью. При программировании на Си можно допустить такие ошибки, которые в Паскале невозможны. Брайан Керниган говорит: «Си — инструмент, острый, как бритва: с его помощью можно создать и элегантную программу, и кровавое месиво». В связи со сравнительно низким уровнем языка многие случаи неправильного использования опасных элементов не обнаруживаются ни при компиляции, ни во время исполнения. Это часто вызывает непредсказуемое поведение программы.
Иногда в результате неграмотного использования элементов языка появляются уязвимости. Примером ошибки является обращение к несуществующему элементу массива. Си не имеет проверки индексов массивов (проверки границ). Например, возможна запись в шестой элемент массива из пяти элементов, что, естественно, приведет к непредсказуемым результатам.
Похожей является ошибка переполнения буфера. Для того чтобы помочь программирующим на Си решить эти и многие другие проблемы, было создано большое число отдельных от компиляторов инструментов. Такими инструментами являются программы дополнительной проверки исходного текста программы и поиска распространенных ошибок (статические анализаторы), а также библиотеки, предоставляющие дополнительные функции, не входящие в стандарт языка. Во многих учебниках по языкам программирования традиционным началом изучения языка является написание на нем программы приветствия, выводящей на экран сообщение «Здравствуй, мир!» [12, c. 13].
1.2. Стиль написания программы С++
Следует обратить внимание на стиль написания программы, в том числе использование вертикальных и горизонтальных отступов для отделения логически значимых частей текста друг от друга (при этом отступы образуют лесенку). Правильный стиль необходим также для того, чтобы программа была более понятной и ясной для человека, включая и самого автора — по прошествии некоторого времени! С точки зрения языка программирования Си пробелы несущественны (игнорируются). Удобство восприятия и «прозрачность» программы для человека — один из главных факторов успеха крупных современных профессиональных программных проектов, в которых задействуется множество участников и создаются тысячи и десятки тысяч строк программ. Обратите также внимание на то, что при написании операторов и стандартных функций языка Си используются строчные, а не прописные буквы [10, c. 131].
Что же содержится в следующей строке? В ней пока не встречаются инструкции, непосредственно относящиеся к выводу приветствия на экран. Нам придется сделать довольно длительное отступление и погрузиться в особенности построения программ на языке программирования Си. Как уже говорилось, почти в любом современном языке программирования помимо собственно перечня выполняемых действий программа в обязательном порядке содержит еще несколько секций.
Например, программа на языке Си может содержать так называемые директивы препроцессора, которые обычно идут в начале текста программы и, чтобы отличаться от собственно операторов программы, начинаются с символа # (диез). Препроцессор — это специальная программа, обрабатывающая текст программы до того, как он передается транслятору, и осуществляющая некоторые предварительные действия над ним в соответствии с заданными директивами. Препроцессор имеет возможность обрабатывать ряд других директив, включая обработку макроподстановок, то есть замену в тексте программы специально введенных макроимен так называемыми макрорасширениями (блоками текста), при необходимости — параметрическую замену с указанием или вычислением изменяющихся параметров.
Простейший случай макроподстановки — эмулирование констант, например: #define PI 3.1415926 После этого все вхождения последовательности символов PI в тексте программы будут заменены препроцессором на цепочку символов 3.1415926. Необходимо обратить внимание на то, что замена осуществляется чисто механически — это не настоящая константа в смысле, принятом в языках программирования, в частности, не проводится контроль типов данных. Все же в Си одна из главных задач директив — указание, какие из библиотек (предварительно кем-то разработанных наборов программ, выполняющих полезные функции) будут использованы в программе.