Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

История возникновения и развития языка С (С++) и Java

Содержание:

Введение

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

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

В наше время наиболее распространенным языком является C++, его часто применяют для создания коммерческих приложений. Но в последнее время это положение начало колебаться, так как аналогичные претензии были заявлены таким языком как Java. В то же время общественное мнение резонировало, и многие программисты, бросившие C++ ради Jаvа, все чаще возвращаются к прежней своей привязанности. При этом названные языки похожи [11].

Цель работы состоит в изучении истории возникновения и развития языков программирования Си (C++) и Java.

Для достижения установленной цели необходимо решить ряд задач:

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

Объектом исследования выступают языки программирования Си (C++) и Java.

Предметом исследования - история, структура, польза, потенциал таких языков программирования, как Си (C++) и Java.

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

Глава 1. История возникновения и развития языка программирования C++

1.1. Возникновение и эволюция языка C++

Бьерн Страуструп - разработчик языка С++ и создатель первого транслятора, также известен как сотрудник AT&T Bell Laboratories. Он является магистром вычислительной техники и математики, закончив Кембридж по специальности «распределенные системы, операционные системы, моделирование и программирование». Именно Страуструп является автором полного руководства по языку С++ [4].

Определенно С++ вобрал в себя все основные возможности языка С, который является его подмножеством. Также сохранены и все присущие С средства низкого уровня, которые предназначены для решения всевозможных проблем системного программирования. С, также, многим обязан предшествующему языку BCPL – в C++ был восстановлен комментарий языка. Еще один источник - это язык SIMULA-67, из которого была взята концепция классов (в том числе возможность создания производных классов и виртуальных функций). Также стоит упомянуть язык Алгол-68, в котором уже существовали возможности перегрузки операций и свобода размещения описаний [5].

Предыдущие версии языка, которые назывались «С с классами», применялись с 1980 г. Данный язык возник, так как автору было необходимо создавать приложения для моделирования, которые управлялись бы прерываниями. Язык программирования SIMULA-67 для этого идеально подходит, если не рассматривать эффективность. Язык «С с классами» применялся для больших задач моделирования. Тогда подверглись строгой проверке возможности создания с его помощью приложений, для которых ресурсы памяти и времени критичны. В данном языке недоставало перегрузки операций, использования виртуальных функций, ссылок и многих иных возможностей. В июле 1983 г. С++ впервые покинул пределы исследовательской группы, где работал автор, однако многие возможности С++ тогда еще не были разработаны [9].

Само название С++ придумал Рик Маскитти в 1983 г. Данное название как бы выделяет эволюционный прорыв в изменении языка С. Так как обозначение ++ описывает операцию инкремента С. Имя просто С+ представляет синтаксическую ошибку. Помимо этого, оно уже используется как название совершенно другого языка программирования. Многие ученые-семантики в сфере языка С считают, что С++ слабее, чем ++С. Язык не назван D, так как он представляет расширение С, и в нем отсутствуют попытки решения каких-либо проблем посредством отказа от возможностей С.

Сначала С++ был задуман для того, чтобы избежать программирования на ассемблере, С либо иных языках программирования того времени. Его главное предназначение заключается в упрощении и оптимизации процесса программирования для отдельного программиста. Еще не так давно не было на бумаге плана разработки С++. Все этапы создания программного продукта выполнялись параллельно. Не формировалось отдельного «проекта С++», вследствие чего язык развивается так, чтобы решить все проблемы, с которыми сталкиваются пользователи. Также толчками к развитию выступает обсуждение автором проблем языка с его коллегами и друзьями [8].

С момента первого издания книги Страуструпа язык С++ неоднократно был подвержен серьезным уточнениям и изменениям. Преимущественно это затрагивает разрешение неоднозначности при перегрузке, связывание и управление памятью. Также, были внесены несущественные изменения для увеличения совместимости с языком С. Кроме того, были созданы некоторые обобщения, а также ряд расширений, например: возможность множественного наследования, реализация функций-членов со спецификаторами const и static, наличие защищенных членов класса (protected), возможность обработки исключительных ситуаций и т.п. Все названные нововведения были сделаны для того, чтобы С++ стал языком, позволяющим разрабатывать и использовать библиотеки.

Иные расширения, которые были введены в период 1985-1991 г.г. (например, чистые виртуальные функции или статические функции-члены), вероятнее появились как результат обобщения опыта программирования на С++, нежели были почерпнуты из иных языков.

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

В середине 1987 г. стало понятно, что работа по стандартизации С++ необходима и что нужно незамедлительно создавать основу для нее.

Основной вклад в эту работу внесла компания AT&T Bell Laboratories. Около сотни представителей из порядка двух десятков различных компаний занимались изучением и комментированием того, что является современной версией справочного руководства и исходными материалами для ANSI по стандартизации. С++. Как следствие, в 1989 г. по инициативе компании Hewlett-Packard в составе ANSI был сформирован комитет X3J16. Прогнозируется, что работы по стандартизации С++ в ANSI будут составным элементом работ по международной стандартизации ISO [10].

1.2. Структура и эффективность C++

С++ был развит на базе языка программирования C и сохраняет C как подмножество за очень немногими исключениями. Первоначальный язык C был спроектирован таким образом, что в С++ сохраняется близкое соответствие между типами данных, операторами и операциями, и компьютерными объектами, с которыми приходится иметь дело: символами, числами и адресами. В качестве исключения можно назвать операции работы с памятью new и delete, а также отдельные операторы и выражения С++, которые не нуждаются в скрытой поддержке в процессе исполнения программного кода.

В С++ применяются такие же последовательности возврата и вызова из функций, как и в C. В случаях, когда даже приведенный достаточно эффективный механизм становится слишком затратным, С++ функции могут подставляться inline, таким образом, удовлетворяя соглашение о записи функций без дополнительных расходов времени исполнения.

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

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

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

Может сложится мнение, что спецификация программы при помощи более подробной системы типов станет причиной увеличения объема исходного кода программы, но это не так. Программа на C++, которая описывает типы параметров функций, использует классы и т.д., как правило, немного короче той же программы на C, где данные средства не применяются [3].

Глава 2. История возникновения и развития языка программирования Java

2.1. Возникновение и эволюция языка Java

Язык Java зародился в качестве элемента в проекте разработки передовых приложений для разных бытовых приборов. Проект начали реализовать на языке С++, но вскоре обнаружился ряд проблем, лучшее средство борьбы с которыми - это изменение непосредственно инструмента, а именно языка программирования. Было очевидно, что нужен платформенно-независимый язык, позволяющий создавать программы, не нуждающиеся в компиляции отдельно для каждой архитектуры и так же возможно было бы использование на разных процессорах под разными операционными системами [12].

Появлению языка Java предшествовала достаточно богатая история. В 1990 году Патрик Нотон - инженер компании Sun Microsystems, осознал, что его тяготит необходимость осуществления поддержки сотни разных интерфейсов программ, применяемых в фирме, и уведомил исполнительного директора Sun Microsystems и своего друга Скотта МакНили о своем решении перейти работать в фирму NeXT. МакНили, попросил Нотона сформировать список причин такого недовольства и попробовать прелдожить такое решение проблем, словно он мог бы осуществить все, что угодно.

Нотон, хоть и не особо рассчитывал, что кто-то в серьез обратит внимание на его письмо, все же выдвинул свои претензии, прямо раскритиковав минусы компании, в том числе, разрабатываемую как раз в то время архитектуру программного обеспечения NeWS. На удивление Нотона, письмо имело оглушительный успех: его разослали всем ведущим инженерам компании, которые, в свою очередь, незамедлительно откликнулись и выказали одобрение и поддержку своему коллеге. Кроме того, высшее руководство, а именно Билл Джой – основатель компании и Джеймс Гослинг 0 непосредственный руководитель Нотона, также одобрили инициативу.

В день, когда Нотон должен был покинуть компанию, было принято решение о формировании команды ведущих разработчиков с условием, чтобы они делали что угодно, лишь бы создали что-то необычайное. Команда в составе шести человек начала разработку нового объектно-ориентированного языка программирования, названного Oak (дуб), в честь дерева, которое росло под окном Гослинга [1].

Затем компания Sun Microsystems команду Green преобразовала в компанию First Person. Молодая компания имела интереснейшую концепцию, но подходящего ей применения не могла найти. После нескольких неудач ситуация для фирмы неожиданно резко изменилась: был анонсирован браузер Mosaic. Таким образом появился World Wide Web, который положил начало бурному развитию Internet. Нотоном было предложено использовать Oak для разработки Internet-приложений. Таким образом Oak превратился в самостоятельный продукт, затем был разработан Oak-компилятор и Oak-браузер «WebRunner». В 1995 г. компания решила все же объявить о новом продукте, только переименовала его в Java. Когда язык оказался на просторах сети Internet, стало ясно, что необходимо запускать Java-аплеты, они представляют собой небольшие программы, которые загружаются через Internet. WebRunner в следствие переименовали в HotJava и фирма Netscape стала поддерживать Java-продукты [6].

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

Основная идея Java предполагает работу полученных приложей в компьютерных сетях с возможностью подгрузки в нужный момент посредством сети требуемых классов и ресурсов, необходимых программе, и тех, что не были загружены до того. Для обеспечения этих возможностей приложения Java создаются и распространяются, как большое число независимых классов. Тем не менее данный способ разработки ведет к высокой фрагментации программы. Так, например, даже учебные проекты как правило включают в себя десятки классов, в то время как реальные программные продукты - тысячи. В то же время каждый общедоступный (public) класс характеризуется своим файлом, носящим такое же имя. Для того чтобы справиться с данным количесвом файлов, Java предусматривает специальный способ группировки классов - пакет (package). Пакеты предназначены для организации независимых пространств имен (namespace), а также ограничения доступа к классам [2].

2.2. Этапы развития языка Java и его применение

Основные этапы разработки языка Java, были изложены Патриком Нотоном, который в настоящее время является вице-президентом по технологии в компании Starwave.

5 декабря 1990 г. - Нотон отклоняет предложение перейти в фирму NeXT и начинает работу в фирме Sun над проектом, который впоследствии получил название Green.

15 января 1991 г. – организовано совещание по типу «мозговой штурм» по проекту Stealth в Аспене, где принимали участие Билл Джой, Уэйн Розинг, Энди Бехтолсхейм, Майк Шеридан, Патрик Нотон и Джейм Гослинг.

1 февраля 1991 г. – Гослинг, Шеридан и Нотон основательно берутся за работу. Нотон отвечает за графическую систему Aspen, Гослинг - идеи языка, Шеридан - бизнес-разработка.

8 апреля 1991 г. - переезд на новый адрес и обрыв различных средств связи, в том числе и непосредственного соединения с локальной сетью фирмы Sun; проект разрабатывается под названием Green.

15 апреля 1991 г. - Крейг Форрест (дизайнер чипа SS10), Крис Уорт (разработчик системы NeWS) и Эд Фрэнк (архитектор системы SPARCstation 10) присоединяются к проекту Green.

Май 1991 г. - Эд Фрэнк нарекает прототип аппаратуры названием *7 (код, который требовалось набрать внутри офиса Sand Hill, для ответа на любой телефонный звонок).

Июнь 1991 г. - Гослинг занимается разработкой интерпретатора Oak, который в дальнейшем (при поисках торговой марки) переименовли в Java.

1 августа 1991 г. - Произошло объединение Oak и Aspen; запуск их первой реальной программы.

19 августа 1991 г. - Разработчики Green демонстрирует концепцию базового пользовательского интерфейса и графической системы сооснователям компании Sun Биллу Джою и Скотту Макнили.

17 октября 1991 г. - Нотон и Шеридан присваивают конструкторской философии своего коллектива лозунг «1st Person». Со временем данный слоган становится названием компании.

17 ноября 1991 г. - офис проекта Green вновь подключается к основной сети компании Sun линией на 56 Кбит/с.

1 марта 1992 г. - К проекту Green подключается Джонатан Пейн, позднее участвовавший в написании HotJava.

Лето 1992 г. - Активная деятельность, направленная на доработку Oak, пользовательского интерфейса, Green OS, аппаратуры Star7 и соответствующих элементов.

4 сентября 1992 г. - Завершение разработки устройства Star7; демонстрация устройства Макнили и Джою.

1 октября 1992 г. - Уэйн Розинг переходит из фирмы SunLabs, и принимает руководство коллективом на себя.

1 ноября 1992 г. - Создана корпорация FirstPerson.

15 января 1993 г. - Команда релоцируется в Пало Альто в здание, где ранее находилась лаборатория Western Research Lab компании DEC и была сформирована начальная группа Hamilton Group.

15 марта 1993 г. - После анализа результатов испытаний кабельного интерактивного телевидения, которые были проведены компанией Time Warner, FirstPerson переключается на эту тематику.

Апрель 1993 г. - релиз первого графического браузера - Mosaic 1.0, разработанного в центре NCSA.

14 июня 1993 г. - Time Warner продолжает испытания интерактивного кабельного ТВ с компанией SGI, не обращая внимание на очевидное превосходство технологии компании Sun и уверения, что Sun выиграла эту сделку.

Лето 1993 г. - Нотон преодолевает 300 тыс. миль, пытаясь продать Oak всем, кто занимается интерактивным телевидением и бытовой электроникой; в это время темп, с которым люди подключаются к Internet, невероятно растет.

Август 1993 г. - Спустя несколько месяцев серьезных переговоров с компанией 3DO касательно разработки ОС для приставок, президент 3DO Трип Хокинс делает предложение купить технологию. Макнили отказывается, срывая сделку.

Сентябрь 1993 г. - Артур Ван Хофф присоединяется к команде, первоначально с целью создания среды разработки приложений, которые предназначены для интерактивного телевидения, а потом и сам язык.

7 декабря 1993 г. - Экспертиза операций на высоком уровне в FirstPerson выясняет, что данная группа не имеет маркетинговой стратегии и реальных партнеров, в результате чего совершенно неясно представляет себе дату выпуска.

8 февраля 1994 г. - Отмена публичного заявления FirstPerson о выпуске, который был намечен на конференцию Technology, Entertainment and Design (TED).

17 февраля 1994 г. - Для разносторонней экспертизы исполнительным лицам Sun предложен альтернативный бизнес-план по разработке мультимедийной платформы для CD-ROM и сетевой работы корпорации FirstPerson.

25 апреля 1994 г. - зарегистрирована компания Sun Interactive; туда перемещается половина инженеров FirstPerson.

Июнь 1994 г. - запущен проект Liveoak, который нацелен Биллом Джоем на применение Oak в масштабном проекте операционной системы.

Июль 1994 г. - Нотон ограничивает сферу использования проекта Liveoak, посердством смены ориентации Oak на Internet.

16 сентября 1994 г. - Нотон и Пейн начинают разработку WebRunner – браузер, позже получивший название в HotJava.

29 сентября 1994 г. – первый прототип HotJava демонстрируется исполнительным лицам Sun.

11 октября 1994 г. - Нотон переходит в компанию Starwave.

Осень 1994 г. - Ван Хофф создает компилятор Java на языке Java. (Ранее он был реализован Гослингом на языке С).

23 мая 1995 г. - Sun официально представляет Java и HotJava на выставке SunWorld '95.

В начале 1996 г. Sun Microsystems выпустила первую версию Java. Но пользователи быстро осознали, что текущая версия Java 1.0 не может использоваться для создания коммерческих приложений. Конечно, данную версию можно применить для реализации визуаль­ных эффектов на веб-страницах, к примеру, написать аплет, который выводит на странице случайным образом «прыгающий» текст, но версия Java 1.0 была еще сырой. В ней даже не было предусмотрено средства вывода на печать. Можно сказать, что данная версия еще не была готова. В последующей версии, Java 1.1, были устранены наиболее серьезные недостатки, улуч­шены средства рефлексии, а также введена принципиально новая модель событий. Тем не менее, возможности языка все еще были ограниченными.

В 1998 году выход в свет Java 1.2 стал главной новостью конференции JavaOne. В этой версии на смену слабым средствам реализации графического ин­терфейса и графических приложений пришел мощный инструментарий. Это был большой шаг вперед, к соответствию лозунгу «Write Once, Run Anywhere» («Однажды написано — везде выполняется»), который был выдвинут при создании предыдущих вер­сий. В декабре 1998 года название новой версии было изменено на неудобное и длинное «Java 2 Standard Edition Software Development Kit Version 1.2» (Стандартная редакция набора инструментальных средств для разработки программ­ного обеспечения на Java 2, версия 1.2).

Помимо Standard Edition, также были предложены следующие два варианта: для портативных устройств Micro Edition («микроредакция»), к примеру, для мобильных телефо­нов, и Enterprise Edition - для разработки корпоративных и коммерческих приложений.

Версии 1.3 и 1.4 набора инструментальных средств Standard Edition - ре­зультаты поэтапного усовершенствования первоначально выпущенной версии Java 2. Они имеют новые возможности, повышенную производительность и, естветственно, содержат много меньше ошибок. В ходе развития Java многие взгля­ды на аплеты и клиентские приложения были пересмотрены. В частности, оказалось, что на Java удобно разрабатывать высококачественные серверные приложения.

В версии 5.0 язык Java подвергся наиболее серьезной модификации с момента выпуска версии 1.1. (Первоначально версия 5.0 имела номер 1.5, но на конференции JavaOne в 2004 г. была принята новая нумерация версий.) После многолетних иссле­дований были добавлены обобщенные типы (которые приблизительно соответствуют шаблонам C++), хотя при этом не были выдвинуты требования модификации вир­туальной машины. Ряд других языковых элементов, например, циклы в стиле for each, автоупаковка и метаданные, были явно навеяны языком С#.

Версия 6 (без суффикса .0) была выпущена в конце 2006 г. И снова сам язык существенных изменений не претерпел, но были внесены усовершенствования, которые были связаны с производительностью, а также произведены расширения библиотек.

По мере того как в центрах обработки данных все чаще стали применяться аппа­ратные средства широкого потребления вместо специализированных серверов, для компании Sun Microsystems наступили тяжелые времена, и в конечном итоге она была приобретена компанией Oracle в 2009 г. Разработка следующих версий Java на долгое время приостановилась. И лишь в 2011 году компания Oracle выпустила новую версию Java 7 с простыми усовершенствованиями. Было решено более серьезные измене­ния отложить до версии Java 8, выпуск которой произошел в 2014 г.

В табл. 1 сведены данные об этапах развития языка и библиотек Java [7].

В 2018 году коренным образом изменилась парадигма разработки и выпуска релизов Java.

Только в конце марта текущего года, вышел Java 10. Однако, в связи с тем, что компания Oracle изменила релизный цикл (каждые полгода новый релиз), к выходу уже готовится 11-я версия.

Java 10: краткая сводка.

Нововведения десятой версии: локальный вывод типов с помощью var, улучшения в процессах «сборки мусора» и возможность использовать Graal как основной JIT-компилятор.

Локальный вывод типов с помощью var просили многие разработчики. Теперь можно не вводить типы два раза подряд: сперва для объявления переменной, а затем для конструктора, идущего следом.

var list = new ArrayList<String>(); // infers ArrayList<String>

var stream = list.stream(); // infers Stream<String>

Таблица 1

Этапы развития языка Java

Версия

Год выпуска

Новые языковые средства

Количество классов и интерфейсов

1.0

1996

Выпуск самого языка

211

1.1

1997

Внутренние классы

477

1.2

1998

Отсутствуют

1524

1.3

2000

Отсутствуют

1840

1.4

2002

Утверждения

2723

5.0

2004

Обобщенные классы, цикл в стиле for each, автоупаковка, аргументы переменной длины, метаданные, перечисления, статический импорт

3279

6

2006

Отсутствуют

3793

7

2011

Оператор switch со строковыми метками ветвей, ромбовидный оператор, двоичные литералы, усовершенствованная обработка исключений

4024

8

2014

Лямбда-выражения, библиотеки потоков и даты/времени, интерфейсы с методами по умолчанию

4240

9

2017

Литералы в коллекциях, оператор Элвиса, Class Optional, Streams, IO, Regrexp, обработка процессов ProcessHandle

более 4500

Тем не менее решение ввести var закончилось неоднозначными отзывами участников сообщества. Кто-то поддерживал нововведение и утверждал, что дедупликация повышает читабельность кода. Но были и те, кто уверял, что сейчас ряд типов переменных (к примеру, connection) не будут очевидными. Несмотря на что, что IDE теперь могут показывать их по требованию, однако же в других средах будут возникать проблемы.

В десятом релизе для улучшенной сборки мусора содержались сразу два изменения: JEP 304 и JEP 307. JEP 304 улучшил изоляцию кода от разных сборщиков мусора посредством нового интерфейса GC, что дало возможность быстрее интегрировать сторонние сборщики. JEP 307, в свою очередь, позволил «собирать мусор» в несколько потоков.

Что можно сказать о новом JIT-компиляторе, то он направлен на рост производительности JVM. Предыдущая версия JVM была написана на C++, но в рамках проекта Metropolis значительную часть JVM перепишут на Java. Экспериментальный компилятор выступает первым шагом на пути к данной цели.

Возможные нововведения в Java 11. В начале осени разработчики планируют представить Java 11. И о функциях, которые могут быть частью релиза, уже известно. В сети происходит бурное обсуждение вероятных изменений.

Часть разработчиков недовольна тем, как быстро меняется язык. Но есть и те, кто отмечает, что Java наконец-то обзаводится функциями, которых ему не хватало, и которые уже давно были реализованы в других ЯП. Вот некоторые из них.

Изменения в локальном выводе типов.

Java 10 уже предоставил возможность использовать var для обозначения типа локальных переменных, перекладывая эту задачу на плечи компилятора. Однако Java 11 идет дальше и делает так, что var можно использовать при объявлении формальных параметров неявно типизированных лямбда-выражений.

Добавление необработанных строковых литералов.

Это еще одно дополнение, над которым сейчас ведется работа. В необработанной строке каждый символ читается «как есть», включая символы разрыва. Например, такой строкой может быть разметка HTML или SQL-запрос:

String html = "<html>\n" +

" <body>\n" +

" <p>Hello World.</p>\n" +

" </body>\n" +

"</html>\n";

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

String html = `<html>

<body>

<p>Hello World.</p>

</body>

</html>

`;

Для обозначения необработанной строки используется обратный апостроф (`). Если вам нужно прописать апостроф внутри самой строки, то в этом случае для маркировки её границ используются двойные (или тройные, четверные и т. д.) обратные апострофы:

String str = ```This is a raw `string` with ``backticks`` inside```;

Появятся switch-выражения

Сейчас оформление switch выполняется следующим образом:

int val;

switch (str) {

case "foo": val = 1; break;

case "bar": val = 2; break;

case "baz": val = 3; break;

default: val = -1;

}

С появлением switch-выражений, конструкция сократится:

int val = switch (str) {

case "foo": break 1;

case "bar": break 2;

case "baz": break 3;

default: break -1;

}

При этом если в case встречается только break, возможно использовать упрощенную нотацию:

int val = switch (str) {

case "foo" -> 1;

case "bar" -> 2;

case "baz" -> 3;

default -> -1;

}

Добавление switch expressions — это шаг вперед на пути к появлению метода сопоставления с образцом.

Помимо отмеченных выше, Java может получить и другие изменения. Например, поддержку типов значений или переменных типа в enum. Эти обновления не обязательно войдут в состав Java 11, но, вероятно, ожидать их можно уже в ближайшем будущем [13].

Заключение

С++ был развит на базе языка программирования C и сохраняет C как подмножество за очень немногими исключениями. Базовый язык, C подмножество С++, спроектирован таким образом, что сохраняется очень близкое соответствие между его типами, операторами и операциями, и компьютерными объектами, с которыми приходится иметь дело: символами, числами и адресами. Исключением выступают операции свободной памяти new и delete, отдельные операторы и выражения С++ как правило не нуждаются в скрытой поддержке во время выполнения или подпрограммах.

В С++ применяются такие же последовательности возврата и вызова из функций, как и в C. В случаях, когда даже приведенный достаточно эффективный механизм становится слишком дорогим, С++ функция может быть подставлена inline, таким образом, удовлетворяя соглашению о записи функций без дополнительных расходов времени выполнения.

Java создавался как универсальный язык, который предназначался для прикладного программирования в неоднородных компьютерных сетях и со стороны клиентского компьютера, и со стороны сервера. В том числе – для применения на тонких аппаратных клиентах (устройствах малой вычислительной мощности с крайне ограниченными ресурсами). При этом скомпилированные программы Java работают лишь под управлением виртуальной Java-машины, именно поэтому они называются приложениями Java. Синтаксис операторов Java почти полностью идентичен синтаксису языка C, но, Java не является расширением C, в отличие от C++, – это совершенно независимый язык, со своими собственными синтаксическими правилами.

Идеология Java подразумевает работу в компьютерных сетях и возможность подгрузки в нужный момент посредством сети требуемых классов и ресурсов, необходимых программе, и тех, что не были загружены до того. Для обеспечения такой работы приложения Java разрабатываются и распространяются, как большое число независимых классов. Тем не менее данный способ разработки ведет к очень высокой фрагментации программы. Даже небольшие учебные проекты как правило состоят из десятков классов, в то время как реальные проекты – из сотен. В то же время каждому общедоступному (public) классу соответствует свой файл, носящий такое же имя. Для того чтобы справиться с данным количесвом файлов, Java предусматривает специальное средство группировки классов, которое называется пакетом (package). Пакеты обеспечивают независимые пространства имен (namespaces), а также ограничение доступа к классам.

Список использованной литературы

  1. Бондарев В.М. Учебное пособие по программированию на Java. - Харьков: СМИТ, 2013. - 296 с.
  2. Гаврилов А.В. Учебное пособие по языку Java. - Самара: Изд-во СГАУ, 2010. - 175 с.
  3. Голицына О.Л. Языки программирования. Учебное пособие. - М.: Форум, Инфра-М, 2008. - 125 с.
  4. Дейтел П.Дж., Дейтел Х.М. Как программировать на С++. Введение в объектно-ориентированное проектирование с использованием UML. / Пер. с англ. - М.: Издательство Бином, 2009. - 1454 с.
  5. Дрейер М. C# для школьников. - М.: Интернет-Университет Информационных Технологий; БИНОМ. Лаборатория знаний, 2009. - 128 с.
  6. Дубаков А.А. Введение в объектно-ориентированное программирование на Java. – СПб: Университет ИТМО, 2016. – 248 с.
  7. Кузнецов B.В. Современное программирование на Java. - Томск, 2014. - 292 с.
  8. Макаров В.Л. Программирование и основы алгоритмизации. - СПб.: СЗТУ, 2003. - 110 с.
  9. Пышкин Е.В. Структурное проектирование: основание и развитие методов. С примерами на языке C++. – СПб.: Изд-во Политехнического ун-та, 2005. – 324 с.
  10. Радченко Г.И. Объектно-ориентированное программирование / Г.И. Радченко, Е.А. Захаров. - Челябинск: Издательский центр ЮУрГУ, 2013. - 167 с.
  11. Тюгашев А.А. Основы программирования. – СПб: Университет ИТМО, 2016. – 160 с.
  12. Хабибуллин И.Ш. Самоучитель Java 2. СПб.: БХВ-Петербург, 2007. - 720 с.
  13. Шилдт Герберт, Холмс Джеймс. Искусство программирования на Java. - СПб.: Питер, 2005. - 336 с.