Elixir
패러다임 | 다중 패러다임: 함수형, 동시성, 프로세스 지향, 코드데이터 |
---|---|
설계자 | José Valim |
발표일 | 2012 |
최근 버전 | 1.0.5 |
자료형 체계 | 동적 |
운영 체제 | 얼랭 |
라이선스 | 아파치 라이선스 |
파일 확장자 | .ex, .exs |
웹사이트 | elixir-lang |
영향을 받은 언어 | |
얼랭, 루비, 클로저 |
엘릭서(Elixir)는 얼랭 가상 머신(BEAM)위에서 동작하는 함수형, 동시성 프로그래밍 언어이다. 엘릭서(Elixir)는 얼랭 위에 구축되어 분산형, 장애 내구성, 실시간, 무정지 어플리케이션을 만들수 있을 뿐 아니라 프로토콜[1]을 통해 메타프로그래밍과 다형성을 지원한다.
역사
José Valim은 엘릭서 프로그래밍 언어의 설계자이며 Plataformatec 의 연구과제이다. 그의 목적은 얼랭 툴과 생태계를 그대로 계승하면서 얼랭 VM에서 높은 확장성과 생성성을 가능케 하는것이였다.[2]
특징
- 엘릭서 컴파일러는 소스코드를 얼랭 가상 머신용 바이트 코드로 컴파일한다. (BEAM)[3]
- 모든 것은 expression이다.side effect를 동반하는 statement와는 다르다.[3]
- 얼랭 함수들은 런타임 영향 없이 엘릭서에서 호출될 수 있다.
- 메타 프로그래밍을 지원한다.[3]
- 프로토콜이라고 불리는 메카니즘에 의해 다형성을 지원한다.클로저 reducers에서 영향을 받았다.[4]
- 마크다운 형식언어의 문서화를 지원한다.[3]
- 메시지 전달 방식을 지원한다.(Actor model)
- 루프 대신에 재귀와 고차원 함수를 강조한다.
- 얼랭의 메카니즘을 활용하여 경량 동시성을 지원한다. (e.g. Task)[3]
- Lazy와 async collections을 지원한다.
- 패턴매칭을 지원한다.[3]
- 유니코드를 지원하며 스트링들은 UTF-8 이다.
예제
아래 예제는 iex 셸에서 실행되거나 파일에 저장될수 있으며 elixir <filename>
과 같이 커맨드라인으로 실행 할 수있다.
Hello world 예제
IO.puts "Hello World!"
Comprehensions
for n <- [1,2,3,4,5], rem(n,2) == 1, do: n*n
#=> [1, 9, 25]
패턴 매칭
[1, a] = [1, 2]
# 'a' now equals 2
{:ok, [hello: a]} = {:ok, [hello: "world"]}
# 'a' now equals "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 language website
- (영어) 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)