Історія версій 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 |
Перші альфа та бета-релізи Java у 1995 мали дуже нестабільні API та ABI. Браузер, що підтримував Java, мав назву WebRunner.
Перша версія була випущена 23 січня 1996 року і називалася "дуб". Перша стабільна версія JDK 1.0.2 називалася Java 1.
Основні доповнення в релізі 19 лютого 1997 року включали:
- масштабне переоснащення моделі подій AWT
- були додані внутрішні класи
- JavaBeans
- JDBC
- RMI
- рефлексія, що підтримувала тільки самоаналіз, зміни під час виконання програми не були можливими
- JIT (Just In Time) compiler на Microsoft Windows, розроблений для JavaSoft компанією Semantec.
- Інтернаціоналізація та підтримка Юнікоду
Кодове ім'я - 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
- Колекції
Кодове ім'я 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
- Синтетичні проксі-класи
Кодове ім'я 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)
- Інтегровані розширення для безпеки та криптографії (JCE, JSSE, JAAS)
- Java Web Start (вказано в JSR 56)
- Preferences API (
java.util.prefs
)
Кодове ім'я 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 для зчитування даних з різних потоків та буферів
Кодове ім'я 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 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
andjava.nio.file.spi
- Timsort, що використовується, щоб відсортувати колекції та масиви об'єктів замість merge sort
- XRender для Java 2D
- Нові API для графіки
- Підтримка нових мережевих протоколів, включаючи SCTP та Sockets Direct Protocol
- Upstream оновлення до XML та Unicode
- Набір правил для розгортання
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].
На JavaOne 2011 Oracle обговорювали функції, які вони збираються додати до Java 9, серед яких були: покращення підтримки багатогігабайтних куп, краща інтеграція машинного коду та JVM, що може сама себе налаштовувати. На початку 2016 реліз було перенесено на березень 2017.
- JSR 294: Модульна організація JDK під проектом Jigsaw (Java Module System)
- JSR 354: API для грошей та валюти
- JEP 222: jshell(Java REPL)
- Модуляризація
Були також плани додати автоматичне розпаралелювання, використовуючи OpenCL та реактивні потоки.
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].
- ↑ JDK 8 Schedule. Архів оригіналу за 25 серпня 2019. Процитовано 12 серпня 2019.
- ↑ 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.
- ↑ а б в г д What's New in JDK 8. Oracle. Архів оригіналу за 31 березня 2018. Процитовано 3 березня 2017.
- ↑ а б Mark Reinhold (2013/11/4). JSR 337: Java SE 8. Public Review Specification. Oracle and/or its affiliates. Архів оригіналу за 30 вересня 2016. Процитовано 3 березня 2017.
- ↑ Darcy (Jan 20, 2012). Unsigned Integer Arithmetic API now in JDK 8. Oracle. Архів оригіналу за 25 лютого 2017. Процитовано 3 березня 2017.
- ↑ OpenJDK. JDK 10. Архів оригіналу за 17 березня 2018. Процитовано 22 березня 2018.
- ↑ JEP 286: Local-Variable Type Inference. OpenJDK. Архів оригіналу за 21 березня 2018. Процитовано 22 березня 2018.
- ↑ JEP 317: Experimental Java-Based JIT Compiler. OpenJDK. Архів оригіналу за 24 листопада 2018. Процитовано 22 березня 2018.
- ↑ JEP 310: Application Class-Data Sharing. OpenJDK. Архів оригіналу за 21 березня 2018. Процитовано 22 березня 2018.
- ↑ а б John K. Waters (21 березня 2018). Java 10 Released, First in the New Faster Cadence. ADT Mag. Архів оригіналу за 27 березня 2018. Процитовано 27 березня 2018.
Це незавершена стаття про мови програмування. Ви можете допомогти проєкту, виправивши або дописавши її. |