결정(프로그래밍 언어)

Crystal (programming language)
크리스털
Crystal language logo.svg
패러다임다중 패러다임: 객체 지향, 동시
설계자아리 보렌즈베이그, 후안 와이너만, 브라이언 카디프
개발자마나스 테크놀로지 솔루션
첫 등장2014년 6월 19일; 7년(2014-06-19)[1]
안정적 해제
1.3.2[2] / 2022년 1월 18일; 16일 전(2022년 1월 18일)
타이핑 규율정적, 추론, 명목, 오리
구현 언어크리스털
플랫폼IA-32(i386), x86-64, AArch64[3]
OSLinux, macOS, FreeBSD, OpenBSD[3]
면허증아파치 라이선스 2.0
파일 이름 확장명.cr
웹사이트crystal-lang.org
영향을 받은
루비, C, 러스트, ,[4] C#,[4] 파이톤[4]

크리스탈범용, 객체 지향의 프로그래밍 언어로, 아리 보렌즈바이그, 후안 와즈너먼, 브라이언 카디프와 300명 이상의 기고자가 설계·개발했다.[5]루비어(Ruby)에서 영감을 얻은 구문으로,[4] 정적 유형 체크가 있는 컴파일된 언어지만, 변수나 메서드 인수의 유형을 특정하는 것은 일반적으로 필요하지 않다.유형은 고급 글로벌 유형 추론 알고리즘에 의해 해결된다.[6]크리스탈은 현재 활발한 개발 중에 있다.아파치 라이선스 버전 2.0에 따라 무료 오픈소스 소프트웨어로 출시된다.

역사

언어에 관한 작업은 루비의 우아함과 생산성을 컴파일된 언어의 속도, 효율성, 유형 안전성과 융합시키는 것을 목표로 2011년 6월에 시작되었다.[7][8][7]처음에 Joy라는 이름을 붙였고, 그것은 빠르게 Crystal로 이름이 바뀌었다.[7]

크리스탈 컴파일러는 처음에 루비로 쓰여졌지만 나중에 크리스탈로 다시 쓰여져 2013년 11월 현재 자체 호스트화가 되었다.[9]첫 정식 버전은 2014년 6월에 출시되었다.[10]크리스탈은 2016년 7월 TIOBE 지수에 가입했다.

설명

구문에서는 루비어를 닮았지만, 크리스탈은 루비의 동적 측면을 배제하는 비용으로 LLVM 백엔드를 사용하여 훨씬 더 효율적인 네이티브 코드로 컴파일한다.그러나 크리스탈 컴파일러가 사용하는 고급 글로벌형 추론은 유니온형의 사용과 결합되어 크리스탈에게 다른 비교 가능한 많은 프로그래밍 언어보다 더 높은 수준의 스크립팅 언어의 느낌을 준다.그 언어는 쓰레기 수거를 자동화하고 있으며 현재 봄 수집기를 제공하고 있다.크리스탈은 매크로 시스템을 보유하고 있으며 제네릭뿐만 아니라 방법과 운영자의 과부하도 지원한다.크리스탈의 동시성 모델은 순차적 프로세스(CSP) 통신에서 영감을 얻어 Go에서 영감을 얻은 경량 섬유와 채널(섬유 간 통신용)을 구현한다.[4]

안녕 세계

크리스탈에서 헬로 월드 프로그램을 작성하는 가장 간단한 방법은 다음과 같다.

놓다 "헬로 월드!" 

루비랑 똑같아.

또는 객체 지향 프로그래밍 스타일 사용:

계급 그리터   반항하다 초기화하다(@name : )   종지부를 찍다    반항하다 경례하다     놓다 "여보세요#{@name}!"   종지부를 찍다 종지부를 찍다  g = 그리터.새로운("세계") g.경례하다 

HTTP 서버

요구하다 "서버"  서버 = HTTP::서버.새로운 하다  문맥    문맥.반응하다.content_type = "텍스트/텍스트"   문맥.반응하다.인쇄하다 "헬로 월드!때가#{시간.국부적}" 종지부를 찍다  서버.bind_binds("0.0.0.0", 8080) 놓다 "http://0.0.0:8080에서 듣기" 서버.귀를 기울이다 

TCP 에코 서버

요구하다 "socket"  반항하다 handle_client(거래처)   메세지 = 거래처.얻다   거래처.놓다 메세지 종지부를 찍다  서버 = TCPSERVER.새로운("localhost", 1234) 하는 동안에 거래처 = 서버.응?   알을 낳다 handle_client(거래처) 종지부를 찍다 

유형추론 및 조합 유형

다음 코드는 사용 가능한 공통 조상이 없는 서로 다른 유형을 포함하는 배열을 정의한다.크리스탈은 개별 아이템의 종류 중에서 자동으로 유니언 타입을 만들어 낸다.

희망_기호 = [:unicorns, "butterflies", 1_000_000] p 활자의(희망_기호.맨 처음의) # 형식은 컴파일 시간 유형을 반환하며, 여기서(Symbol String Int32) p 희망_기호.맨 처음의.계급   # 클래스 메서드가 런타임 유형을 반환함, 여기서 기호 

동시성

키워드를 사용하여 시작하는 섬유 간 통신에 채널을 사용할 수 있음spawn.

채널을 돌리다 = 채널(int32).새로운  알을 낳다 하다   놓다 "첫 번째 전송 전"   채널을 돌리다.보내다(1)   놓다 "2차 전송 전"   채널을 돌리다.보내다(2) 종지부를 찍다  놓다 "첫 번째 수신 전" 가치를 매기다 = 채널을 돌리다.받다 놓다 가치를 매기다 # => 1  놓다 "두 번째 수신 전" 가치를 매기다 = 채널을 돌리다.받다 놓다 가치를 매기다 # => 2 

추가 읽기

  • St. Laurent, Simon; Balbaert, Ivo (February 1, 2019), Programming Crystal (P1.0 ed.), Pragmatic Bookshelf, ISBN 978-1-68050-286-2
  • Wartala, Ramon (March 2016), "Die Ruby-artige Programmiersprache Crystal" [The Ruby-like programming language Crystal], Linux Magazin (in German), no. 3/2016, ISSN 1432-640X

참조

  1. ^ "Crystal 0.1.0 released!". crystal-lang.
  2. ^ "Release 1.3.2".
  3. ^ a b "Crystal Platform Support". crystal-lang.org.
  4. ^ a b c d e Borenszweig, Ary (June 16, 2016). "Crystal 0.18.0 released!". crystal-lang.org. It's heavily inspired by Ruby, and other languages (like C#, Go and Python).
  5. ^ "Contributors". Retrieved July 25, 2019 – via GitHub.
  6. ^ Brian J., Cardiff (September 9, 2013). "Type inference part 1". crystal-lang.org.
  7. ^ a b c David, María Inti (April 1, 2016). "The story behind #CrystalLang". manas.tech.
  8. ^ Hsieh, Adler (September 20, 2015). "Why Crystal programming language?". motion-express.com.
  9. ^ Borenszweig, Ary (November 14, 2013). "Good bye Ruby Thursday". crystal-lang.org.
  10. ^ Borenszweig, Ary (June 19, 2014). "Crystal 0.1.0 released!". crystal-lang.org.

외부 링크