Skip to content

Commit

Permalink
Update README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
byeongkeunahn committed Nov 29, 2023
1 parent e6bd271 commit 0ad9a63
Showing 1 changed file with 18 additions and 2 deletions.
20 changes: 18 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,27 @@
# basm.rs

basm.rs는 Rust 코드를 BOJ에 제출 가능한 C 프로그램으로 성능 저하 없이 변환해 주는 프로젝트입니다.
basm.rs는 러스트(Rust) 코드를 온라인 저지에 제출 가능한 단일 파일 소스 코드로 성능 저하 없이 변환해 주는 프로젝트입니다.

C 외에 Rust (메모리 사용량 감소), JavaScript (wasm32), HTML도 지원합니다.
출력 파일 형식은 C, Rust, JavaScript (wasm32), HTML이 지원됩니다.

> 156KB의 자유를 누리십시오!
## 바로 시작하기

[GitHub Codespaces](https://github.com/codespaces)에 접속하셔서 본 저장소의 이름을 입력하시고 Codespace를 생성하시면 Visual Studio Code 창이 열립니다. 단, GitHub 로그인이 필요합니다.

로컬 환경에서 개발하시려면 `사용법` 섹션의 설명을 참고해주세요.

## 소개

[러스트(Rust)](https://www.rust-lang.org/)라는 프로그래밍 언어는 차세대 프로그래밍 언어로 C/C++보다 뛰어난 점이 여럿 있는데, 그 중 하나가 바로 패키지 관리입니다. 러스트에서는 C/C++와 달리 프로젝트 설정 파일(Cargo.toml)에 사용하고자 하는 외부 라이브러리(crate, 크레이트라고 합니다)를 지정하면, 해당 라이브러리의 기능을 아주 쉽게 가져다 쓸 수 있습니다. 라이브러리는 [crates.io](https://crates.io/), GitHub, 또는 로컬 컴퓨터에 있는 코드를 지정할 수 있어 선택의 폭이 매우 넓습니다. 바퀴를 재발명하지 않고 잘 만들어진 외부 라이브러리를 사용하면 실무에서는 개발 시간을 획기적으로 단축할 수 있고, 알고리즘 문제 풀이 시에는 구현 시간을 획기적으로 단축하고 핵심 발상에 집중할 수 있습니다. 그렇지만 백준 온라인 저지를 비롯한 대부분의 문제 풀이 사이트에서는 아쉽게도 외부 라이브러리의 사용이 지원되지 않습니다.

이러한 상황에서 basm-rs를 통해 외부 라이브러리를 사용하실 수 있습니다. basm-rs는 로컬에서 외부 라이브러리를 포함하여 전체 프로젝트를 빌드하여 실행 파일을 생성한 다음, 생성된 실행 파일의 머신 코드(어셈블리 언어)를 LZMA 압축하여 템플릿에 적재해 줍니다. 이렇게 생성된 코드를 제출하시면 백준, 스택, 코드포스, 폴리곤 등에서 잘 작동합니다. 외부 라이브러리를 빌드에 포함하고 결과물로 생성된 머신 코드를 직접 제출하므로, 제출하는 소스 코드에 외부 라이브러리 코드가 포함되어 있습니다. 따라서 백준에서 별도의 지원이 없음에도 불구하고 외부 라이브러리를 자유롭게 사용하실 수 있습니다.

또한, 러스트는 C/C++에 비해 PS에서 입출력을 하기에는 다소 불편한 부분이 있는데 basm-rs에는 C 스타일의 입출력 기능이 내장되어 있어 러스트로 문제 풀이를 하기에 편리합니다. 그리고, basm-rs를 사용하시면 백준 온라인 저지 등의 문제 풀이 사이트에서 표시되는 메모리 사용량이 줄어듭니다. [다음 링크](https://blog.naver.com/PostView.nhn?blogId=jinhan814&logNo=222340927259)를 보시면 표시되는 메모리 사용량을 줄이는 원리가 설명되어 있습니다. basm-rs에서는 해당 블로그 글과 유사한 기법을 이용하여 표시되는 메모리 사용량 감소를 지원하고 있습니다. 이러한 기능은 재미를 위해 개발되었지만 메모리 제한이 아주 작게 설정되어 있고 언어별 추가 메모리가 주어지지 않는 일부 문제에서 러스트로 문제를 해결하실 때에도 도움이 될 수 있습니다.

요약하자면 basm-rs는 알고리즘 문제 풀이 시에 외부 라이브러리를 사용할 수 있게 하는 동시에 편리한 입출력 환경과 함께 표시되는 메모리 사용량 감소를 지원합니다. 러스트의 풍성한 라이브러리 생태계를 활용하셔서 즐거운 문제 풀이를 하실 수 있기를 바랍니다.

## 효과

- 입력이 매우 간편하고 직관적입니다.
Expand Down

0 comments on commit 0ad9a63

Please sign in to comment.