Loading AI tools
З Вікіпедії, вільної енциклопедії
Scala — мультипарадигмова мова програмування, що поєднує властивості об'єктно-орієнтованого та функційного програмування. Назва Scala утворена зі слів «scalable» (масштабовна) та «language» (мова), для того щоб задекларувати, що мова може рости разом з вимогами користувачів.
Scala | |
---|---|
![]() | |
Парадигма | декілька парадигм: функційна, об'єктно-орієнтована |
Дата появи | 20 січня 2004 |
Творці | Мартін Одерски |
Розробник | Мартін Одерски |
Останній реліз | 2.12.12 (13 липня 2020 ) |
Система типізації | вивід типів, статична, строга типізація і structural typingd |
Під впливом від | Java, Pizza, Haskell, Erlang, Standard ML, Objective Caml, Smalltalk |
Мова реалізації | Scala[1] |
Платформа | віртуальна машина Java, JavaScript[2] і native[d][3] |
Операційна система | Багатоплатформна |
Ліцензія | Scala License (похідна від BSD) |
Звичайні розширення файлів | .scala або .sc |
Репозиторій вихідного коду | github.com/scala/scala |
Вебсайт | www.scala-lang.org |
Розробка Scala почалася у 2001 році у Федеральній політехнічній школі Лозанни (фр. École polytechnique fédérale de Lausanne, EPFL) Мартіном Одерски.[4] Перед цим Одерски створив узагальнення в Java і javac, компілятор мови Java.[4]
17 січня 2011 команда Scala виграла п'ятирічний дослідницький грант на €2.3 мільйонів від Європейської дослідницької ради.[6] 12 травня 2011 Одерски разом з іншими зацікавленими у розвитку Scala заснував Typesafe Inc., компанію для надання комерційної підтримки, навчання і послуг для Scala.
Програми мовою Scala виконуються на віртуальній машині Java за умови приєднання до дистрибутиву файлу scala-library.jar
. Scala сумісна із існуючими програмами мовою Java, тобто код Scala може викликатися із Java-програм і навпаки. Починаючи з версії 2.11 Scala потребує принаймні Java 6[7], а версія 2.12 потребуватиме Java 8 та матиме кращу інтеграцію із новими можливостями цієї версії Java[8].
У лютому 2015 року після двох років розробки випущено стабільну версію Scala.js — компілятора мови Scala у JavaScript[9].
До версії 2.11 існувала експериментальна реалізація для платформи .NET.[7] Дистрибутив Scala, включно з компілятором і бібліотеками, випущено під BSD-похідною ліцензією.
На Scala вплинуло багато мов[10]. Однорідна об'єктна модель вперше з'явилася у Smalltalk і згодом у Ruby. Універсальність вкладеності присутня у Algol, Simula, Beta. Принцип однорідного доступу для виклику методу і звернення до поля походить з мови Eiffel. Підхід до функційного програмування подібний до підходу родини мов ML, таких як SML, OCaml і F#. Багато функцій вищого порядку у стандартній бібліотеці Scala також наявні у ML або Haskell. Неявні параметри у Scala аналогічні класам типів Haskell. Заснована на акторах бібліотека багатозадачності подібна до Erlang.
Починаючи з версії 2.8 Scala підтримує значення аргументів за умовчанням та іменовані аргументи. Методи у Scala можуть бути вкладеними, вкладений метод бачить змінні зовнішнього. Зазвичай параметри до методу передаються за значенням (Call-by-Value) — значення аргументів обчислюється перед викликом методу і передаються до методу. Scala підтримує також передачу параметрів за назвою (Call-by-Name). У цьому разі в метод передається вираз, але обчислюється не під час виклику методу, а під час кожного звернення до нього в тілі методу.
За умовчанням рівень доступу до членів класу у Scala є загальнодоступним (public
).
Відкриття доступу підкласам (protected
), так само як у C++ і C# відкриває доступ лише підкласам, на відміну від Java, в якій protected
також отримують доступ усі класи того самого пакету. Члени з видимістю protected
доступні у інших екземплярах цього ж класу, але нащадки не мають доступу до protected
членів інших екземплярів своїх базових класів (так само як і в Java).
Члени з видимістю private
доступні лише у екземплярах цього ж класу. У Java private
обмежує доступ на рівні класу найвищого рівня вкладеності, тобто зовнішній клас може одержати доступ до private
члена внутрішнього вкладеного класу[11], що не дозволяє Scala.
У Scala protected
і private
можуть мати кваліфікатор доступу у квадратних дужках: protected[C]
. Кваліфікатор доступу члена може бути іменем зовнішнього класу чи пакету, тоді вказаний клас або всі класи, що знаходяться у вказаному пакеті отримують доступ до члена. Також кваліфікатор доступу може бути this
, тоді член доступний лише із свого екземпляру, але не доступний через інші екземпляри класу.
Супутні об'єкти (companion objects) мають спільний рівень доступу із своїми супутніми класами.
Програма, як і в Java є класом. Це приклад консольної програми, котра виводить рядок тексту на екран.
object HelloWorld {
def main(args: Array[String]) =
println("Привіт, світ!")
}
// Коротша версія
object HelloWorld extends App {
println("Привіт, світ!")
}
Часто висловлюються думки, що в довгостроковій перспективі Scala може замінити Java[12].
Згідно опитування ZeroTurnAround 2014 року 47 % Java-розробників обрали би Scala наступною мовою програмування для JVM [13]. Автор мови Groovy Джеймс Стракен розглядає Scala як заміну Java у довгостроковій перспективі, та стверджує, що якби він свого часу познайомився зі Скалою, то імовірно не створив би Груві[14]. Основний розробник JRuby Чарльз Наттер вважає Scala «наступником трону Java»[15]. Брюс Еккель, автор відомих книжок «Філософія C++» (англ. Thinking in C++) і «Філософія Java» (англ. Thinking in Java), стверджує, що Scala, зберігаючи переваги і статичної типізації, часто відчувається навіть більш лаконічною та ясною ніж мови із динамічною типізацією, такі як Python[16]. Кей Хорстман, відомий як автор книги «Основи Java» (англ. Core Java), вважає Scala найпривабливішим вибором для тих, хто хоче просунутися за межі Java чи С++[17].
У 2014 році мова Scala отримала нагороду «Технологія року» від InfoWorld [18].
Згідно з опитуванням O'Reilly, у 2015 році 10 % дослідників даних використовують Scala. Значною мірою це пов'язано із популярністю Apache Spark, яким користуються 17 % дослідників, із яких 46 % використовують одночасно Spark і Scala. Знання цих двох технологій виявилося найзначущим коефіцієнтом пов'язаним із розміром платні, яка в середньому вища на $15 000, ніж в аналогічних дослідників, що не володіють ними.[19]
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.