지난 금요일에 얼마 전까지 작성한 프로그램의 성능평가 스크립트를 짰다. 간만의 Lua 프로그래밍인 듯.
팀 동료가 작성한 프레임웍 위에 돌릴 스크립트를 짰는데 적은 부하를 걸었더니 잘 돌더라. 근데 부하를 좀 키웠더니 기괴한 동작을 하기 시작한다.
원인은 아래 코드탓.
while True begin -- wait for some packet end
이런 코드로 특정 응답이 오길기다리는 부분을 몇 개 넣었다. 하지만 버그는 여깄다. Lua의 참 값에 해당하는 상수는 ‘true’다. ‘True’가 아님. Orz
Lua는 거의 쓸 일이 없었고 python을 주로 쓰다보니 이런 불상사가 — python의 참 값 상수는 True.
그냥 while 1 처럼 쓰는게 정신건강(?)에 더 좋은가?
적절한 syntax highlighter 로 해결(…) 가진 아니고 방지 할 수는 없는건가?
왠지 문법 강조 기능이 있는데도 이랬다는게 문제지요
에러가 났을텐데 에러를 받아볼 수 없는 상황인가요?;;
lua 문법하고 동작이 정확히는 기억이 안 나는데, 아마 저런 꼴의 루프가 나오면 True는 비어 있는 전역 변수로 간주되서 while null인 것처럼 아무 일 없이 돌아갈겁니다. ;;
아무 일 없이 조용히 버그를 만들면서 Orz…
summerlight 님 말씀대로입니다. 그냥 false 로 간주대서 루프 돌지 않고 지나가버립니다.
에러가 나면 이걸 받아볼 수 있는 환경인데, 그냥 루프도 안돌고 지나갔으니 알 도리가 없는 것이지요;
루아의 쉣구린 부분……….
그러나 루아의 etc 패키지에 있는 strict.lua를 스크립트에 포함시키면 전역에서 초기화되지 않은 변수에 읽기/쓰기를 못하게 됩니다. 난 이거 없이는 루아 코딩 안 함
헛 그런 물건이 다 있었군요, 예전에 lua 잠깐 쓸 때는 메타 테이블 삽질해서 막았었는데 이미 다 마련되어 있었다니 OTL
rica /
이것은 좋은 것이다!(…)
ipkn 한테 넣어달라고 해야겠군.
summerlight /
ㅠㅠ
저는 이런 버그는 거의 안내는 편이라 ( –)a
기억날때 넣어두죠
ㄳ
이전 회사의 모 팀에서는 에디터에 자동완성 기능까지 넣어놨는데, 그걸로 모잘라서, 아예 lua static analysis 툴을 만들었다고 하더군요. ;;;
그거 참 좋군요. 흑흑