Your SlideShare is downloading. ×
Javascript in modern scala backend.  [russian]
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Javascript in modern scala backend. [russian]

313
views

Published on


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
313
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. FOSS-SEA 2013 JavaScript & modern scala backend Ruslan Shevchenko <ruslan@shevchenko.kiev.ua> @rssh1 (gradsoft, gosave)
  • 2. Есть ли у нас план ? ● - обзор архитектур web приложений – ● - scala-frameworks – ● 90, MVC, ROR-Like, one-page .. lift, play, spray.io, scalatra - использование и генерация javascript – jscala, scala-js
  • 3. 90-е Запрос / Страничка html (JavaScript испрользуется только локально)
  • 4. Структризация обработки C M V MVC Разделение на блоки контроллера, модели и представления
  • 5. Конфигурация по умолчанию C M V MVC Раутер, контроллер и модель структрируются автоматически на основе соглашений
  • 6. Появление Ajax C M V MVC Javascript может делать запросы к серверу и Подгружать информацию
  • 7. Rich client C M V REST Presentation Layer переезжает на клиент
  • 8. Rich client/ backbone style C V M REST Взаимодействие = синхронизация моделей
  • 9. Rich client / Angular style C V M RPC Клиент - самостоятельно приложение (обращается по RPC)
  • 10. Тенденции M C V RPC Если persistence умеет REST — зачем нам application ?
  • 11. Тенденции C M V Возможность интеракций инициированных сервером (websockets, comet)
  • 12. Scala ● ● Почему не javascript ? - static typing. ● ● ● ● ● <troll-mode-on> [99, 100, 101].sort() </troll-mode-off>
  • 13. Scala ● Почему javascript ? ● - описание структур ● - передача на клиент поведения ●
  • 14. Main frameworks: ● Lift – ● Play – ● (mainstream, ROR analog) Spray.io – ● (old-style, presentation first) (ligthweight, RPC style) Scalatra – (servlet compatible)
  • 15. Lift def render = { "type=submit" #> SHtml.submit("Register", process, "onclick" -> JsIf(JsEq(ValById("first_name"), ""), Alert("alert") & JsReturn(false)).toJsCmd) } Работа фреймворка – преобразование XML (свои теги)
  • 16. Play – раутер — конфигурация - контроллер — синхронная или Асинхронаая функция из Request в response - view – compile-time шаблоны (мы не используем) Netty, в будущем — миграция на spray.ioo
  • 17. Play / Example def index = Action.async { val futureInt = Future { intensiveComputation() } val timeoutFuture = Promise.timeout("Oops", 1.second) Future.firstCompletedOf(Seq(futureInt, timeoutFuture)).map { case i: Int => Ok("Got result: " + i) case t: String => InternalServerError(t) } }
  • 18. Play/JSON case class Person( name: String, age: Int) object Person{ implicit val personFmt = Json.format[Person] }
  • 19. JavaScript / scala ● Write in scala, produce javascriot – Jscala http://www.jscala.org ● – (lightweight, macros, from Alexander Nemish, Kiev) Scala-js http://www.scala-js.org ● (fully functional scala-to-js compiler, EPFL institute)
  • 20. jscala import org.jscala._ @JavaScript class Test { def hello() { print("Hello") } } val testJs = Test.javaScript.as[JsStmt] // Get class Test JsAst val main = javascript { val t = new Test() t.hello() }
  • 21. jscala import org.jscala._ @JavaScript class Test { def hello() { print("Hello") } }
  • 22. jscala val testJs = Test.javaScript.as[JsStmt] val main = javascript { val t = new Test() t.hello() }
  • 23. jscala ● Исполнение – макросы – ● @JavaScript, javascript{ .. } Подмножество scala – – Урезанные управляющие структуры, – ● нет стандартные scala-lib DOM API динамическое(пока) Компактный читаемый javascript без runtime
  • 24. scala-js ● Полноценный компилятор ● Все фичи скалы, ● Полноценная библиотека ● Порядка 10 Mb рантайма / стандартных бибилиотек (js) – Используется google closure дл я минимизации
  • 25. Scala/javascript ● ● - API - спецификация API пишется на ● ● (thrift) - генерация (jscala, scala-js) ● ● - асинхронность ● ● Scala – Akka Erlang, RxJava
  • 26. Спасибо за внимание ● ● Вопросы ? ● ● ● ● ● - Руслан Шевченко @rssh1 ​<ruslan@shevchenko.kiev.ua>