Elixir 목차 역사 특징 예제 더 보기 외부 링크 둘러보기 메뉴elixir-lang.orgPlataformatec“Elixir Protocols”“Elixir Quote and unquote”“Elixir Macros”“Elixir - A modern approach to programming for the Erlang VM”“Elixir”“Elixir Enumerable”Elixir language website공식 홈페이지 Getting Started 한국어 번역Elixir 1.0 Getting Started 한국어 번역Code on GitHubElixir - A modern approach to programming for the Erlang VM video presentationDave 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)
프로그래밍 언어패턴 매칭 프로그래밍 언어2012년 개발된 프로그래밍 언어아파치 라이선스 소프트웨어
얼랭가상 머신함수형동시성다형성MacroDSL메타 프로그래밍José ValimPlataformatecHello world
Elixir
둘러보기로 가기
검색하러 가기
엘릭서 | |
---|---|
패러다임 | 다중 패러다임: 함수형, 동시성, 프로세스 지향, 코드데이터 |
발표년도 | 2011 |
설계자 | José Valim |
최근 버전 | 1.8.1 |
최근 버전 출시일 | 2019년 1월 30일(2019-01-30) |
자료형 체계 | 동적 |
영향을 받은 언어 | 얼랭, LFE, 파이썬, 루비, 클로저 |
운영 체제 | 얼랭 |
라이선스 | 아파치 라이선스 2.0 |
사용 중인 파일 확장자 | .ex, .exs |
웹사이트 | elixir-lang.org |
엘릭서(Elixir)는 얼랭(Erlang) 가상 머신(BEAM) 위에서 동작하는 함수형, 동시성 프로그래밍 언어이다. 엘릭서는 얼랭이 보유하고 있는 분산 처리, 장애 내구성, 실시간, 무정지 애플리케이션 등의 특징을 공유한다. 그에 더해서 프로토콜[1]을 이용해 다형성을 지원하고, Quote[2]과 Unquote[2] 그리고 Macro[3]를 통한 DSL 구현 등의 메타 프로그래밍이 가능하다.
목차
1 역사
2 특징
3 예제
3.1 컴프리헨션
3.2 패턴 매칭
3.3 모듈
4 더 보기
5 외부 링크
역사
엘릭서 프로그래밍 언어는 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”. 2014년 9월 7일에 확인함.
↑ “Elixir Enumerable”. 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)
분류:
- 프로그래밍 언어
- 패턴 매칭 프로그래밍 언어
- 2012년 개발된 프로그래밍 언어
- 아파치 라이선스 소프트웨어
(RLQ=window.RLQ||[]).push(function()mw.config.set("wgPageParseReport":"limitreport":"cputime":"0.412","walltime":"0.890","ppvisitednodes":"value":4846,"limit":1000000,"ppgeneratednodes":"value":0,"limit":1500000,"postexpandincludesize":"value":18529,"limit":2097152,"templateargumentsize":"value":4607,"limit":2097152,"expansiondepth":"value":22,"limit":40,"expensivefunctioncount":"value":0,"limit":500,"unstrip-depth":"value":0,"limit":20,"unstrip-size":"value":9183,"limit":5000000,"entityaccesscount":"value":0,"limit":400,"timingprofile":["100.00% 816.237 1 -total"," 27.99% 228.489 1 틀:프로그래밍_언어_정보"," 27.37% 223.441 1 틀:정보상자"," 12.87% 105.080 166 틀:정보상자/행"," 11.95% 97.513 1 틀:각주"," 9.44% 77.024 6 틀:웹_인용"," 5.70% 46.515 1 틀:시작_날짜와_나이"," 5.01% 40.912 9 틀:언어링크"," 4.62% 37.741 1 틀:이전_시간"," 4.15% 33.911 1 틀:이전_시간/core"],"scribunto":"limitreport-timeusage":"value":"0.072","limit":"10.000","limitreport-memusage":"value":3229844,"limit":52428800,"cachereport":"origin":"mw1255","timestamp":"20190712133406","ttl":2592000,"transientcontent":false););"@context":"https://schema.org","@type":"Article","name":"Elixir","url":"https://ko.wikipedia.org/wiki/Elixir","sameAs":"http://www.wikidata.org/entity/Q5362035","mainEntity":"http://www.wikidata.org/entity/Q5362035","author":"@type":"Organization","name":"uc704ud0a4ubbf8ub514uc5b4 ud504ub85cuc81dud2b8 uae30uc5ecuc790","publisher":"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":"@type":"ImageObject","url":"https://www.wikimedia.org/static/images/wmf-hor-googpub.png","datePublished":"2015-06-09T14:56:48Z","dateModified":"2019-04-19T06:01:50Z","image":"https://upload.wikimedia.org/wikipedia/commons/9/92/Official_Elixir_logo.png"(RLQ=window.RLQ||[]).push(function()mw.config.set("wgBackendResponseTime":151,"wgHostname":"mw1275"););