Translate

Mostrando las entradas con la etiqueta Ballerina. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Ballerina. Mostrar todas las entradas

lunes, 2 de marzo de 2020

Ballerina un lenguaje pensado para la nube, Parte 2

En el post anterior me quede con muchas ganas de ver código. Pero, si llegaste acá y no sabés de que estoy hablando o no sabés que es Ballerina ve esto: https://emanuelpeg.blogspot.com/2020/02/ballerina-un-lenguaje-pensado-para-la.html

Si queres probar el código que vamos dejando, pueden hacerlo acá : https://play.ballerina.io/

Veamos un poco de código en Ballerina y empecemos con un hola mundo:

import ballerina/io;

public function main() {
    io:println("Hello, World!");
}

Lindo pero, ahora vamos hacerlo en paralelo :

import ballerina/io;

public function main() {

    worker w1 {
        io:println("Hello, World! #m");
    }    worker w2 {
        io:println("Hello, World! #n");
    }    worker w3 {
        io:println("Hello, World! #k");
    }
}

veamos el mismo código en un servidor :

import ballerina/http;
import ballerina/log;

service hello on new http:Listener(9090) {
    resource function sayHello(http:Caller caller, http:Request req) {
        var result = caller->respond("Hello, World!");
        if (result is error) {
            log:printError("Error sending response", result);
        }
    }
}

y ahora de cliente : 

import ballerina/http;
import ballerina/io;

public function main() {
    http:Client clientEP = new ("http://www.mocky.io");
    var resp = clientEP->get("/v2/5ae082123200006b00510c3d/");    
    if (resp is http:Response) {
        var payload = resp.getTextPayload();
        if (payload is string) {
            io:println(payload);
        } else {
            io:println(payload.detail());
        }
    } else {
        io:println(resp.detail());
    }
}

Puff... lo que se puede hacer con un "hola mundo". Primera conclusión, claramente se ve que Ballerina esta ampliamente influenciado por Node y javascript. 

Veamos un objeto : 

import ballerina/io;

type Person object {
    public string name = "";
    public int age = 0;
    public Person? parent = ();
    private string email = "default@abc.com";
    string address = "No 20, Palm grove";
};

public function main() {
    Person p1 = new;
    io:println(p1.age);    
    
    Person p2 = new();
    io:println(p2.age);

    Person p3 = new Person();
    io:println(p3.age);
}

Se ve que las clases se declaran con type y se pueden hacer cosas más complejas : 

import ballerina/io;

type Person object {
    public int age;
    public string firstName;
    public string lastName;

    function __init(int age, string firstName, string lastName) {
        self.age = age;
        self.firstName = firstName;
        self.lastName = lastName;
    }

    function getFullName() returns string {
        return self.firstName + " " + self.lastName;
    }
};

public function main() {
    Person p1 = new(5, "John", "Doe");    
    io:println(p1.getFullName());
}

Ahora podemos ver la influencia de Go. Porque tiene la misma forma de manejar errores, los retorna y sigue la filosofía de que el error es un resultado más : 

import ballerina/io;

const ACCOUNT_NOT_FOUND = "AccountNotFound";
const INVALID_ACCOUNT_ID = "InvalidAccountID";

function getAccountBalance(int accountID) returns int|error {
    if (accountID < 0) {
        return error(INVALID_ACCOUNT_ID, accountID = accountID);
    } else if (accountID > 100) {
        return error(ACCOUNT_NOT_FOUND, accountID = accountID);
    }
    return 600;
}

public function main() {
    error simpleError = error("SimpleErrorType", message = "Simple error occurred");
    io:println("Error: ", simpleError.reason(),
                ", Message: ", simpleError.detail()?.message);
    int|error result = getAccountBalance(-1);

    if (result is int) {
        io:println("Account Balance: ", result);
    } else {
        io:println("Error: ", result.reason(),
                    ", Account ID: ", result.detail()["accountID"]);
    }
}

Y por último un ejemplo de interacción con Java : 

import ballerinax/java;
import ballerina/io;

function newArrayDeque() returns handle = @java:Constructor {
    class: "java.util.ArrayDeque"
} external;

function newArrayDequeWithInitialCapacity(int numElements) returns handle = @java:Constructor {
    class: "java.util.ArrayDeque",
    paramTypes: ["int"]
} external;

public function main() {
    var arrayDeque = newArrayDeque();
    io:println(arrayDeque);
    var arrayDequeWithCapacity = newArrayDequeWithInitialCapacity(10);
    io:println(arrayDequeWithCapacity);
}

No mucho que explicar, de esta manera podemos llamar clases java. 

Conclusión, me gusto!

Toma buenas cosas de diferentes lenguajes y lo mezcla de forma equilibrada. Lo único que le critico es el ";" que no lo veo necesario.  Por lo dicho, vamos a tener que estudiar un nuevo lenguaje :P




sábado, 29 de febrero de 2020

Ballerina un lenguaje pensado para la nube


Ballerina es un lenguaje de programación open-source y una plataforma para que los programadores de aplicaciones de la era de la nube escriban fácilmente software que simplemente funciona.

Durante décadas, los lenguajes de programación han tratado las redes simplemente como fuentes de entrada y salida. Ballerina presenta nuevas abstracciones fundamentales de objetos de clientes, servicios, funciones de recursos y oyentes para incorporar las redes al lenguaje de modo que los programadores puedan abordar directamente las problemática de la computación distribuida como parte de su lógica de aplicación. Esto facilita que las aplicaciones de red resistentes, seguras y de alto rendimiento estén al alcance de todos los programadores.

Los diagramas de secuencia han sido la herramienta favorita de todos para describir cómo funcionan los programas distribuidos y concurrentes. Sin embargo, ningún lenguaje de programación actual le permite escribir su lógica como un diagrama de secuencia en estas aplicaciones. En Ballerina, cada programa es un diagrama de secuencia que ilustra interacciones distribuidas y concurrentes automáticamente. El diagrama es el código y el código es el diagrama.

El tipado estático es el dolor de cabeza del programador de aplicaciones de red y el tipado dinámico es la pesadilla del ingeniero de aplicaciones confiables. El sistema de tipo estructural de tipo estático de Ballerina que está diseñado para ser compatible con el esquema de datos de red permite a los programadores de aplicaciones escribir código que se adhiera al Principio de Robustez: Sea conservador en lo que envía, sea liberal en lo que acepta.

En la era de la nube, ejecutar un programa ya no es solo una cuestión de compilación y ejecución, sino que se trata de compilar, construir la imagen, empujar la imagen, configurar la orquestación de contenedores y, finalmente, ejecutarla. Ballerina lleva todo el proceso de ejecución del programa a las manos del desarrollador con metadatos extensibles que se compilan en programas ejecutables para todas las principales plataformas en la nube.

Ballerina tiene todas las biblioteca estándar y la cadena de herramientas para ayudar a los desarrolladores a crear aplicaciones rápidamente. En el momento del desarrollo, Ballerina cubre documentación, pruebas, uso compartido, control de versiones y más.

Los programas en el mundo real se escriben una vez y se leen decenas a cientos de veces. Ballerina prioriza la conveniencia y productividad del programador con familiaridad, abstracciones más claras y conceptos más fáciles sobre el rendimiento del sistema.

Luego de leer todo esto, veamos un hola mundo, por lo menos :

import ballerina/io;

public function main() {
    io:println("Hello Ballerina!");
}

Si queres probar este codigo pode ir a : https://play.ballerina.io/

Dejo link: https://ballerina.io/

viernes, 1 de noviembre de 2019

¿Cuál es el mejor y más nuevo lenguaje de programación?


Encontré dicha pregunta en quora, y la respuesta :

  • Julia (Influenciado por: Fortran, Lisp, Lua, Python, Perl, Ruby y MATLAB)
  • Kotlin (Influenciado por: JavaScript, Java, C# y Scala)
  • Elm (Influenciado por: Standard ML, F#, Haskell y OCaml)
  • Elixir (Influenciado por: LFE, Clojure, Erlang and Ruby)
  • Rust (Influenciado por: C#, Ruby, C++, Alef, Haskell, NIL, Cyclone, Limbo y Erlang)
  • Crystal (Influenciado por: C, Ruby, C# and Python)
  • Groovy (Influenciado por: Python, Java, Smalltalk, Objective-C y Perl)
  • R (Influenciado por: S, XLispStat, Common Lisp y Scheme)
  • Hack (por Facebook)
  • Go (Influenciado por: C, Python, Smalltalk, Alef, CSP, Modula, Pascal, Limbo y BCPL)
  • Dart (por Google)
  • Bosque (Nuevo lenguaje de programación de Microsoft)
  • Ballerina (Basado en Java, Javascript, Go, Rust, C#)
  • V (Basado en Go y Rust)

La verdad no conocía a Bosque, Ballerina y V. 

Más allá de dicha respuesta, a mi entender, todo depende de a que te vas a dedicar, por ejemplo: 

Si vas a hacer una aplicación base, base de datos, sistema operativos, aplicaciones de escritorio: 
  • V
  • Go 
  • Rust

Si te queres dedicar a ciencia de datos : 
  • Julia
  • R

Si queres hacer back-end de aplicaciones : 
  • Kotlin
  • Groovy
  • Bosque
  • Ballerina
  • Hack
  • Elixir

Aplicaciones front-end :
  • Elm
  • Dart

Me puedo equivocar, pero es mi opinión. 

Otra cosa, faltan lenguajes que siempre nuevos, como Scala, Idris, Swift o tantos otros...

Opinen!