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>
12 KiB
12 KiB
Five 기술 수준 평가 및 상업화 단계 분석
Date: 2026-04-08 Author: Charles KWON OhJun For: Google Go Team / 회장님 프레젠테이션
1. Five는 무엇인가
Five는 Harbour(xBase) 코드를 네이티브 Go 바이너리로 변환하는 퓨전 언어다. 단순 포팅이 아니라, Harbour의 30년 비즈니스 로직 자산을 Go의 성능, 동시성, 크로스 플랫폼 배포 위에 올리는 프로젝트.
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Harbour PRG │ ──→ │ Five 컴파일러 │ ──→ │ Go 바이너리 │
│ (비즈니스 │ │ (PRG → Go │ │ (단일 실행파일 │
│ 로직 30년) │ │ 소스 생성) │ │ 크로스플랫폼) │
└──────────────┘ └──────────────┘ └──────────────┘
2. 프로젝트 규모
| 항목 | 수치 |
|---|---|
| Go 프로덕션 코드 | 35,534 LOC |
| Go 테스트 코드 | 11,190 LOC (24%) |
| RTL 내장 함수 | 400개 |
| 컴파일러 서브시스템 | 8개 (lexer, parser, analyzer, pp, ast, gengo, genpc, token) |
| RDD 드라이버 | 4종 (DBF, NTX, CDX, Memory) |
| PRG 테스트 프로그램 | 125개 |
| 기술 문서 | 29개 MD 파일 |
| Git 커밋 | 65 (2026년 집중 개발) |
| FiveSql2 SQL 엔진 | 10,458 LOC (14 PRG 파일) — Five 위에서 구동 |
3. 기술 수준 평가
3.1 컴파일러 (Compiler) — 성숙
| 기능 | 상태 | 비고 |
|---|---|---|
| 전처리기 (#include, #define) | ✅ 완성 | Harbour 호환 |
| 렉서/파서 | ✅ 완성 | 전체 Harbour 문법 |
| AST 분석기 | ✅ 완성 | 변수 스코프, 타입 추론 |
| Go 코드 생성 (gengo) | ✅ 완성 | 인라인 최적화 포함 |
| Pcode 생성 (genpc) | ✅ 완성 | FRB 바이너리 모듈 |
| Short-circuit AND/OR | ✅ 완성 | 이번 세션에서 수정 |
| 코드 블록 클로저 캡처 | ✅ 완성 | 외부 변수 자동 캡처 |
| FOR..NEXT LOOP 의미론 | ✅ 완성 | goto 라벨 방식 |
| CLASS/METHOD/INHERIT | ✅ 완성 | 단일/다중 상속 |
| STATIC 변수 | ✅ 완성 | 모듈 레벨 |
| 매크로 컴파일 (&) | ⚠️ 부분 | 기본 동작, 복잡한 패턴 미완 |
| @byref 참조 전달 | ⚠️ 구현 중 | RefCell 설계 완료, 통합 진행 중 |
3.2 런타임 (VM) — 고성능
| 기능 | 상태 | 성능 |
|---|---|---|
| 24바이트 Tagged Value | ✅ | Harbour 32B 대비 25% 절약 |
| 스택 기반 VM | ✅ | push/pop + fused opcodes |
| BEGIN SEQUENCE / RECOVER | ✅ | Go recover() 기반 |
| ErrorBlock 에러 핸들링 | ✅ | Harbour 호환 |
| Goroutine 확장 | ✅ | GO BLOCK, CHANNEL |
| 대화형 디버거 | ✅ | TUI + CLI 모드 |
| FRB 동적 모듈 로딩 | ✅ | 런타임 심볼 해석 |
| GC 최적화 | ✅ | COW 레코드, 소형 객체 풀 |
벤치마크 (Intel Core Ultra 7 255H):
| 연산 | Five | 비고 |
|---|---|---|
| MakeInt | 12ns | Zero alloc |
| AddInt | 26ns | Zero alloc |
| TypeCheck | 0.38ns | 비트 시프트 1회 |
| Function call | ~50ns | Frame + EndProc |
3.3 RTL 표준 라이브러리 — 광범위
400개 함수, Harbour 700+ 대비 약 57% 커버리지.
| 카테고리 | 함수 수 | 예시 |
|---|---|---|
| 문자열 | 50+ | Str, Val, SubStr, AllTrim, Upper, Lower, PadR, At, RAT |
| 배열 | 30+ | AAdd, ASize, AScan, ASort, ADel, AIns, AClone |
| 날짜/시간 | 20+ | Date, DToS, SToD, Day, Month, Year, Seconds |
| 파일 I/O | 20+ | FOpen, FRead, FWrite, FClose, MemoRead, MemoWrit |
| 데이터베이스 | 40+ | dbUseArea, dbGoTop, dbSkip, FieldGet, FieldPut, dbSeek |
| 수학 | 15+ | Abs, Int, Round, Sqrt, Log, Exp, Max, Min |
| 변환 | 15+ | ValType, hb_ValToExp, hb_CStr, hb_Ntos |
| 콘솔 | 10+ | QOut, QQOut, Inkey, Row, Col |
| 에러 | 5+ | ErrorBlock, ErrorNew, Break |
| 해시 | 10+ | hb_Hash, hb_HHasKey, hb_HGet, hb_HSet |
3.4 RDD (데이터베이스 엔진) — 실전 수준
| 드라이버 | 상태 | 벤치마크 (10K rows) |
|---|---|---|
| DBFNTX | ✅ 완성 | APPEND: 227ms, SEEK: 29ms, SCAN: 1ms |
| DBFCDX | ✅ 완성 | Compound index, multi-tag |
| MEMRDD | ✅ 완성 | In-memory 테스트용 |
| dbCreate/USE/CLOSE | ✅ | |
| dbAppend/Delete/Pack | ✅ | PACK: 9,149ms (최적화 여지) |
| INDEX ON / dbSeek | ✅ | B-tree 검색 |
| SET DELETED ON/OFF | ✅ | 소프트 삭제 |
| Record locking | ⚠️ 스텁 | dbRLock/dbRUnlock 존재, 실제 잠금 미구현 |
3.5 FiveSql2 — Five 위에서 동작하는 SQL 엔진
10,458줄의 순수 Harbour PRG로 작성된 완전한 SQL 엔진. Five의 언어 기능 전체를 검증하는 리트머스 테스트.
| SQL 기능 | 테스트 | 상태 |
|---|---|---|
| SELECT / WHERE / ORDER BY | 12 | ✅ ALL PASS |
| GROUP BY / HAVING / DISTINCT | 3 | ✅ ALL PASS |
| INSERT / UPDATE / DELETE | 3 | ✅ ALL PASS |
| WITH (CTE) Non-Recursive | 6 | ✅ ALL PASS |
| WITH RECURSIVE | 4 | ✅ ALL PASS |
| Window Functions (ROW_NUMBER, RANK, LAG, LEAD, SUM OVER) | 12 | ✅ ALL PASS |
| CHECK / UNIQUE / FK 제약 | 8 | ✅ ALL PASS |
| MERGE / UPSERT | 3 | ✅ ALL PASS |
| Combined CTE+Window+JOIN | 5 | ✅ ALL PASS |
| 총계 | 43/43 | 100% |
SQL 성능 (100 rows, ext4):
| 쿼리 | 시간 | 수준 |
|---|---|---|
| SELECT * | 0.8ms | 실용 |
| WHERE filter | 1.6ms | 실용 |
| GROUP BY HAVING | 3.0ms | 실용 |
| INNER JOIN (100x200) | 8.0ms | Hash Join 적용 |
| Window Function | 1.5~5ms | 실용 |
| CTE + Window + JOIN | 18ms | 최적화 여지 있음 |
4. 경쟁 제품 비교
4.1 Harbour → 다른 언어 변환기
| 프로젝트 | 방식 | 타겟 | 상태 |
|---|---|---|---|
| Five | PRG → Go source → native binary | Go | 활발 개발, 43/43 SQL pass |
| xHarbour | C 기반 인터프리터 | C binary | 유지보수 모드 |
| Harbour Core | C 기반 인터프리터 | C binary | 커뮤니티 유지 |
| LetoDB | 네트워크 RDD | C client/server | 특수 목적 |
Five의 차별점:
- 유일한 Go 네이티브 타겟 — 단일 바이너리, 크로스 컴파일
- 유일한 goroutine/channel 통합 — Harbour 코드에서 직접 Go 동시성 사용
- 유일한 SQL 엔진 — DBF 위에서 SQL:1999 표준 쿼리
4.2 xBase 시장 규모
전 세계 xBase/Clipper/dBASE 레거시 코드베이스:
- 추정 수억 줄 의 비즈니스 로직 (금융, 유통, 제조, 정부)
- 한국: 대기업 ERP, 은행 시스템, 정부 시스템에 Clipper/FoxPro 기반 다수
- 브라질: Harbour 최대 시장 — 수천 기업이 Harbour로 운영
- 유럽: 독일, 스페인, 이탈리아에 xBase 기반 기업 소프트웨어 다수
이들에게 현대화 경로 가 없다:
- C → Go 포팅? 수년, 수백만 달러
- 전체 재작성? 비즈니스 로직 손실 위험
- Five? 기존 코드 그대로 컴파일 → Go 바이너리 ← 이것
5. 상업화 단계 분석
5.1 현재 위치: Late Alpha → Early Beta
┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐
│ PoC │ → │ Alpha │ → │ Beta │ → │ RC │ → │ GA │
│ 개념증명 │ │ 핵심기능 │ │ 안정화 │ │ 릴리스 │ │ 상용 │
│ │ │ 완성 │ │ + 최적화│ │ 후보 │ │ 출시 │
└─────────┘ └─────────┘ └─────────┘ └─────────┘ └─────────┘
▲
현재 위치
(Alpha 후반)
Alpha 완료 기준 달성:
- 전체 Harbour 문법 파싱
- Go 코드 생성 + 네이티브 바이너리
- 400개 RTL 함수
- DBF/NTX/CDX RDD
- CLASS/INHERIT
- BEGIN SEQUENCE / RECOVER
- 실전 규모 프로그램 구동 (FiveSql2: 10,458 LOC)
Beta 진입에 필요한 것:
- @byref 참조 전달 구현 (P0)
- LOCAL 의미론 확정 (P0)
- go test ALL PASS 유지 (현재 달성)
- Harbour 호환성 테스트 스위트
- 성능 프로파일링 + 병목 해결
5.2 상업화까지의 거리
| 단계 | 예상 | 필요 작업 |
|---|---|---|
| Beta (기능 완성) | 1~2개월 | @byref, LOCAL, 호환성 테스트 |
| RC (릴리스 후보) | +1개월 | 성능 최적화, 문서화, 엣지 케이스 |
| GA 1.0 (상용 출시) | +1개월 | 패키징, 라이선스, 마케팅 자료 |
5.3 상업 모델 제안
Model A: 개발 도구 라이선스
Five Community Edition — 무료 (오픈소스, 개인/소규모)
Five Professional — $499/yr (기술 지원, 상업 라이선스)
Five Enterprise — $2,999/yr (우선 지원, 커스텀 RTL, SLA)
타겟: Harbour/Clipper 코드를 현대화하려는 기업
Model B: 마이그레이션 서비스
코드 분석 리포트 — $5,000 (기존 PRG 코드 호환성 분석)
마이그레이션 지원 — $50,000~$500,000 (규모에 따라)
연간 유지보수 — 마이그레이션 비용의 15%
타겟: 레거시 시스템 현대화가 급한 대기업
Model C: SaaS/PaaS
Five Cloud — 클라우드에서 Harbour 앱 실행
Go 바이너리로 컴파일 → 컨테이너 배포
$99/mo 기본, $499/mo 프로
타겟: DevOps 역량 없는 중소기업
6. 리스크 분석
6.1 기술 리스크
| 리스크 | 심각도 | 대응 |
|---|---|---|
| @byref 미구현 | 높음 | RefCell 설계 완료, 구현 1주 이내 |
| Harbour 700+ 함수 중 300+ 미구현 | 중간 | On-demand 구현, 사용 빈도순 |
| 매크로 컴파일 제한 | 중간 | 런타임 파서 필요, 복잡도 높음 |
| 성능 (JOIN, CTE) | 낮음 | 최적화 계획 수립 완료 |
| Record locking | 낮음 | 단일 사용자/프로세스 환경에서는 불필요 |
6.2 시장 리스크
| 리스크 | 심각도 | 대응 |
|---|---|---|
| xBase 시장 축소 | 중간 | 레거시 현대화 수요는 오히려 증가 |
| Go 생태계 변화 | 낮음 | Go 하위 호환성 보장 정책 |
| 경쟁자 출현 | 낮음 | 선점 효과, 기술 장벽 높음 |
7. 회장님께 보여줄 데모 시나리오
Demo 1: "30년 된 코드가 Go 바이너리로" (2분)
# Harbour PRG 파일 (비즈니스 로직)
cat employees.prg
# Five로 컴파일 → 단일 Go 바이너리
./five build employees.prg -o employees
ls -la employees # 18MB 단일 실행파일
# 실행
./employees
Demo 2: "SQL 엔진 — 10,458줄이 그대로 동작" (3분)
# FiveSql2: 순수 Harbour로 작성된 SQL 엔진
./five build test_sql1999.prg src/*.prg -o sql_test
# 43개 SQL:1999 표준 테스트 실행
./sql_test
# → 43/43 ALL PASS (100%)
Demo 3: "벤치마크" (1분)
./bench_sql
# SELECT *: 0.8ms
# JOIN: 8ms (Hash Join)
# Window: 1.5ms
# CTE: 5.6ms (Recursive)
Demo 4: "Goroutine in Harbour" (1분)
// Harbour 코드에서 Go goroutine 직접 사용
PROCEDURE Main()
GO BLOCK {|| HeavyTask() }
GO BLOCK {|| AnotherTask() }
? "Both running concurrently"
RETURN
8. 결론
Five의 현재 수준
"Alpha 후반 — 실전 규모 프로그램(10K+ LOC)이 100% 통과하는 유일한 Harbour→Go 트랜스파일러"
상업화 준비도
| 항목 | 점수 (10점 만점) |
|---|---|
| 기술 완성도 | 7/10 — 핵심 기능 완성, @byref/매크로 남음 |
| 성능 | 8/10 — 서브밀리초 쿼리, Hash Join, fused opcodes |
| 안정성 | 6/10 — 43/43 통과하나 엣지 케이스 검증 필요 |
| 문서화 | 7/10 — 29개 기술문서, 부족한 건 사용자 가이드 |
| 시장 준비 | 5/10 — 제품은 있으나 패키징/마케팅 없음 |
| 종합 | 6.6/10 |
한 줄 요약
Five는 "Harbour의 30년 비즈니스 로직 + Go의 현대적 성능"을 결합한 세계 유일의 실전 검증된 Harbour→Go 퓨전 언어이며, 상용화까지 약 3개월의 안정화 작업이 남아있다.