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를 반환합니다.