Files
five/docs/RTL-Todo.md
Charles KWON OhJun 486e466592 feat: FiveSql2 43/43, @byref, mutable closure, RTL 479, DateTime fix
Major changes since last commit:
- FiveSql2 SQL:1999 engine (10,458 LOC) — 43/43 ALL PASS
- 21 compiler/runtime bugs fixed (short-circuit AND/OR, FOR LOOP, etc.)
- @byref pass-by-reference via RefCell pattern
- Mutable closure capture (EnsureLocalRef + RefCell sharing)
- RTL: 400 → 479 functions (+79: file, string, datetime, hash, UTF-8)
- DateTime/Timestamp fully working (hb_DateTime, hb_Hour/Min/Sec, display)
- Reserved word guard (39 keywords blocked from function calls)
- AEval arg order fix (element before index)
- Closure capture redecl fix (unique _cap_ names per block)
- Hash/string indexing in ArrayPush/ArrayPop
- Harbour compat test suite: 51/51
- 4 docs: Porting Report, Implementation Plan, Optimization Plan, Commercialization

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 11:35:37 +09:00

6.8 KiB
Raw Blame History

Five RTL 구현 목록 — 파일 + 문자열 + 날짜

현재: 417개 구현 / Harbour 1,011개 이 목록 완료 시: ~472개 (47%) → 비즈니스 앱 실질 커버리지 ~85%


1. 파일/디렉토리 (20개)

이미 있음

FOPEN, FCLOSE, FREAD, FWRITE, FSEEK, FCREATE, FERASE, FRENAME,
MEMOREAD, MEMOWRIT, DIRECTORY, CURDIR, DIRMAKE, DIRREMOVE,
HB_FILEEXISTS, HB_DIREXISTS, HB_DIRCREATE, HB_DIRBASE,
HB_FTEMPCREATE, HB_FNAMESPLIT, HB_FNAMEDIR, HB_FNAMEEXT,
HB_FNAMENAME, HB_FNAMEMERGE

구현 필요 (20개)

# 함수 설명 Go 대응 난이도
1 HB_FSIZE(cFile) 파일 크기 (bytes) os.Stat().Size() 쉬움
2 HB_FCOPY(cSrc, cDst) 파일 복사 io.Copy 쉬움
3 HB_FEOF(nHandle) 파일 끝 확인 f.Read() == 0 쉬움
4 HB_FCOMMIT(nHandle) 파일 플러시 f.Sync() 쉬움
5 HB_FREADLEN(nH, nLen) N바이트 읽기 f.Read(buf) 쉬움
6 HB_FGETATTR(cFile) 파일 속성 os.Stat().Mode() 쉬움
7 HB_FSETATTR(cFile, n) 파일 속성 설정 os.Chmod() 쉬움
8 HB_FGETDATETIME(cFile) 파일 수정일시 os.Stat().ModTime() 중간
9 HB_FSETDATETIME(cFile, d, t) 파일 날짜 설정 os.Chtimes() 중간
10 HB_FLOCK(nH, nOff, nLen) 파일 잠금 syscall.Flock() 중간
11 HB_FUNLOCK(nH, nOff, nLen) 파일 잠금 해제 syscall.Flock() 중간
12 HB_FILEDELETE(cMask) 와일드카드 삭제 filepath.Glob + os.Remove 중간
13 HB_FILEMATCH(cFile, cMask) 와일드카드 매칭 filepath.Match 쉬움
14 HB_FNAMEEXISTS(cFile) 파일/디렉토리 존재 os.Stat() 쉬움
15 HB_FNAMEEXTSET(cFile, cExt) 확장자 변경 strings.TrimSuffix + 추가 쉬움
16 HB_FNAMENAMEEXT(cFile) 이름+확장자 filepath.Base 쉬움
17 HB_MEMOREAD(cFile) 파일 전체 읽기 이미 MEMOREAD 있음, alias 쉬움
18 HB_MEMOWRIT(cFile, cData) 파일 전체 쓰기 이미 MEMOWRIT 있음, alias 쉬움
19 HB_DIRTEMP() 임시 디렉토리 경로 os.TempDir() 쉬움
20 HB_DISKSPACE(cDrive) 디스크 여유 공간 syscall.Statfs 중간

2. 문자열 (20개)

이미 있음

AT, RAT, SUBSTR, LEFT, RIGHT, PADR, PADL, PADC, STRTRAN, REPLICATE,
STUFF, UPPER, LOWER, ALLTRIM, LTRIM, RTRIM, SPACE, CHR, ASC, LEN,
VAL, STR, TRANSFORM, TOKEN, NUMTOKEN,
HB_VALTOEXP, HB_VALTOSTR, HB_NTOS, HB_CSTR,
HB_NUMTOHEX, HB_HEXTONUM, HB_STRTOHEX, HB_HEXTOSTR,
HB_TOKENGET, HB_TOKENCOUNT, HB_ATOKENS,
HB_UTF8LEN, HB_UTF8SUBSTR, HB_UTF8TOSTR, HB_STRTOUTF8,
HB_UTF8AT, HB_UTF8LEFT, HB_UTF8RIGHT

구현 필요 (15개)

# 함수 설명 Go 대응 난이도
1 HB_AT(cSub, cStr [,nFrom]) AT + 시작위치 strings.Index + offset 쉬움
2 HB_RAT(cSub, cStr) 뒤에서 찾기 + 확장 strings.LastIndex 쉬움
3 HB_ATI(cSub, cStr) 대소문자 무시 찾기 strings.ToUpper + Index 쉬움
4 HB_ATX(cRegex, cStr) 정규식 찾기 regexp.FindString 중간
5 HB_LEFTEQI(cStr, cPrefix) 대소문자 무시 시작 비교 strings.EqualFold 쉬움
6 HB_ASCIIISALPHA(n) 알파벳 여부 unicode.IsLetter 쉬움
7 HB_ASCIIISDIGIT(n) 숫자 여부 unicode.IsDigit 쉬움
8 HB_ASCIIISLOWER(n) 소문자 여부 unicode.IsLower 쉬움
9 HB_ASCIIISUPPER(n) 대문자 여부 unicode.IsUpper 쉬움
10 HB_STRISUTF8(cStr) UTF-8 유효성 utf8.Valid 쉬움
11 HB_STRDECODESCAPE(cStr) \n \t 등 이스케이프 strconv.Unquote 중간
12 HB_STRXOR(cStr, cKey) XOR 암호화 byte loop 쉬움
13 HB_WILDMATCH(cMask, cStr) 와일드카드 매칭 filepath.Match 쉬움
14 HB_WILDMATCHI(cMask, cStr) 대소문자 무시 와일드카드 ToUpper + Match 쉬움
15 HARDCR(cStr) Soft CR → Hard CR strings.ReplaceAll 쉬움

3. 날짜/시간 (20개)

이미 있음

DATE, DAY, MONTH, YEAR, DOW, CDOW, CMONTH,
DTOS, STOD, DTOC, CTOD, SECONDS, TIME,
HB_DATETIME, HB_HOUR, HB_MINUTE, HB_SEC, HB_SECOND,
HB_TTOS, HB_STOT, HB_TTOC, HB_CTOT, HB_MILLISECONDS

구현 필요 (20개)

# 함수 설명 Go 대응 난이도
1 HB_DATE(nY, nM, nD) 날짜 생성 Julian 변환 쉬움
2 HB_CTOD(cDate, cFmt) 포맷 지정 문자열→날짜 time.Parse 중간
3 HB_DTOC(dDate, cFmt) 포맷 지정 날짜→문자열 time.Format 중간
4 HB_STOD(cDate) "YYYYMMDD"→날짜 이미 STOD 있음, alias 쉬움
5 HB_DTOT(dDate) Date→Timestamp (자정) Julian + 0ms 쉬움
6 HB_TTOD(tTimestamp) Timestamp→Date (시간 제거) Julian만 쉬움
7 HB_TTOHOUR(tTS) 시 추출 ms / 3600000 쉬움
8 HB_TTOMIN(tTS) 분 추출 ms / 60000 % 60 쉬움
9 HB_TTOSEC(tTS) 초 추출 ms / 1000 % 60 쉬움
10 HB_TTOMSEC(tTS) 밀리초 추출 ms % 1000 쉬움
11 HB_TTON(tTS) Timestamp→초 (자정부터) ms / 1000 쉬움
12 HB_NTOT(dDate, nSec) Date+초→Timestamp Julian + sec*1000 쉬움
13 HB_NTOHOUR(nSec) 초→시 nSec / 3600 쉬움
14 HB_NTOMIN(nSec) 초→분 nSec / 60 % 60 쉬움
15 HB_NTOSEC(nSec) 초→초 (mod 60) nSec % 60 쉬움
16 HB_WEEK(dDate) ISO 주차 time.ISOWeek 쉬움
17 HB_CDAY(nDow) 요일 번호→이름 time.Weekday.String 쉬움
18 DAYS(nSec) 초→일수 nSec / 86400 쉬움
19 ELAPTIME(cStart, cEnd) 경과시간 "HH:MM:SS" 파싱 + 차이 중간
20 AMPM(cTime) "13:00"→"01:00 PM" 파싱 + 변환 쉬움

4. 추가 필수 유틸 (5개)

# 함수 설명 Go 대응 난이도
1 HB_SETENV(cVar, cVal) 환경변수 설정 os.Setenv 쉬움
2 HB_PS() 경로 구분자 string(os.PathSeparator) 쉬움
3 HB_EOL() 줄바꿈 문자 "\n" 또는 "\r\n" 쉬움
4 HB_ISNULL(x) Empty string/NIL IsNil || "" 쉬움
5 ERRORSYS() 기본 에러 핸들러 stub 쉬움

요약

카테고리 추가 수 쉬움 중간
파일/디렉토리 20 14 6
문자열 15 13 2
날짜/시간 20 17 3
유틸 5 5 0
합계 60 49 11

예상 시간: 쉬움 49개 × 5분 + 중간 11개 × 15분 = ~7시간 완료 후 RTL: 417 + 60 = 477개 (47%) 비즈니스 앱 실질 커버리지: ~85%