표준 라이브러리와 런타임

실행 환경 동작

출력, 숫자 결과, 안전한 조회, 실행 오류, 안정된 순서와 의도적으로 정하지 않은 동작을 이해합니다.

검사를 통과한 프로그램도 실행하면서 값과 출력, 실패 결과를 만듭니다. 사용자가 직접 볼 수 있는 출력문, 계산한 값, 컬렉션 순서, 분명한 실행 오류부터 살펴봅니다.

정상 값 관찰하기

다음 코드를 runtime-behavior.tpz로 저장합니다.

TOPAZ
let values = [10, 20]

print("int: {7 / 2} {-7 % 3}")
print("float: {1.5 + 1.5}")
print("safe: {values.get(9)}")

topaz run runtime-behavior.tpz로 실행하면 다음과 같이 출력됩니다.

출력
int: 3 -1
float: 3.0
safe: None

printstring만 받습니다. 문자열 보간이 호출 전에 정수, 부동소수점 수, Option 값을 표시 가능한 문자열로 바꿉니다. Prelude에는 공개된 println 도움 함수가 따로 없습니다. 그래서 여기 나온 print 표면을 그대로 씁니다.

int는 부호 있는 64비트 정수입니다. 정수 나눗셈은 0 방향으로 잘라냅니다. 나머지는 나누어지는 수의 부호를 따릅니다. 실행 중 정수 범위 초과와 0으로 나누기는 값을 자동으로 감싸지 않고 실행 오류를 냅니다. float는 IEEE-754 binary64입니다. 그래서 10진 실수 연산이 아니라 부동소수점 규칙을 따릅니다.

values.get(9)None을 반환합니다. 값이 없는 경우를 정상으로 보는 안전한 조회 API이기 때문입니다.

계약 위반 관찰하기

이 동작을 직접 인덱싱과 비교해 봅니다.

두 번째 코드는 intentional-fault.tpz로 저장하세요.

TOPAZ
let tasks = ["Run first program", "Build application"]
print(tasks[2])

topaz run intentional-fault.tpz는 0이 아닌 코드로 종료하면서 문제가 생긴 소스 위치를 보여 줍니다.

출력
error[TPZ4001]: index 2 is out of bounds for an array of length 2
 --> intentional-fault.tpz:2:7
  |
2 | print(tasks[2])
  |       ^^^^^^^^

실행 오류는 None, Err, 그 밖의 값이 아닙니다. 실행 오류가 나면 평가가 멈춥니다. 접미 ?, 선택 연산자, concurrent로는 잡을 수 없습니다. 언제 계산해도 잘못되는 상수 산술은 실행 전에 검사 단계에서 거부될 수 있습니다. 실행 오류는 잘못된 조건에 실행 중 도달했을 때 발생합니다.

관찰 가능한 실패 형식 선택하기

상황사용할 형식 또는 예상 결과
값이 없는 것이 정상임getNone을 반환하는 것과 같은 Option
호출자가 실패 이유에 대응할 수 있음Ok 또는 Err를 담은 Result
실행 코드가 런타임 계약을 위반함실행 오류와 0이 아닌 프로세스 종료
실행 전에 소스가 잘못됨topaz check의 정적 진단

직접 배열 접근, 실행 중 정수 나눗셈·나머지 연산에서 제수가 0인 경우, 정수 범위 초과, 실행 중 결정되는 0 간격 범위, 음수 정수 지수, 실행 중 빠지는 match는 명시된 실행 오류 원인입니다. 값이 없는 상황이 작업의 일부라면 안전한 라이브러리 연산을 먼저 쓰세요.

안정적으로 유지되는 것

문자열 비교는 유니코드 스칼라 순서를 그대로 씁니다. 암묵적인 정규화는 하지 않습니다. 배열은 원소 순서를 그대로 지킵니다. Map 키 스냅샷은 키를 삽입한 순서를 따릅니다. 컬렉션 연산은 각 계약에 명시된 순서를 지킵니다. 명목 값은 정본 표시 방식이 요구할 때 생성자 정체성을 유지합니다.

구현마다 내부 표현은 달라도 됩니다. 하지만 사용자에게 보이는 결과는 같아야 합니다. 결과를 맞출 수 없는 대상은 그 프로그램을 명확히 거부해야 합니다. 이 규칙이 백엔드 내부 도움 함수를 공개 토파즈 API로 만들지는 않습니다.

의도적으로 정하지 않은 것

호스트 정수의 자동 감싸기, 호스트 해시 순서, 로케일 의존 숫자 형식, 암묵적 유니코드 정규화, 잡을 수 있는 실행 오류, 중단 뒤의 자원 정리, 주변 파일 시스템·네트워크 권한, 성능 보장을 추측해서는 안 됩니다. 동시 작업 순서와 출력이 섞이는 순서도 의도적으로 정하지 않았습니다.

값 수준의 선택은 Null·Option·결과·실행 오류에서 이어 보세요. 시간 초과와 순서 경계는 동시성에서 다룹니다. 정확한 일상 도움 함수는 코어 라이브러리에서 확인하세요.