내 컴퓨터에서 Exercism 연습 문제를 풀 수 있도록 8th를 로컬에 설치하는 방법을 배워요
8th는 모든 것이 포함된 하나의 ZIP 파일로 배포돼요. 이 파일에는 내려받은 버전이 지원하는 모든 플랫폼용 8th 버전이 들어 있어요. 내 8th 버전은 나에게만 라이선스가 부여되고 공유할 수 없어요.
Get 8th 페이지에서 시작해요.
8th를 사용하려면 접근할 수 있는 아무 폴더에나 ZIP 파일의 압축을 풀어야 해요.
ZIP 파일에는 여러 폴더가 들어 있어요:
| 폴더 | 설명 |
|---|---|
| bin | 지원되는 모든 플랫폼용 8th 실행 파일 |
| docs | 설명서와 튜토리얼 |
| libs | 8th 지원 라이브러리(8th 코드) |
| samples | 튜토리얼과 설명서를 보충하는 예제 코드 |
| keys | 내 키와 등록 정보가 담긴 'id.blob' |
Pro+ 사용자: 참고로 id.blob에 있는 암호화 키는 내려받은 각 8th 버전마다 고유하고, 암호화되어 배포 가능한 애플리케이션을 빌드하는 데 중요해요. 8th를 배포 패키지 밖으로 옮겨서 id.blob을 찾지 못하면, 8th -v를 실행했을 때 식별 정보를 찾을 수 없다는 알림으로 custid: id.blob?를 보고할 거예요.
어떤 플랫폼에서 개발하든, 8th가 지원하는 모든 플랫폼용 애플리케이션을 만들 수 있어요.
ZIP 파일의 압축을 풀면 8th를 바로 실행할 수 있어요. 예를 들어 64비트 Linux의 /opt/8th에 설치했다면, /opt/8th/bin/lin64/8th에 원하는 매개변수를 붙여 입력하면 제대로 동작할 거예요. macOS나 Windows에서도 비슷하게 하면 돼요.
8th 실행 파일이 있는 폴더를 시스템의 PATH 환경 변수에 추가하면, 전체 경로를 입력하는 대신 그냥 8th만 입력해도 돼요.
8th 자체는 명령줄 프로그램이에요. 바탕 화면 아이콘을 클릭해서 시작하는 용도가 아니에요. 8th로 그런 식으로 시작할 수 있는 일반 GUI 프로그램을 만들 수는 있지만, 8th 컴파일러 자체는 CLI(명령줄 인터페이스) 프로그램이에요.
Windows에서 MSys나 Cygwin 셸을 사용한다면, 콘솔 모드 프로그램이 제대로 동작하도록 무료로 제공되는 winpty 프로그램도 사용해야 할 수 있어요. 최신 Windows 10 버전에서는 필요 없는 것 같아요.
MacOS에서 실행한다면, 이 8th 포럼 스레드를 읽어봐요.
8th 명령줄은 이렇게 생겼어요:
8th [options] [[-f] file...] [-e 'code'...]
여기서 [-f] file 옵션은 "파일의 내용을 해석하라"는 뜻이고, -e code는 "그 특정 8th 코드를 해석하라"는 뜻이에요. 두 옵션 모두 명령줄에 여러 번 줄 수 있고, 효과는 누적돼요. 다시 말해:
8th -f first.8th -f second.8th
는 first.8th 파일의 내용을 해석한 다음 second.8th 파일의 내용을 해석해요. 8th 파일 하나만 실행하려면 8th -f first.8th라고 할 필요 없이 그냥 8th first.8th라고 입력하면 돼요.
8th가 이해하는 모든 CLI 옵션은 다음과 같아요:
| 옵션 | 설명 |
|---|---|
| -b | bin/build 유틸리티를 호출해요 |
| -D dir | homedir을 dir로 설정해요(기본값은 운영체제에 따라 달라요) |
| -e str | 문자열 str을 8th 코드로 해석해요 |
| -ee str | 문자열 str을 8th 코드로 해석하고 그 뒤에 종료해요 |
| -f nm | nm이라는 파일을 해석해요 |
| -g | SED 디버그/검사를 활성화해요 |
| -G | 필요한 GL 버전을 설정해요(예: 3.1) |
| -h | 도움말을 표시해요 |
| -H N | 콘솔 기록 크기를 N줄로 설정해요(기본값: 100) |
| -k N | 데이터 스택과 r 스택 크기를 N개 항목으로 설정해요(기본값: 128K) |
| -l | 디버깅 정보를 더 표시해요 |
| -r N | 콜백 데이터 스택 크기를 N개 항목으로 설정해요(기본값: 256) |
| -s N | 재귀 스택 크기를 N바이트로 설정해요(기본값: 0, 시스템 기본값을 뜻해요) |
| -S | 감지된 SDL 드라이버를 나열하고 종료해요 |
| -v | 8th 버전을 출력하고 종료해요 |
| -vv | -v와 같지만 디버깅용 추가 정보를 함께 출력해요 |
| -x | 스택 타입 및 범위 검사를 꺼요 |
| -z | 데이터 항목 세기를 켜요 |
| -Z | -z와 같지만 'debug/allocs' 라이브러리를 포함해요 |
| -? nm | 'nm' 항목에 대한 도움말을 출력해요 |
| -- | 8th 옵션의 끝을 알려요 |
일반적으로 -k, -r, -s 옵션은 쓸 필요가 없어요. 이 옵션들은 혹시 유용하게 쓰일까 봐 제공되는 건데, 예를 들어 한 번에 스택에 올릴 수 있는 128K개 항목이 너무 적은 경우가 그래요(솔직히 그렇다면 알고리즘을 바꾸는 게 좋아요...).
명령줄 스위치를 자주 쓴다면, 선호하는 옵션으로 8th를 시작하도록 "셸 스크립트"(macOS나 Linux)나 "배치 파일"(Windows, "명령 파일"이라고도 해요)을 간단히 사용할 수 있어요.
app:datadir 폴더에 settings.8th라는 이름의 8th 소스 파일을 만들 수도 있어요. 이 파일이 있으면 8th REPL이 시작할 때 불러오고 그에 대한 메시지를 출력해요. 보안상의 이유로, 패키징된 앱에서는 이 파일을 찾거나 불러오지 않아요.
8th를 종료하려면 다음 중 하나를 하면 돼요:
bye를 입력하고 ENTER를 눌러요. 8th에게 정상적으로 종료하라고 알려줘요1 die를 입력하고 ENTER를 눌러요. 8th에게 비정상적으로 종료하고 운영체제에 상태 코드 1을 반환하라고 알려줘요throw를 호출하면 예외가 발생해요. 8th 콘솔에서 실행 중이라면 대부분의 경우 콘솔로 돌아와요. 파일이나 패키징된 애플리케이션을 실행 중이라면 메시지가 출력되고 앱이 종료돼요.8th는 여러 모드로 프로그램을 실행할 수 있어요:
| 모드 | 설명 |
|---|---|
| 대화형 | 그냥 8th를 시작하고 콘솔에 코드를 입력해요 |
| 스크립트 | 코드를 텍스트 파일에 넣고 (예를 들어) 8th mycode.8th로 실행해요. 아래 팁을 참고해요... |
| 앱 | 빌드 스크립트(또는 -b CLI 옵션)를 사용해 코드를 패키징된 애플리케이션으로 변환해요 |
Pro+ 사용자: 해커나 다른 못된 이들을 막는 데 도움이 되도록 암호화된 애플리케이션을 만들 수 있어요
뒤의 두 시나리오에서는 코드가 일반 텍스트 파일(예: 워드 프로세서 형식이 아닌)이어야 해요. 함께 쓰는 파일은 코드와 같은 폴더나 그 하위 폴더에 두면 돼요. 8th에서는 app:asset을 호출해 그 다른 파일들에 접근할 수 있어요.
"앱"은 대상 플랫폼의 다른 프로그램처럼 스스로 실행되는 독립 실행형 프로그램이고, 명령줄을 통해 8th가 실행해 줄 필요가 없어요. 위에서 언급한 것처럼 내용을 암호화해 해커를 막는 데 도움을 줄 수 있어요. 독립 실행형 애플리케이션을 만드는 자세한 내용은 빌드 도구 사용 섹션에서 찾을 수 있어요.
팁: macOS, Linux, RPI 시스템에서 실행한다면, 다음 방법으로 스크립트를 일반 시스템 명령처럼 실행할 수 있어요:
chmod +x scriptname
#! /usr/bin/env 8th로 만들기패키징된 appdata에서도 이 방법이 통해서, bin/build로 실행 파일을 만들었다면 그렇게 만들어진 appdata도 같은 방식으로 사용할 수 있어요:
cat - path/to/appdata > newappdata
#! /usr/bin/env 8th<ENTER><CTRL+D>
chmod +x newappdata