Файл: История возникновения и развития языка программирования Си (С++) и Java (Понятие языков программирования С и С++).pdf
Добавлен: 01.04.2023
Просмотров: 86
Скачиваний: 2
Операции, превышающие пределы установленных полномочий программы-будь то попытка получить несанкционированный доступ к данным или подключиться к другому ПК-приводят к немедленному прерыванию.
К недостаткам этой концепции виртуальной машины часто относится тот факт, что выполнение байт-кода виртуальной машиной может значительно снизить производительность программ и алгоритмов, реализованных на языке Java. В последнее время было сделано большое количество улучшений, которые смогли улучшить скорость выполнения Java-программ:
- Применение технологии перевода байт-кода к машинному коду непосредственно во время работы программы (Технология JIT) с одновременным сохранением версий классов в машинном коде;
- Широкое применение кода, ориентированного на платформу (native code), в стандартных библиотеках;
- Оборудование, которое позволяет ускорить байт-кода обработки (например, Jazelle технология, поддерживаемая некоторыми процессорами ARM).
По данным сайта shootout.alioth.debian.org для 7 различных задач время выполнения на Java в среднем в 1,5-2 раза больше, чем для C / C++, а в некоторых случаях даже Java быстрее, а в некоторых случаях в 7 раз медленнее. С другой стороны, потребление памяти Java-компьютера для большинства из них было в 10-30 раз выше, чем у программы C/C++. Примечательно также Исследование, проведенное Google, согласно которому в тестовых случаях на Java производительность и потребление памяти значительно ниже по сравнению с аналогичными программами на C++.
Идеи, лежащие в основе концепции и различных реализаций среды виртуальной машины Java, вдохновили многих энтузиастов расширить список языков, которые можно использовать для создания программ, работающих на виртуальной машине. Эти идеи также были выражены в спецификации инфраструктуры общего языка CLI, которая является основой платформы.Сеть от Microsoft.
Ключевая функция:
- автоматическое управление памятью;
- расширенные функции обработки исключений;
- богатый набор инструментов ввода/вывода фильтра;
- набор стандартных коллекций, таких как массив,список, стек и т. д.;
2.2. История возникновения языка программирования Java
Рождению языка Java предшествовала достаточно интересная история. В 1990 г. создатель ПО компании Sun Microsystems Патрик Нотон (Patrick Naughton) понял, что ему надоело поддерживать сотни разнообразных интерфейсов программ, используемых в компании, и сообщил аккуратному начальнику Sun Microsystems и своему товарищу Скотту МакНили (ScottMcNealy) о своем намерении преступить действовать в бражку NeXT. МакНили, в свою очередь, попросил Нотона скомпилировать перечень причин своего недовольства и выдвинуть такое решение проблем, как если бы он был Богом и мог осуществить все, что угодно. Нотон, впрочем, не планировал на то, что некто обратит внимание на его письмо, все-таки изложил свои претензии, безжалостно раскритиковав недостатки SunMicrosystems, в частности, разрабатываемую в тот момент архитектуру ПО NeWS. К удивлению, Нотона, его уведомление получил успех: оно было разослано всем основным инженерам SunMicrosystems, которые быстро помогли своему товарищу и разрешение его взглядов на обстановку в SunMicrosystems. письмо вызвало одобрение и у высшек компании, а именно, у Билла Джоя (BillJoy), основоположника SunMicrosystems, и Джеймса Гослинга (JamesGosling), руководителя Нотона.
В тот день, когда Нотон хотел был уйти из компании, было принято постановление о создании команды ведущих разрабов с тем, чтобы они осуществляли что угодно,однакосоздали что-то необыкновенное.Команда изо шести человек, с кодовым наименованием Green, ушла в своевольное изгнание, окунувшись в исследования домашних устройств, таковых как NintendoGameBoys, устройств дистанционного управления. Команда Green старались обнаружить средство, с поддержкой которого возможно было бы установить взаимодействие среди этих устройств. Потом стало ясно, что электроприборы, как видеомагнитофоны, проигрыватели лазерных дисков, стереосистемы - все они были созданы на разннообразных процессорах.
Это означало, что, если производитель захочет добавить телевизору или видеомагнитофону добавочные функции или характеристики, он будет зажат в рамках средств, заметанных в аппаратное обеспечение. Эта проблема, в сочетании с ограниченностью памяти микросхем данных устройств, выдвинула новый путь к программированию ПО, который вынужден был стать основным на рынке бытовой электроники.
Команда приступила к разработке нового объектно-ориентированного языка программирования, который был прозван Oak (дуб), в честь дерева, вытягивавшегося под окном Гослинга. Незадолго фирма SunMicrosystems реорганизовал команду Green в компанию FirstPerson.
Свежеиспеченная фирма владела занимательнейшей концепцией, однако не имела возможности найти ей пригодного применения. Спустя ряда неудач внезапно ситуация для фирмы резко изменилась: был анонсирован Mosaic - так родился WorldWide Web, с которого стартовало неистовое формирование Internet. Нотон порекомендовал пользоваться Oak в создании Internet- приложений. Так Oak стал независимым продуктом, незадолго был написан Oak-компилятор и Oak-браузер "WebRunner". В 1995 г. фирма SunMicrosystems приняла решение провозгласить о новом продукте, переименовав его в Java (единственное благоразумное объяснение названию - привязанность программистов к кофе). Когда Java очутился в руках Internet, стало достаточным запускать Java-аплеты - незначительные программы, загружаемые посредством Internet. WebRunnerбыл переименован в HotJava и компания Netscape взошел на поддержку Java-продуктов.
2.3. Базовые понятия языка
Алфавит языка Java состоит из букв, десятичных цифр и специальных символов. Буквами считаются латинские буквы (кодируются в стандарте ASCII), буквы национальных алфавитов (кодируются в стандарте Unicode, кодировка UTF-16), а также соответствующие им символы, кодируемые управляющими последовательностями
Буквы и цифры можно использовать в качестве идентификаторов (т.е. имен) переменных, методов и других элементов языка программирования. Правда, при использовании в идентификаторах национальных алфавитов в ряде случаев могут возникнуть проблемы - эти символы будут показываться в виде вопросительных знаков.
Как буквы рассматривается только часть символов национальных алфавитов. Остальные символы национальных алфавитов - это специальные символы. Они используются в качестве операторов и разделителей языка Java и не могут входить в состав идентификаторов.
Латинские буквы ASCII
- ABCD...XYZ - заглавные (прописные) ,
- abcd...xyz - строчные
Дополнительные "буквы" ASCII
- _ - знак подчеркивания,
- $ - знак доллара.
Национальные буквы на примере русского алфавита
- АБВГ…ЭЮЯ - заглавные (прописные),
- абвг…эюя - строчные
- Десятичные цифры0 1 2 3 4 5 6 7 8 9
Десятичные и шестнадцатеричные цифры и целые числа
Майкл ЭферганJava: справочник .- QUE Corporation, 1997, Издательство "Питер Ком", 1998. - С.89.
Целые числовые константы в исходном коде Java (так называемые литерные константы) могут быть десятичными или шестнадцатеричными. Они записываются либо символами ASCII, или символами Unicode следующим образом.
Десятичные константы записываются как обычно. Например, -137.
Шестнадцатеричная константа начинается с символов 0x или 0X (цифра 0, после которой следует латинская буква X), а затем идет само число в шестнадцатеричной нотации. Например, 0x10 соответствует ; 0x2F соответствует , и т.д. О шестнадцатеричной нотации рассказано чуть ниже.
Ранее иногда применялись восьмеричные числа, и в языках C/C++, а также старых версиях Java можно было их записывать в виде числа, начинающегося с цифры 0. То есть 010 означало . В настоящее время в программировании восьмеричные числа практически никогда не применяются, а неадекватное использование ведущего нуля может приводить к логическим ошибкам в программе.
Целая константа в обычной записи имеет тип int. Если после константы добавить букву L (или l, что хуже видно в тексте, хотя в среде разработки выделяется цветом), она будет иметь тип long, обладающий более широким диапазоном значений, чем тип int.
Поясним теперь, что такое шестнадцатеричная нотация записи чисел и зачем она нужна.
Информация представляется в компьютере в двоичном виде - как последовательность бит. Бит - это минимальная порция информации, он может быть представлен в виде ячейки, в которой хранится или ноль, или единица. Но бит - слишком мелкая единица, поэтому в компьютерах информация хранится, кодируется и передается байтами - порциями по 8 бит.
Под "ячейкой памяти" будет пониматься непрерывная область памяти (с последовательно идущими адресами), выделенная программой для хранения данных. На рисунках мы будем изображать ячейку прямоугольником, внутри которого находятся хранящиеся в ячейке данные. Если у ячейки имеется имя, оно будет писаться рядом с этим прямоугольником.
Мы привыкли работать с числами, записанными в так называемой десятичной системе счисления. В ней имеется 10 цифр (от 0 до 9), а в числе имеются десятичные разряды. Каждый разряд слева имеет вес 10 по сравнению с предыдущим, то есть для получения значения числа, соответствующего цифре в каком-то разряде, стоящую в нем цифру надо умножать на 10 в соответствующей степени. То есть , и т.п.
В программировании десятичной системой счисления пользоваться не всегда удобно, так как в компьютерах информация организована в виде бит, байт и более крупных порций. Человеку неудобно оперировать данными в виде длинных последовательностей нулей и единиц. В настоящее время в программировании стандартной является шестнадцатеричная система записи чисел. Например, с ее помощью естественным образом кодируется цвет, устанавливаются значения отдельных бит числа, осуществляется шифрование и дешифрование информации, и так далее. В этой системе счисления все очень похоже на десятичную, но только не 10, а 16 цифр, и вес разряда не 10, а 16. В качестве первых 10 цифр используются обычные десятичные цифры, а в качестве недостающих цифр, больших 9, используются заглавные латинские буквы A, B, C, D, E, F:
· 0 1 2 3 4 5 6 7 8 9 A B C D E F
То есть A=10, B=11, C=12, D=13, E=14, F=15.
Заметим, что в шестнадцатеричной системе счисления числа от 0 до 9 записываются одинаково, а превышающие 9 отличаются. Для чисел от 10 до 15 в шестнадцатеричной системе счисления используются буквы от A до F, после чего происходит использование следующего шестнадцатеричного разряда. Десятичное число 16 в шестнадцатеричной системе счисления записывается как 10. Для того, чтобы не путать числа, записанные в разных системах счисления, около них справа пишут индекс с указанием основания системы счисления. Для десятичной системы счисления это 10, для шестнадцатеричной 16. Для десятичной системы основание обычно не указывают, если это не приводит к путанице. Точно так же в технической литературе часто не указывают основание для чисел, записанных в шестнадцатеричной системе счисления, если в записи числа встречаются не только "обычные" цифры от 0 до 9, но и "буквенные" цифры от A до F. Обычно используют заглавные буквы, но можно применять и строчные.
Зарезервированные слова языка JavaМайкл ЭферганJava: справочник .- QUE Corporation, 1997, Издательство "Питер Ком", 1998 - С.67.
Это слова, зарезервированные для синтаксических конструкций языка, причем их назначение нельзя переопределять внутри программы. (см. табл.3)
Таблица 3. ключевые слова для Java
Их нельзя использовать в качестве идентификаторов (имен переменных, подпрограмм и т.п.), но можно использовать в строковых выражениях.
В языке Java только 8 примитивных (скалярных, простых) типов: boolean, byte, char, short, int, long, float, double.
Длины и диапазоны значений примитивных типов определяются стандартом, а не реализацией и приведены в таблице. Тип char сделали двухбайтовым для удобства локализации (один из идеологических принципов Java): когда складывался стандарт, уже существовал Unicode-16, но не Unicode-32. Поскольку в результате не осталось однобайтового типа, добавили новый тип byte, причем в Java, в отличие от других языков, он не является беззнаковым. Типы float и double могут иметь специальные значения, и «не число» (NaN). Для типа double они обозначаются Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN; для типа float- так же, но с приставкой Float вместо Double. Минимальные положительные значения, принимаемые типами float и double, тоже
стандартизованы.
Таблица 4. Длины и диапазоны значений примитивных типов
Тип |
Длина (в байтах) |
Диапазон или набор значений |
boolean |
не определено |
true, false |
byte |
1 |
?128..127 |
char |
2 |
0..216?1, или 0..65535 |
short |
2 |
?215..215?1, или ?32768..32767 |
int |
4 |
?231..231?1, или ?2147483648..2147483647 |
long |
8 |
?263..263?1, или примерно ?9.2·1018..9.2·1018 |
float |
4 |
-(2-2?23)·2127..(2-2?23)·2127, или примерно ?3.4·1038..3.4·1038, а также , , NaN |
double |
8 |
-(2-2?52)·21023..(2-2?52)·21023, или примерно ?1.8·10308..1.8·10308, а также , , NaN |
Такая жёсткая стандартизация была необходима, чтобы сделать язык платформенно-независимым, что является одним из идеологических требований к Java и одной из причин её успеха. Тем не менее, одна небольшая проблема с платформенной независимостью всё же осталась. Некоторые процессоры используют для промежуточного хранения результатов 10-байтовые регистры или другими способами улучшают точность вычислений. Для того, чтобы сделать Java максимально совместимой между разными системами, в ранних версиях любые способы повышения точности вычислений были запрещены. Однако это приводило к снижению быстродействия. Выяснилось, что ухудшение точности ради платформенной независимости мало кому нужно, тем более, если за это приходится платить замедлением работы программ. После многочисленных протестов этот запрет отменили, но добавили ключевое слово strictfp, запрещающее повышение точности.