Scala is a multi-paradigm programming language that combines elements of object-oriented programming languages and functional programming. The name Scala is pronounced <skah-lah> and comes from 'Scalable Language'. It is notable for letting you write very large systems with a small amount of code. It can run on Java's Java virtual machine, and Java APIs can be used as-is or in a slightly modified form that fits Scala's style.
Scala is a general-purpose programming language that can express patterns expressible in other languages very concisely. By combining elements of object-oriented programming languages and functional programming and applying the Java API, it helps raise programmer productivity. For example, a program with the same functionality ends up 2-3 times shorter than one written in Java.
It has good interoperability with the Java runtime environment (runtime environment (JRE)), and also provides support for .NET.
When you make a call by wrapping one or more markdown="1"> values in curly braces ({ and }), as in Future { ... }, that object's apply method is called.
It aims to be a full stack web framework based on Scalatra. Naturally, it was influenced by Ruby on Rails. Being Full Stack, it has a ton of features. It even supports ORM… It is not my preferred type, but it looks like it could replace Play Framework.
Play Framework adopts the Ruby on Rails philosophy and lets you build web Applications very easily and quickly. In particular, everything can also be implemented in java, so it has a large user base. From play framework 2 onward, it uses a template engine built with scala, providing more speed and a wider range of features. In particular, the compile on changing feature using sbt applies code changes automatically and immediately, which makes building Web Applications considerably more convenient. However, as with Rails, supporting everything can be an advantage, but it can become a problem if a developer wants to use a different version of a library, and personally, sbt seems slow and ivy2's dependency management seems to have problems.
Spray
Spray is good for building lightweight, high-performance Web Applications specialized for REST. It uses Akka for high-performance asynchronous work. When Spray is used to serve a special purpose (REST-API), its performance is awesome! In other words, if the target is a large-scale API server, I highly recommend it. However, there is the burden of studying not only Scala and Akka but also Spray's own operators. Still, if you are truly thirsty for performance, I recommend it.
Scalatra
It describes itself as a web micro-framework inspired by Sinatra, which is written in Ruby. Unlike other full-frameworks, it is lightweight and flexible. It is well modularized so developers can use other kinds of libraries, and it follows existing servlet container standards well. What stands out is that with the template engine called scalate, you can use various formats. (Scaml, SSP, Jade, etc.) I see this as a considerable advantage: you can use whichever format you like and switch midway, and several people can use different formats. (Whether this is an advantage or a disadvantage may differ, but I would like to see it as an advantage.) It also supports Twirl, which was made by spinning off the Template engine provided by Play Framework 2. Like spray.io, it supports asynchronous communication using Akka, and it also supports asynchronous communication using Atmosphere. For developing a REST-API and producing its documentation, using Swagger gives very good results.
Skinny
It aims to be a full stack web framework based on Scalatra. Naturally, it was influenced by Ruby on Rails. Being Full Stack, it has a ton of features. It even supports ORM… It is not my preferred type, but it looks like it could replace Play Framework.