Elixir

위키백과, 우리 모두의 백과사전.
이동: 둘러보기, 검색
엘릭서
Official Elixir logo.png
패러다임 다중 패러다임: 함수형, 동시성, 프로세스 지향, 코드데이터
발표년도 2012
설계자 José Valim
최근 버전 1.3
최근 버전 출시일 2016년 6월 21일(16달 전)(2016-06-21)
자료형 체계 동적
영향을 받은 언어 얼랭, LFE, 파이썬, 루비, 클로저
운영 체제 얼랭
라이선스 아파치 라이선스 2.0
사용 중인 파일 확장자 .ex, .exs
웹사이트 elixir-lang.org

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

더 보기[편집]

  1. “Elixir Protocols”. 2016년 11월 18일에 확인함. 
  2. “Elixir Quote and unquote”. 2016년 11월 18일에 확인함. 
  3. “Elixir Macros”. 2016년 11월 18일에 확인함. 
  4. “Elixir - A modern approach to programming for the Erlang VM”. 2013년 2월 17일에 확인함. 
  5. “Elixir”. 2014년 9월 7일에 확인함. 
  6. “Elixir Enumerable”. 2014년 9월 7일에 확인함. 

외부 링크[편집]