Paradigm | Multi-paradigm: functional, object-oriented, imperative, concurrent |
---|---|
Designed by | Martin Odersky |
Developer | Programming Methods Laboratory of École Polytechnique Fédérale de Lausanne |
First appeared | January 20, 2004 |
Stable release |
2.12.1 / December 5, 2016
|
Typing discipline | static, strong, inferred, structural |
Implementation language | Scala |
Platform | JVM, JavaScript,LLVM (experimental) |
License | BSD 3-clause |
Filename extensions | .scala, .sc |
Website | www |
Influenced by | |
Eiffel, Erlang, Haskell,Java,Lisp,Pizza,Standard ML,OCaml,Scheme,Smalltalk, Oz | |
Influenced | |
Ceylon, Fantom, F#, Kotlin, Lasso, Red | |
|
Scala (/ˈskɑːlɑː/ SKAH-lah) is a general-purpose programming language providing support for functional programming and a strong static type system. Designed to be concise, many of Scala's design decisions were designed to build from criticisms of Java.
Scala source code is intended to be compiled to Java bytecode, so that the resulting executable code runs on a Java virtual machine. Scala provides language interoperability with Java, so that libraries written in both languages may be referenced directly in Scala or Java code. Like Java, Scala is object-oriented, and uses a curly-brace syntax reminiscent of the C programming language. Unlike Java, Scala has many features of functional programming languages like Scheme, Standard ML and Haskell, including currying, type inference, immutability, lazy evaluation, and pattern matching. It also has an advanced type system supporting algebraic data types, covariance and contravariance, higher-order types (but not higher-rank types), and anonymous types. Other features of Scala not present in Java include operator overloading, optional parameters, named parameters, raw strings, and no checked exceptions.