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