계기
이-글을 보고 살펴보니, 현행 TW에 동봉된 zname.erb 내 조사처리의 구동방식이 실제로 하드코딩 방식으로 작성되어있음을 확인하고, 만약 유니코드 기반으로 작동하게 된다면 긍정적인 변화가 발생하는지에 대한 의문이 생김
방식 및 기대효과
일반적인 프로그래밍 언어에서 한글 조사를 처리하는 방법인 28자 규칙(지금 명명함)과 eraBASIC에서 자체적으로 지원하는 문자열의 유니코드 확인 함수 ENCODETOUNI 를 활용해 함수 @KR_NAME의 관련 부분을 대체할 것임.
사용 코드는 대충 이런 느낌.
RETURNF 2
ELSEIF LOCALS:2 == "4"
RETURNF 2
ELSEIF LOCALS:2 == "5"
RETURNF 2
ELSEIF LOCALS:2 == "9"
RETURNF 2
ELSEIF INRANGE(ENCODETOUNI(LOCALS:2), 0xAC00, 0xD7A3) && (ENCODETOUNI(LOCALS:2) - 0xAC00) % 28 == 0
RETURNF 2
ELSE
RETURNF 1
ENDIF
원래 코드에서 가장 마지막에 있던 숫자 부분과 ELSE만 그대로 하고 코드를 추가했음.
이를 통해 누릴 수 있으리라 보는 효과는
1. 코드 줄 감소 - 확정적
2. 처리 속도 개선 - 알 수 없음
3. 1.에 의한 메모리 소모 감소 - 알 수 없음. 아마도?
가 있음.
실험 조건 및 결과
실험 조건은 현 eraTWKR-temp_master 버전(범용이름 번역패치 된 것 까지)에서
메모리 관련 효과는 타이틀 나오고 10초 후 작업 관리자의 메모리 소모량을 통해.
처리 속도 개선은 타이틀에서 사용하는 코드 적어서 직접 실험하는 방식으로 진행하였음.
비교군은 당연히 현 eraTWKR-temp_master 버전임. 아, 물론 리소스는 끼워져있긴 함.
(리소스는 내가 쓰던것. 아마 현 버전보단 가벼움)
메모리 개선 - 2번 실행 후 나중 것을 사용.
위 - 순정 아래 - 개선
보이는 결과와 같이 0.5MB 정도의 개선이 있음이 확인됨. 물론 때에 따라서는 더 낮게(1378.6MB) 나오기도 하는데 이건 케바케일듯?
속도 개선 - 대충 3번씩 돌린 경향성만 알려줌 - 캡쳐 까먹음
TITLE.ERB의 16행부터
LOCAL = RESULT
REPEAT 5000
PRINTFORML %조사처리("나", "는")% %조사처리("너", "와")% %조사처리("게임", "을")% 한다.
REND
GETMILLISECOND
PRINTFORML 소요시간: {RESULT - LOCAL}
PRINTW 아무 키나 눌러 다음으로...
코드를 집어넣어 진행했고, 결과는 대충 순정 700~750 사이, 개선판 550~600 사이가 나옴.
물론 실제 사용례보단 비현실적인 사례긴 한데, 확실히 개선판이 이전 방식보단 낫긴 한듯?
이제 이걸 TWKR 배포판에도 적용하냐는 또 다른 문제긴 한데....
p.s. 2년 전 과거의 나도 비슷한 생각을 이미 했었던 듯 하다. 예외처리 하는 걸 두려워했던 걸까...