실론(프로그래밍 언어)
Ceylon (programming language)![]() | |
패러다임 | 객체 지향 |
---|---|
설계자 | 개빈 킹 |
개발자. | 이클립스 재단 |
첫 등장 | 2011; | 전(
안정적 해제 | 1.3.3 / 2017년 8월 21일; 전 |
타이핑 규율 | 정적, 강력, 안전 |
플랫폼 | Java 가상 시스템, JavaScript |
면허증 | 아파치 라이선스 2.0 |
파일 이름 확장명 | .실론[1] |
웹사이트 | ceylon-lang |
영향을 받은 | |
자바,[2] 스칼라, 스몰토크, ML,[3] 리스프,[4] 미디[5] |
실론은 Red Hat에 의해 만들어진 불변성에 중점을 둔 객체 지향적이고 정적으로 강하게 타이핑된 프로그래밍 언어다.실론 프로그램은 자바 가상 머신(JVM)에서 실행되며 자바스크립트에 컴파일할 수 있다.[6][7]언어 설계는 소스 코드 가독성, 예측성, 도구성, 모듈성 및 메타프로그래머성에 초점을 맞춘다.[8]
실론의 중요한 특징은 다음과 같다.[9]
- 컴파일 시 null 안전 및 목록 요소 존재를 시행하는 유형 시스템
- 일반 구문 및 의미론, 특별한 경우를 피하고, 구문설탕을 선호하는 원시적으로 정의된 구성물
- 일반 프로그래밍 및 메타프로그래밍 지원(정규화된 제네릭 포함)
- JBoss 모듈을 기반으로 언어에 내장된 모듈화, OSGi[10] 및 Maven과[11] 상호 운용 가능
- Eclipse 기반 IDE를[12] 포함한 강력한 도구
'실론'이란 이름은 자바와 스리랑카가 커피와 차의 성장과 수출로 유명한 섬이라는 점에서 자바를 비스듬히 지칭한 것이다.
실론은 2017년 8월 이클립스 재단에 기부됐다.
언어 기능
실론은 자바의 구문에 영향을 많이 받지만, 많은 새로운 특징들을 추가한다.
유형 시스템
자바에 비해 실론의 가장 새로운 면 중 하나는 유형 시스템이다.실론은 자바의 원시적인 유형과[13] 권투는 전적으로 일급 사물로 구성된 유형 시스템을 선호한다.이것이 어떤 상황에서는 복싱 오버헤드를 야기할 수 있지만, 그것은 타입 시스템을 더 균일하게 만든다.
실론은 타이프스크립트, 미디, 플로우와 유사한 방식으로 유니언과 교차로 유형을 허용한다.
조합 유형, 작성됨A B
, 변수가 둘 이상의 유형을 가질 수 있도록 허용.다음 예는 정수 또는 문자열을 사용할 수 있는 실론 함수를 보여준다.
공유했습니다. 공허하게 하다 정수OrString(정수 끈 입력하다) { 만일 (이다 정수 입력하다) { 인쇄하다(""입력"이라는 정수를 얻었다.); } 그 밖의 { 인쇄하다('입력'이라는 끈을 얻었다"고 말했다.); } }
교차로 유형, 작성A&B
, 흐름 감지 타이핑의 이론적 기반:
공유했습니다. 공허하게 하다 정수OrString(정수 끈 입력하다) { 정수 추가된 = 입력하다 + 6; // 잘못되었습니다, + 연산자가 정수 문자열에서 정의되지 않음 만일 (이다 정수 입력하다) { 정수 추가된 = 입력하다 + 6; // 합법적, 입력이 이제 정수인 것으로 알려져 있음 인쇄하다(""입력"이라는 정수를 얻었다.); } 그 밖의 { 인쇄하다('입력'이라는 끈을 얻었다"고 말했다.); } }
조건is Integer input
활자를 좁히다input
로<Integer String> & Integer
, 에 분배된다.Integer&Integer String&Integer
, , , , 로서.String
그리고Integer
분리형이며, 다음과 같다.Integer&Integer Nothing
(Nothing
빈 하단 유형)으로 단순화하여Integer
.
Null safety
조합과 교차로 유형은 null 안전성을 제공하기 위해 사용된다.실론형 서열체계의 최상위 유형은 클래스다.Anything
, 두 개의 하위 클래스가 있는 경우:Object
, 모든 정상 클래스와 모든 인터페이스의 슈퍼 클래스, 그리고Null
, 유일한 예와 함께 . 이후.Object
그리고Null
대부분의 규칙적인 형태는 분리형이고Integer
또는List<String>
무효화 할 수 없음; 무효화 유형은 조합임Integer Null
, 약칭Integer?
.[14]
교차로 유형은 유형 매개변수와 같이 가능한 선택적 유형에서 비선택적 유형을 가져오는 데 사용할 수 있다.예를 들어, 제거되는 함수의 서명null
가치 흐름의 요소는 다음과 같을 수 있다.
반복할 수<요소&오브젝트> removeNulls<요소>(반복할 수<요소> 물줄기가 흐르다);
언제removeNulls
의 흐름으로 불리다Integer Null
원소들, 그 결과의 연속이 될 것이다.<Integer Null> & Object
로 단순화하는 요소들Integer
.
기능들
많은 현대 언어와 유사하게 실론은 기능 유형과 익명 기능을[15] 포함한 일급 기능과 고차순 기능을 지원한다.
// 블록 구문을 사용하는 최상위 고차 함수(사용자 생성 클래스와 관련이 없음) 끈 과정(끈 문자 메시지를 보내다, 끈 transform(끈 변경)) { 돌아오다 transform(문자 메시지를 보내다); } // 표현 형식의 String.reverse를 호출하는 최상위 함수. 끈 역행의(끈 문자 메시지를 보내다) => 문자 메시지를 보내다.뒤바뀐; // String.reversed에 대한 함수 참조지만 대부분 위의 함수와 동일함. 끈(끈) 역기능참조 = 끈.뒤바뀐; // 위의 최상위 함수를 상위 함수에 대한 인수로 제공하는 예 끈 역1 = 과정("하나", 역행의); // 익명 함수 - (텍스트) => text+text -가 위의 고차 함수에 제공되는 예. 끈 역2 = 과정("하나", (문자 메시지를 보내다) => 문자 메시지를 보내다+문자 메시지를 보내다);
열거형
자바와 많은 다른 언어들과 유사하고 대수형식과 유사한 메커니즘을 가진 실론은 열거형, 즉 Enums라고도 알려진 것을 지원한다.이는 선언 시 추상 클래스의 인스턴스(instance)를 제한된 객체 집합(이 경우 싱글톤 인스턴스)으로 제한하는 패턴으로 실론에서 구현된다.이 패턴을 구현하는 또 다른 방법은 실론 1.2의 새로운 생성자 특징을 사용하는 것이다. 여기서 오브젝트는 서로 다른 명명된 생성자 선언으로 구현된다.[16]
// 열거형 유형의 기존 구문, 이 경우 인스턴스를 3개의 개체로 제한(이 목적:단골격) 추상적 계급 차량(공유했습니다. 끈 이름을 붙이다) 의 평면을 이루다 훈련을 시키다 자동차 {} 반대하다 평면을 이루다 연장하다 차량("평면") {} 반대하다 훈련을 시키다 연장하다 차량("열차") {} 반대하다 자동차 연장하다 차량("automobile") {} // 컴파일 오류: 유형이 열거된 슈퍼타입의 어떤 경우에도 하위 유형이 아님: '보트'가 '차량'을 상속함 //객체 보트가 차량("보트")을 확장함 {} // 신규(Ceilon 1.2.0 기준) 생성자 기반 구문 계급 차량 의 평면을 이루다 훈련을 시키다 자동차 { 끈 이름을 붙이다; 추상적 새로운 이름 지어진(끈 p이름) { 이름을 붙이다 = p이름; } 공유했습니다. 새로운 평면을 이루다 연장하다 이름 지어진("평면") {} 공유했습니다. 새로운 훈련을 시키다 연장하다 이름 지어진("열차") {} 공유했습니다. 새로운 자동차 연장하다 이름 지어진("automobile") {} // 컴파일 오류: 비추상적 열거 등급의 절에서 값 생성자가 발생하지 않음: '보트'가 '차량'의 절에 나열되지 않음 //새 보트의 확장명칭 "("boat보트") {} }
유형추론
실론은 강하고 정적으로 타이프를 치지만, 타이프 추론도 지원한다.그value
키워드는 변수의 유형을 유추하는 데 사용되며function
키워드는 함수의 유형을 유추하는 데 사용된다.다음 두 정의 쌍은 각각 동일하다.
정수 i = 3; 가치를 매기다 i = 3; 정수 덧셈을(정수 i1, 정수 i2) { 돌아오다 i1 + i2; } 기능을 하다 덧셈을(정수 i1, 정수 i2) { 돌아오다 i1 + i2; }
그러나 단일 통과 형식 추론이 가능하도록 하려면 최상위 수준이 아닌 선언과 공유되지 않은 선언에만 추론이 허용된다.[17]
이름이 있는 진입점
기본적으로 스타터는 (ceylon run
)은 모듈의 공유 런어웨이 함수를 실행한다.
/* Hello World 프로그램 */ 공유했습니다. 공허하게 하다 달리다() { 인쇄하다("안녕, 월드!"); }
그러나 매개 변수가 없는 다른 공유 기능은 다음과 같이 --run 매개 변수를 사용하여 프로그램을 호출하는 주 기능으로 사용할 수 있다.
ceylon run --compile=force --run hello default
버전
출시된 실론 버전:[18]
- M1 0.1 "뉴턴" (2011년 12월 20일)
- M2 0.2 "미니텔" (2012년 3월 2일)
- M3 0.3 "V2000" (2012년 6월 21일)
- M3.1 0.3.1 "V2000"(Jul 6 2012)
- M4 0.4 "분석 엔진" (2012년 10월 29일)
- M5 0.5 "네사퐁" (2013년 3월 13일)
- M6 0.6 "가상 소년" (2013년 9월 23일)
- 1.0 베타 "Virtual Boy" (2013년 9월 24일)
- 1.0.0 "No More Mr Nice Guy" (2013년 11월 13일)
- 1.1.0 "초기후 선박 더 세컨드" (2014년 10월 9일)
- 1.2.0 "2015년 10월 28일 (2015년 10월 28일)
- 1.2.1 "비정기 종말론" (2016년 2월 11일)
- 1.2.2 "차밍 그러나 비이성적" (2016년 3월 11일)
- 1.3.0 "내부반사 총계" (2016년 9월 19일)
- 1.3.1 "이제 내 방식대로 해보자" (2016년 11월 22일)
- 1.3.2 "용서롭게 웃는" (2017년 3월 2일)
- 1.3.3 "내용은 다를 수 있다"(2017년 8월 21일)
면허증
실론의 모든 부품은 무료 소프트웨어로 이용 가능하며, 대부분은 아파치 라이선스다.[19]소스 코드의 일부는 LGPL에 따라 라이센스가 부여된다.
참고 항목
- Dart(프로그래밍 언어), 자체 VM, JS 컴파일, 유형 시스템 매우 엄격하지 않음, 혼합 지원
- Fantom(프로그래밍 언어), JVM에 컴파일, 매우 엄격하지 않은 유형 시스템, 혼합물 지원
참조
- ^ King, Gavin. "The Ceylon Language: §4.1 Compilation unit structure". Retrieved 2015-12-04.
A compilation unit is a text file, with the filename extension
.ceylon
. - ^ "Frequently Asked Questions: What is Ceylon?". Retrieved 2015-12-04.
Ceylon is a new programming language that's deeply influenced by Java
- ^ "ceylon/user - Gitter". Retrieved 2015-12-04.
- ^ "ceylon/user - Gitter". Retrieved 2015-12-04.
- ^ "Top 10 Ceylon language features Java wishes it had". Retrieved 2019-11-29.
- ^ "Ceylon 1.0 beta". Retrieved 2013-09-26.
- ^ "Project Ceylon – Red Hat builds Java replacement". The Register. 2011-04-13. Retrieved 2011-11-27.
- ^ King, Gavin (2012-01-10). "Principles that guide this project". Retrieved 2015-12-04.
- ^ "FAQ about language design: Goals". Retrieved 2015-12-04.
- ^ Festal, David (2014-10-10). "Write in Ceylon, deploy as OSGI, use in Java EE". Retrieved 2015-12-04.
- ^ "Maven repositories". Retrieved 2015-12-04.
- ^ "Features of Ceylon IDE". Retrieved 2015-12-04.
- ^ King, Gavin. "Ceylon: Language Design FAQ".
- ^ King, Gavin. "The Ceylon Language: §1.4.3 Compile-time safety for null values and flow-sensitive typing". Retrieved 2015-12-04.
- ^ King, Gavin. "The Ceylon Language: 4.7 Functions". Retrieved 5 December 2015.
- ^ King, Gavin. "The Ceylon Language: 4.5.8 Enumerated classes". Retrieved 6 December 2015.
- ^ King, Gavin. "The Ceylon Language: §3.2.9 Type inference". Retrieved 2015-12-04.
- ^ https://ceylon-lang.org/download-archive/ Ceilon: 이전 Ceilon 버전 다운로드
- ^ "Ceylon: Licenses". Retrieved 2015-12-04.