- 현재 ShitAsm에서 표준 라이브러리를
import하려면 작업 디렉터리(Working directory)에 std 디렉터리가 존재해야 합니다. - ShitVM 표준 라이브러리는 ShitVM 이외의 ShitBC 구현체에서는 제공되지 않을 수도 있습니다.
- 참조 방법
array모듈io모듈Stream구조체getStdin,getStdout함수openReadonlyFile,openWriteonlyFile함수closeFile프로시저readInt,readSignedInt함수writeInt,writeSignedInt프로시저readLong,readSignedLong함수writeLong,writeSignedLong프로시저readDouble함수writeDouble프로시저readChar32함수writeChar32프로시저readString32함수writeString32프로시저
string모듈
표준 라이브러리는 여러 개의 모듈로 구성되어 있습니다.
arrayiostring
import "/std/array.sba" as io
예를 들어 array 모듈을 참조하고 싶다면, 위와 같은 import 구문을 작성하면 됩니다. 표준 라이브러리는 외부 라이브러리로 분류되기 때문에 모듈 경로가 절대 경로여야 합니다. 상대 경로인 경우, 즉 std/array.sba인 경우에는 의미가 완전히 달라지므로 주의하세요.
이 모듈은 배열을 다룰 때 도움이 되는 함수를 제공합니다.
proc copy(destPtr, destBegin, srcPtr, srcBegin, count)
이 프로시저는 배열의 원소 여러 개를 다른 배열로 복사할 때 사용합니다. 목적지 배열에 대한 포인터(destPtr), 복사할 인덱스(destBegin), 출발지 배열에 대한 포인터(srcPtr), 복사될 인덱스(srcBegin), 복사할 원소 개수(count)를 받습니다.
destPtr, srcPtr은 반드시 pointer 자료형이어야 합니다. 두 배열은 반드시 원소의 자료형이 같아야 합니다.
destBegin, srcBegin, count는 반드시 long 자료형이어야 합니다.
; destArray = int[5]{ 0, 1, 2, 3, 4 }
; srcArray = int[5]{ 5, 6, 7, 8, 9 }
push 2l
push 0l
lea srcArray
push 3l
lea destArray
call copy ; destArray = int[5]{ 0, 1, 2, 5, 6 }이 됩니다.
이 모듈은 입출력과 관련된 구조체와 함수를 제공합니다.
struct Stream:
long _handle
이 구조체는 스트림을 나타냅니다.
_handle의 값을 임의로 조작하지 마세요.
func getStdin
func getStdout
각각 표준 입력, 표준 출력에 대한 스트림을 가져올 때 사용합니다.
함수의 반환값은 Stream 구조체입니다.
func openReadonlyFile(pathPtr)
func openWriteonlyFile(pathPtr)
각각 읽기 전용 파일 스트림, 쓰기 전용 파일 스트림을 생성할 때 사용합니다. 파일 경로에 대한 포인터(pathPtr)를 받아 스트림을 반환합니다.
pathPtr은 반드시 pointer 자료형이어야 합니다. pathPtr이 가리키는 곳의 자료형은 반드시 string.String32 구조체여야 합니다.
함수의 반환값은 Stream 구조체입니다.
스트림 사용을 마친 후 반드시 closeFile 프로시저를 사용해 스트림을 파괴해야 합니다. 그렇지 않으면 메모리 누수가 발생할 수 있습니다.
proc closeFile(stream)
이 프로시저는 파일 스트림을 파괴할 때 사용합니다.
stream은 반드시 Stream 구조체여야 합니다.
func readInt(stream)
func readSignedInt(stream)
각각 스트림으로부터 부호 없는 4바이트 정수, 부호 있는 4바이트 정수를 입력 받을 때 사용합니다.
stream은 반드시 Stream 구조체여야 합니다.
함수의 반환값은 int 자료형입니다.
proc writeInt(stream, value)
proc writeSignedInt(stream, value)
각각 스트림에 부호 없는 4바이트 정수, 부호 있는 4바이트 정수를 출력할 때 사용합니다.
stream은 반드시 Stream 구조체여야 합니다.
value는 반드시 int 자료형이어야 합니다.
func readLong(stream)
func readSignedLong(stream)
각각 스트림으로부터 부호 없는 8바이트 정수, 부호 있는 8바이트 정수를 입력 받을 때 사용합니다.
stream은 반드시 Stream 구조체여야 합니다.
함수의 반환값은 long 자료형입니다.
proc writeLong(stream, value)
proc writeSignedLong(stream, value)
각각 스트림에 부호 없는 8바이트 정수, 부호 있는 8바이트 정수를 출력할 때 사용합니다.
stream은 반드시 Stream 구조체여야 합니다.
value는 반드시 long 자료형이어야 합니다.
func readDouble(stream)
이 함수는 스트림으로부터 8바이트 IEEE754 수를 입력 받을 때 사용합니다.
stream은 반드시 Stream 구조체여야 합니다.
함수의 반환값은 double 자료형입니다.
proc writeDouble(stream, value)
이 프로시저는 스트림에 8바이트 IEEE754 수를 출력할 때 사용합니다.
stream은 반드시 Stream 구조체여야 합니다.
value는 반드시 double 자료형이어야 합니다.
func readChar32(stream)
이 함수는 스트림으로부터 유니코드 Codepoint 하나를 입력 받을 때 사용합니다. 공백, 줄바꿈 문자는 입력 받지 않습니다.
stream은 반드시 Stream 구조체여야 합니다.
함수의 반환값은 int 자료형입니다.
proc writeChar32(stream, value)
이 프로시저는 스트림에 유니코드 Codepoint 하나를 출력할 때 사용합니다.
stream은 반드시 Stream 구조체여야 합니다.
value는 반드시 int 자료형이어야 합니다.
func readString32(stream)
이 함수는 스트림으로부터 UTF-32 문자열을 입력 받을 때 사용합니다. 공백, 줄바꿈 문자를 만나면 함수가 반환됩니다.
stream은 반드시 Stream 구조체여야 합니다.
함수의 반환값은 string.String32 자료형입니다. 문자열 사용을 마친 후 반드시 string.destroy 프로시저를 사용해 문자열을 파괴해야 합니다. 그렇지 않으면 메모리 누수가 발생합니다.
proc writeString32(stream, valuePtr)
이 프로시저는 스트림에 UTF-32 문자열을 출력할 때 사용합니다.
stream은 반드시 Stream 구조체여야 합니다.
valuePtr은 반드시 pointer 자료형이어야 합니다. valuePtr이 가리키는 곳의 자료형은 반드시 string.String32 구조체여야 합니다.
이 모듈은 문자열과 관련된 구조체와 함수를 제공합니다.
struct String32:
pointer data
long length
long capacity
이 구조체는 UTF-32 문자열을 나타냅니다.
data는 int 자료형의 배열을 가리킵니다. 해당 배열에는 실질적인 문자열이 저장됩니다. 해당 배열에 접근하는 것은 가능하나, 이 필드의 값을 임의로 조작하지는 마세요.
length는 문자열의 길이를 저장합니다. 이 필드의 값을 임의로 조작하지 마세요.
capacity는 data가 가리키는 배열의 길이를 저장합니다. capacity ≥ length가 항상 성립합니다. 이 필드의 값을 임의로 조작하지 마세요.
func create32
이 함수는 빈 UTF-32 문자열을 만들 때 사용합니다.
함수의 반환값은 String32 구조체입니다.
문자열 사용을 마친 후 반드시 destroy 프로시저를 사용해 문자열을 파괴해야 합니다. 그렇지 않으면 메모리 누수가 발생합니다.
proc push(strPtr, char)
이 함수는 문자열 맨 뒤에 문자를 삽입할 때 사용합니다. 목적지 문자열에 대한 포인터(strPtr)와 삽입할 문자(char)를 받습니다.
strPtr은 반드시 pointer 자료형이어야 합니다. strPtr이 가리키는 곳의 자료형은 반드시 String32 구조체여야 합니다.
char는 반드시 int 자료형이어야 합니다.
call create32
store myString
push 72 ; 'H'
lea myString
call push
push 105 ; 'i'
lea myString
call push
push 33 ; '!'
lea myString
call push ; myString = "Hi!"가 됩니다.
proc concat(destPtr, srcPtr)
이 함수는 문자열 맨 뒤에 다른 문자열을 연결할 때 사용합니다. 목적지 문자열에 대한 포인터(destPtr)와 출발지 문자열에 대한 포인터(srcPtr)를 받습니다.
destPtr, srcPtr은 반드시 pointer 자료형이어야 합니다. destPtr, srcPtr가 가리키는 곳의 자료형은 반드시 String32 구조체여야 합니다.
; a = "Hello, "
; b = "world!"
lea b
lea a
call concat ; a = "Hello, world!"가 됩니다.
proc destroy(strPtr)
이 프로시저는 문자열을 파괴할 때 사용합니다.
strPtr은 반드시 pointer 자료형이어야 합니다. strPtr이 가리키는 곳의 자료형은 반드시 String32 구조체여야 합니다.