Overall, the year presented a mixed bag of improvements to both long-established and newer languages.
Developers followed a soap opera over Java, with major disagreements over a modularization plan for standard Java and, in a surprising twist, Oracle washing its hands of the Java EE enterprise variant.
Java’s many plot twists
Java Development Kit (JDK) 9 was released as the latest implementation of standard Java in September after disputes were resolved over its complex modularity technology. Although the module system is intended to offer benefits in scalabilty, performance, and security, key participants including Red Hat and IBM disagreed with Oracle over how to implement it.
They expressed concerns about application compatibility and voted against the initial proposal, which initially failed in a Java executive committee vote in May. But the objecting parties were satisfied enough with subsequent modifications to pass the proposal on a revote the following month, clearing way for the much-delayed release.
The Version 9 upgrade of Java is set to be followed quickly by JDK 10, due in March 2018 and featuring a garbage collector interface and a local variable-type inference.
On the Java EE enterprise side, Oracle appeared to have smoothed things over with the Java community, which had been upset with the company’s perceived neglect of the platform in 2016. In September 2016, Oracle laid out plans for retooling Java EE for environments such as the cloud.
But in August 2017, Oracle decided to divest itself of enterprise Java stewardship. The platform ended up under the jurisdiction of the Eclipse Foundation. Meanwhile, Oracle did release Java EE 8 the same time that Java 9 was released. Java EE 8 features cloud, HTML5 and HTTP/2 functionality.
Angular 4, which shipped in March, focused on building smaller applications.
TypeScript 2.6, released on Halloween, featuring a strict mode flag and error suppression comments.
TypeScript 2.5, released in August with capabilities to make it easier to do complex rewrites.
TypeScript 2.4 arrived in June with a dynamic impressions capability to make an application more resource-efficient.
TypeScript 2.3, released in April, supported ECMAScript async generators and iterators.
TypeScript 2.2, released in February, emphasized compatibility with the React Native framework for building native mobile apps.
Next up is TypeScript 2.7, due in January and featuring improved type inference for object literals.
Kotlin on the rise
Kotlin 1.2, released in November, features an experimental capability for reusing code across multiple platforms. Java 9 support was also added.
Microsoft makes quantum moves
Following up on its commitment to quantum computing, Microsoft in December launched Q# (pronounced “q sharp”), a domain-specific language expressing quantum algorithms. A set of primitive types is provided along with arrays and tuples for building new structured types. The language works with the company’s Visual Studio IDE and is featured in the Quantum Development Kit, which launched in beta in December.
C++ moves forward
This year also saw the publication of of C++ 17, focusing on making it easier to use the language. Programming conveniences included:
Structured bindings and class template argument deduction.
Developers also now can initialize variables in the scope of if and switch just as they have been able to do for loops, reducing the ceremony of the language.
Next up is C++ 20, due to be feature-complete in summer 2019 and finalized in 2020. It may include improvements for concurrency and library features.