시리즈 eraBasic 탐구

계기

이-글을 보고 살펴보니, 현행 TW에 동봉된 zname.erb 내 조사처리의 구동방식이 실제로 하드코딩 방식으로 작성되어있음을 확인하고, 만약 유니코드 기반으로 작동하게 된다면 긍정적인 변화가 발생하는지에 대한 의문이 생김

방식 및 기대효과

일반적인 프로그래밍 언어에서 한글 조사를 처리하는 방법인 28자 규칙(지금 명명함)과 eraBASIC에서 자체적으로 지원하는 문자열의 유니코드 확인 함수 ENCODETOUNI 를 활용해 함수 @KR_NAME의 관련 부분을 대체할 것임.

사용 코드는 대충 이런 느낌.

IF LOCALS:2 == "2"
    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), 0xAC000xD7A3&& (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행부터

GETMILLISECOND
LOCAL
 = RESULT
REPEAT 5000
    
PRINTFORML %조사처리("나""는")% %조사처리("너""와")% %조사처리("게임""을")% 한다.
REND

GETMILLISECOND
PRINTFORML 소요시간: {RESULT - LOCAL}
PRINTW
 아무 키나 눌러 다음으로...

코드를 집어넣어 진행했고, 결과는 대충 순정 700~750 사이, 개선판 550~600 사이가 나옴.

물론 실제 사용례보단 비현실적인 사례긴 한데, 확실히 개선판이 이전 방식보단 낫긴 한듯?

이제 이걸 TWKR 배포판에도 적용하냐는 또 다른 문제긴 한데....


p.s. 2년 전 과거의 나도 비슷한 생각을 이미 했었던 듯 하다. 예외처리 하는 걸 두려워했던 걸까...