{{위키데이터 속성 추적}}
{{프로그래밍 언어 정보
|로고                   = Official Elixir logo.png
|주석                   = 엘릭서
|이름                   = 엘릭서
|패러다임 = [[다중 패러다임 프로그래밍 언어|다중 패러다임]]: [[함수형 언어|함수형]],  [[동시성 프로그래밍|동시성]], [[프로세스 지향 프로그래밍|프로세스 지향]], [[코드는 데이터|코드데이터]]
|연도                   = 2011
|형 체계                 = [[타입 시스템|동적]]
|영향을 받은 언어       = [[얼랭]], [[LFE]], [[파이썬]], [[루비 (프로그래밍 언어)|루비]], [[클로저]]
|설계자                 = [[José Valim]]
|최근 버전               = 1.13
|최근 버전 출시일         = {{시작 날짜와 나이|2020|1|27}}
|운영 체제               = [[얼랭]]
|라이선스                = [[아파치 라이선스|아파치 라이선스 2.0]]
|웹사이트                = {{URL|elixir-lang.org}}
|파일 확장자              = .ex, .exs
}}

'''엘릭서'''(Elixir)는 [[얼랭]](Erlang) [[가상 머신]](BEAM) 위에서 동작하는 [[함수형 언어|함수형]], [[병행성|동시성]] 프로그래밍 언어이다. 엘릭서는 얼랭이 보유하고 있는 분산 처리, 장애 내구성, 실시간, 무정지 애플리케이션 등의 특징을 공유한다. 그에 더해서 프로토콜<ref>{{웹 인용|url=http://elixir-lang.org/getting-started/protocols.html|title=Elixir Protocols | accessdate=2016-11-18}}</ref>을 이용해 [[다형성]]을 지원하고, Quote<ref name="elixir_quote_and_unqote">{{웹 인용|url=http://elixir-lang.org/getting-started/meta/quote-and-unquote.html |title=Elixir Quote and unquote| accessdate=2016-11-18}}</ref>과 Unquote<ref name="elixir_quote_and_unqote"/> 그리고 [[매크로|Macro]]<ref>{{웹 인용|url=http://elixir-lang.org/getting-started/meta/macros.html |title=Elixir Macros | accessdate=2016-11-18}}</ref>를 통한 [[도메인 특화 언어|DSL]] 구현 등의 [[메타 프로그래밍]]이 가능하다.

== 역사 ==
엘릭서 프로그래밍 언어는 [[José Valim]]이 설계했으며, [http://plataformatec.com.br Plataformatec] 의 연구과제이다. 그는 얼랭 도구와 생태계를 계승하면서 얼랭 VM에서 작동하는 높은 확장성과 생산성을 가진 언어를 만들고자 했다.<ref>{{웹 인용|url=http://vimeo.com/53221562|title=Elixir - A modern approach to programming for the Erlang VM | accessdate=2013-02-17}}</ref>

== 특징 ==
* 엘릭서 [[컴파일러]]는 소스코드를 [[얼랭]] 가상 머신용 [[바이트 코드]]로 [[컴파일러|컴파일]]한다. (BEAM)<ref name="elixirhome">{{웹 인용|url=http://elixir-lang.org/|title=Elixir|accessdate=2014-09-07|보존url=https://web.archive.org/web/20120418080914/http://elixir-lang.org/|보존날짜=2012-04-18|url-status=dead}}</ref>
* 모든 것은 expression이다.side effect를 동반하는 statement와는 다르다.<ref name="elixirhome" />
* 얼랭 함수들은 [[런타임]] 영향 없이 엘릭서에서 호출될 수 있다.
* [[메타 프로그래밍]]을 지원한다.<ref name="elixirhome" />
* 프로토콜이라고 불리는 메카니즘에 의해 [[다형성]]을 지원한다.[[클로저 (프로그래밍 언어)|클로저]] reducers에서 영향을 받았다.<ref>{{웹 인용|url=https://pminten.github.io/blog/2013/09/05/elixirs-enumerable/|title=Elixir Enumerable|accessdate=2014-09-07|보존url=https://web.archive.org/web/20140906162512/http://pminten.github.io/blog/2013/09/05/elixirs-enumerable/|보존날짜=2014-09-06|url-status=dead}}</ref>
* 마크다운 형식언어의 문서화를 지원한다.<ref name="elixirhome" />
* 메시지 전달 방식을 지원한다.([[Actor model]])
* 루프 대신에 재귀와 고차원 함수를 강조한다.
* 얼랭의 메카니즘을 활용하여 경량 동시성을 지원한다. (e.g. ''Task'')<ref name="elixirhome" />
* [[느긋한 계산법|Lazy]]와 [[Futures and promises|async collections]]을 지원한다.
* 패턴매칭을 지원한다.<ref name="elixirhome" />
* [[유니코드]]를 지원하며 스트링들은 [[UTF-8]]이다.

== 예제 ==
아래 예제는 iex 셸에서 실행되거나 파일에 저장될수 있으며 <code>elixir ''<filename>''</code> 과 같이 커맨드라인으로 실행할 수 있다.

[[Hello world]] 예제:

<syntaxhighlight lang="elixir">
IO.puts "Hello World!"
</syntaxhighlight>

=== 컴프리헨션 ===
<syntaxhighlight lang="elixir">
for n <- [1,2,3,4,5], rem(n,2) == 1, do: n*n
#=> [1, 9, 25]
</syntaxhighlight>

=== 패턴 매칭 ===
<syntaxhighlight lang="elixir">
[1, a] = [1, 2]
# a => 2

{:ok, [hello: a]} = {:ok, [hello: "world"]}
# a => "world"
</syntaxhighlight>

=== 모듈 ===
<syntaxhighlight lang="elixir">
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
</syntaxhighlight>

== 같이 보기 ==
* [[병행 컴퓨팅]]
* [[분산 컴퓨팅]]
* [[병렬 컴퓨팅]]
== 각주 ==
{{각주}}

== 외부 링크 ==
* {{언어링크|en}} [https://web.archive.org/web/20120418080914/http://elixir-lang.org/ Elixir language website]
* {{언어링크|ko}} [https://web.archive.org/web/20160305052943/https://erlnote.wordpress.com/category/elixir/ 공식 홈페이지 Getting Started 한국어 번역]
* {{언어링크|ko}} [http://elixir-ko.github.io/getting_started/1.html Elixir 1.0 Getting Started 한국어 번역]
* {{언어링크|en}} [https://github.com/elixir-lang/elixir/ Code on GitHub]
* {{언어링크|en}} [http://vimeo.com/53221562 Elixir - A modern approach to programming for the Erlang VM video presentation]
* {{언어링크|en}} [https://web.archive.org/web/20150610090110/https://pragprog.com/book/elixir/programming-elixir Dave Thomas: "Programming Elixir: Functional |> Concurrent |> Pragmatic |> Fun" (book)]
* {{언어링크|en}} [http://shop.oreilly.com/product/0636920030584.do Simon St. Laurent, J. David Eisenberg: "Introducing Elixir" (book)]
* {{언어링크|en}} [http://shop.oreilly.com/product/9781680500417.do Chris McCord: "Metaprogramming Elixir " (book)]
* {{언어링크|en}} [https://web.archive.org/web/20130819053404/http://joearms.github.io/2013/05/31/a-week-with-elixir.html Joe Armstrong: "A Week with Elixir" (blog entry)]

{{전거 통제}}

[[분류:프로그래밍 언어]]
[[분류:패턴 매칭 프로그래밍 언어]]
[[분류:2012년 개발된 프로그래밍 언어]]
[[분류:아파치 라이선스 소프트웨어]]
[[분류:병행 프로그래밍 언어]]