Главная » 2017 » Октябрь » 31 » Scala (язык программирования)
00:31
Scala (язык программирования)
[править | править вики-текст]
Материал из Википедии — свободной энциклопедии
Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 1 февраля 2017;
проверки требуют 3 правки.
Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 1 февраля 2017;
проверки требуют 3 правки.


Перейти к: навигация, поиск

У этого термина существуют и другие значения, см. Scala.

Scala

Класс языка

Мультипарадигмальный: функциональный, объектно-ориентированный, императивный

Появился в

2003

Автор

Мартин Одерски

Выпуск

2.12.1 (5 декабря 2016)[1]

Система типов

статическая, строгая, с автовыведением типов, структурная

Испытал влияние

Java, Haskell, Erlang, Standard ML, Objective Caml, Smalltalk, Scheme, Algol68, Lisp

Повлиял на

Kotlin

Лицензия

BSD

Платформа

Java Virtual Machine, JavaScript[2] и Native[d][3]

Сайт

scala-lang.org

Scala — мультипарадигмальный язык программирования, спроектированный кратким и типобезопасным для простого и быстрого создания компонентного программного обеспечения, сочетающий возможности функционального и объектно-ориентированного программирования.
Первые версии языка созданы в 2003 году коллективом лаборатории методов программирования Федеральной политехнической школы Лозанны под руководством Мартина Одерски, язык реализован для платформ Java и .Net. По мнению Джеймса Стрэчена (англ. James Strachan), создателя языка программирования Groovy, Scala может стать преемником языка Java[4].

Содержание
 [скрыть] 

1 История

1.1 Истоки дизайна

2 Ключевые аспекты языка

2.1 Объектно-ориентированный язык
2.2 Функциональный язык
2.3 Повторное использование и адаптация

3 Примеры программ
4 Интеграция с Java
5 Использование
6 Примечания
7 Литература

7.1 Англоязычная
7.2 Русскоязычная

8 Ссылки

История[править | править вики-текст]
Язык был создан в 2001—2004 годах в Лаборатории методов программирования EPFL. Он стал результатом исследований, направленных на разработку улучшенной языковой поддержки компонентного программного обеспечения. За основу при разработке языка были взяты две идеи:

Язык программирования компонентного ПО должен быть масштабируемым в том смысле, что должна быть возможность с помощью одних и тех же концепций описать как маленькие, так и большие части. Поэтому внимание было сконцентрировано на механизмах абстракции, композиции и декомпозиции вместо введения большого количества примитивов, которые могут быть полезными только на каком-то одном уровне масштабирования.
Масштабируемая поддержка компонентов может быть предоставлена языком программирования, унифицирующим и обобщающим объектно-ориентированное и функциональное программирование. Некоторые из основных технических новшеств Scala — это концепции, представляющие собой сплав этих парадигм программирования. В статически типизированных языках, к которым относится Scala, эти парадигмы до сих пор были почти полностью разделены.

Язык был выпущен для общего пользования на платформе JVM в январе 2004 года и на платформе .NET в июне 2004 года, в 2016 году создан LLVM-компилятор (Scala Native)[5].
Истоки дизайна[править | править вики-текст]
На дизайн языка оказали влияние многие языки и исследовательские работы.
Прежде всего, язык впитал значительное число концепций и синтаксических соглашений Java и C#. Способ выражения свойств во многом заимствован из Sather (англ.). Из Smalltalk взята концепция унифицированной объектной модели. Из BETA пришла идея, что всё, включая классы, должно допускать вложенность. Абстрактные типы в Scala очень похожи на абстрактные типы сигнатур в SML и OCaml, обобщённые в контексте полноценных компонентов.
В некотором смысле Scala — это продолжение работы Pizza (англ.). Как и Pizza, Scala компилируется под Java VM, добавляя функции высшего порядка, сопоставление с образцом, конструкции, которые исходно были созданы в сообществе функционального программирования. В то время как Pizza обратно совместима с Java, цель Scala — всего лишь возможность взаимодействия, так что у неё больше степеней свободы в дизайне. Ещё одна цель Scala — предоставить расширенные конструкции для абстракции и композиции компонентов — общая с несколькими недавними исследовательскими разработками.
Ключевые аспекты языка[править | править вики-текст]
Scala-программы во многом похожи на Java-программы, и могут свободно взаимодействовать с Java-кодом. Язык включает единообразную объектную модель — в том смысле, что любое значение является объектом, а любая операция — вызовом метода. При этом является также функциональным языком в том смысле, что функции — это полноправные значения.
В Scala включены мощные и единообразные концепции абстракций как для типов, так и для значений. В частности, язык содержит гибкие симметричные конструкции примесей для композиции классов и типажей. Возможно позволяет производить декомпозицию объектов путём сравнения с образцом; образцы и выражения при этом были обобщены для поддержки естественной обработки XML-документов. В целом, эти конструкции позволяют легко выражать самостоятельные компоненты, использующие библиотеки Scala, не пользуясь специальными языковыми конструкциями.
Язык допускает внешние расширения компонентов с использованием представлений (views). Возможности обобщённого программирования реализуются за счёт поддержки обобщённых функций (generics), в том числе высшего типажа (generics of a higher kind). Кроме различных классических структурных типов данных, в язык включена поддержка экзистенциальных типов.
Объектно-ориентированный язык[править | править вики-текст]
В языке используется чистая объектно-ориентированная модель, похожая на применяемую в Smalltalk: каждое значение — это объект, и каждая операция — это отправка сообщения. Например, сложение x+y интерпретируется как x.+(y), то есть как вызов метода + с аргументом y и x в качестве объекта-приёмника. Рассмотрим другой пример: 1+2. Это выражение интерпретируется как (1).+(2).Обратите внимание, что скобки вокруг чисел обязательны, потому что лексический анализатор Scala разбивает выражение на лексемы по принципу самого длинного возможного сопоставления. Таким образом, выражение 1.+(2) разобьется на лексемы 1.,+ и 2, потому что лексема 1. длиннее лексемы 1 и первый аргумент сложения будет интерпретирован, как тип Double вместо Int[6].
Функциональный язык[править | править вики-текст]
Каждая функция — это значение. Язык предоставляет легковесный синтаксис для определения анонимных и каррированных функций. Каждая конструкция возвращает значение. Сопоставление с образцом естественно применимо к обработке XML с помощью регулярных выражений.
Повторное использование и адаптация[править | править вики-текст]
Каждая компонентная система с мощными конструкциями абстракции и композиции сталкивается с проблемой, когда дело доходит до интеграции подсистем, разработанных различными командами в разное время. Проблема состоит в том, что интерфейс компонентов, разработанных той или иной группой, часто не подходит клиентам, намеренным использовать этот компонент.
Scala представляет новую концепцию решения проблемы внешней расширяемости — представления (views). Они позволяют расширять класс новыми членами и типажами. Представления в Scala в некотором смысле соответствуют классам типов, используемым в Haskell, но в отличие от классов типов, область видимости представлений можно контролировать, причём в разных частях программы могут сосуществовать параллельные представления.
Примеры программ[править | править вики-текст]
Программа, как и в Java, представляет собой класс. Это пример консольной программы, которая выводит строчку текста на экран.

object HelloWorld {
def main(args: Array[String]) =
println("Привет, МИР!")
}

// Более короткая версия
object HelloWorld extends App {
println("Привет, МИР!")
}

Следующий простой пример программы написан на Java, Scala и C#, демонстрирующий некоторые различия в синтаксисе (постфиксная запись типов переменных, отсутствие специального синтаксиса для доступа к массивам). В этом примере описывается консольная программа, которая выводит все опции, переданные через командную строку. Опции начинаются с символа «-» (минус).

// Java:
class PrintOptions {
public static void main(String args[]) {
System.out.println("Выбраны опции:");
for (String arg: args) if (arg.startsWith("-")) System.out.println(" " + arg.substring(1));
}
}

// Scala:
object PrintOptions {
def main(args: Array[String]) {
println("Выбраны опции:")
for (arg <- args if arg startsWith "-") println(" " + (arg substring 1))
}
}

// В функциональном стиле Scala:
object PrintOptions {
def main(args: Array[String]) =
println("Выбраны опции:" +: (args filter (_ startsWith "-") map (" " + _.drop(1))) mkString "\n")
}

// В функциональном стиле C#:
class PrintOptions {
static void Main(String[] args) {
Console.WriteLine("Выбраны опции:" + args.Where(x => x.StartsWith("-")).Aggregate((r, x) => r + " " + x.Substring(1)));
}
}

// В функциональном стиле Java:
class PrintOptions {
public static void main(String[] args) {
System.out.println("Выбраны опции:");
Arrays.stream(args).filter(o -> o.startsWith("-")).forEach(o -> System.out.println(" " + o.substring(1)));
}
}

В Scala объявляется не класс объекта, а сразу экземпляр объекта. Так естественным способом реализуется шаблон проектирования, где в программе должен быть только один экземпляр класса («Одиночка» — «Singleton»).
Пример программы, которая суммирует все элементы списка, который передаётся через аргументы:

object Main {
def main(args: Array[String]) {
try {
println("Сумма аргументов: " + args.map(_.toInt).sum)
} catch {
case e: NumberFormatException =>
println("Ошибка в аргументах. Использовать следует так: scala Main <число1> <число2> ... ")
}
}
}

На Java:

public class Main {

public static void main(String[] args) {
try {
System.out.println("Сумма аргументов: " + Arrays.stream(args).mapToInt(Integer::parseInt).sum());
} catch (NumberFormatException e) {
System.out.println("Ошибка в аргументах. Использовать следует так: java Main <число1> <число2> ... ");
}
}
}

С помощью метода map перебираются все аргументы. Все они преобразовываются в целое число методом Integer.parseInt и добавляются в список (массив) elems. Затем с помощью метода свёртки списка foldRight вычисляется сумма элементов.
Интеграция с Java[править | править вики-текст]
Scala может взаимодействовать с кодом, написанным на Java. Все классы из пакета java.lang уже подключены по умолчанию, в то же время другие должны быть подключены явно.
Использование[править | править вики-текст]
Основные веб-фреймворки, написанные на Scala — Play, Lift. Среди их пользователей отмечены ряд крупных сервисов, в частности, Play используют Gilt и Coursera[7], а Foursquare — Lift[8].
Социальная сеть LinkedIn использует микрофреймворк Scalatra для поддержки своего Signal API[9].
В апреле 2009 года Twitter объявил, что перевёл значительную часть своего серверного кода с Ruby на Scala и собирается перевести оставшийся[10]. В апреле 2011 онлайн-версия газеты The Guardian была переведена с Java на Scala[11].
Проекты фонда Apache Apache Spark, Apache Ignite (свободная версия основного продукта компании GridGain) и Apache Kafka написаны в основном на Scala.
Одним из активных пользователей языка также является банк UBS[12].
Важная составляющая инфраструктуры разработки на Scala — средство автоматической сборки Sbt — также написана на Scala.
Примечания[править | править вики-текст]

↑ Scala 2.12.1 is now available!

↑ Перейти к: 1 2 http://www.scala-js.org/

↑ Перейти к: 1 2 http://www.scala-native.org/

↑ Strachan, James Scala as the long term replacement for java/javac? (6 июля 2009). Проверено 7 января 2012. Архивировано 10 февраля 2012 года.
↑ Paul Krill. Scala language moves closer to bare metal. Infoworld (11 мая 2016). Проверено 4 декабря 2016.
↑ http://www.scala-lang.org/docu/files/ScalaTutorial.pdf
↑ Why we love Scala at Coursera
↑ Scala, Lift, and the Future
↑ Synodinos, Dionysios G. LinkedIn Signal: A Case Study for Scala, JRuby and Voldemort. InfoQ (11 октября 2010).
↑ Greene, Kate The Secret Behind Twitter's Growth, How a new Web programming language is helping the company handle its increasing popularity.. Technology Review. MIT (April 1, 2009). Проверено 6 апреля 2009.
↑ Guardian switching from Java to Scala. Heise Online (5 апреля 2011). Проверено 5 апреля 2011.
↑ Binstock, Andrew. Interview with Scala's Martin Odersky. Dr. Dobb's Journal (14 июля 2011). Проверено 10 февраля 2012.

Литература[править | править вики-текст]
Англоязычная[править | править вики-текст]

Joshua D. Suereth. Scala in Depth. — Manning Publications. — P. 225. — ISBN 978-1-935182-70-2.
Gregory Meredith. Monadic Design Patterns for the Web. — 1st. — 2011. — P. 300.
Nilanjan Raychaudhuri. Scala in Action. — 1st. — Manning. — P. 525. — ISBN 978-1-935182-75-7.
Dean Wampler, Alex Payne. Programming Scala: Scalability = Functional Programming + Objects. — 1st. — O'Reilly Media. — P. 448. — ISBN 0-596-15595-6.
Martin Odersky, Lex Spoon, Bill Venners. Programming in Scala: A Comprehensive Step-by-step Guide. — 2nd. — Artima Inc. — P. 883/852. — ISBN 978-0-9815316-4-9.
David Pollak. Beginning Scala. — 1st. — Apress. — P. 776. — ISBN 1-4302-1989-0.
Lift in Action. — 1st. — Manning. — P. 450. — ISBN 978-1-935182-80-1.
Christos Loverdos, Apostolos Syropoulos. Steps in Scala: An Introduction to Object-Functional Programming. — 1st. — Cambridge University Press. — P. xviii + 485. — ISBN 978-0-521-74758-5.
Venkat Subramaniam. Programming Scala: Tackle Multi-Core Complexity on the Java Virtual Machine. — 1st. — Pragmatic Bookshelf. — P. 250. — ISBN 1-934356-31-X.
Cay Horstmann. Scala for the Impatient. — 1st. — Addison-Wesley Professional. — P. 360. — ISBN 0-321-77409-4.

Русскоязычная[править | править вики-текст]

Имеется викиучебник по теме
«Scala (язык программирования)»

Хорстман К. Scala для нетерпеливых. — ДМК пресс, 2013. — 408 с. — 300 экз. — ISBN 978-5-94074-920-2, 978-0-321-77409-5.
Scala в примерах, перевод руководства Мартина Одерски в викиучебнике
Scala Школа! и Эффективная Scala — русские версии открытых учебников от Twitter
Путеводитель по Scala: серия статей на сайте IBM developerWorks

Ссылки[править | править вики-текст]

The Scala Programming Language (англ.) — веб-сайт языка программирования Scala.
The Scala Language Specification (англ.) — спецификация языка программирования Scala.
Руководство по Scala (рус.) перевод англоязычного руководства
Обзор языка программирования Scala — перевод статьи, описывающей причину разработки, идеи, возможности языка.

[скрыть]
Языки программирования

Ассемблер
BASIC
C
C++
C#
COBOL
Fortran
Go
Java
JavaScript (JS)
Lisp
Pascal
Perl
PHP
Python
Ruby
Smalltalk
Visual Basic .NET (VB.NET)

Категория Сравнение Списки: хронологический • по категориям


Источник — «https://ru.wikipedia.org/w/index.php?title=Scala_(язык_программирования)&oldid=87923526»
Категории: Языки программирования по алфавитуЯзыки программирования, появившиеся в 2003 годуОбъектно-ориентированные языки программированияЯзыки программирования платформы .NETСвободные компиляторы и интерпретаторыЯзыки программирования платформы JavaScalaСкрытые категории: Википедия:Статьи с переопределением значения из ВикиданныхВикипедия:Статьи с источниками из ВикиданныхВикипедия:Ссылка на Викиучебник непосредственно в статьеСтраницы, использующие волшебные ссылки ISBN
Просмотров: 190 | Добавил: nataliya_igorevna_1969 | Рейтинг: 0.0/0
Всего комментариев: 0
avatar