Skip to content

Latest commit

 

History

History
67 lines (64 loc) · 9.46 KB

README.md

File metadata and controls

67 lines (64 loc) · 9.46 KB

[Russian Speaking] Scala User Group

Можно задавать любые вопросы по теме, от совсем базовых, до требующих многолетних исследований. Но если постите примеры кода, то делайте его компилируемым. Шансы на помощь возрастают многократно. Подойдут сервисы https://scastie.scala-lang.org, https://scalafiddle.io. В крайнем случае gist, там хотя бы история и комменты есть. Игнорирование просьб выложить код в текстовом виде, может привести к запрету постить медиа файлы.

Telegram

Gitter

Meetup

Media

  • Подкаст "Скалалаз" https://scalalaz.ru
    • Все материалы, публикуемые на сайте, лежат в открытом доступе тут https://github.com/scalalaz-podcast/scalalaz-gen/
    • Любая помощь по улучшению сайта (дизайн, опечатки, улучшение генерации, и т.п.) в виде пулл реквестов - привествуется (не стесняйтесь!)
      • Если нет никакой возможности помочь пулл реквестами - то в чате (https://t.me/scala_ru) можно (и нужно) писать и спрашивать как по техническими вопросам так и по содержанию выпусков.
  • Англоязычный подкаст "Скалалав" https://scala.love/hello-scala/ от неугомонной @oli_kitty

Youtube

Образование

Символика и искусство

FAQ

  • Что за TF все упоминают? Tagless Final - подход для создания EDSL, альтернатива Free и просто модно в 2018. Почитать стоит http://okmij.org/ftp/tagless-final/course/lecture.pdf и славянофильское https://habr.com/post/325874/
  • А как сделать вот такую хитрую вещь? - возможно ответ есть в https://github.com/Odomontois/manatki
  • Нужно ли изучать хацкелль, чтоб писать на скалке с котами и прочими крутыми штуками? Нет.
  • Нужно ли изучать теорию категорию и прочий функан (с), чтобы писать на скалке с котами и прочими крутыми штуками? Нет. Хотя может дать некоторую интуицию и разочарование в происходящем, предварительно пожрав время. (Спойлер. Для хацкелля ответ такой же.)
  • Что не так с Future?
    • Комбинация только с помощью имплиситного экзекьютора. Можно сломать фор-компрехеншен случайным импортом
    • Почти каждая операция требует запуска как минимум одного Runnable. Т.е. синхронизация стейта пулов на каждый шаг. Это действительно сильно аффектит производительность реальных конкурентных приложений
    • eager by default. Ничего не мешает воспользовать тем же трейт, чтобы реализовать запуск by need, но это сломает большую часть утилит, они часто исходят из предположения о немедленном запуске
    • Стандартные реализации фьючи мутабельные. Сильно. Утилитарный код может порождать множество гейзенбагов, если не учёл все особенности комплита и линка и не перепроверил что-то дважды\не синхронизировался.
    • Ручное управление конкаренси. Отличие параллельного от последовательного запуска обычно - это отличие в def vs val. Маленькая ошибка может превратить асинхронный стрим в мемори лик.
    • Отсутствие cancelation во встроенной реализации. И не самый простой способ использовать в twitter. Случайно не выполненный вызов сайдэффектящего метода в твиттер приводит к неотменяемости.
    • Предыдущее также сильно затруднаяет финализацию ресурсов в конкуретном коде
    • Стандартный способ интеграции - промис. И отсутствие встроенного набора конкурентных данных как в cats-effect\zio принуждает пользоваться им довольно часто. Намеренно незавершённый промис - это не отмена, а утечки памяти и нефинализированных ресурсов.
    • При написании АПИ, если нужно принять асинхронный процесс в качестве параметра, каждый способ сделать это чем-то плох. Приём by name (=> Future[A]) кажется самым прямым аналогом получения IO[A], однако постоянно ломается при доработках, в особенности новичками. Где-то лишний вал - и фьюча запустилась