Skip to content

Releases: JetBrains/kotlin

Kotlin 1.0.0 Release Candidate

04 Feb 13:36
Compare
Choose a tag to compare
Pre-release

Important notes

To get rid of all the old code, this version requires recompilation of all dependencies.

EAP users must recompile their code as well, although the compiler won't demand this (IllegalAccessError is likely to be thrown at runtime)

What's new

  • Language
    • new @delegate: use-site target for annotation (e.g. @delegate:Transient)
    • private top-level Kotlin classes should be compiled to package private java classes
    • unfinished multiline comment is an error
    • previously deprecated language constructs are now errors
    • type ckecking for use-site variance fixed
    • generic functions are compared for specificity through solving a constraint system
    • having multiple vararg parameters for one function is prohibited
    • super-calls to functions with default parameters are prohibited (pass all arguments explicitly)
    • implicit receiver behavior fixed
    • as-import removes original names if they were imported before
    • user code is not allowed in kotlin.** packages
    • type parameters of extension properties allowed to be indirectly used by the receiver type
    • members of private classes can-not be accessed from non-private inline functions
  • Java interop
    • forEach from Kotlin's library is preferred to forEach from java.lang.Iterable
    • synthesized declarations (like JavaBeans properties and SAM-converted methods) are now resolved on par with members
    • support added for Java setters that return values
    • previously depreacted Java declarations removed from generated code
    • private setters allowed for lateinit properties
    • wildcards are not generated for redundant type projections (use List<@JvmWildcard Foo> instead of List<out Foo>)
    • @Nullable/@NotNull annotations from different standard Java packages recognized (javax.annotations, Guava, Android, etc)
  • Standard Library
    • diagnostics for multiple conflicting Kotlin runtime versions in classpath
    • some functions have been made inline
    • many inline functions (most of them one-liners) can no longer be called from Java code. This will help us reduce the size of the runtime library in the future.
    • library code rearranged into more granular packages (no source changes should be required)
    • associate and associateBy are added to aid construction of maps
      associate and associateBy (instead of toMap/toMapBy)
    • groupBy with key- and value-selector functions
    • Map.getOrElse() and Map.getOrPut() now treat keys associated with null values as missing.
    • Map.getOrImplicitDefault() has been made internal
    • mutableListOf, mutableSetOf, mutableMapOf added to construct mutable collections. linkedListOf is deprecated
    • toMutableList added instead of toArrayList. The latter is deprecated
    • kotlin.system.exitProcess instead of System.exit
    • File.deleteRecursively only returns false in case of incomplete deletion
    • File.copyRecursively allows overwriting by specifying argument overwrite=true
    • changed File.copyTo behavior to be like Files.copy from JDK8.
    • more specific return type for File.inputStream, File.outputStream, String.byteInputStream.
    • IO utility functions taking charset name as a string are deprecated, use ones with Charset parameter.
    • File.useLines and Reader.readLines are introduced
    • File.(buffered)reader/writer now return less specific InputStreamReader/OutputStreamWriter and use UTF-8 encoding by default
    • Sequence and Iterable SAM constructor-like functions
    • Comparator- and comparison-related functions are moved to kotlin.comparisons package (not imported by default)
    • new properties in MatchResult: groupValues and destructured — provided for easier handling of regular expression match results
    • Lazy is now an interface open for implementation
    • kotlin.system.measureTimeNano renamed to measureNanoTime.
    • plusElement and minusElement functions as a synonyms for list + element and list - element.
    • kotlin.test.assertFailsWith with Class<T> parameter is deprecated, use an overload with KClass<T>.
    • toLinkedMap is deprecated.
    • UTF_32 charset properties added to Chatsets
  • Tools
    • To enable Android Extensions, use: apply plugin: 'kotlin-android-extensions'
  • IDE
    • Intention to replace iteration over map entries with a loop using a destructuring declaration
    • Inspection and quickfix to cleanup redundant visibility modifiers
    • Inspection to replace 'assert' calls checking that a variable is not null with !! or ?: error(...)
    • Show "Kotlin not configured" notification when opening a .kt file in the IDE if the Kotlin runtime is not configured for the corresponding module
    • Action to generate the toString() method
    • Support for implementing members by primary constructor parameters
    • Parameter info popup works for showing type parameters
    • Completion offers name variants based on unresolved identifiers in current file
    • Quickfix for adding missing branches to a when expression
    • Support for moving nested classes to the upper level or into another top-level class
    • @Suppress now works for IDE inspections

Kotlin 1.0.0 Beta 4 Update 2

20 Jan 11:47
Compare
Choose a tag to compare
Pre-release

Bugfix update:

  • Gradle Plugin for Android
  • Instant Run support for Android Studio
  • Compatibility with IntelliJ IDEA 16

Kotlin 1.0.0 Beta 4

24 Dec 16:35
Compare
Choose a tag to compare
Kotlin 1.0.0 Beta 4 Pre-release
Pre-release

Hot-fix update: Wrong JDK in class path for Android

See What's new here

Kotlin 1.0.0 Beta 4

22 Dec 18:24
Compare
Choose a tag to compare
Kotlin 1.0.0 Beta 4 Pre-release
Pre-release

Language

  • Primary constructor is resolved in the same scope as secondary constructors
  • yield is reserved as a keyword
  • async is reserved in some contexts
  • typeof is reserved as a keyword. In JS, use jsTypeOf()
  • sealed when reserved
  • Multiple fixes in the overload resolution algorithm.
    • The curious case of File.listFiles
  • KPropertyN now extend FunctionN, i.e. list.map(String::length) works now
  • Duplicate bounds for type parameters forbidden
  • Multiple class bounds for type parameters forbidden
  • Array<Nothing> and Array<Nothing?> are prohibited
  • if with no else is not an expression
  • values() and valueOf() in enums are preferred to member of companion objects
  • Better scheme of translation of variant types to Java
  • @JvmSuppressWildards and @JvmWildcard added
  • Statics inherited by companion object are visible without qualification in the outer class and its subclasses
  • Absolute package references dropped. Use alias imports instead
  • Overloads are compared according to actual arguments only
  • Deprecations lifted to errors: Enum.values, local sealed classes, private setter for open property

Library

  • kotlin-test.jar extracted
  • Extensions are moved to specific packages (no source changes required for Kotlin code)
  • javaPrimitiveType and javaObjectType added for KClass
  • IntArray(5) { it * 3 } and other initializers supported for primitive arrays
  • Semantics of null in maps is going to change
  • minWith(comparator)/maxWith(comparator) supported
  • toMap((T) -> Pair<K,V>)` supported
  • FileTreeWalk:
    • constructor is deprecated, preferred construction with fluent builder methods
    • treeFilter is deprecated, recursive filtering now happens in onStart
  • File utilities behavior changes and deprecations

IDE

  • New precise incremental compilation (experimental)
  • Rename for unresolved references
  • Create From Usage for callable references
  • Go to Test and Create Test for top-level functions
  • Intention to convert anonymous function to a lambda
  • Go to Class and Search Everywhere show Kotlin built-in types
  • Debugger: Skip simple getters supported

Kotlin 1.0.0 Beta 3

07 Dec 11:49
Compare
Choose a tag to compare
Kotlin 1.0.0 Beta 3 Pre-release
Pre-release

What's new

  • Library
    • increment deprecated in Progressions in favor of step property to Progressions, for-loops updated to refer to step
    • contains() and other similar extensions now accept supertypes of the element of the collection
    • Delegates.mapVal and mapVar, MapVal, MapVar, FixedMapVal, FixedMapVar are deprecated
    • String.toCharArray() introduced instead of String.getChars(); String.toCharList() deprecated
    • MutableCollection.removeAll(predicate: (T) -> Boolean) and similar for retainAll added
    • sequence(initialValueFunction, nextValueFunction) doesn't evaluate first value until it's requested by sequence iterator
    • sequenceOf(Progression) deprecated
    • flatten operation for Sequence<Iterable<...>> added
  • Language
    • No references to PropertyMetadata are generated in the byte code
    • Suffixes to numeric literals, such as 1baz are prohibited
    • Comma-separated conditions in when without an argument are prohibited (KT-5143)
    • Annotation classes can't be instantiated (KT-4391)
    • Arrays of annotations supported as annotation arguments (KT-10136)
    • Generic types in catch clauses (including reified T) are prohibited (KT-9816)
    • protected members are allowed in companion objects
    • Calls to non-@JvmStatic protected members of companion objects from subclasses are marked as errors (unsupported)
    • "" is reserved as a token (KT-9708)
    • Enum entry can not be used as a type (KT-5401)
    • Enum.values is deprecated in favor of Enum.values()
    • private setters are now deprecated for open properties
    • Local sealed classes are deprecated
    • Use of uninitialized variables in lambdas / object literals / local functions is forbidden
    • Overriding setter cannot weaken visibility
    • Inner classes are no longer allowed inside enum entries
    • Implicit receiver smart casts are supported
    • Older deprecations have become errors

build-1.0.0-beta-3594

04 Dec 09:36
Compare
Choose a tag to compare
build-1.0.0-beta-3594 Pre-release
Pre-release

Kotlin 1.0.0 Beta 2

16 Nov 16:52
Compare
Choose a tag to compare
Kotlin 1.0.0 Beta 2 Pre-release
Pre-release

What's New

  • Language
    • Single-instantiation inheritance for type parameters
    • More precise "smart cast impossible" (the reason is given now)
    • "Always null" warningadded
  • Library
    • Ranges
      • Double and Float progressions are dropped
      • Byte and Short progressions are deprecated, the .. operator for bytes and shorts now returns IntRange
      • Range<T> renamed to ClosedRange<T> and its end property renamed to endInclusive
      • Progression<T> is deprecated in favor of concrete progression implementations instead: IntProgression, LongProrgession, CharProgression
      • start and end properties in progressions are renamed to first and last
    • kotlin.dom and kotlin.browser moved out as a separate library: kotlinx.dom
    • Strings/CharSequences
      • String utility extensions were generalized to take CharSequence where possible
    • Added
      • in-place reversing and sorting for MutableLists and Arrays
      • naturalOrder and reverseOrder comparators
      • mapNotNull, mapIndexedNotNull, filterIndexed
      • String.toByte()
    • Сhanged
      • Explicit type parameter specification for filterIsInstance now is required
    • Deprecated
      • Function.toGenerator
      • toLinkedList
    • Dropped
      • join, merge
      • Delegates.lazy
      • FileTreeWalk.filter, File.recurse, BufferedReader.lines and lineIterator
      • assert, check and require with non-lazy message argument
  • IDE
    • Completion of java static members and members from objects on second Ctrl-Space
    • Intention action to import Java statics, object members or enum entries
    • Intention action to import all Java static members from the given class or enum entries from the given enum class
    • Completion in string templates works after "$name."
    • Debugger supports choosing where to put a breakpoint: inside or outside a single-lined lambda

Kotlin 1.0. Beta

02 Nov 10:38
Compare
Choose a tag to compare
Kotlin 1.0. Beta Pre-release
Pre-release

Bug fixes

  • Semantics of companion object initialization fixed, INSTANCE field deprecated for companion objects
  • Use-site targets fixed for @JvmName
  • Exposing Java package-private types through internal declarations is allowed
  • Access to Enum.values from within enums fixed
  • Issues with Android 4 and DefaultImpls classes fixed
  • Method count optimized for delegated properties on Android
  • Two main() functions can't appear in the same file

Kotlin 1.0.0 Beta Candidate

22 Oct 12:12
Compare
Choose a tag to compare
Pre-release

Language

  • Imports from objects
  • @Deprecated supports ERROR and HIDDEN levels (@HiddenDeclaration is deprecated)
  • Smart casts for captured local var's that are not modified in lambdas
  • Single-file classes can have many main()'s
  • internal visibility checked in the compiler
  • No defensive copying needed for varargs
  • All Java methods with matching signatures are operators
  • Rename: unaryMinus/unaryPlus for unary operators
  • Rename: getValue/setValue for delegated properties
  • Checks for operator signatures at declarations sites
  • infix modifier for infix functions
  • Rename sparam annotation target to setparam
  • @UnsafeVariance annotation
  • fun foo<T>() deprecated in favor of fun <T> foo()
  • Constraints on type parameters should occur either in where or in <…>
  • x is Array<Foo> forbidden in favor of x is Array<*> && x.isArrayOf<Foo>()
  • Callable references restricted to support bound references later
  • PropertyMetadata deprecated in favor of KProperty<*>
  • if with no else in expression position is an error
  • Letters and digits right before/after string and char literals are prohibited
  • invoke convention for extension functions is removed
  • Visibility requirements for members
  • Protected members in objects are prohibited
  • final in interfaces is prohibited
  • Visibility for local classes is prohibited
  • Local interfaces are prohibited
  • Private setters for non-private lateinit vars are prohibited
  • Nothing-returning functions must declare return type explicitly
  • Annotations on multi-declarations are prohibited
  • Checks for escaped identifiers (backticks) to conform to JVM requirements
  • Supertypes of the form T.() -> Foo are prohibited
  • Foo<Int>.Bar is prohibited
  • Type parameters for properties are prohibited unless they are used in the receiver type
  • Parameter annotations and default values in function types are prohibited
  • inline properties are prohibited
  • ;; is reserved for future use

Libraries

  • Formerly deprecated declarations have been dropped
  • size(), length() etc are made properties
  • List.remove(int) is renamed to removeAt
  • Collection<E>.contains(Any?), Map<K, V>.get(Any?) and other similar function are now type-safe: contains(E), get(K)
  • containsRaw, getRaw extensions and alike are defined for the Java-like utyped behavior
  • Regex API changes: matchEntire added, match/matchAll renamed to find/findAll, also regex in string can be used isntead of regex.hasMatch(string)
  • listOf() doesn't make a defensive copy
  • StringBuilder {} function deprecated in favor of buildString {}
  • Rename: merge -> zip, join removed (use joinToString), mapNotNull deprecated to be changed later

Java interop

  • Java classes inherit static from supertypes
  • List<Nothing> is compiled to raw List to facilitate subtyping in Java
  • Support "static overrides" for Java fields
  • Top-level privates are private to file
  • Names of internal functions and properties are mangled
  • Kotlin classes see inherited statics and members of inherited companion objects
  • @Synchronized and @Volatile are inapplicable to unimplemented functions
  • isFoo() instead of getIsFoo() for properties named isFoo
  • Old package facades are dropped
  • Inheritance rules comply with Java 8
  • is distinguishes MutableList from List and supports functions of different arities
  • Int, String and other basic types are Serializable
  • @JvmField is required to make something a field
  • INSTANCE for objects (instead of INSTANCE$)
  • Constant pool stings are resued to reduce metadata sizes
  • @KotlinSignature is deprecated
  • Java sees defaul implementations of methods in the interface Foo as statics in Foo.DefaultImpls class
  • Constants from Java libraries are inlined into Kotlin byte code
  • @publicField is deprecated

Tools

  • Compiler daemon enabled by default in the IDE
  • Parallel Compilation of Independent Modules in the daemon mode
  • External annotations support removed

IDE

  • Parameter Info everywhere
  • Completion for callable references after ::
  • Actions to generated equals()/hashCode()
  • Actions to generate secondary constructors
  • '*'-imports configuration
  • Unit-testing support

Kotlin M14

01 Oct 12:16
Compare
Choose a tag to compare
Kotlin M14 Pre-release
Pre-release

What's new

  • Language
    • New syntax for backing field access
    • Operators require a modifier (operator)
    • Compile-time constants are prefixed with const
    • Annotations on file classes supported
    • private on the top level is now private to file
    • internal is checked in the compiler (not only IDE)
    • private in interfaces is truly private now
    • equals in data classes compares arrays by calling their .equals() method (which works by identity)
    • lateinit val‘s are prohibited
    • many cases of inheritance and other degrees of freedom are prohibited for data classed (see this blog post)
    • protected and internal members are prohibited in interfaces
    • _, __, ___ are forbidden as in identifiers
    • identityEquals() function is deprecated in favor of ===
  • Standard Library API subdivided into part classes such as CollectionsKt
  • IDE
    • Introduce backing property refactoring
    • Move property initializer to declaration refactoring
    • Add unambiguous imports on-the-fly
    • Completion for overridden members