Scala в примерах: различия между версиями

Содержимое удалено Содержимое добавлено
м Исправление опечаток и коррекция по мелочи , typos fixed: еще → ещё, переодически → периодически AWB
Строка 3:
{{wikipedia|Scala (язык программирования)}}
==Глава 1==
 
 
=Первый пример=
Строка 156 ⟶ 155 :
 
Предыдущее обсуждение показало возможности распределенного программирования в <tt>Scala</tt>. Может показаться, что <tt>Scala</tt>, как язык, имеет богатый набор языковых конструкций, поддерживает концепцию процесса - актора, асинхронный обмен сообщениями, программирование с тайм-аутами, и т.п.. В действительности это не так. Все конструкции, рассмотренные выше, вводятся как методы в библиотечном классе <tt>Actor</tt>.
Сам класс, базируется на модели многопоточности, используемой в нижлежащей платформе (напр. <tt>Java</tt>, Или <tt>.NET</tt>). Расмотрение всех характеристик класса <tt>Actor</tt>, использованного здесь, дано в [http://ru.wikibooks.org/wiki/Scala_%D0%B2_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B0%D1%85[Scala в примерах#.D0.A1.D0.B8.D0.B3.D0.BD.D0.B0.D0.BB.D1.8B_.D0.B8_.D0.BC.D0.BE.D0.BD.D0.B8.D1.82.D0.BE.D1.80.D1.8BСигналы и мониторы|Разделе 16.11]].
 
Далее авторы объясняют, почему выбранная модель IPM не встроена в язык, а представлена в виде библиотеки. Преимущество подобного подхода к многопоточности ''(см. также [http://lamp.epfl.ch/~cremet/publications/pilib.pdf PiLib]) '', в относительной простоте основного языка и гибкости для разработчиков. Поскольку в основном языке нет необходимости определять детали высокоуровневой связи процессов, это позволяет сохранять простоту и общность. Поскольку конкретная модель сообщений в почтовом ящике суть - библиотечный модуль, она может свободно быть модифицирована, если это требуется в каких - то приложениях. Для такого подхода необходимо, тем не менее, чтобы базовый язык был достаточно выразителен, чтобы он мог обеспечивать необходимые языковые абстракции удобным способом. Scala разработан с учётом этого требования; одна из основных проектных целей заключалась в том, что Scala должен быть достаточно гибок, как язык - платформа для языков описания областей [http://ru.wikipedia.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BF%D1%80%D0%B5%D0%B4%D0%BC%D0%B5%D1%82%D0%BD%D0%BE%D0%B9_%D0%BE%D0%B1%D0%BB%D0%B0%D1%81%D1%82%D0%B8 DSL ], выполненных как библиотечные модули. Например, представленные выше коммуникации акторов могут рассматриваться как язык описания области, который, в принципе, расширяет ядро Scala.
Строка 163 ⟶ 162 :
 
=Глава 5=
 
 
=Глава 6=
 
 
=Глава 7=
 
 
=Глава 8=
 
 
=Глава 9=
 
 
=Глава 10=
 
 
=Глава 11=
Строка 376 ⟶ 369 :
 
=Глава 15=
 
 
=Абстракции для многопоточности=
Строка 650 ⟶ 642 :
* методом ret, который использует результат как только тот будет вычислен.
 
Вычислительный сервер создает n процессоров, во время своей инициализации. Каждый такой процессор переодическипериодически потребляет job, выполняет метод task и передает результат на в ret метод Job.
 
Пример демонстрирует использование абстрактных типов. Абстрактный тип t определяет результат работы, который может варьироваться от одного Job к другому. Без абстрактных типов было бы невозможно, реализовать подобный же класс в статическом, типобезопасном стиле. Потребовались бы динамическая проверка типов, приведение типов.
Строка 745 ⟶ 737 :
f(msg)
}
Метод send сначала проверяет применима ли к сообщению функция <tt>f</tt> обработчика к сообщению, что уже было послано но, ещеещё не обрабатывалось. Если это верно, поток немедленно применяет f к сообщению. В противном случае, новый получатель создаётся и связывается в списке получателей, и поток ждет уведомление на этом получателе. Как только поток будет разбужен снова, он продолжит выполнение, прилагая f к сообщению, которое было сохранено в получателе. Метод insert в связанном списке определяется следующим образом.
 
def insert(l: LinkedList[a], x: a): LinkedList[a] = {
Строка 777 ⟶ 769 :
} // end MailBox
Различия очевидны.
 
 
===Акторы===