Elixir

위키백과, 우리 모두의 백과사전.
Ykhwong (토론 | 기여)님의 2015년 8월 15일 (토) 20:09 판
엘릭서
패러다임다중 패러다임: 함수형, 동시성, 프로세스 지향, 코드데이터
설계자José Valim
발표일2012
최근 버전1.0.5
자료형 체계동적
운영 체제얼랭
라이선스아파치 라이선스
파일 확장자.ex, .exs
웹사이트elixir-lang.org
영향을 받은 언어
얼랭, 루비, 클로저

엘릭서(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]
  • Lazyasync 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

더 보기

  1. “Elixir”. 《José Valim》. 2013년 2월 17일에 확인함. 
  2. “Elixir - A modern approach to programming for the Erlang VM”. 2013년 2월 17일에 확인함. 
  3. “Elixir”. 2014년 9월 7일에 확인함. 
  4. “Elixir Enumerable”. 2014년 9월 7일에 확인함. 

바깥 고리