Scala
Scala — мультипарадигмова мова програмування, що поєднує властивості об'єктно-орієнтованого та функційного програмування. Назва Scala утворена зі слів «scalable» (масштабовна) та «language» (мова), для того щоб задекларувати, що мова може рости разом з вимогами користувачів.
Scala | |
---|---|
Парадигма | декілька парадигм: функційна, об'єктно-орієнтована |
Дата появи | 20 січня 2004 |
Творці | Мартін Одерски |
Розробник | Мартін Одерски |
Останній реліз | 2.12.12 (13 липня 2020 ) |
Система типізації | вивід типів, статична, строга типізаціяd і structural typingd |
Під впливом від | Java, Pizza, Haskell, Erlang, Standard ML, Objective Caml, Smalltalk |
Платформа | Віртуальна машина Java, JavaScript[1] і Native[2] |
Операційна система | Багатоплатформна |
Ліцензія | Scala License (похідна від BSD) |
Звичайні розширення файлів |
.scala або .sc |
Репозиторій вихідного коду | github.com/scala/scala |
Вебсайт | www.scala-lang.org |
Історія
Розробка Scala почалася у 2001 році у Федеральній політехнічній школі Лозанни (фр. École polytechnique fédérale de Lausanne, EPFL) Мартіном Одерски.[3] Перед цим Одерски створив узагальнення в Java і javac, компілятор мови Java.[3]
- 2001 — початок розробки як практичнішого спадкоємця Funnel
- 2003 — перший експериментальний випуск, навчальний курс в університеті
- 2004 — стаття Scalable Component Abstractions, перша публічна версія
- 2005 — Scala 2.0, реалізована на Scala (перша версія — на Java), зріла версія
- 2007 — перший випуск Lift
- 18 грудня 2007 — доступна рання версія книги Programming in Scala[4]
- 2008 — Twitter використовує Scala, перша конференція Scala Lift Off
- 17 листопада 2008 — вийшла книга Programming in Scala
- 2009 — підтримка IDE, виходять англійською мовою 3 книжки про Scala і одна про Lift
- 2010 — конференція ScalaDays, виходять 3 книжки японською мовою
17 січня 2011 команда Scala виграла п’ятирічний дослідницький грант на €2.3 мільйонів від Європейської дослідницької ради.[5] 12 травня 2011 Одерски разом із іншими зацікавленими у розвитку Scala заснував Typesafe Inc., компанію для надання комерційної підтримки, навчання і послуг для Scala.
Платформа
Програми мовою Scala виконуються на віртуальній машині Java за умови приєднання до дистрибутиву файлу scala-library.jar
. Scala сумісна із існуючими програмами мовою Java, тобто код Scala може викликатися із Java-програм і навпаки. Починаючи з версії 2.11 Scala потребує принаймні Java 6[6], а версія 2.12 потребуватиме Java 8 та матиме кращу інтеграцію із новими можливостями цієї версії Java[7].
У лютому 2015 року після двох років розробки випущено стабільну версію Scala.js — компілятора мови Scala у JavaScript[8].
До версії 2.11 існувала експериментальна реалізація для платформи .NET.[6] Дистрибутив Scala, включно з компілятором і бібліотеками, випущено під BSD-похідною ліцензією.
Мова
Вплив
На Scala вплинуло багато мов[9]. Однорідна об'єктна модель вперше з'явилася у 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
члена внутрішнього вкладеного класу[10], що не дозволяє 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[11].
Згідно опитування ZeroTurnAround 2014 року 47% Java-розробників обрали би Scala наступною мовою програмування для JVM [12]. Автор мови Groovy Джеймс Стракен розглядає Scala як заміну Java у довгостроковій перспективі, та стверджує, що якби він свого часу познайомився зі Скалою, то імовірно не створив би Груві[13]. Основний розробник JRuby Чарльз Наттер вважає Scala "наступником трону Java" [14]. Брюс Еккель, автор відомих книжок «Філософія C++» (англ. Thinking in C++) і «Філософія Java» (англ. Thinking in Java), стверджує, що Scala, зберігаючи переваги і статичної типізації, часто відчувається навіть більш лаконічною та ясною ніж мови із динамічною типізацією, такі як Python[15]. Кей Хорстман, відомий як автор книги «Основи Java» (англ. Core Java), вважає Scala найпривабливішим вибором для тих, хто хоче просунутися за межі Java чи С++[16].
У 2014 році мова Scala отримала нагороду «Технологія року» від InfoWorld [17].
Згідно опитування O'Reilly у 2015 році 10% дослідників даних використовують Scala. Значною мірою це пов’язано із популярністю Apache Spark, яким користуються 17% дослідників, із яких 46% використовують одночасно Spark і Scala. Знання цих двох технологій виявилося найзначущим коефіцієнтом пов’язаним із розміром платні, яка в середньому вища на $15000 ніж у аналогічних дослідників, що не володіють ними.[18]
Див. також
Примітки
- http://www.scala-js.org/
- http://www.scala-native.org/
- Martin Odersky, "A Brief History of Scala", Artima.com weblogs, June 9, 2006
- Artima Publishes First (e)Book
- Scala Team Wins ERC Grant. Процитовано 4 липня 2015.
- Scala 2.11.0 is now available!
- Scala 2.12 roadmap
- Scala.js no longer experimental
- Chapter 1 of Programming in Scala, First Edition, A Scalable Language
- Java Language Specification: Access Control
- Roundup: Scala as the long term replacement for Java
- Java Tools and Technologies Landscape for 2014
- Scala as the long term replacement for java/javac?
- The Future: Part One
- Scala: The Static Language that Feels Dynamic
- Diving into Scala: A Conversation with Java Champion Cay Horstmann
- InfoWorld's 2014 Technology of the Year Award winners. InfoWorld. «Привабливе поєднання у мові Scala об’єктно-орієнтованої та функційної парадигм програмуваня одержало істотний розиток з часу її появи у 2003 році. Scala продемонструвала можливість мати переваги статичної типізації під час компіляції з дуже потужною системою типів, зберігаючи риси "швидкої розробки програмного забезпечення" і продуктивності, яка зазвичай пов’язується з мовами із динамічною типізацією. Завдяки чудовій підтримці паралельного програмування моделлю акторів та визначним підтримуючим бібліотекам і фреймворкам, таким як Akka і Play, Scala готова бути значним основним гравцем на десятиліття.»
- 2015 Data Science Salary Survey
Література
- Odersky, Martin; Spoon, Lex; Venners, Bill (26 листопада 2008). Programming in Scala: A Comprehensive Step-by-step Guide (вид. 1st). Artima Inc. с. 776. ISBN 0981531601.
- Pollak, David (25 травня 2009). Beginning Scala (вид. 1st). Apress. с. 776. ISBN 1430219890. Архів оригіналу за 5 грудня 2010. Процитовано 24 травня 2010.
- Subramaniam, Venkat (28 липня 2009). Programming Scala: Tackle Multi-Core Complexity on the Java Virtual Machine (вид. 1st). Pragmatic Bookshelf. с. 250. ISBN 193435631X.
- Wampler, Dean; Payne, Alex (15 вересня 2009). Programming Scala: Scalability = Functional Programming + Objects (вид. 1st). O'Reilly Media. с. 448. ISBN 0596155956.
- Meredith, Gregory (25 квітня 2010). Pro Scala: Monadic Design Patterns for the Web (вид. 1st). Apress. с. 300. ISBN 143022844X.
Посилання
- www.scala-lang.org Офіційний вебсайт проєкту
- Functional Programming Principles in Scala - курс Мартіна Одерськи на coursera.