표준 라이브러리와 런타임

표준 라이브러리 개요

하려는 일과 실패를 알리는 방식에 맞춰 표준 라이브러리 기능을 고릅니다.

API 목록을 먼저 훑지 말고 하려는 일부터 고르세요. 표준 라이브러리는 값, 컬렉션, 파일, 호스트 경계에 필요한 기능을 제공합니다. 이 기능은 작고 미리 검사할 수 있습니다. 목록에 없는 이름과 멤버는 검사 단계에서 거부됩니다. 호스트 언어에서 대신 찾아 주지 않습니다.

기능 선택하기

하려는 일먼저 볼 곳실패 형태
텍스트 출력, 값 변환, 유니코드 확인, 값 변환코어 라이브러리값, Option, 또는 도우미가 선언한 Result
순서 있는 항목 저장, 키 조회, 중복 없는 값 보관컬렉션 연산주로 값, bool, Option
파일 하나를 통째로 읽거나 쓰기FS.readText, FS.writeText, FS.readBytes, FS.writeBytesResult
파일을 연 채 여러 작업 수행openusing 또는 deferResult와 어휘 범위 정리
출력, 숫자, 순서, 실행 중단 이해실행 환경 동작명시된 값 또는 명확한 실행 오류

순서가 있는 항목에는 Array를 쓰세요. 키로 값을 찾을 때는 Map을 쓰세요. 중복 없는 값에는 Set을 씁니다.

값이 없는 것이 정상이라면 Option을 사용합니다. 맵에 키가 없는 경우가 그렇습니다. 외부 입력이나 호스트 작업이 이유와 함께 실패할 수 있다면 Result를 사용합니다. 실행 오류는 실행 중에 계약을 어긴 경우입니다. 잘못된 호출이나 타입은 실행 전에 정적 진단으로 거부됩니다.

일상적인 조합

다음 프로그램은 텍스트를 정수로 해석하고 배열을 변환합니다. toInt는 텍스트에 정수가 없을 수 있어서 Option을 반환합니다. map은 입력 순서를 그대로 지킨 새 배열을 반환합니다.

TOPAZ
let parsed: Option<int> = toInt("42")
let values: Array<int> = Array.of(1, 2, 3)
let doubled = map(values, value => value * 2)

print("{parsed}:{doubled}")
출력
Some(42):[2, 4, 6]

Some(42)는 변환에 성공했다는 사실을 그대로 드러냅니다. 정수로 읽을 수 없는 텍스트였다면 첫 부분은 None이 됩니다. 라이브러리가 마음대로 0을 만들지 않습니다. 잡을 수 있는 예외도 던지지 않습니다.

기능이 놓이는 곳

print, toInt, Some, None, Ok, Err, map, filter, reduce 같은 기본 함수와 생성자는 가져오기 없이 사용합니다. Math, Bytes, Hash, FS, Path 같은 내장 이름공간은 한 가지 기능군을 담습니다. 패키지 코드는 현재 도구 모음이 주는 고정된 std.* 모듈도 사용할 수 있습니다. 이 모듈은 호스트 이름공간을 동적으로 탐색하지 않습니다. 미리 검사되는 내보내기입니다.

더 넓은 기능에는 인코딩, 해시, 경로, 명령행 인수, 정규식, CSV, TOML, JSON, URL, 날짜, 큰 정수, 십진수, 생성기, 파서, 제한된 호스트 기능이 있습니다. 이름이 비슷한 호스트 API가 있으리라고 짐작하지 마세요. 해당 페이지에서 정확한 시그니처와 실행 대상을 확인하세요.

흔한 수정: 표준 모듈을 가져와도 파일 시스템, 네트워크, 시계, 환경 변수, 프로세스, 데이터베이스 권한은 생기지 않습니다. 호스트 작업은 해당 기능을 제공하는 프로필과 환경에서만 동작합니다.

정확한 경계

  • 별도 표기가 없으면 문자열 위치는 바이트가 아니라 유니코드 스칼라입니다.
  • 컬렉션 순회와 스냅샷은 문서에 정한 순서를 지킵니다.
  • 파싱과 디코딩은 선언된 Option 또는 Result 실패 방식을 유지합니다.
  • 잘못된 산술과 계약 위반은 조용히 다른 값으로 바뀌지 않습니다.
  • Test.*, 자유 함수 assert, std.test는 테스트 프로필 전용입니다.
  • 목록에 없는 이름을 바로 쓰거나 없는 모듈과 멤버를 쓰면 정적 진단이 납니다.

작업별 다음 문서