Elixir
보이기
패러다임 | 다중 패러다임: 함수형, 동시성, 프로세스 지향, 코드데이터 |
---|---|
설계자 | José Valim |
발표일 | 2011 |
최근 버전 | 1.13 |
최근 버전 출시일 | 2020년 1월 27일 |
자료형 체계 | 동적 |
운영 체제 | 얼랭 |
라이선스 | 아파치 라이선스 2.0 |
파일 확장자 | .ex, .exs |
웹사이트 | elixir-lang |
영향을 받은 언어 | |
얼랭, LFE, 파이썬, 루비, 클로저 |
엘릭서(Elixir)는 얼랭(Erlang) 가상 머신(BEAM) 위에서 동작하는 함수형, 동시성 프로그래밍 언어이다. 엘릭서는 얼랭이 보유하고 있는 분산 처리, 장애 내구성, 실시간, 무정지 애플리케이션 등의 특징을 공유한다. 그에 더해서 프로토콜[1]을 이용해 다형성을 지원하고, Quote[2]과 Unquote[2] 그리고 Macro[3]를 통한 DSL 구현 등의 메타 프로그래밍이 가능하다.
역사
[편집]엘릭서 프로그래밍 언어는 José Valim이 설계했으며, Plataformatec 의 연구과제이다. 그는 얼랭 도구와 생태계를 계승하면서 얼랭 VM에서 작동하는 높은 확장성과 생산성을 가진 언어를 만들고자 했다.[4]
특징
[편집]- 엘릭서 컴파일러는 소스코드를 얼랭 가상 머신용 바이트 코드로 컴파일한다. (BEAM)[5]
- 모든 것은 expression이다.side effect를 동반하는 statement와는 다르다.[5]
- 얼랭 함수들은 런타임 영향 없이 엘릭서에서 호출될 수 있다.
- 메타 프로그래밍을 지원한다.[5]
- 프로토콜이라고 불리는 메카니즘에 의해 다형성을 지원한다.클로저 reducers에서 영향을 받았다.[6]
- 마크다운 형식언어의 문서화를 지원한다.[5]
- 메시지 전달 방식을 지원한다.(Actor model)
- 루프 대신에 재귀와 고차원 함수를 강조한다.
- 얼랭의 메카니즘을 활용하여 경량 동시성을 지원한다. (e.g. Task)[5]
- Lazy와 async collections을 지원한다.
- 패턴매칭을 지원한다.[5]
- 유니코드를 지원하며 스트링들은 UTF-8이다.
예제
[편집]아래 예제는 iex 셸에서 실행되거나 파일에 저장될수 있으며 elixir <filename>
과 같이 커맨드라인으로 실행할 수 있다.
Hello world 예제:
IO.puts "Hello World!"
컴프리헨션
[편집]for n <- [1,2,3,4,5], rem(n,2) == 1, do: n*n
#=> [1, 9, 25]
패턴 매칭
[편집][1, a] = [1, 2]
# a => 2
{:ok, [hello: a]} = {:ok, [hello: "world"]}
# a => "world"
모듈
[편집]defmodule Fun do
def fib(0) do 0 end
def fib(1) do 1 end
def fib(n) do fib(n-2) + fib(n-1) end
end
같이 보기
[편집]각주
[편집]- ↑ “Elixir Protocols”. 2016년 11월 18일에 확인함.
- ↑ 가 나 “Elixir Quote and unquote”. 2016년 11월 18일에 확인함.
- ↑ “Elixir Macros”. 2016년 11월 18일에 확인함.
- ↑ “Elixir - A modern approach to programming for the Erlang VM”. 2013년 2월 17일에 확인함.
- ↑ 가 나 다 라 마 바 “Elixir”. 2012년 4월 18일에 원본 문서에서 보존된 문서. 2014년 9월 7일에 확인함.
- ↑ “Elixir Enumerable”. 2014년 9월 6일에 원본 문서에서 보존된 문서. 2014년 9월 7일에 확인함.
외부 링크
[편집]- (영어) Elixir language website
- (한국어) 공식 홈페이지 Getting Started 한국어 번역
- (한국어) Elixir 1.0 Getting Started 한국어 번역
- (영어) Code on GitHub
- (영어) Elixir - A modern approach to programming for the Erlang VM video presentation
- (영어) Dave Thomas: "Programming Elixir: Functional |> Concurrent |> Pragmatic |> Fun" (book)
- (영어) Simon St. Laurent, J. David Eisenberg: "Introducing Elixir" (book)
- (영어) Chris McCord: "Metaprogramming Elixir " (book)
- (영어) Joe Armstrong: "A Week with Elixir" (blog entry)