Lowent 매뉴얼←↑→

부록 C — 흔한 실수와 고치는 법

다른 언어의 버릇으로 Lowent 를 쓸 때 자주 걸리는 자리를 모았다. 진단 코드의 뜻은 부록 B 에, 설명은 표의 장에 있다.

겉모습#

실수진단고치는 법
output 을 input 앞에 적는다E-CLAUSE-ORDER절 차례표를 따른다. 입력 밖의 절은 --fmt 가 옮긴다(3장)
struct p . 처럼 블록을 점이나 줄바꿈으로 연다E-STMT-NODOstruct p do … end (--fmt 가 고친다)
; 나 , 로 닫는다E-VOCAB-REMOVED떨어진 마침표 .
p.x 로 칸을 읽는다E-FIELD-GLUEDfield p x
for x in xsE-VOCAB-REMOVEDfor x xs do … end
let x f64 be .5 .E-LET-NOVALUE0.5
매개변수와 같은 이름의 지역을 짓는다E-NAME-SHADOW새 이름을 짓는다
count·text·len 같은 이름을 쓴다E-NAME-BUILTIN 따위내장 연산·이음글 낱말은 이름이 될 수 없다
모듈 이름과 op 이름이 같다E-NAME-DUP모듈 이름을 바꾼다
expr a lt b and b lt cE-TYPE-LOGICALexpr (a lt b) and (b lt c)(8장)
type pct be u8 .E-TYPE-DECLtype pct u8 .

표 50.1 — 겉모습에서 걸리는 실수

값과 흐름#

실수진단고치는 법
let 에 setE-IMMUTABLEvar 로 짓는다
정수를 조건에 쓴다E-TYPE-CONDgt n 0 처럼 묻는 것을 적는다
넘침을 C 처럼 감길 것이라 기대한다E-VM-OVERFLOW(실행 중)wrap_add·sat_add·chk_add 로 처분을 고른다
narrow u8 x 가 잘라 줄 것이라 기대한다E-VM-CAST(실행 중)narrow_wrap·narrow_sat·narrow_try
guard 의 else 가 떠나지 않는다E-GUARD-FALLTHROUGHreturn·break·continue·panic, 아니면 if
어떤 길에서 return 이 없다E-RETURN-PARTIAL모든 길에서 돌려준다
if 를 값으로 쓴다E-IF-VALUEvar 를 짓고 갈래마다 set
match 에서 경우를 빠뜨린다E-MATCH-INEXHAUSTIVE빠진 case 나 case _ .
열거의 갈래를 점 없이 줄마다 적는다E-ENUM-DOT갈래마다 red .
확인 없이 some_value 로 꺼낸다E-VM-NONE(실행 중)guard is_some · value_or · match
array u8 4E-TYPE-ARRAYarray 4 u8

표 50.2 — 값과 흐름에서 걸리는 실수

효과·권한·메모리#

실수진단고치는 법
fn 에서 출력한다E-EFFECT-CALCproc 과 effects io
fn 에 effects none 을 적는다E-EFFECT-REDUNDANT절을 지운다
fn 이 mut 매개변수로 호출자에게 쓴다E-EFFECT-PURITYproc 으로
effects io 인데 권한을 받지 않았다E-EFFECT-NO-CAPinput out cap io .
권한을 받아 두고 내장 연산에 넘기지 않는다E-CAP-MISSINGwrite_out out 1 … 처럼 첫 피연산자로
시작점이 데이터를 받는다E-ENTRY-PARAMS시작점은 권한만 받는다. 인자는 cap args
mut 없는 슬라이스에 쓴다E-TYPE-MUTmut slice
ref 로 쓴다E-TYPE-REFmut_ref
같은 값을 쓰기로 두 번 빌린다E-EXCL빌림을 나누거나 차례를 나눈다
지역의 참조를 돌려준다E-ESCAPE값을 돌려주거나 호출자의 저장소에 담는다
mut ref sliceE-MREF-SLICE새 슬라이스를 돌려준다
영역의 바이트를 밖으로 들고 나간다E-REGION-ESCAPE영역을 넓히거나 값만 들고 나간다
파일·버퍼를 닫지 않는다E-OWN-INCOMPLETEclose·finish 를 부른다. 버리려면 drop
옮긴 값을 다시 쓴다E-OWN-MOVED넘기기 전에 쓰거나 돌려받는다
운영체제 없는 대상에서 힙을 쓴다E-HEAP-NOHOST고정 창(cap allocator)과 alloc

표 50.3 — 효과·권한·메모리에서 걸리는 실수

추상과 동시성#

실수진단고치는 법
트레이트 서명에 fn·proc 을 적는다E-TRAIT-SIGarea input s self . output u64 .
효과 줄 없는 proc 으로 순수 서명을 갖춘다E-TRAIT-EFFECTfn 으로, 또는 effects 를 적는다
타입 인자가 트레이트를 갖추지 않았다E-BOUND-UNSATsatisfies 와 op 을 더한다
comptime 자리에 실행 값을 준다E-COMPTIME-ARG리터럴이나 모듈 상수
task_group 밖에서 spawn <op>E-SPAWN-SCOPEtask_group do … end 로 감싼다
나누는 되풀이에서 누적 변수에 쓴다E-PAR-CARRYreduce <자리> <연산> .
pipe 에 정렬 같은 스테이지를 쓴다E-PIPE-STAGE스테이지 일곱과 종결자 다섯만 쓴다
효과 있는 붙은 op 을 fn 안에서 method 로 부른다(이 판에서는 거절되지 않는다)직접 <타입>.<이름> 으로 부른다(23장)

표 50.4 — 추상과 동시성에서 걸리는 실수