Scala
Scala | |
---|---|
Парадигма | декілька парадигм: функційна, об'єктно-орієнтована |
Дата появи | 20 січня 2004 |
Творці | Мартін Одерски |
Розробник | Мартін Одерски |
Останній реліз | 2.12.12 (13 липня 2020 ) |
Система типізації | вивід типів, статична, строга типізація і Структурна типізація |
Під впливом від | 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 — мультипарадигмова мова програмування, що поєднує властивості об'єктно-орієнтованого та функційного програмування. Назва Scala утворена зі слів «scalable» (масштабовна) та «language» (мова), для того щоб задекларувати, що мова може рости разом з вимогами користувачів.
Розробка Scala почалася у 2001 році у Федеральній політехнічній школі Лозанни (фр. École polytechnique fédérale de Lausanne, EPFL) Мартіном Одерски.[4] Перед цим Одерски створив узагальнення в Java і javac, компілятор мови Java.[4]
- 2001 — початок розробки як практичнішого спадкоємця Funnel
- 2003 — перший експериментальний випуск, навчальний курс в університеті
- 2004 — стаття Scalable Component Abstractions, перша публічна версія
- 2005 — Scala 2.0, реалізована на Scala (перша версія — на Java), зріла версія
- 2007 — перший випуск Lift
- 18 грудня 2007 — доступна рання версія книги Programming in Scala[5]
- 2008 — Twitter використовує Scala, перша конференція Scala Lift Off
- 17 листопада 2008 — вийшла книга Programming in Scala [Архівовано 19 липня 2009 у Wayback Machine.]
- 2009 — підтримка IDE, виходять англійською мовою 3 книжки про Scala і одна про Lift
- 2010 — конференція ScalaDays, виходять 3 книжки японською мовою
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]
- ↑ The scala Open Source Project on Open Hub: Languages Page — 2006.
- ↑ http://www.scala-js.org/
- ↑ http://www.scala-native.org/
- ↑ а б Martin Odersky, «A Brief History of Scala» [Архівовано 25 вересня 2009 у Wayback Machine.], Artima.com weblogs, June 9, 2006
- ↑ Artima Publishes First (e)Book. Архів оригіналу за 15 листопада 2008. Процитовано 23 травня 2010.
- ↑ Scala Team Wins ERC Grant. Архів оригіналу за 14 липня 2013. Процитовано 4 липня 2015.
- ↑ а б Scala 2.11.0 is now available!. Архів оригіналу за 2 жовтня 2015. Процитовано 4 жовтня 2015.
- ↑ Scala 2.12 roadmap. Архів оригіналу за 2 жовтня 2015. Процитовано 4 жовтня 2015.
- ↑ Scala.js no longer experimental. Архів оригіналу за 2 жовтня 2015. Процитовано 4 жовтня 2015. [Архівовано 2015-10-02 у Wayback Machine.]
- ↑ Chapter 1 of Programming in Scala, First Edition, A Scalable Language. Архів оригіналу за 1 жовтня 2015. Процитовано 4 жовтня 2015.
- ↑ Java Language Specification: Access Control. Архів оригіналу за 5 серпня 2009. Процитовано 15 травня 2010.
- ↑ Roundup: Scala as the long term replacement for Java. Архів оригіналу за 24 вересня 2015. Процитовано 4 жовтня 2015.
- ↑ Java Tools and Technologies Landscape for 2014. Архів оригіналу за 24 вересня 2015. Процитовано 4 жовтня 2015.
- ↑ Scala as the long term replacement for java/javac?. Архів оригіналу за 10 лютого 2012. Процитовано 4 жовтня 2015.
- ↑ The Future: Part One. Архів оригіналу за 5 жовтня 2015. Процитовано 4 жовтня 2015.
- ↑ Scala: The Static Language that Feels Dynamic. Архів оригіналу за 7 липня 2015. Процитовано 4 жовтня 2015.
- ↑ Diving into Scala: A Conversation with Java Champion Cay Horstmann. Архів оригіналу за 5 вересня 2015. Процитовано 4 жовтня 2015.
- ↑ InfoWorld's 2014 Technology of the Year Award winners. InfoWorld. Архів оригіналу за 28 вересня 2015. Процитовано 8 жовтня 2015.
Привабливе поєднання у мові Scala об’єктно-орієнтованої та функційної парадигм програмуваня одержало істотний розиток з часу її появи у 2003 році. Scala продемонструвала можливість мати переваги статичної типізації під час компіляції з дуже потужною системою типів, зберігаючи риси "швидкої розробки програмного забезпечення" і продуктивності, яка зазвичай пов’язується з мовами із динамічною типізацією. Завдяки чудовій підтримці паралельного програмування моделлю акторів та визначним підтримуючим бібліотекам і фреймворкам, таким як Akka і Play, Scala готова бути значним основним гравцем на десятиліття.
- ↑ 2015 Data Science Salary Survey. Архів оригіналу за 27 вересня 2015. Процитовано 8 жовтня 2015.
- Odersky, Martin; Spoon, Lex; Venners, Bill (26 листопада 2008), Programming in Scala: A Comprehensive Step-by-step Guide (вид. 1st), Artima Inc, с. 776, ISBN 0981531601, архів оригіналу за 19 липня 2009, процитовано 23 травня 2010
- 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, архів оригіналу за 19 грудня 2010, процитовано 24 травня 2010
- Wampler, Dean; Payne, Alex (15 вересня 2009), Programming Scala: Scalability = Functional Programming + Objects (вид. 1st), O'Reilly Media, с. 448, ISBN 0596155956, архів оригіналу за 10 березня 2010, процитовано 7 травня 2010
- Meredith, Gregory (25 квітня 2010), Pro Scala: Monadic Design Patterns for the Web (вид. 1st), Apress, с. 300, ISBN 143022844X
- www.scala-lang.org [Архівовано 5 липня 2010 у Wayback Machine.] Офіційний вебсайт проєкту
- Functional Programming Principles in Scala [Архівовано 30 березня 2017 у Wayback Machine.] — курс Мартіна Одерськи на coursera.
Це незавершена стаття про мови програмування. Ви можете допомогти проєкту, виправивши або дописавши її. |
- Мови програмування
- Scala
- Статично-типізовані мови програмування
- Функціональні мови програмування
- Вільні компілятори та інтерпретатори
- Багатоплатформне вільне програмне забезпечення
- Мови програмування зі співставленням з шаблоном
- Скриптові мови
- Програмне забезпечення, що використовує ліцензію Apache
- Статті з прикладами коду мовою Scala