발레리나 (프로그래밍 언어)

Ballerina (programming language)
발레리나
Ballerina Language
설계자산지바 웨라와라나, 제임스 클라크, 사메라 자야소마, 하시타 아라빈다, 스리나스 페레라, 프랭크 레이만, WSO2[1]
개발자WSO2
첫 등장2017; 5년 전(2017년)
타이핑 규율구조, 강함, 정적, 유추
구현 언어자바, 발레리나, 타이프스크립트[2]
OS크로스 플랫폼
면허증아파치 라이선스[3] 2.0
웹사이트발레리나이오
영향을 받은
자바, 자바스크립트, 고, 러스트, C#[4]

발레리나WSO2가 클라우드 시대의 애플리케이션 프로그래머를 위해 고안한 오픈 소스 범용 프로그래밍 언어 및 플랫폼이다.작성과 수정이 용이하고 애플리케이션 프로그래머에게 적합하다.[5][6][7]

WSO2 출신 건축가들이 EAI, ESB, 워크플로우 제품 등 구성 기반 통합 툴에 대한 코드 기반 대안으로 2015년부터 시작한 오픈소스 프로젝트다.[8][9]

현대적인 데이터 형식과 프로토콜 지원, 신뢰성, 분산 트랜잭션, API, 이벤트 스트림 등 클라우드 네이티브 개발에 맞춘 다양한 구조를 가지고 있다.[10][11][12]

역사

발레리나는 분산형 클라우드 네이티브 시스템과 협력해야 하는 애플리케이션 개발자의 생산성을 향상시키기 위해 WSO2에 의해 설계되었다.10년 넘게 통합 공간에서 기업용 제품을 제공한 디자이너들은 언어를 설계할 때 업계에 대한 지식을 활용했다.[13][14]발레리나는 2017년에 처음 공개되었고, 버전 1.0은 2019년 9월 10일에 발매되었다.[15]

디자인

시퀀스 다이어그램의 형태로 코드를 직접 그래픽으로 표현한 것과 더불어 친숙한 구문을 가진 범용어다.통합 문제를 프로그래밍하기 쉽게 하기 위해 고안된 근본적인 추상화를 가지고 있다.[16]

발레리나의 주요 개념은 다음과 같다.

  • 언어의 네트워크 - 발레리나는 네트워킹을 언어에 도입하기 위해 클라이언트 객체, 서비스, 자원 기능 및 청취자의 근본적이고 새로운 추상화를 도입한다.[17]
  • 프로그래밍을 위한 시퀀스 다이어그램 - 발레리나에서 모든 프로그램에는 해당하는 시퀀스 다이어그램이 있다.[18]
  • 구조적, 기본적으로 개방형 타이핑 - 발레리나는 정적인 형태의 구조형 시스템을 가지고 있으며 네트워크 데이터 스키마 친화적으로 설계된다.[19]
  • 코드에서 클라우드로 전환 - 발레리나는 모든 주요 클라우드 플랫폼용 실행 가능한 프로그램으로 컴파일되는 확장 가능한 메타데이터를 사용하여 전체 프로그램 실행 프로세스를 개발자의 손에 맡긴다.[20]
  • 자동화된 관찰 능력 - 발레리나는 측정 기준, 로그 및 추적을 추적하는 데 도움이 되는 자동 관찰 기능을 언어 자체에 통합한다.[21]

안녕 세계

Hello World 정규 프로그램:

발레리나/io 가져오기; 공용 기능 메인() {io:println("Hello World!"); }

위의 프로그램을 실행하려면 소스 코드를.bal파일링하여 파일 경로를 에 제공bal run명령하다

$ 발레리나 달리기 hello_world.bal hello world!

Hello World 프로그램의 서비스 버전:

새로운 http에 발레리나/테스트를 가져오기; 서비스/서비스:수신기(9090) {자원함수 get . () 문자열 {반환 "Hello World!"; }}

서비스는 정규 프로그램처럼 종료되지 않는다는 점을 제외하면 동일한 방식으로 실행된다.서비스가 가동되고 실행되면 HTTP 클라이언트를 사용하여 서비스를 호출할 수 있다.예를 들어 다음 cURL 명령을 사용하여 위의 서비스를 호출할 수 있다.

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

[22]

REST API

발레리나/가수 가져오기; 새 http 서비스:수신기(9090) { 요인 설계 후 리소스 함수(@http:페이로드 문자열 페이로드) 반환 http:확인 http:BadRequest { int 오류 num = int:String(payload); number가 오류 {인 경우 <http:BadRequest>{body: "잘못된 정수: " + 페이로드}; 숫자 < 0 {이 반환되는 경우 } "http:BadRequest>{body : "Integer는 >= 0"}, } int 결과 = 1; int i in 2 ...num { result *= i; } return <result:OK>{body: result}; } }
$curl http://localhost:9090/messages -d 5 120

GraphQL API

발레리나/그래픽ql 가져오기;그래프ql에서 서비스 /vmx: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 "콘텐츠 유형: 애플리케이션/json" -d '{"query": "{ 견적 { 티커, 가격 }" }" "http://localhost:4000/stocks" {"data:{"message":{"티커":"EXPO", "가격":287.5}}

시퀀스 다이어그램

생성된 시퀀스 다이어그램은 소스 코드를 표준적으로 표현한 것이다.그 두 가지 표현은 서로 교환하여 사용할 수 있다.다이어그램 지원은 발레리나 VS 코드 플러그인을 통해 제공된다.다음은 관련 코드와 비교하여 생성된 시퀀스 다이어그램의 두 개다.

COVID19 데이터 검색 및 처리를 위한 샘플 프로그램:

Working-with-data-code+diagram.png

GitHub에서 검색된 꺼내기 요청 데이터를 생성하기 위한 샘플 프로그램:

Consuming-services-code+diagram.png

JSON 지원

언어는 JSON 값으로 작업하기 위한 지원을 제공한다.빌트인 타입 json은 다음과 같은 조합으로 정의된다: () 부울 인트 플로트 십진 문자열 json[] map<json] map.

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.na; in age = check person.age; }

코드 투 클라우드

코드를 클라우드에 배포하는 데 필요한 도커 및 쿠베르네츠 아티팩트는 코드를 작성할 때 생성될 수 있다.이러한 아티팩트에 필요한 값은 코드에서 파생된다.또한 이 값을 재정의할 수 있으며Cloud.tomlfile. 클라우드 아티팩트를 생성할 수 있도록 하기 위해 사용자는cloud에 옵션을 구축하다Ballerina.tomlfile. 사용docker도커 이미지와 도커 파일만 생성하고 사용k8s쿠베르네츠 공예품도 만들 수 있어최소한의 샘플 구성 TOML 파일은 다음과 유사하게 보인다.

Ballerina.toml파일:

[package] 분배 = "2201.0.0"  [빌드-빌드] 구름="k8s" 

Cloud.toml파일:

[reason.image] 리포지토리="bal_user" 이름을 붙이다="greet" 꼬리표를 달다="v0.1.0" 

노동자들

발레리나/http 수입, 발레리나/랑 수입, 발레리나/io 수입, // 노동자들은 메시지를 주고 받으면서 상호작용을 한다. // 발레리나는 교착상태를 피하기 위해 모든 근로자 상호작용을 검증한다.공공 기능{@ 가닥{나사:"어떤"}근로자 w1{int w1val)checkpanic calculate("2*3"), main()을 끓여비동기적으로 근로자 `w2`.;w2.//그 근로자 `w2`에서.;-w2 메시지를 intw2val)<>를 받습니다;io:println("w2에서[w1]:",w2val), 끓여메시지를w1val -> 보냅니다. 보냅니다w3과 동시에 작업자에게 보내는 메시지w1은 w3가 w1val -> w3; w2val -> w3; // 비동기적으로 전송된 모든 메시지를 w3으로 플러시할 때까지 기다린다.작업자 //는 모든 메시지가 전송될 때까지 또는 작업자 'w3' //가 실패할 때까지 이 시점에서 정지한다.체크패닉 플러시 w3; } // 작업자는 명시적인 반품 유형을 가질 수 있으며, 그렇지 않으면 반품 유형이 언급되지 않으면 // 반품 유형(/)에 해당된다. @strand {thread: "any" w2 { int w2val = checkpanic calculate("17*5); // w1. w1val = <-1;이오:println("w1에서[w2]:",w1val), 끓여비동기적으로 근로자 `w1`에 메시지를 보냅니다.w1val+w2val ->, w1.}w3//{int 오류 w1val)<>-w1,int 오류 w2val)<>-w1, io:println("w1에서[w3]메시지:",w1val,",",w2val).}노동자는 근로자 `w1`to을 완성 때까지 기다립니다.wait w1; } 함수 계산( 문자열 expr)이 오류 { http:클라이언트 httpClient = check new("https://api.mathjs.org"); 문자열 응답 = httpClient->get(string '/v4/?expr=${expr}'); 반환 확인 'int:FromString(response)'; }

[23]

참조

  1. ^ "Ballerina Language Specification". WSO2.
  2. ^ a b Open Source Contributors (18 June 2019). "Ballerina source code". GitHub. {{cite web}}: author=일반 이름 포함(도움말)
  3. ^ "WSO2 / LICENSE". github.com. WSO2. 2017-03-08. Retrieved 2018-03-01.
  4. ^ "Ballerina, A modern programming language focused on integration" (PDF): 15. {{cite journal}}:Cite 저널은 필요로 한다. journal=(도움말)
  5. ^ Jackson, Joab. "Ballerina: An API-First Programming Language". The New Stack. Retrieved 2018-06-11.
  6. ^ Foremski, Tom (2019-03-01). "Technology and the Arts: Celebrating Ballerina, a computer language of integration". Retrieved 2019-07-14.
  7. ^ Lawton, George (2018-11-01). "Ballerina language promises to improve app integration". Retrieved 2019-07-23.
  8. ^ "Ballerina Microservices Programming Language: Introducing the Latest Release and "Ballerina Central"". InfoQ. Retrieved 2018-06-07.
  9. ^ Earls, Alan (2019-03-01). "How does Ballerina stack up as a cloud-native programming language?". Retrieved 2019-07-23.
  10. ^ Doyle, Kerry. "10 of the best programming languages to learn in 2020". Retrieved 2020-09-16.
  11. ^ Posta, Christian. "Evolution of Integration and Microservices with Service Mesh and Ballerina". Retrieved 2019-07-24.
  12. ^ Techworld staff. "Top programming languages you should try". Techworld. Retrieved 2018-06-07.
  13. ^ Clark, James. "Ballerina Programming Language Part 0 - Context". Retrieved 2020-09-16.
  14. ^ Clark, James. "Ballerina Programming Language Part 1 - Concepts". Retrieved 2020-09-16.
  15. ^ "Ballerina Reinvents Cloud-Native Middleware as a Programming Language". GlobeNewswire. Retrieved 2020-09-16.
  16. ^ Ratnayake, Dakshitha. "Ballerina Swan Lake: 10 Compelling Language Characteristics for Cloud Native Programming". InfoQ. InfoQ. Retrieved 1 March 2022.
  17. ^ Warusawithana, Lakmal. "Rethinking Programming: The Network in the Language". Retrieved 2020-09-16.
  18. ^ Fernando, Anjana. "Rethinking Programming: Making Sequence Diagrams Cool Again". Retrieved 2020-09-16.
  19. ^ Fernando, Anjana. "Rethinking Programming: Network Aware Type System". Retrieved 2020-09-16.
  20. ^ Warusawithana, Lakmal. "Rethinking Programming: From Code to Cloud". Retrieved 2020-09-16.
  21. ^ Fernando, Anjana. "Rethinking Programming: Automated Observability". Retrieved 2020-09-16.
  22. ^ Ballerina Team (16 September 2020). "Hello world service". ballerina.io.
  23. ^ Ballerina Team (16 September 2020). "Worker interaction". ballerina.io.

추가 읽기

외부 링크