_Przedmiot będzie prowadzony w drugiej połowie semestru - pierwsze zajęcia
odbędą się **11 kwietnia**._
Współbieżność pozwala na zorganizowanie programu w formie komponentów, które
są wykonywane niezależnie i komunikują się ze sobą tylko wtedy, kiedy to
konieczne. Współbieżność ma fundamentalne znaczenie dla programów
podlegających interakcji ze swoim środowiskiem, np. agentów, interfejsów GUI,
systemów operacyjnych itd. Obecnie jednak można ją z pożytkiem wykorzystać
praktycznie w każdej aplikacji, ponieważ wysokopoziomowe mechanizmy
programowania współbieżnego pozwalają pisać efektywne programy, wykorzystujące
procesory wielordzeniowe.
Celem zajęć jest zapoznanie studentów ze współczesnymi mechanizmami
programowania współbieżnego (na ile to możliwe w tak krótkim czasie). Będą
przedstawione mechanizmy niskopoziomowe (wątki z pamięcią współdzieloną i
blokadami wewnętrznymi), narzędzia tradycyjne (egzekutory i pule wątków,
zmienne atomowe, kolekcje współbieżne i równoległe). Nacisk będzie położony na
mechanizmy wysokopoziomowe, m.in. programowanie asynchroniczne (Future i
Promise), strumienie reaktywne i model aktorów (z wykorzystaniem platformy
Akka, dostępnej dla języków Scala i Java).
Programy będą pisane w języku Scala. Scala jest współczesnym
wieloparadygmatycznym językiem programowania posadowionym na platformie JVM (a
także .NET). **Z podstawami programowania w języku Scala studenci zostaną
zapoznani na pierwszych wykładach.**
Najważniejsze cechy języka Scala są przedstawione na stronie:
[http://](http://docs.scala-lang.org/tour/tour-of-scala.html)[docs.scala-
lang.org/tour/tour-of-scala.html](http://docs.scala-lang.org/tour/tour-of-
scala.html)
Oprócz wymienionych tam cech Scala wspiera niskopoziomowe programowanie
współbieżne za pomocą wątków, ale oferuje wiele mechanizmów na wyższym
poziomie abstrakcji, np. mechanizm aktorów, mechanizm Future, strumienie
reaktywne, kolekcje współbieżne i równoległe, pamięć transakcyjną.
Na zajęciach w pracowni studenci będą pisali proste programy, których tematyka
będzie zsynchronizowana z zagadnieniami, omawianymi na wykładzie.
Wymagana jest podstawowa znajomość programowania funkcyjnego i obiektowego.
Konieczne jest zaliczenie „Metod programowania”, zalecane jest także
„Programowanie funkcyjne”.