# Five Development TODO > Copyright (c) 2026 Charles KWON OhJun (charleskwonohjun@gmail.com) > All rights reserved. --- ## Phase 0: 프로젝트 기반 — ✅ 완료 - [x] 0.1 Go 모듈 초기화 + 디렉토리 구조 + .gitignore + LICENSE - [x] 0.2 Tagged Value 24B 구현 (`hbrt/value.go`) — tsgo 교훈: GC-safe unsafe.Pointer - [x] 0.3 Value 테스트 49개 PASS + 벤치마크 (스칼라 0 alloc 확인) --- ## Phase 1: 최소 런타임 — ✅ 완료 - [x] 1.1 Thread + Stack (`hbrt/thread.go`) — Frame, EndProc, push/pop, locals - [x] 1.2 산술 연산 (`hbrt/ops_arith.go`) — Plus~Power + AddInt, LocalAdd 등 최적화 4종 - [x] 1.3 비교 연산 (`hbrt/ops_compare.go`) — Equal~GreaterEqual + And/Or/Not + PopLogical - [x] 1.4 문자열 연산 — Plus에서 String+String 처리 - [x] 1.5 심볼 테이블 (`hbrt/symbol.go`) — Symbol, Module, Registry - [x] 1.6 함수 호출 (`hbrt/call.go`) — PushSymbol, Function, Do, 중첩 호출 (pendingSyms 스택) - [x] 1.7 기본 RTL (`hbrtl/`) — QOut, Str, Val, Len, SubStr, Upper, Lower, AllTrim, Space, PadR/L - [x] 1.8 VM 초기화 + Hello World (`hbrt/vm.go`) — 6개 통합 테스트 PASS --- ## Phase 2: 컴파일러 프론트엔드 — ✅ 완료 - [x] 2.1 토큰 정의 (`compiler/token/token.go`) — 120+ 종류, Pratt 우선순위 테이블 - [x] 2.2 렉서 (`compiler/lexer/lexer.go`) — 키워드, .T./.AND., 주석 4종, 줄 계속, ?/?? - [x] 2.3 AST (`compiler/ast/ast.go`) — 18 Expr + 15 Stmt + 10 Decl + xBase 명령 - [x] 2.4 파서 (`compiler/parser/`) — Pratt 식 파싱, 제어 흐름, xBase, CLASS, IMPORT --- ## Phase 3: 코드 생성 + CLI — ✅ 완료 - [x] 3.1 Go 코드 생성기 (`compiler/gengo/gengo.go`) — AST → Go 소스 코드 - [x] 3.2 CLI (`cmd/five/main.go`) — `five run`, `five build`, `five gen` - [x] 3.3 E2E 테스트 — hello.prg, functions.prg 실행 성공 - [x] 3.4 네이티브 바이너리 빌드 — 2.1MB 정적 링크 ELF --- ## Phase 4: RTL 확장 — ✅ 완료 - [x] 4.1 배열 (`hbrtl/array.go`) — AAdd, ADel, AIns, ASize, AClone, ACopy, AFill, ASort, AEval, AScan, ATail - [x] 4.2 해시 (`hbrtl/hash.go`) — hb_Hash, hb_HGet, hb_HSet, hb_HDel, hb_HHasKey, hb_HKeys, hb_HValues - [x] 4.3 코드 블록 (`hbrt/ops_collection.go`) — EvalBlock, ArrayGen, HashGen, ArrayPush/Pop - [x] 4.4 날짜 (`hbrtl/datetime.go`) — Date, Time, Year, Month, Day, DOW, Seconds, DToC, DToS, SToD - [x] 4.5 E2E — rtl_test.prg 실행 성공 (배열 정렬, 문자열, 타입, 날짜) --- ## Phase 5: RDD — DBF 엔진 ⬜ 진행 예정 ### 설계 문서 ✅ 완료 - [x] `docs/dbf-engine-spec.md` — DBF 바이트 포맷, 필드 타입 19종, 6종 락 스키마 - [x] `docs/rdd-architecture-spec.md` — RDD 101-method vtable, 상속 체인, SEEK→Index B-tree ### 5.1 RDD Interface - [ ] `hbrdd/driver.go` — Driver, Area, Indexer, Locker, Filterer, MemoHandler interface - [ ] `hbrdd/base.go` — BaseArea (WAAREA 대응, 기본 구현) - [ ] `hbrdd/workarea.go` — WorkAreaManager (Thread-local) - [ ] `hbrdd/alias.go` — ALIAS 등록/해제/전환 ### 5.2 DBF 코어 - [ ] `hbrdd/dbf/header.go` — DBF 헤더 32B 읽기/쓰기 (LE) - [ ] `hbrdd/dbf/field.go` — 필드 디스크립터 32B×N, 19종 필드 타입 GET/PUT - [ ] `hbrdd/dbf/record.go` — 레코드 읽기/쓰기 (오프셋 = headerLen + (recNo-1)*recordLen) - [ ] `hbrdd/dbf/lock.go` — 6종 락 스키마 전부 - [ ] `hbrdd/dbf/memo.go` — FPT 메모 (헤더 512B, 블록 읽기/쓰기) - [ ] `hbrdd/dbf/dbf.go` — DBFArea: Open, Close, GoTo, Skip, GetValue, PutValue, Append, Delete, Pack, Zap - [ ] 호환성 테스트: Harbour DBF ↔ Five DBF 상호 읽기 ### 5.3 NTX 인덱스 - [ ] `hbrdd/ntx/header.go` — NTX 헤더 512B - [ ] `hbrdd/ntx/page.go` — B-tree 페이지 1024B, 페이지 내 이진 검색 - [ ] `hbrdd/ntx/key.go` — 키 변환 (C→패딩, N→정렬문자열, D→YYYYMMDD, L→T/F) - [ ] `hbrdd/ntx/search.go` — SEEK: 루트→리프 순회 + 스택 + SOFTSEEK/FINDLAST - [ ] `hbrdd/ntx/skip.go` — SKIP: 스택 기반 NextKey/PrevKey, Scope 검증 - [ ] `hbrdd/ntx/update.go` — 키 삽입 (페이지 분할), 키 삭제 (밸런싱) - [ ] `hbrdd/ntx/build.go` — INDEX ON (Go goroutine 병렬 키 추출 + 정렬 + 바텀업 빌드) - [ ] `hbrdd/ntx/ntx.go` — NTXArea: DBFArea 임베딩 + Indexer 구현 - [ ] 호환성 테스트: Harbour NTX ↔ Five NTX ### 5.4 CDX 인덱스 - [ ] `hbrdd/cdx/header.go` — CDX 파일 헤더 1024B, 태그 헤더 512B - [ ] `hbrdd/cdx/compress.go` — 비트 패킹 (RecBits/DupBits/TrlBits) 인코딩/디코딩 - [ ] `hbrdd/cdx/page.go` — 내부/리프 노드 - [ ] `hbrdd/cdx/search.go` — SEEK (hb_cdxPageSeekKey 재귀 순회) - [ ] `hbrdd/cdx/update.go` — 삽입/삭제 - [ ] `hbrdd/cdx/cdx.go` — CDXArea: DBFArea 임베딩 + Indexer 구현 - [ ] 호환성 테스트: Harbour CDX ↔ Five CDX ### 5.5 xBase 명령어 연동 - [ ] 컴파일러 gengo: USE/SEEK/REPLACE/APPEND/INDEX/SET/GO/SKIP 코드 생성 - [ ] 런타임: CmdUse, CmdSeek, CmdReplace 등 Thread 메서드 - [ ] SET FILTER TO, SET RELATION TO, (cAlias)->field 동적 별칭 --- ## Phase 6: OOP + 매크로 ⬜ - [ ] 6.1 CLASS 시스템 — ClassDef, ClassRegistry, 상속, 연산자 오버로딩 - [ ] 6.2 CLASS 컴파일러 — CLASS→Go struct, DATA→필드, METHOD→메서드 - [ ] 6.3 매크로 컴파일러 — &variable, &(expression) 런타임 파싱 - [ ] 6.4 전처리기 — #include, #define, #command, #pragma --- ## Phase 7: Go 생태계 연동 ⬜ - [ ] 7.1 IMPORT → Go import 변환 + 타입 브릿지 자동 생성 - [ ] 7.2 타입 브릿지 — ToGoValue/FromGoValue, Marshal/Unmarshal - [ ] 7.3 동시성 — GO(goroutine), CHANNEL, SEND, RECEIVE, WAITGROUP - [ ] 7.4 HTTP — hbweb (라우팅, JSON, 미들웨어) - [ ] 7.5 SQL RDD — database/sql 기반 (PostgreSQL, MySQL, SQLite) --- ## Phase 8: 개발 도구 ⬜ - [ ] 8.1 `five fmt` — 코드 포매터 - [ ] 8.2 `five lsp` — Language Server Protocol - [ ] 8.3 `five test` — 테스트 프레임워크 - [ ] 8.4 VSCode 확장 — 구문 강조, LSP, 스니펫 - [ ] 8.5 `five migrate` — Harbour→Five 마이그레이션 도구 --- ## 현재 상태 요약 ``` ✅ Phase 0~4 완료 테스트: 144개 unit tests PASS + 3개 PRG E2E 실행 성공 파일: 28개 .go + 3개 .prg 바이너리: five CLI (five run/build/gen) 문서: 9개 MD (7,408줄) 참조: ref/typescript-go ⬜ Phase 5 (DBF) ← 다음 (설계 문서 완료, 구현 시작 대기) ⬜ Phase 6~8 대기 ``` ``` 일정: Phase 0~4 완료 ████████████████████ (1일) Phase 5 예정 ████████ (4주) Phase 6 예정 ██████ (3주) Phase 7 예정 ██████ (3주) Phase 8 예정 ████ (2주) ```