Jump to content

Балерина (язык программирования)

Балерина
Язык Балерины
Разработано Санджива Вираварана , Джеймс Кларк , Самира Джаясома, Хасита Аравинда, Шринат Перера, Фрэнк Лейманн и WSO2 [1]
Разработчик WSO2
Впервые появился 2017 ; 7 лет назад ( 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!

[17]

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);
}

[18]

Ссылки [ править ]

  1. ^ «Спецификация языка балерины» . WSO2. Архивировано из оригинала 11 августа 2020 г. Проверено 24 апреля 2020 г.
  2. ^ Jump up to: Перейти обратно: а б Участники открытого исходного кода (18 июня 2019 г.). «Исходный код Балерины» . Гитхаб .
  3. ^ «WSO2/ЛИЦЕНЗИЯ» . github.com . ВСО2 . 08.03.2017 . Проверено 01 марта 2018 г.
  4. ^ «Балерина. Современный язык программирования, ориентированный на интеграцию» (PDF) : 15. {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  5. ^ «Язык программирования микросервисов Ballerina: представляем последнюю версию и Ballerina Central » . ИнфоQ . Проверено 7 июня 2018 г.
  6. ^ Эрлз, Алан (01 марта 2019 г.). «Как Ballerina выглядит как облачный язык программирования?» . Проверено 23 июля 2019 г.
  7. ^ Дойл, Керри. «10 лучших языков программирования для изучения в 2020 году» . Проверено 16 сентября 2020 г.
  8. ^ Поста, Кристиан. «Эволюция интеграции и микросервисов с Service Mesh и Ballerina» . Ютуб . Проверено 24 июля 2019 г.
  9. ^ Сотрудники Техмир. «Лучшие языки программирования, которые стоит попробовать» . Техмир . Проверено 7 июня 2018 г.
  10. ^ «Ballerina заново изобретает облачное промежуточное ПО как язык программирования» . GlobeNewswire (Пресс-релиз). 10 сентября 2019 года . Проверено 16 сентября 2020 г.
  11. ^ Ратнаяке, Дакшита. «Балерина Лебединое озеро: 10 убедительных характеристик языка для облачного программирования» . ИнфоQ . Проверено 1 марта 2022 г.
  12. ^ Джексон, Иоав. «Балерина: первый язык программирования, ориентированный на API» . Новый стек . Проверено 11 июня 2018 г.
  13. ^ Форемски, Том (01 марта 2019 г.). «Технологии и искусство: слава балерины, компьютерного языка интеграции» . Проверено 14 июля 2019 г.
  14. ^ Лоутон, Джордж (01 ноября 2018 г.). «Язык балерины обещает улучшить интеграцию приложений» . Проверено 23 июля 2019 г.
  15. ^ Кларк, Джеймс. «Язык программирования Ballerina. Часть 0 — Контекст» . Проверено 16 сентября 2020 г.
  16. ^ Кларк, Джеймс. «Язык программирования Ballerina. Часть 1. Концепции» . Проверено 16 сентября 2020 г.
  17. ^ Команда «Балерины» (16 сентября 2020 г.). «Привет, всемирный сервис» . ballerina.io. Архивировано из оригинала 16 сентября 2020 года . Проверено 16 сентября 2020 г.
  18. ^ Команда «Балерины» (16 сентября 2020 г.). «Рабочее взаимодействие» . ballerina.io.

Дальнейшее чтение [ править ]

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 049b8212d3e52f0cc604eaac1c2b265b__1712876880
URL1:https://arc.ask3.ru/arc/aa/04/5b/049b8212d3e52f0cc604eaac1c2b265b.html
Заголовок, (Title) документа по адресу, URL1:
Ballerina (programming language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)