Files
five/docs/Five-Commercialization-Assessment.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

338 lines
12 KiB
Markdown

# 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 완료 기준 달성:**
- [x] 전체 Harbour 문법 파싱
- [x] Go 코드 생성 + 네이티브 바이너리
- [x] 400개 RTL 함수
- [x] DBF/NTX/CDX RDD
- [x] CLASS/INHERIT
- [x] BEGIN SEQUENCE / RECOVER
- [x] 실전 규모 프로그램 구동 (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분)
```bash
# Harbour PRG 파일 (비즈니스 로직)
cat employees.prg
# Five로 컴파일 → 단일 Go 바이너리
./five build employees.prg -o employees
ls -la employees # 18MB 단일 실행파일
# 실행
./employees
```
### Demo 2: "SQL 엔진 — 10,458줄이 그대로 동작" (3분)
```bash
# 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분)
```bash
./bench_sql
# SELECT *: 0.8ms
# JOIN: 8ms (Hash Join)
# Window: 1.5ms
# CTE: 5.6ms (Recursive)
```
### Demo 4: "Goroutine in Harbour" (1분)
```harbour
// 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** | Beta 진입 직전 |
### 한 줄 요약
> **Five는 "Harbour의 30년 비즈니스 로직 + Go의 현대적 성능"을 결합한**
> **세계 유일의 실전 검증된 Harbour→Go 퓨전 언어이며,**
> **상용화까지 약 3개월의 안정화 작업이 남아있다.**