Балерина (язык программирования)
![]() | |
Разработано | Санджива Вираварана , Джеймс Кларк , Самира Джаясома, Хасита Аравинда, Шринат Перера, Фрэнк Лейманн и WSO2 [1] |
---|---|
Разработчик | WSO2 |
Впервые появился | 2017 |
Дисциплина набора текста | Структурный , сильный , статический , предполагаемый. |
Язык реализации | Java, Балерина, TypeScript [2] |
ТЫ | Кросс-платформенный |
Лицензия | Лицензия Апач 2.0 [3] |
Веб-сайт | балерина |
Под влиянием | |
Java , Javascript , Go , Rust , C# [4] |
Ballerina — это с открытым исходным кодом общего назначения язык программирования , разработанный WSO2 приложений облачной эпохи для программистов . [2]
Проект стартовал в 2015 году архитекторами из WSO2 как альтернатива на основе кода инструментам интеграции на основе конфигурации, таким как EAI , ESB и продукты рабочих процессов. [5] [6]
Он имеет различные конструкции, ориентированные на облачную разработку, включая поддержку различных форматов данных и протоколов, надежности, распределенных транзакций, API и потоков событий. [7] [8] [9]
История [ править ]
Впервые о Ballerina было публично объявлено в 2017 году, а версия 1.0 была выпущена 10 сентября 2019 года. [10]
Дизайн [ править ]
Ballerina — это язык общего назначения со знакомым синтаксисом и прямым графическим представлением кода в виде диаграмм последовательности. Он содержит фундаментальные абстракции, призванные упростить программирование задач интеграции. [11] Ballerina была разработана WSO2 для повышения производительности разработчиков приложений, которым приходится работать с распределенными вычислениями . Его легко писать и модифицировать, и он подходит для прикладных программистов. [12] [13] [14]
Разработчики, которые создавали продукты для корпоративной интеграции более 10 лет, использовали свои знания отрасли при разработке языка. [15] [16] говорит директор WSO2 и основатель Ballerina Джеймс Кларк.
Примеры [ править ]
Привет, мир [ править ]
Обычная программа Hello World:
import ballerina/io;
public function main() {
io:println("Hello World!");
}
Чтобы выполнить вышеуказанную программу, поместите исходный код в .bal
файл и укажите путь к файлу bal run
команда.
$ ballerina run hello_world.bal
Hello World!
Сервисная версия программы 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!
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: "Invalid integer: " + payload};
}
if num < 0 {
return <http:BadRequest>{body: "Integer should be >= 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 {
// Syntax for `json` object values is very similar to the syntax of JSON
json person = {name: "John Doe", age: 25};
// Serialized `json` values conforms to the JSON specification
io:println(person);
// The fields of the `json` value can be accessed as follows
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;
// Workers interact with each other by sending and receiving messages.
// Ballerina validates every worker interaction (send and receive)
// to avoid deadlocks.
public function main() {
@strand {thread: "any"}
worker w1 {
int w1val = checkpanic calculate("2*3");
// Sends a message asynchronously to the worker `w2`.
w1val -> w2;
// Receives a message from the worker `w2`.
int w2val = <- w2;
io:println("[w1] Message from w2: ", w2val);
// Sends messages synchronously to the worker `w3`. The worker `w1` will wait
// until the worker `w3` receives the message.
w1val ->> w3;
w2val -> w3;
// Flushes all messages sent asynchronously to the worker `w3`. The worker
// will halt at this point until all messages are sent or until the worker `w3`
// fails.
checkpanic flush w3;
}
// A worker can have an explicit return type, or else, if a return type is not mentioned,
// it is equivalent to returning ().
@strand {thread: "any"}
worker w2 {
int w2val = checkpanic calculate("17*5");
// Receives a message from the worker `w1`.
int w1val = <- w1;
io:println("[w2] Message from w1: ", w1val);
// Sends a message asynchronously to the worker `w1`.
w1val + w2val -> w1;
}
worker w3 {
int|error w1val = <- w1;
int|error w2val = <- w1;
io:println("[w3] Messages from w1: ", w1val, ", ", w2val);
}
// Waits for the worker `w1`to finish.
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);
}
Ссылки [ править ]
- ^ «Спецификация языка балерины» . WSO2. Архивировано из оригинала 11 августа 2020 г. Проверено 24 апреля 2020 г.
- ^ Jump up to: Перейти обратно: а б Участники открытого исходного кода (18 июня 2019 г.). «Исходный код Балерины» . Гитхаб .
- ^ «WSO2/ЛИЦЕНЗИЯ» . github.com . ВСО2 . 08.03.2017 . Проверено 01 марта 2018 г.
- ^ «Балерина. Современный язык программирования, ориентированный на интеграцию» (PDF) : 15.
{{cite journal}}
: Для цитирования журнала требуется|journal=
( помощь ) - ^ «Язык программирования микросервисов Ballerina: представляем последнюю версию и Ballerina Central » . ИнфоQ . Проверено 7 июня 2018 г.
- ^ Эрлз, Алан (01 марта 2019 г.). «Как Ballerina выглядит как облачный язык программирования?» . Проверено 23 июля 2019 г.
- ^ Дойл, Керри. «10 лучших языков программирования для изучения в 2020 году» . Проверено 16 сентября 2020 г.
- ^ Поста, Кристиан. «Эволюция интеграции и микросервисов с Service Mesh и Ballerina» . Ютуб . Проверено 24 июля 2019 г.
- ^ Сотрудники Техмир. «Лучшие языки программирования, которые стоит попробовать» . Техмир . Проверено 7 июня 2018 г.
- ^ «Ballerina заново изобретает облачное промежуточное ПО как язык программирования» . GlobeNewswire (Пресс-релиз). 10 сентября 2019 года . Проверено 16 сентября 2020 г.
- ^ Ратнаяке, Дакшита. «Балерина Лебединое озеро: 10 убедительных характеристик языка для облачного программирования» . ИнфоQ . Проверено 1 марта 2022 г.
- ^ Джексон, Иоав. «Балерина: первый язык программирования, ориентированный на API» . Новый стек . Проверено 11 июня 2018 г.
- ^ Форемски, Том (01 марта 2019 г.). «Технологии и искусство: слава балерины, компьютерного языка интеграции» . Проверено 14 июля 2019 г.
- ^ Лоутон, Джордж (01 ноября 2018 г.). «Язык балерины обещает улучшить интеграцию приложений» . Проверено 23 июля 2019 г.
- ^ Кларк, Джеймс. «Язык программирования Ballerina. Часть 0 — Контекст» . Проверено 16 сентября 2020 г.
- ^ Кларк, Джеймс. «Язык программирования Ballerina. Часть 1. Концепции» . Проверено 16 сентября 2020 г.
- ^ Команда «Балерины» (16 сентября 2020 г.). «Привет, всемирный сервис» . ballerina.io. Архивировано из оригинала 16 сентября 2020 года . Проверено 16 сентября 2020 г.
- ^ Команда «Балерины» (16 сентября 2020 г.). «Рабочее взаимодействие» . ballerina.io.
Дальнейшее чтение [ править ]
- Фернандо, Анджана, Варусавитана, Лакмал (2020) Начало программирования балерин , Apress (часть Springer Nature)
Внешние ссылки [ править ]
- https://ballerina.io
- https://github.com/ballerina-platform/ballerina-lang Репозиторий GitHub.
- программное обеспечение 2017 года
- Языки программирования, созданные в 2017 году.
- Языки сценариев
- Динамически типизированные языки программирования
- Статически типизированные языки программирования
- Параллельные языки программирования
- Языки программирования высокого уровня
- Бесплатные программные проекты
- Кроссплатформенное бесплатное программное обеспечение