Файл: История возникновения и развития языка программирования Си (С++) и Java (ПРОГРАММИРОВАНИЕ НА С И С++)..pdf
Добавлен: 02.04.2023
Просмотров: 221
Скачиваний: 1
Для того, чтобы иметь возможность успешной конкуренции на рынке бытовой электроники, фирмы должны воспринимать процессоры в роли обычного товара, который в любую минуту можно заменить другим, более дешевым, и предоставить возможность обеспечить обратную совместимость и соблюдение стандартов, которые установлены на устройства длительного использования, будь то тостер, или телевизор [7].
Беря во внимание произношение в русском языке, мы видим, что образовались две разные нормы данного языка - заимствованная англоязычная джава» и традиционно - национальная «ява», которая соответствует принятому произношению названия острова Ява. Компания Sun придерживается первого варианта - англоязычного произношения везде. Иногда в обычной жизни применяют и жаргонное слово «Жаба» (например, изображение жабы есть на календариках группы российских пользователей Java (JavaUsersGroup) [7].
Java - это название не только самого языка, но и платформы для создания и исполнения приложений на основе данного языка.
Изначально язык назывался Oak («дуб») и разрабатывался, как было отмечено выше, Джеймсом Гослингом для программирования бытовых электронных устройств. Затем он был переименован в Java и стал применяться для написания клиентских приложений и серверного ПО. Название было дано в честь марки кофе Java, который так любили некоторые программисты, поэтому на официальной эмблеме языка и изображена чашка с дымящимся кофе. Существует, конечно, и другая версия происхождения названия Java, а именно - Java - это сленговое обозначение кофе (по имени одноименного острова, где производится популярный кофе) с аллюзией на кофе-машину, как пример бытового устройства, для программирования чего и изначально язык создавался [18].
Гослинг не хотел связывать разработку с определенной платформой, поэтому он начал с расширения компилятора С++. Со временем пришло понимание, что как ни расширяй С++, все равно он не сможет никогда удовлетворить один все существующие потребности. Результатом этого понимания явилось создания языка Oak (позже при поиске торговой марки его название было изменено на Java). "В конце концов, язык - это средство, а не самоцель, - поясняет Гослинг. - Мы не собирались зацикливаться на С++, а хотели разработать систему, которая позволяла бы создавать большую распределенную разнородную сеть из бытовых электронных устройств, способных взаимодействовать между собой Джон Родли Создание Java-апплетов [18].
В конце 1992 года, предприняв, по выражению тогдашнего инженера проекта Патрика Нотона, "огромные усилия по доработке Oak и других компонентов", коллектив проекта "Green" выпустил "*7" - устройство типа PDA, названное Гослингом "ручным пультом дистанционного управления".
"За полтора года мы сделали столько же, сколько иные большие коллективы в Sun делали за три года, - с гордостью отмечает Нотон. - Операционную систему GreenOS, язык, инструментарий, пользовательский интерфейс, новую аппаратную платформу, три заказных микросхемы... и каждый этап был связан с риском, т.к. мы использовали совершенно новые технологии"[18].
30-летний Нотон до прихода в команду Green возглавлял проект Sun по разработке пользовательской среды Open Window.
Малогабаритность устройства *7 выставляла в выгодном свете компактность и эффективность кода, который являлся ядром технологии. Этот продукт широко демонстрировали в Sun, он смог произвести впечатление на таких важных людей, как Скотт Макнили и Билл Джой, однако что случилось с ним потом, осталось неизвестным [8].
Гослинг считал, что браузер является таким компонентом, который "создает рынок" для всех инструментальных средств, серверов и сред разработки. И именно язык Java во всех этих средствах играет центральную, главенствующую роль. До появления Java страница WWW по факту представляла собой листок бумаги. С появлением Java браузер задает структуру и резко расширяет возможности провайдеров содержания.
Гослинг полагал, что технология Java предоставит людям возможность переосмыслить роль вычислений клиент-сервер. В стандартной модели вы имеете конкретные базы данных, пишете пакеты клиентского программного обеспечения, который имеет возможность взаимодействия с ними, и создаете какой-то интерфейс". В границах этой модели трудно создавать распределенные системы и осуществлять их модернизацию, в частности, если их элементы имеют разное происхождение, указывает Гослинг [6].
Если иметь инструментальные средства как Java и Web, мы можем получить изначально организованную систему - подчеркивает Гомслинг. "Если вы создаете на языке Java клиентскую часть приложения, его запуск сводится всего лишь к переходу на соответствующую страницу. Инсталляция примитивна - просто поместите необходимое программное обеспечение на Web-сервер [9]. И не возникнет никаких проблем с переносом, в силу того, что присутствует только одна версия приложения". Многие фирмы, по словам Гослинга, уже организуют БД в виде Web-страниц с применением интерфейса Common Gateway Interface (CGI) - специфического стандарта для работы внешних программ на сервере HTTP.
Программы на Java транслируются в байт-код, которые выполняет виртуальная машина Java (JVM) - программа, которая обрабатывает байтовый код и передает далее инструкции оборудованию в роли интерпретатора [5].
Достоинство подобного способа выполнения программ в том, что существует полная независимость байт-кода от ОС и оборудования, что дает возможность выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Следующей немаловажным достоинством технологии Java можно отметить полный контроль исполнения программы виртуальной машиной.
Операции, превышающие лимиты установленных полномочий программы - будь то попытка несанкционированного доступа к данным или соединения с другим ПК - приводят к немедленному прерыванию [23].
Часто к недостаткам данной концепции виртуальной машины относят то, что исполнение байт-кода виртуальной машиной может достаточно снизить производительность программ и алгоритмов, которые реализованы на языке Java. В последнее время были внесеныбольшое число усовершенствований, которые смогли улучшить скорость выполнения программ на Java:
- применение технологии трансляции байт-кода в машинный код непосредственно во время работы программы (JIT-технология) с одновременным сохранением версий класса в машинном коде [23];
- широкое применение платформенно-ориентированного кода (native-код) в стандартных библиотеках;
- аппаратные средства, которые обеспечивают ускоренную обработку байт-кода (например, технология Jazelle, которая поддерживается некоторыми процессорами фирмы ARM) [19].
По данным сайта shootout.alioth.debian.org, для 7 разных задач время выполнения на Java составляет в среднем в 1,5-2 раза больше, чем для C/C++, а в некоторых случаях Java даже быстрее, а в отдельных случаях в 7 раз медленнее. С другой стороны, для большинства из них потребление памяти Java-машиной было в 10-30 раз больше, чем программой на C/C++. Также примечательно исследование, проведённое компанией Google, согласно которому отмечается существенно более низкая производительность и большее потребление памяти в тестовых примерах на Java в сравнении с аналогичными программами на C++ [19].
Идеи, которые лежат в основе концепции и различных реализациях среды виртуальной машины Java, дали вдохновение для множества энтузиастов на расширение перечня языков, которые можно было бы использовать для создания программ, которые исполняли на виртуальной машине. Эти идеи нашли также выражение в спецификации общеязыковой инфраструктуры CLI, заложенной в основу платформы.NET компанией Microsoft.
Основные возможности:
- автоматическое управление памятью;
- расширенные возможности обработки исключительных ситуаций;
- богатый набор средств фильтрации ввода/вывода;
- набор стандартных коллекций, таких как массив, список, стек и т. п. [10];
- наличие простых средств создания сетевых приложений (в том числе с использованием протокола RMI);
- наличие классов, позволяющих выполнять HTTP-запросы и обрабатывать ответы;
- встроенные в язык средства создания многопоточных приложений;
- унифицированный доступ к базам данных:
- на уровне отдельных SQL-запросов - на основе JDBC, SQLJ;
- на уровне концепции объектов, обладающих способностью к хранению в базе данных - на основе Java Data Objects и Java Persistence API;
- поддержка шаблонов (начиная с версии 1.5);
- параллельное выполнение программ [10].
Алфавит языка Java состоит из букв, десятичных цифр и специальных символов. Буквами считаются латинские буквы (кодируются в стандарте ASCII), буквы национальных алфавитов (кодируются в стандарте Unicode, кодировка UTF-16), а также соответствующие им символы, кодируемые управляющими последовательностями. Буквы и цифры можно использовать в качестве идентификаторов (т.е. имен) переменных, методов и других элементов языкапрограммирования. Правда, при использовании в идентификаторах национальных алфавитов в ряде случаев могут возникнуть проблемы - эти символы будут показываться в виде вопросительных знаков.
Как буквы рассматривается только часть символов национальных алфавитов. Остальные символы национальных алфавитов - это специальные символы. Они используются в качестве операторов и разделителей языка Java и не могут входить в состав идентификаторов [18].
Латинские буквы ASCII
· ABCD...XYZ - заглавные (прописные) ,
· abcd...xyz - строчные
Дополнительные "буквы" ASCII
· _ - знак подчеркивания,
· $ - знак доллара.
Национальные буквы на примере русского алфавита
· АБВГ…ЭЮЯ - заглавные (прописные),
· абвг…эюя - строчные
· Десятичные цифры0 1 2 3 4 5 6 7 8 9 [10].
Десятичные и шестнадцатеричные цифры и целые числа
Целые числовые константы Майкл ЭферганJava: справочник в исходном коде Java (так называемые литерные константы) могут быть десятичными или шестнадцатеричными. Они записываются либо символами ASCII, или символами Unicode следующим образом [10].
Десятичные константы записываются как обычно. Например, -137.
Шестнадцатеричная константа начинается с символов 0x или 0X (цифра 0, после которой следует латинская буква X), а затем идет само число в шестнадцатеричной нотации. Например, 0x10 соответствует ; 0x2F соответствует, и т.д. О шестнадцатеричной нотации рассказано чуть ниже [7].
Ранее иногда применялись восьмеричные числа, и в языках C/C++, а также старых версиях Java можно было их записывать в виде числа, начинающегося с цифры 0. То есть 010 означало[7].
В настоящее время в программировании восьмеричные числа практически никогда не применяются, а неадекватное использование ведущего нуля может приводить к логическим ошибкам в программе [13].
Целая константа в обычной записи имеет тип int. Если после константы добавить букву L (или l, что хуже видно в тексте, хотя в среде разработки выделяется цветом), она будет иметь тип long, обладающий более широким диапазоном значений, чем тип int.
Поясним теперь, что такое шестнадцатеричная нотация записи чисел и зачем она нужна.
Информация представляется в компьютере в двоичном виде - как последовательность бит. Бит - это минимальная порция информации, он может быть представлен в виде ячейки, в которой хранится или ноль, или единица. Но бит - слишком мелкая единица, поэтому в компьютерах информация хранится, кодируется и передается байтами - порциями по 8 бит.
Под "ячейкой памяти" будет пониматься непрерывная область памяти (с последовательно идущими адресами), выделенная программой для хранения данных. На рисунках мы будем изображать ячейку прямоугольником, внутри которого находятся хранящиеся в ячейке данные. Если у ячейки имеется имя, оно будет писаться рядом с этим прямоугольником [27].
Мы привыкли работать с числами, записанными в так называемой десятичной системе счисления. В ней имеется 10 цифр (от 0 до 9), а в числе имеются десятичные разряды. Каждый разряд слева имеет вес 10 по сравнению с предыдущим, то есть для получения значения числа, соответствующего цифре в каком-то разряде, стоящую в нем цифру надо умножать на 10 в соответствующей степени. То есть, и т.п. [17].
В программировании десятичной системой счисления пользоваться не всегда удобно, так как в компьютерах информация организована в виде бит, байт и более крупных порций. Человеку неудобно оперировать данными в виде длинных последовательностей нулей и единиц. В настоящее время в программировании стандартной является шестнадцатеричная система записи чисел. Например, с ее помощью естественным образом кодируется цвет, устанавливаются значения отдельных бит числа, осуществляется шифрование и дешифрование информации, и так далее. В этой системе счисления все очень похоже на десятичную, но только не 10, а 16 цифр, и вес разряда не 10, а 16. В качестве первых 10 цифр используются обычные десятичные цифры, а в качестве недостающих цифр, больших 9, используются заглавные латинские буквы A, B, C, D, E, F: