Немає перевірених версій цієї сторінки; ймовірно, її ще не перевіряли на відповідність правилам проекту.

Ballerina — це відкрита мова загального призначення для програмістів, розроблена компанією WSO2 для програмування в хмарну еру.[4]

Ballerina
Парадигмаконкурентні обчислення Редагувати інформацію у Вікіданих
Дата появи2017[1] Редагувати інформацію у Вікіданих
ТворціСанджіва Віраварані, Джеймс Кларк, Саміра Джаясома, Хасіта Аравінда, Срінат Перера, Франк Лейманн і WSO2[2]
РозробникWSO2
Останній релізSwan Lake Update 10 (2201.10.2)
Система типізаціїСтруктурна, сувора, статична, виведена
Під впливом відJava, JavaScript, Мова програмування Go, Rust, C Sharp, C[3], Haskell[3], C++[3], Kotlin[3], Dart[3], TypeScript[3] і Swift[3] Редагувати інформацію у Вікіданих
Мова реалізаціїJava, Ballerina, TypeScript[4]
Операційна системаМультиплатформна
ЛіцензіяApache License 2.0[5]
Звичайні розширення файлів.bal Редагувати інформацію у Вікіданих
Репозиторій вихідного кодуgithub.com/ballerina-platform/ballerina-lang Редагувати інформацію у Вікіданих
Вебсайтballerina.io

Проєкт було започатковано у 2015 році архітекторами з WSO2 як кодову альтернативу до інструментів інтеграції на основі конфігурації, таких як EAI, ESB та продукти для керування робочими процесами.[6][7]

Мова має різні конструкції, орієнтовані на хмарну розробку, включаючи підтримку різних форматів даних і протоколів, надійність, розподілені транзакції, API та потоки подій.[8][9][10]

Історія

ред.

Ballerina була вперше офіційно анонсована у 2017 році, а версія 1.0 була випущена 10 вересня 2019 року.[11]

Дизайн

ред.

Ballerina — це мова загального призначення зі знайомим синтаксисом та прямим графічним представленням коду у вигляді діаграм послідовностей. Вона має фундаментальні абстракці��, розроблені для полегшення програмування завдань інтеграції.[12] Ballerina була розроблена компанією WSO2 для підвищення продуктивності розробників додатків, які працюють з розподіленими обчисленнями. Вона проста у написанні та модифікації, і підходить для програмістів прикладних програм.[13][14][15]

Дизайнери, які понад 10 років розробляли продукти для інтеграції підприємств, використали свої знання індустрії при створенні мови,[16][17] зазначає директор WSO2 і засновник Ballerina Джеймс Кларк.

Приклади

ред.

Привіт, світ

ред.

Звичайна програма «Привіт, світ»:

import ballerina/io;

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

Щоб виконати цю програму, розмістіть вихідний код у файлі з розширенням .bal і надайте шлях до файлу команді bal run.

$ ballerina run hello_world.bal
Hello World!

Версія програми «Привіт, світ» для сервісу:

import ballerina/http;

service /greet on new http:Listener(9090) {
    resource function get . () returns string {
        return "Hello World!";
    }
}

Сервіси виконуються аналогічним чином, за винятком того, що вони не завершуються, як звичайні програми. Після запуску сервісу можна використовувати HTTP-клієнт для його виклику. Наприклад, наведений вище сервіс можна викликати за допомогою наступної команди cURL:

$ curl http://localhost:9090/greet 
Hello World!

[18]

REST API

ред.
import ballerina/http;

service on new http:Listener(9090) {
    resource function post factorial(@http:Payload string payload) returns http:Ok|http:BadRequest {
        int|error num = int:fromString(payload);

        if num is error {
            return <http:BadRequest>{body: "Недійсне ціле число: " + payload};
        }

        if num < 0 {
            return <http:BadRequest>{body: "Ціле число повинно бути >= 0"};
        }

        int result = 1;

        foreach int i in 2 ... num {
            result *= i;
        }

        return <http:Ok>{body: result};
    }
}
$ curl http://localhost:9090/factorial -d 5
120

GraphQL API

ред.
import ballerina/graphql;

service /stocks on new graphql:Listener(4000) {
    resource function get quote() returns StockQuote {
        return {
            ticker: "EXPO",
            price: 287.5,
            open: 285,
            prevClose: 285.5,
            low: 276.25,
            high: 297
        };
    }
}

type StockQuote record {|
    string ticker;
    float price;
    float open;
    float prevClose;
    float low;
    float high;
|};
$ curl -H "Content-type: application/json" -d '{"query": "{ quote { ticker, price } }" }' 'http://localhost:4000/stocks' 
{"data":{"quote":{"ticker":"EXPO", "price":287.5}}}

Діаграма послідовностей

ред.

Згенерована діаграма послідовності є канонічним поданням вихідного коду. Обидва подання можна використовувати взаємозамінно. Підтримка діаграм забезпечується через плагін Ballerina для VS Code. Ось кілька прикладів таких згенерованих діаграм послідовностей, порівняних з відповідним кодом.

Приклад програми для отримання та обробки даних COVID-19:

 

Приклад програми для створення звіту з даних про запити на злиття, отриманих з GitHub:

 

Підтримка JSON

ред.

Мова надає підтримку для роботи зі значеннями JSON. Вбудований тип `json` визначено як наступне об'єднання: ()|boolean|int|float|decimal|string|json[]|map<json>

import ballerina/io;

public function main() returns error {
    // Синтаксис для значень об'єкта `json` дуже схожий на синтаксис JSON
    json person = {name: "John Doe", age: 25};

    // Серіалізовані значення `json` відповідають специфікації JSON
    io:println(person);

    // Поля значення `json` можна отримати наступним чином
    string name = check person.name;
    int age = check person.age;
}

Код у хмару

ред.

Docker і Kubernetes артефакти, необхідні для розгортання коду у хмарі, можуть бути згенеровані під час збірки коду. Значення, необхідні для цих артефактів, отримуються з коду. Крім того, можна перевизначити ці значення, використовуючи файл Cloud.toml. Щоб увімкнути генерацію хмарних артефактів, користувачі можуть використовувати параметр cloud у файлі Ballerina.toml. Використовуйте docker для генерації лише Docker-образу та Dockerfile, і використовуйте k8s для генерації артефактів Kubernetes також. Мінімальний приклад конфігураційних файлів TOML виглядатиме приблизно так: Файл Ballerina.toml:

[package]
distribution = "2201.0.0"

[build-options]
cloud="k8s"

Файл Cloud.toml:

[container.image]
repository="bal_user"
name="greet"
tag="v0.1.0"

Робітники

ред.
import ballerina/http;
import ballerina/lang.'int;
import ballerina/io;

// Робітники взаємодіють один з одним, надсилаючи та отримуючи повідомлення.
// Ballerina перевіряє кожну взаємодію між робітниками (надсилання та отримання)
// щоб уникнути взаємних блокувань.
public function main() {
    @strand {thread: "any"}
    worker w1 {
        int w1val = checkpanic calculate("2*3");
        // Асинхронно надсилає повідомлення робітнику `w2`.
        w1val -> w2;
        // Отримує повідомлення від робітника `w2`.
        int w2val = <- w2;
        io:println("[w1] Повідомлення від w2: ", w2val);
        // Синхронно надсилає повідомлення робітнику `w3`. Робітник `w1` буде чекати
        // поки робітник `w3` отримає повідомлення.
        w1val ->> w3;
        w2val -> w3;
        // Скидає всі повідомлення, надіслані асинхронно до робітника `w3`. Робітник
        // зупиниться на цьому етапі, поки всі повідомлення не будуть надіслані або
        // поки робітник `w3` не вийде з ладу.
        checkpanic flush w3;
    }

    // Робітник може мати явний тип повернення, або, якщо тип повернення не зазначений,
    // він еквівалентний поверненню ().
    @strand {thread: "any"}
    worker w2 {
        int w2val = checkpanic calculate("17*5");
        // Отримує повідомлення від робітника `w1`.
        int w1val = <- w1;
        io:println("[w2] Повідомлення від w1: ", w1val);
        // Асинхронно надсилає повідомлення робітнику `w1`.
        w1val + w2val -> w1;
    }

    worker w3 {
        int|error w1val = <- w1;
        int|error w2val = <- w1;
        io:println("[w3] Повідомлення від w1: ", w1val, ", ", w2val);
    }

    // Чекає на завершення роботи робітника `w1`.
    wait w1;
}

function calculate(string expr) returns int|error {
    http:Client httpClient = check new ("https://api.mathjs.org");
    string response = check httpClient->get(string `/v4/?expr=${expr}`);
    return check 'int:fromString(response);
}

[19]

Примітки

ред.
  1. https://blog.ballerina.io/posts/introduction-to-ballerina-0.970/
  2. Ballerina Language Specification. WSO2. Архів оригіналу за 11 серпня 2020. Процитовано 24 квітня 2020. 
  3. а б в г д е ж https://opensource.ellak.gr/wp-content/uploads/sites/5/2018/06/2018-06-Ballerina-GFOSS.pdf
  4. а б ((Open Source Contributors)) (18 червня 2019). Ballerina source code. GitHub. 
  5. WSO2 / LICENSE. github.com. WSO2. 8 березня 2017. Процитовано 1 березня 2018. 
  6. Ballerina Microservices Programming Language: Introducing the Latest Release and "Ballerina Central". InfoQ. Процитовано 7 червня 2018. 
  7. Earls, Alan (1 березня 2019). How does Ballerina stack up as a cloud-native programming language?. Процитовано 23 липня 2019. 
  8. Doyle, Kerry. 10 of the best programming languages to learn in 2020 (брит.). Процитовано 16 вересня 2020. 
  9. Posta, Christian. Evolution of Integration and Microservices with Service Mesh and Ballerina. YouTube (брит.). Процитовано 24 липня 2019. 
  10. Techworld staff. Top programming languages you should try. Techworld (брит.). Процитовано 7 червня 2018. 
  11. Ballerina Reinvents Cloud-Native Middleware as a Programming Language. GlobeNewswire (Пресреліз). 10 вересня 2019. Процитовано 16 вересня 2020. 
  12. Ratnayake, Dakshitha. Ballerina Swan Lake: 10 Compelling Language Characteristics for Cloud Native Programming. InfoQ. Процитовано 1 березня 2022. 
  13. Jackson, Joab. Ballerina: An API-First Programming Language. The New Stack (амер.). Процитовано 11 червня 2018. 
  14. Foremski, Tom (1 березня 2019). Technology and the Arts: Celebrating Ballerina, a computer language of integration. Процитовано 14 липня 2019. 
  15. Lawton, George (1 листопада 2018). Ballerina language promises to improve app integration. Процитовано 23 липня 2019. 
  16. Clark, James. Ballerina Programming Language Part 0 - Context (брит.). Процитовано 16 вересня 2020. 
  17. Clark, James. Ballerina Programming Language Part 1 - Concepts (брит.). Процитовано 16 вересня 2020. 
  18. Ballerina Team (16 вересня 2020). Hello world service. ballerina.io. Архів оригіналу за 16 вересня 2020. Процитовано 16 вересня 2020.  [Архівовано 2020-09-16 у Wayback Machine.]
  19. Ballerina Team (16 вересня 2020). Взаємодія робітників. ballerina.io. 

Додаткове читання

ред.

Посилання

ред.