FunC 표준 라이브러리
이 섹션에서는 FunC에서 사용되는 표준 함수들이 포함된 stdlib.fc 라이브러리에 대해 설명합 니다.
현재 이 라이브러리는 내장되지 않은 가장 일반적인 TVM 어셈블러 명령어들의 래퍼일 뿐입니다. 라이브러리에서 사용되는 각 TVM 명령어에 대한 설명은 TVM 문서 섹션에서 확인할 수 있습니다. 일부 설명은 이 문서에서 인용되었습니다.
파일에서 일부 함수들은 주석 처리되어 있습니다. 이는 최적화를 위해 이미 내장 함수가 되었다는 것을 의미합니다. 하지만 타입 시그니처와 의미는 동일하게 유지됩니다.
일부 덜 일반적인 명령어들은 stdlib에 포함되어 있지 않습니다. 언젠가는 이들도 추가될 것입니다.
튜플 조작 프리미티브
이름과 타입은 대부분 자명합니다. 다형성 함수에 대한 자세한 내용은 forall을 사용한 다형성을 참조하세요.
현재 원자적 타입 tuple
의 값은 복합 튜플 타입(예: [int, cell]
)으로 캐스팅될 수 없으며, 그 반대도 마찬가지입니다.
Lisp 스타일 리스트
리스트는 중첩된 2-요소 튜플로 표현될 수 있습니다. 빈 리스트는 일반적으로 TVM null
값으로 표현됩니다(null()
을 호출하여 얻을 수 있음). 예를 들어, 튜플 (1, (2, (3, null)))
은 리스트 [1, 2, 3]
을 나타냅니다. 리스트의 요소들은 서 로 다른 타입일 수 있습니다.
cons
forall X -> tuple cons(X head, tuple tail) asm "CONS";
Lisp 스타일 리스트의 시작 부분에 요소를 추가합니다.
uncons
forall X -> (X, tuple) uncons(tuple list) asm "UNCONS";
Lisp 스타일 리스트에서 head와 tail을 추출합니다.
list_next
forall X -> (tuple, X) list_next(tuple list) asm( -> 1 0) "UNCONS";
Lisp 스타일 리스트에서 head와 tail을 추출합니다. (비)수정 메서드로 사용될 수 있습니다.
() foo(tuple xs) {
(_, int x) = xs.list_next(); ;; get the first element, `_` means do not use tail list
int y = xs~list_next(); ;; pop the first element
int z = xs~list_next(); ;; pop the second element
}
car
forall X -> X car(tuple list) asm "CAR";
Lisp 스타일 리스트의 head를 반환합니다.