Lift
The simply functional web framework
Scala


• Kjører på JVM’en (og CLR)
• Sterkt typet
• Typeinferens
• Hybrid mellom funksjonelt og objektorientert
Lift

• Skrevet i Scala
• Forsøk på (nok en gang) å plukke de beste
  aspektene av konkurrerende rammeverk
• Komponent-orientert (a’la Wicket, Tapestry)
• View-first
Tic Tac Toe
Tic Tac Toe
                   Server           Client


                                             O
                  TicTacToeClient
                                                 X




TicTacToeServer




                  TicTacToeClient
                                             O
                                                 X
Actors

• Basert på Erlangs Actor model
• Abstraksjon av tråder
• Meldingsbasert
• Thread pool
object PingPong extends Application {
    var count = 0;
    val pong = actor {
        loop {
            react {
                case Ping => println("Actor Pong Received Ping")
                    sender ! Pong
                case Stop => println("Stopping Pong")
                    exit()
            }
        }
    }

    val ping = actor {
        pong ! Ping
        loop {
            react {
                case Pong => println("Actor Ping Received Pong")
                    count = count + 1;
                    if (count < 3) {
                        sender ! Ping
                    } else {
                        sender ! Stop println("Stopping Ping")
                        exit()
                    }
            }
        }
    }
}

case object Ping
case object Pong
case object Stop
DEMO!

Tic Tac Toe in Lift

  • 1.
  • 2.
    Scala • Kjører påJVM’en (og CLR) • Sterkt typet • Typeinferens • Hybrid mellom funksjonelt og objektorientert
  • 3.
    Lift • Skrevet iScala • Forsøk på (nok en gang) å plukke de beste aspektene av konkurrerende rammeverk • Komponent-orientert (a’la Wicket, Tapestry) • View-first
  • 4.
  • 5.
    Tic Tac Toe Server Client O TicTacToeClient X TicTacToeServer TicTacToeClient O X
  • 6.
    Actors • Basert påErlangs Actor model • Abstraksjon av tråder • Meldingsbasert • Thread pool
  • 7.
    object PingPong extendsApplication { var count = 0; val pong = actor { loop { react { case Ping => println("Actor Pong Received Ping") sender ! Pong case Stop => println("Stopping Pong") exit() } } } val ping = actor { pong ! Ping loop { react { case Pong => println("Actor Ping Received Pong") count = count + 1; if (count < 3) { sender ! Ping } else { sender ! Stop println("Stopping Ping") exit() } } } } } case object Ping case object Pong case object Stop
  • 8.