Monday, October 29, 2018

JVM languages

  • Domain-specific language
A domain-specific language (DSL) is a computer language specialized to a particular application domain. This is in contrast to a general-purpose language (GPL), which is broadly applicable across domains.The line between general-purpose languages and domain-specific languages is not always sharp, as a language may have specialized features for a particular domain but be applicable more broadly, or conversely may in principle be capable of broad application but in practice used primarily for a specific domain. For example, Perl was originally developed as a text-processing and glue language, for the same domain as AWK and shell scripts, but was mostly used as a general-purpose programming language later on.
    http://en.wikipedia.org/wiki/Domain-specific_language
    • Apache Groovy is a powerful, optionally typed and dynamic language, with static-typing and static compilation capabilities, for the Java platform aimed at improving developer productivity thanks to a concise, familiar and easy to learn syntax. It integrates smoothly with any Java program, and immediately delivers to your application powerful features, including scripting capabilities, Domain-Specific Language authoring, runtime and compile-time meta-programming and functional programming
    http://groovy-lang.org/
    • What is Scala 

    Scala is an object-oriented and functional programming language.
    Scala is a general-purpose programming language. It supports object-oriented, functional and imperative programming approaches.
    It is a strong static type language.
    In Scala, everything is an object whether it is a function or a number. It does not have the concept of primitive data.
    https://www.javatpoint.com/scala-tutorial


    • Scala is a modern multi-paradigm programming language designed to express common programming patterns in a concise, elegant, and type-safe way. 

    Scala smoothly integrates the features of object-oriented and functional languages.

    Scala, short for Scalable Language, is a hybrid functional programming language.
    Scala smoothly integrates the features of object-oriented and functional languages.
    Scala is compiled to run on the Java Virtual Machine.
    Many existing companies, who depend on Java for business critical applications, are turning to Scala to boost their development productivity, applications scalability and overall reliability.
    Scala is a pure object-oriented language in the sense that every value is an object.
    Classes are extended by subclassing and a flexible mixin-based composition mechanism as a clean replacement for multiple inheritances.
    Scala is also a functional language in the sense that every function is a value and every value is an object so ultimately every function is an object.
    Scala provides a lightweight syntax for defining anonymous functions, it supports higher-order functions, it allows functions to be nested, and supports currying.
    Scala, unlike some of the other statically typed languages (C, Pascal, Rust, etc.), does not expect you to provide redundant type information.
    You don't have to specify a type in most cases, and you certainly don't have to repeat it.
    Scala is compiled into Java Byte Code which is executed by the Java Virtual Machine (JVM).
    This means that Scala and Java have a common runtime platform.
    You can easily move from Java to Scala.
    Scala enables you to use all the classes of the Java SDK and also your own custom Java classes, or your favorite Java open source projects.
    It reduces the number of lines and helps the programmer to code in a type-safe way.
    It allows you to write codes in an immutable manner, which makes it easy to apply concurrency and parallelism (Synchronize).

    Scala vs Java
    Scala has a set of features that completely differ from Java

        All types are objects
        Type inference
        Nested Functions
        Functions are objects
        Domain-specific language (DSL) support
        Traits
        Closures
        Concurrency support inspired by Erlang

    https://www.tutorialspoint.com/scala/

    • Scala
    Scala is a general-purpose programming language designed to express common programming patterns in a concise, elegant, and type-safe way. It smoothly integrates features of object-oriented and functional languages, enabling Java and other programmers to be more productive. Code sizes are typically reduced by a factor of two to three when compared to an equivalent Java application.
    http://www.scala-lang.org/
    • Clojure

    Clojure is a dynamic programming language that targets the Java Virtual Machine (and the CLR, and JavaScript).
    It is designed to be a general-purpose language, combining the approachability and interactive development of a scripting language with an efficient and robust infrastructure for multithreaded programming.
    Clojure is a compiled language
    http://clojure.org/

    • Statically typed programming language for modern multiplatform applications 

    https://kotlinlang.org/


    • Akka 
    Akka is a toolkit and runtime for building highly concurrent, distributed, and fault tolerant event-driven applications on the JVM.
    Where does the name Akka come from?
    It is the name of a beautiful Swedish mountain up in the northern part of Sweden called Laponia
    Akka is also the name of a goddess in the Sámi (the native Swedish population) mythology
    http://akka.io/
    • Because Lift applications are written in Scala, an elegant JVM language, you can still use your favorite Java libraries and deploy to your favorite Servlet Container and app server. Use the code you've already written and deployed to the container you've already configured!

    https://liftweb.net/


    • The High-Velocity Web Framework For Java and Scala 

    Built on Akka, Play provides predictable and minimal resource consumption (CPU, memory, threads) for highly-scalable applications.
    https://www.playframework.com/


    • The Bowler Quickstart is a Skeleton sbt project and Bowler app that gets you up and running with a minimal Bowler app that you can adapt in no time.

    https://github.com/bowler-framework/bowler-quickstart