강좌
- Elixir School ... 무료로 기본을 배울 수 있다.
elixir 함수형프로그램의 특징
변환 프로그래밍: 프로그래밍은 데이터를 변환하는 것이 중식
데이터를 변환하는 것은 함수이며, 함수들의 조합이 프로그램
함수들을 작고 한가지 목적에만 집중하게 만들수록, 더 유연하고 테스트 쉬운 구조
로직 설계의 변경은 함수의 재조합
메타프로그래밍과 매크로
메타프로그래밍: 코드로 코드를 작성하는 방법
고수준의 우아한 문법으로 저수준의 코드 조작
컴파일 타임에 코드 최적화: 성능 향상과 깔끔한 코드를 동시에 잡을 수 있음
매크로를 통해 스스로 확장, 안정적이고 성숙된 문법들
엘릭서 표준 라이브러리의 Logger 모듈의 디버깅 함수
Actor 동시성 모델
- 엘릭서에서 액터는 프로세스
- 프로세스는 특정 작업을 수행
- 서로 결리된 프로세스들은 메세지를 보내 소통
- 프로세스는 ErlangVM(BEAM)위에서 돌아가며 자원이 매우 적게 사용
예제
- 엑셀을 파싱하여 등록할 사용자 정보 추출(Parser)
- 사용자 등록(Register)
- 등록 결과 메세지 전송(Reporter)
설치
MAC
$ brew install elixir
interactive mode
$ iex
Erlang/OTP 26 [erts-14.0.2] [source] [64-bit] [smp:10:10] [ds:10:10:10] [async-threads:1] [jit] [dtrace]
Interactive Elixir (1.15.7) - press Ctrl+C to exit (type h() ENTER for help)
iex>
Package 관리
javascript의 npm과 같이 package 관리 메니저가 별도로 있습니다. mix hex
를 통해서 관리할 수 있습니다.
Hex v2.0.6
Hex is a package manager for the Erlang ecosystem.
Available tasks:
mix hex.audit # Shows retired Hex deps for the current project
mix hex.build # Builds a new package version locally
mix hex.config # Reads, updates or deletes local Hex config
mix hex.config KEY # Get config value for KEY
mix hex.config KEY --delete # Delete config value for KEY
mix hex.config KEY VALUE # Set config KEY to VALUE
mix hex.docs fetch PACKAGE [VERSION] # Fetch documentation for offline use
mix hex.docs offline PACKAGE [VERSION] # Open a browser window with offline documentation
mix hex.docs online PACKAGE [VERSION] # Open a browser window with online documentation
mix hex.info # Prints Hex information
mix hex.info PACKAGE [VERSION] # Prints package information
mix hex.organization auth ORGANIZATION # Authorize an organization
mix hex.organization deauth ORGANIZATION # Deauthorize and remove organization
mix hex.organization list # List all authorized organizations
mix hex.organization key ORGANIZATION generate # Generate organization key
mix hex.organization key ORGANIZATION revoke KEY_NAME # Revoke key
mix hex.organization key ORGANIZATION revoke --all # Revoke all keys
mix hex.organization key ORGANIZATION list # List keys
mix hex.outdated # Shows outdated Hex deps for the current project
mix hex.outdated [APP] # Shows outdated Hex deps for the given dependency
mix hex.owner add PACKAGE EMAIL_OR_USERNAME # Adds an owner to package
mix hex.owner transfer PACKAGE EMAIL_OR_USERNAME # Transfers ownership of a package to another user or organization
mix hex.owner remove PACKAGE EMAIL_OR_USERNAME # Removes an owner from package
mix hex.owner list PACKAGE # List all owners of a given package
mix hex.owner packages # List all packages owned by the current user
mix hex.package fetch PACKAGE [VERSION] [--unpack] # Fetch the package
mix hex.package diff APP VERSION # Diff dependency against version
mix hex.package diff PACKAGE VERSION1 VERSION2 # Diff package versions
mix hex.package diff PACKAGE VERSION1..VERSION2 # Diff package versions
mix hex.publish # Publishes a new package version
mix hex.publish package # Publish current package
mix hex.publish docs # Publish current docs
mix hex.publish package --revert VERSION # Reverts package on given version
mix hex.publish docs --revert VERSION # Reverts docs on given version
mix hex.publish --revert VERSION # Reverts given version
mix hex.registry build PUBLIC_DIR # Build a local registry
mix hex.repo add NAME URL # Add a repo
mix hex.repo set NAME # Set config for repo
mix hex.repo remove NAME # Remove repo
mix hex.repo show NAME # Show repo config
mix hex.repo list # List all repos
mix hex.retire PACKAGE VERSION REASON # Retires a package version
mix hex.retire PACKAGE VERSION --unretire # Unretires a package
mix hex.search PACKAGE # Searches for package names
mix hex.sponsor # Show Hex packages accepting sponsorships
mix hex.user register # Register a new user
mix hex.user whoami # Prints the current user
mix hex.user auth # Authorize a new user
mix hex.user deauth # Deauthorize the user
mix hex.user key generate # Generate user key
mix hex.user key revoke KEY_NAME # Removes given key from account
mix hex.user key revoke --all # Revoke all keys
mix hex.user key list # Lists all keys associated with your account
mix hex.user reset_password account # Reset user account password
mix hex.user reset_password local # Reset local password
Further information can be found here: https://hex.pm/docs
빌드
$ mix escript.build
$ ./example_app --upcase Hello
HELLO
다른 프로그램 소스를 사용해서 빌드하는 방법
$ mix deps.get
$ mix compile
개발툴
표준 라이브러리
- 엘릭서에 내장 된 표준 테스트 라이브러리 제공
- 매크로를 사용하여 간편한 문법
test "elixir test example" do assert something_is_valid() assert expect_list() == actual_list() assert expect_error_log() =~ "error" end
- document + test = doctest
defmodule ExampleCode do @moduledoc """ @doc """ 어떻게어떻게 하는 함수 """ def sum(a, b) do a + b end
iex
$ iex
livebook
python의 jupiter와 비슷한 기능
IDE
정식으로 erlang, elixir 만 지원하는 에디터는 없습니다. 커뮤니티에서는 neovim를 추천합니다. vscode 에서도 잘 작동합니다.
여기를 참고해서 설정했습니다.
tree-sitter가 설치되어 있는 상태에서
:TSInstall elixr
vscode
플러그인 설치
- elixir-tools
jetbrains intelliJ
SDK 파일을 불러 와야 하는데, brew로 설치를 했을 경우에는 폴더가 버전마다 다르기 때문에 위치를 잘 찾아야 한다.
elixr 파일 위치
$ readlink (which elixir)
../Cellar/elixir/1.15.7/bin/elixir
erlang 파일 위치
$ readlink (which erlc)
../Cellar/erlang/26.0.2/bin/erlc
파일 위치에서 버전명까지 넣어주면 된다.
- elixir plugin 설치
- SDK 설정
- elixir > SDKs:
/opt/homebrew/Cellar/elixir/1.15.7
- elixir > Internal Erlang SDKs:
/opt/homebrew/Cellar/erlang/26.0.2
- elixir > SDKs:
반응형