Історія версій Java

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Мова програмування Java мала декілька змін починаючи з JDK 1.0, а також багато доповнень в класах та пакетах стандартної бібліотеки. Починаючи з J2SE розвитком Java управляють Java Community Proccess (JCP), які використовують Java Specification Requests (JSRs), щоб запропоновувати та вказувати доповнення та зміни у платформі Java. Мова визначається специфікацією JLS, змінами у JLS управляють JSR 901 [Архівовано 15 червня 2020 у Wayback Machine.].

В доповнення до змін мови, найбільш драматичні зміни відбувалися у Java Class Library протягом багатьох років. Бібліотека виросла з декількох сотень класів в JDK 1.0 до більш ніж трьох тисяч в J2SE5. З'явилися нові API (Swing та Java 2D[en]), крім цього, багато класів та методів з JDK 1.0 застаріли. Деякі програми дозволяють перетворення програм на Java з однієї версії до іншої (наприклад Java 5.0 портована до 1.4).

Після релізу Java 7, Oracle пообіцяли повернутись до дворічного циклу випуску. Тим не менше, у 2013 Oracle оголосили, що вони бажають відкласти випуск Java 8 на один рік для того, щоб виправити помилки, пов'язані з безпекою Java.

Реліз Рік
JDK Beta 1995
JDK 1.0 1996
JDK 1.1 1997
J2SE 1.2 1998
J2SE 1.3 2000
J2SE 1.4 2002
J2SE 5.0 2004
Java SE 6 2006
Java SE 7 2011
Java SE 8 2014
Java SE 9 2017
Java SE 10 2018

JDK Alpha and Beta[ред. | ред. код]

Перші альфа та бета-релізи Java у 1995 мали дуже нестабільні API та ABI. Браузер, що підтримував Java, мав назву WebRunner.

JDK 1.0[ред. | ред. код]

Перша версія була випущена 23 січня 1996 року і називалася "дуб". Перша стабільна версія JDK 1.0.2 називалася Java 1.

JDK 1.1[ред. | ред. код]

Основні доповнення в релізі 19 лютого 1997 року включали:

J2SE 1.2[ред. | ред. код]

Кодове ім'я - Playground. Реліз відбувся у грудні 1998 року. Назва версії "J2SE" (Java 2 Platform, Standard Edition) замінив JDK, щоб відрізнити базову платформу J2EE (Java 2 Platform, Enterprise Edition) і J2ME (Java 2 Platform, Micro Edition). Це був дуже важливий реліз Java, так як він втричі збільшив розмір платформи Java до 1520 класів в 59 пакетах. Головні доповнення включали:

  • strictfp (ключове слово)
  • графічний API Swing був об'єднаний з основними класами
  • Віртуальна машина вперше була оснащена JIT компілятором
  • Java-аплет
  • Java IDL,  IDL реалізація для функціональної сумісності CORBA 
  • Колекції

J2SE 1.3[ред. | ред. код]

Кодове ім'я Kestrel. Найбільш помітними змінами в релізі 8 травня 2000 року були:

  • включена HotSpot JVM (HotSpot JVM вперше була випущена в квітні 1999 для J2SE 1.2 JVM)
  • RMI було змінено, щоб забезпечити підтримку сумісності CORBA
  • Java Naming and Directory Interface (JNDI) було включено до основних бібліотек (раніше доступний як розширення)
  • Java Platform Debugger Architecture (JPDA)
  • JavaSound
  • Синтетичні проксі-класи

J2SE 1.4[ред. | ред. код]

Кодове ім'я Merlin. Реліз 6 лютого 2002 року. Головні зміни включали:

  • Зміни мови
    • assert(вказане в JSR 41)
  • Покращення бібліотеки
    • Регулярні вирази за зразком регулярних виразів Perl
    • Замикання виключень дозволяє виключенням інкапсулювати інші виключення
    • Підтримка протоколу IPv6
    • Неблокуюче IO (названо New Input/Output, NIO) (вказано в JSR 51)
    • API для журналювання (вказано в JSR 47)
    • I/O API для зчитування та записку картинок в таких форматах як JPEG та PNG
    • Інтегрований XML парсер та XSLTпроцесор(JAXP) (вказано в JSR 5 та JSR 63)
    • Інтегровані розширення для безпеки та криптографії (JCEJSSEJAAS)
    • Java Web Start (вказано в JSR 56)
    • Preferences API (java.util.prefs)

J2SE 5.0[ред. | ред. код]

Кодове ім'я Tiger. Реліз 30 вересня 2004 року був також пронумерований як 1.5. Ця версія була розроблена під JSR 176.

Було додано значну кількість нових можливостей:

  • Generics: забезпечують безпеку типів для колекцій та усувають необхідність приведення типів (вказано в JSR 14)
  • Метадані: також називаються анотації, дозволяють додавати додаткову інформацію для класів, методів і т.д.
  • Autoboxing/unboxing: автоматичне приведення примітивних типів до їх обгорток(вказано в JSR 201)
  • Enumerations: впорядкований лист значень
  • Varargs: останній параметр може бути оголошений, використовуючи три точки (наприклад void drawtext(String... lines)). За допомогою цього метод може приймати будь-яку кількість параметрів.
  • Цикл for each: зроблений для перебору елементів колекцій, що реалізовують інтерфейс Iterable (specified by JSR 201)
  • Покращена багатонитевість
  • Статичні імпорти

Також були покращення у основній бібліотеці:

  • Автоматична генерація заглушки для об'єктів RMI
  • Оновлено Swing
  • Інструменти для паралельного виконання програм в java.util.concurrent
  • Клас Scanner для зчитування даних з різних потоків та буферів

Java SE 6[ред. | ред. код]

Кодове ім'я Mustang. Випущена 11 грудня 2006 року. Ця версія була розроблена під JSR 270.

Головні зміни включали:

  • Підтримка скриптів(JSR 223): API для інтеграції зі скриптовими мова програмування та вбудована інтеграція Mozilla JavaScript Rhino.
  • Покращення основної платформи та Swing.
  • Покращена підтримка вебсервісів через JAX-WS (JSR 224).
  • JDBC 4.0 (JSR 221).
  • Java Compiler API (JSR 199): an API. що дозволяє програмі вибирати та викликати компілятор програмно.
  • Покращення JAXB до версії 2.0.
  • Підтримка вбудованих анотацій(JSR 269).
  • Покращення графічного інтерфейсу.
  • Покращення JVM: синхронізація та оптимізація компілятора

Java SE 7[ред. | ред. код]

Java 7 (кодове ім'я Dolphin) стала доступною для розробників 28 липня 2011 року. 

Доповнення в Java 7 включали:

  • Підтримка JVM для динамічних мов
  • Стиснуті 64-бітні вказівники
  • Зміни згруповані під ім'я Coin:
    • Strings у switch
    • Автоматичне управління ресурсами в try
    • З'явився оператор <>
    • Спрощено оголошення методів зі змінною кількістю аргументів.
    • Бінарні цілі літерали
    • Нижнє підкреслення у числових літералах
    • Catching multiple exception types and rethrowing exceptions with improved type checking
  • Інструменти для паралельного програмування під JSR 166[
  • Нова файлова I/O бібліотека, що підтримує різні файлові системи, метадані файлу та символічні посилання. З'явилися нові пакети: java.nio.file,java.nio.file.attribute and java.nio.file.spi
  • Timsort, що використовується, щоб відсортувати колекції та масиви об'єктів замість merge sort
  • XRender для Java 2D
  • Нові API для графіки
  • Підтримка нових мережевих протоколів, включаючи SCTP та Sockets Direct Protocol
  • Upstream оновлення до XML та Unicode
  • Набір правил для розгортання

Java SE 8[ред. | ред. код]

Java 8 була випущена 18 березня 2014 року[1].

На думку розробників мови програмування Java, 8-ма версія стала найбільшим кроком її еволюції. Порівняно невелика кількість нових засобів — лямбда вирази, посилання на методи та функційні інтерфейси разом перетворили Java на багатопарадигмову мову програмування: на додачу до об'єктно-орієнтованого з'явилися елементи функційного програмування. Разом з мовою еволюції зазнали й супутні програмні бібліотеки[2]. Так, наприклад, в API для колекцій додано підтримку Stream API, завдяки чому можуть відбуватися масові операції над колекціями[3].

Ця версія включає:[4]

  • JSR 308: анотації для типів даних. Анотації можна виконати у всіх випадках використання змінних цього типу. Таким чином поліпшено перевірку правильності коду.
  • JSR 310: API для часу та дат
  • JSR 335: лямбда вирази та методи за замовченням (англ. default methods). Методи за замовченням дозволяють зберегти бінарну сумісність зі старим кодом при додаванні нових можливостей до інтерфейсів програмних бібліотек[3]
  • Посилання на методи: разом з лямбда виразами спрощують написання лямбда виразів[3]
  • Роботу з беззнаковими цілими числами (32- та 64- бітні java.lang.Integer та Long відповідно)[5]

Змін також зазнали

  • JSR 003: Java Management Extensions
  • JSR 114: JDBC Rowsets
  • JSR 160: JMX Remote API
  • JSR 173: Потокове API для XML (SAX)
  • JSR 199: Java Compiler API
  • JSR 206: Java API для обробки XML документів
  • JSR 221: JDBC 4.0
  • JSR 269: Pluggable Annotation-Processing API
  • Був замінений рушій для виконання скриптів JavaScript, замість Rhino обраний Nashorn[3]

У версії не було реалізовано модульність платформи Java, проте було вжито деяких заходів для полегшення її реалізації у наступних релізах[4]. Так, з'явилися «компактні профілі» (англ. Compact Profiles), які дозволяють реалізувати роботу програм на неповних реалізаціях платформи Java[3].

Java SE 9[ред. | ред. код]

На JavaOne 2011 Oracle обговорювали функції, які вони збираються додати до Java 9, серед яких були: покращення підтримки багатогігабайтних куп, краща інтеграція машинного коду та JVM, що може сама себе налаштовувати. На початку 2016 реліз було перенесено на березень 2017.

  • JSR 294: Модульна організація JDK під проектом Jigsaw (Java Module System)
  • JSR 354: API для грошей та валюти
  • JEP 222: jshell(Java REPL)
  • Модуляризація

Були також плани додати автоматичне розпаралелювання, використовуючи OpenCL та реактивні потоки.

Java SE 10[ред. | ред. код]

OpenJDK 10 був випущений 20 березня 2018 року, в новий випуск увійшло 12 нововведень[6]. Серед іншого:

  • JEP 286: виведення типів для локальних змінних[7]
  • JEP 317: експериментальний JIT компілятор на Java[8]
  • JEP 310: можливість спільного використання класів різними додатками для Java[9]

Цей реліз став релізом з новими функціями (англ. feature release) та прийшов на заміну релізу 9. Наступний реліз з тривалою підтримкою (англ. long-term support, LTS) матиме номер 11 та очікується у вересні 2018 року[10].

Відтепер компанія планує випускати LTS реліз раз на три роки, демонстрації нових функцій (англ. feature release) кожні шість місяців, а оновлення — щокварталу. Після релізу Java 11 у вересні 2018 року наступним LTS релізом стане Java 17, випуск якої заплановано на вересень 2021 року[10].

Примітки[ред. | ред. код]

  1. JDK 8 Schedule. Архів оригіналу за 25 серпня 2019. Процитовано 12 серпня 2019.
  2. James Gosling, Bill Joy, Guy Steele, Gilad Bracha, Alex Buckley (13 лютого 2015). Preface to the Java SE 8 Edition. The Java® Language Specification. Java SE 8 Edition (PDF). Oracle America, Inc. Архів оригіналу (PDF) за 21 жовтня 2014. Процитовано 3 березня 2017.
  3. а б в г д What's New in JDK 8. Oracle. Архів оригіналу за 31 березня 2018. Процитовано 3 березня 2017.
  4. а б Mark Reinhold (2013/11/4). JSR 337: Java SE 8. Public Review Specification. Oracle and/or its affiliates. Архів оригіналу за 30 вересня 2016. Процитовано 3 березня 2017.
  5. Darcy (Jan 20, 2012). Unsigned Integer Arithmetic API now in JDK 8. Oracle. Архів оригіналу за 25 лютого 2017. Процитовано 3 березня 2017.
  6. OpenJDK. JDK 10. Архів оригіналу за 17 березня 2018. Процитовано 22 березня 2018.
  7. JEP 286: Local-Variable Type Inference. OpenJDK. Архів оригіналу за 21 березня 2018. Процитовано 22 березня 2018.
  8. JEP 317: Experimental Java-Based JIT Compiler. OpenJDK. Архів оригіналу за 24 листопада 2018. Процитовано 22 березня 2018.
  9. JEP 310: Application Class-Data Sharing. OpenJDK. Архів оригіналу за 21 березня 2018. Процитовано 22 березня 2018.
  10. а б John K. Waters (21 березня 2018). Java 10 Released, First in the New Faster Cadence. ADT Mag. Архів оригіналу за 27 березня 2018. Процитовано 27 березня 2018.

Див. також[ред. | ред. код]