기본 콘텐츠로 건너뛰기

2017의 게시물 표시

Rust를 Webassembly로 컴파일 하기

Rust를 Webassembly로 컴파일 하는 방법과 방법을 정리 해 둔다. 환경 구축이라 순차적으로 따라하면 될것 같지만, 막상 해 보면 시간도 오래 걸리고 잘 안된다. 컴파일 환경 구축 부터  Cargo 로 빌드하는 방법 까지 정리 해 둔다. OS 선택 Rust와 Emscripten이 설치 되는 OS면 된다. Rust는 Windows, Mac, Ubuntu OS에서 실행 되는 것을 확인 했지만 Emscripten은 우분투 최신 버전과 14.04에서만 테스트를 해 보았기 때문에 최신 Ubuntu 기준으로 정리를 해둔다. Docker Image 만들어 두면 편할 것 같았는데, 막상 컴파일 환경을 이미지로 빌드하고 보니 이미지 크기가 25GB 를 넘는 문제가 있다. Rust 설치 Rust 설치와 Cargo에 대한 설명은 Cargo 패키지 시스템 - Cargo로 프로젝트 생성부터 배포까지  참고 안정된 Rust 버전과 wasm32 타겟 설치 rustup install stable rustup default stable rustup target add wasm32-unknown-emscripten Emscripten 설치 참고:  http://kripken.github.io/emscripten-site/docs/building_from_source/building_emscripten_from_source_on_linux.html#building-emscripten-on-linux 우분투 14.04에서는 설치 중에 cmake 버전 때문에 문제가 생긴다. cmake 최신 버전을 설치 해주면 문제 없다. 최신 우분투에서는 아래 순으로 진행하면 된다. docker에서 실행 한 순서 이기 때문에 sudo로 실행하지 않는다. apt-get update apt-get install build-essential apt-get install cmake apt-get install pytho

Cargo 패키지 시스템 - Cargo로 프로젝트 생성부터 배포까지

왜? Rust를 배워보자 Cargo? Cargo는 Rust 의 패키지 매니저다. 자바의 Maven 이나 Gradle 같은 걸로 생각하면 된다. Cargo로 프로젝트 생성 부터 배포, 커스텀 빌드까지 정리 해 두기로 한다. 목차 설치 프로젝트 생성 빌드 실행 유닛 테스트 실행 배포 커스텀 빌드 설치 기본적으로 Cargo는 Rust와 같이 배포가 되기 때문에 rustc 가 설치 되어 있다면 Cargo도 설치 되어 있다고 보면 된다. 설치는 간단하다. curl https://sh.rustup.rs -sSf | sh info: downloading installer Welcome to Rust! ... Current installation options: default host triple: x86_64-unknown-linux-gnu default toolchain: stable modify PATH variable: yes 1) Proceed with installation (default) 2) Customize installation 3) Cancel installation ... To configure your current shell run source $HOME/.cargo/env 1) Proceed with installation (default)  를 선택해서 진행하면 된다. 설치된 실행 파일들을 자동으로 PATH에 등록되지 않기 때문에 설치 메시지에서 알려 주는 대로  source $HOME/.cargo/env  를 해줘야 한다. ( ~/.bash_profile이나 ~/.profile에 추가해 두면 매번 실행하지 않아도 된다. ) 기본 설치를 하지 않고 2) Customize installation 을 선택하면 stable/beta/nightly 중에서 툴체인을 선택하거나 컴파일 타겟을 바꿀 수 있다. 나중에 필요하면  rustup 명령으로 툴체인이나 타겟은 바꿀 수

Rust를 배워보자

개인적으로 명시적으로 컴파일 되는 언어를 좋아 하고 Rust의 오너쉽(Ownership)모델이 이색적이어서 기회가 되면 Rust를 익혀 봐야지 했었다. 마침 소장하고 있는 mp3 파일들을 정리를 하던 중이라 ID3 검색기 겸 태거(Tagger)를 만들어 보기로 마음 먹었다. 대충 문법만 읽고 시작했다가 큰코 다쳤던 삽질기를 정리 해 둔다. 짧은 소감은 오너쉽 모델 때문에 코딩이 더디다. 평소의 코딩 패턴도 바뀐다. 그렇지만 컴파일만 통과하면 견고한 결과물을 얻을 수 있다. 물론, 다른 언어로 개발하면 프로그램이 견고하지 않다는 뜻은 아니다. Mutable 변수와 Immutable 변수로 선언하는데 그치지 않고 값을 넘겨 줄 때 즉, 빌려줄 때 "소유권 이전", "읽기용 참조" 그리고 "수정용 참조"로 명시 할 수 있어서 예상치 못한 데이터 변경 오류에 견고하다는 의미다. 개발 할 땐 참고 서적/사이트, 개발 툴과 정보를 얻을 수 있는 커뮤니티를 중요하게 생각 하는 편인데, 아직 Rust 관련된 책이 몇 권 없는게 아쉬웠다. 그렇지만 공식 사이트 http://rust-lang.github.io/book 과 https://doc.rust-lang.org 이 훌륭해서 개인적으로 언어를 익히기엔 충분했고, 패키지 시스템인 Cargo( https://crates.io/ )가 마크다운 형식의 문서화 지원하고, Git 연동, 유닛 테스트 환경 그리고 크로스 컴파일 환경, 모듈 레지스터리 서비스 연동등을 제공한다. 물론, 빌드 스크립트도 작성 할 수 있고, 시스템 언어라서 크로스 컴파일도 지원한다. 무엇보다 사용법이 단순해서 학습곡선이 낮다는 점이 좋다. 사용해본 개발툴은 Intellij와 Visual Studio Code 두가지 인데, IntelliJ는 IDE인 만큼 리팩토링 기능이나 호출자(Caller) 보기와 같은 기능이 더 지원 되지만 많이 무거웠지만, 양쪽 모두 코드 정의 가기(Go to