Ballerina — Вікіпедія
Ballerina | |
---|---|
Парадигма | конкурентні обчислення |
Дата появи | 2017[1] |
Творці | Санджіва Віраварані, Джеймс Кларк, Саміра Джаясома, Хасіта Аравінда, Срінат Перера, Франк Лейманн і WSO2[2] |
Розробник | WSO2 |
Останній реліз | 1.2.31 (8 липня 2022)[3] |
Система типізації | Структурна, сувора, статична, виведена |
Під впливом від | Java, JavaScript, Мова програмування Go, Rust, C Sharp, C[4], Haskell[4], C++[4], Kotlin[4], Dart[4], TypeScript[4] і Swift[4] |
Мова реалізації | Java, Ballerina, TypeScript[5] |
Операційна система | Мультиплатформна |
Ліцензія | Apache License 2.0[6] |
Звичайні розширення файлів | .bal |
Репозиторій вихідного коду | github.com/ballerina-platform/ballerina-lang |
Вебсайт | ballerina.io |
Ballerina — це відкрита мова загального призначення для програмістів, розроблена компанією WSO2 для програмування в хмарну еру.[5]
Проєкт було започатковано у 2015 році архітекторами з WSO2 як кодову альтернативу до інструментів інтеграції на основі конфігурації, таких як EAI, ESB та продукти для керування робочими процесами.[7][8]
Мова має різні конструкції, орієнтовані на хмарну розробку, включаючи підтримку різних форматів даних і протоколів, надійність, розподілені транзакції, API та потоки подій.[9][10][11]
Ballerina була вперше офіційно анонсована у 2017 році, а версія 1.0 була випущена 10 вересня 2019 року.[12]
Ballerina — це мова загального призначення зі знайомим синтаксисом та прямим графічним представленням коду у вигляді діаграм послідовностей. Вона має фундаментальні абстракції, розроблені для полегшення програмування завдань інтеграції.[13] Ballerina була розроблена компанією WSO2 для підвищення продуктивності розробників додатків, які працюють з розподіленими обчисленнями. Вона проста у написанні та модифікації, і підходить для програмістів прикладних програм.[14][15][16]
Дизайнери, які понад 10 років розробляли продукти для інтеграції підприємств, використали свої знання індустрії при створенні мови,[17][18] зазначає директор 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.
- ↑ Release 1.2.31 — 2022.
- ↑ а б в г д е ж 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.