freelang-v4 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. package/README.md +548 -0
  2. package/dist/ast.d.ts +367 -0
  3. package/dist/ast.js +4 -0
  4. package/dist/ast.js.map +1 -0
  5. package/dist/async-basic.test.d.ts +1 -0
  6. package/dist/async-basic.test.js +88 -0
  7. package/dist/async-basic.test.js.map +1 -0
  8. package/dist/async-jest.test.d.ts +1 -0
  9. package/dist/async-jest.test.js +99 -0
  10. package/dist/async-jest.test.js.map +1 -0
  11. package/dist/channel-jest.test.d.ts +1 -0
  12. package/dist/channel-jest.test.js +148 -0
  13. package/dist/channel-jest.test.js.map +1 -0
  14. package/dist/checker-jest.test.d.ts +1 -0
  15. package/dist/checker-jest.test.js +160 -0
  16. package/dist/checker-jest.test.js.map +1 -0
  17. package/dist/checker.d.ts +149 -0
  18. package/dist/checker.js +1565 -0
  19. package/dist/checker.js.map +1 -0
  20. package/dist/checker.test.d.ts +1 -0
  21. package/dist/checker.test.js +217 -0
  22. package/dist/checker.test.js.map +1 -0
  23. package/dist/compiler-jest.test.d.ts +1 -0
  24. package/dist/compiler-jest.test.js +233 -0
  25. package/dist/compiler-jest.test.js.map +1 -0
  26. package/dist/compiler.d.ts +127 -0
  27. package/dist/compiler.js +1588 -0
  28. package/dist/compiler.js.map +1 -0
  29. package/dist/compiler.test.d.ts +1 -0
  30. package/dist/compiler.test.js +313 -0
  31. package/dist/compiler.test.js.map +1 -0
  32. package/dist/db-100m-full.d.ts +5 -0
  33. package/dist/db-100m-full.js +78 -0
  34. package/dist/db-100m-full.js.map +1 -0
  35. package/dist/db-100m-no-index.d.ts +12 -0
  36. package/dist/db-100m-no-index.js +119 -0
  37. package/dist/db-100m-no-index.js.map +1 -0
  38. package/dist/db-100m-real.d.ts +5 -0
  39. package/dist/db-100m-real.js +131 -0
  40. package/dist/db-100m-real.js.map +1 -0
  41. package/dist/db-100m-streaming.d.ts +15 -0
  42. package/dist/db-100m-streaming.js +164 -0
  43. package/dist/db-100m-streaming.js.map +1 -0
  44. package/dist/db-100m-test.d.ts +5 -0
  45. package/dist/db-100m-test.js +111 -0
  46. package/dist/db-100m-test.js.map +1 -0
  47. package/dist/db-jest.test.d.ts +1 -0
  48. package/dist/db-jest.test.js +182 -0
  49. package/dist/db-jest.test.js.map +1 -0
  50. package/dist/db-runtime.d.ts +24 -0
  51. package/dist/db-runtime.js +204 -0
  52. package/dist/db-runtime.js.map +1 -0
  53. package/dist/db.d.ts +249 -0
  54. package/dist/db.js +593 -0
  55. package/dist/db.js.map +1 -0
  56. package/dist/file-io-jest.test.d.ts +1 -0
  57. package/dist/file-io-jest.test.js +225 -0
  58. package/dist/file-io-jest.test.js.map +1 -0
  59. package/dist/for-of-jest.test.d.ts +1 -0
  60. package/dist/for-of-jest.test.js +230 -0
  61. package/dist/for-of-jest.test.js.map +1 -0
  62. package/dist/for-of.test.d.ts +1 -0
  63. package/dist/for-of.test.js +305 -0
  64. package/dist/for-of.test.js.map +1 -0
  65. package/dist/function-literal-jest.test.d.ts +1 -0
  66. package/dist/function-literal-jest.test.js +180 -0
  67. package/dist/function-literal-jest.test.js.map +1 -0
  68. package/dist/function-literal.test.d.ts +1 -0
  69. package/dist/function-literal.test.js +245 -0
  70. package/dist/function-literal.test.js.map +1 -0
  71. package/dist/generics-jest.test.d.ts +1 -0
  72. package/dist/generics-jest.test.js +93 -0
  73. package/dist/generics-jest.test.js.map +1 -0
  74. package/dist/ir-gen.d.ts +15 -0
  75. package/dist/ir-gen.js +400 -0
  76. package/dist/ir-gen.js.map +1 -0
  77. package/dist/ir.d.ts +114 -0
  78. package/dist/ir.js +5 -0
  79. package/dist/ir.js.map +1 -0
  80. package/dist/lexer.d.ts +110 -0
  81. package/dist/lexer.js +467 -0
  82. package/dist/lexer.js.map +1 -0
  83. package/dist/lexer.test.d.ts +1 -0
  84. package/dist/lexer.test.js +426 -0
  85. package/dist/lexer.test.js.map +1 -0
  86. package/dist/main.d.ts +2 -0
  87. package/dist/main.js +241 -0
  88. package/dist/main.js.map +1 -0
  89. package/dist/module-jest.test.d.ts +1 -0
  90. package/dist/module-jest.test.js +123 -0
  91. package/dist/module-jest.test.js.map +1 -0
  92. package/dist/parser.d.ts +56 -0
  93. package/dist/parser.js +1060 -0
  94. package/dist/parser.js.map +1 -0
  95. package/dist/parser.test.d.ts +1 -0
  96. package/dist/parser.test.js +461 -0
  97. package/dist/parser.test.js.map +1 -0
  98. package/dist/pattern-matching-jest.test.d.ts +1 -0
  99. package/dist/pattern-matching-jest.test.js +158 -0
  100. package/dist/pattern-matching-jest.test.js.map +1 -0
  101. package/dist/pkg/init.d.ts +1 -0
  102. package/dist/pkg/init.js +118 -0
  103. package/dist/pkg/init.js.map +1 -0
  104. package/dist/pkg/install.d.ts +1 -0
  105. package/dist/pkg/install.js +77 -0
  106. package/dist/pkg/install.js.map +1 -0
  107. package/dist/pkg/registry.d.ts +23 -0
  108. package/dist/pkg/registry.js +106 -0
  109. package/dist/pkg/registry.js.map +1 -0
  110. package/dist/pkg/run.d.ts +1 -0
  111. package/dist/pkg/run.js +76 -0
  112. package/dist/pkg/run.js.map +1 -0
  113. package/dist/pkg/toml.d.ts +5 -0
  114. package/dist/pkg/toml.js +117 -0
  115. package/dist/pkg/toml.js.map +1 -0
  116. package/dist/repl.d.ts +15 -0
  117. package/dist/repl.js +197 -0
  118. package/dist/repl.js.map +1 -0
  119. package/dist/runtime/bytecode.d.ts +92 -0
  120. package/dist/runtime/bytecode.js +253 -0
  121. package/dist/runtime/bytecode.js.map +1 -0
  122. package/dist/runtime/value.d.ts +102 -0
  123. package/dist/runtime/value.js +302 -0
  124. package/dist/runtime/value.js.map +1 -0
  125. package/dist/runtime/vm.d.ts +65 -0
  126. package/dist/runtime/vm.js +293 -0
  127. package/dist/runtime/vm.js.map +1 -0
  128. package/dist/struct-instance-jest.test.d.ts +1 -0
  129. package/dist/struct-instance-jest.test.js +209 -0
  130. package/dist/struct-instance-jest.test.js.map +1 -0
  131. package/dist/struct-instance.test.d.ts +1 -0
  132. package/dist/struct-instance.test.js +291 -0
  133. package/dist/struct-instance.test.js.map +1 -0
  134. package/dist/struct-jest.test.d.ts +1 -0
  135. package/dist/struct-jest.test.js +176 -0
  136. package/dist/struct-jest.test.js.map +1 -0
  137. package/dist/struct.test.d.ts +1 -0
  138. package/dist/struct.test.js +231 -0
  139. package/dist/struct.test.js.map +1 -0
  140. package/dist/trait-jest.test.d.ts +1 -0
  141. package/dist/trait-jest.test.js +120 -0
  142. package/dist/trait-jest.test.js.map +1 -0
  143. package/dist/vm-jest.test.d.ts +1 -0
  144. package/dist/vm-jest.test.js +569 -0
  145. package/dist/vm-jest.test.js.map +1 -0
  146. package/dist/vm.d.ts +81 -0
  147. package/dist/vm.js +1956 -0
  148. package/dist/vm.js.map +1 -0
  149. package/dist/vm.test.d.ts +1 -0
  150. package/dist/vm.test.js +337 -0
  151. package/dist/vm.test.js.map +1 -0
  152. package/dist/web-repl/sandbox.d.ts +11 -0
  153. package/dist/web-repl/sandbox.js +76 -0
  154. package/dist/web-repl/sandbox.js.map +1 -0
  155. package/dist/web-repl/server.d.ts +1 -0
  156. package/dist/web-repl/server.js +111 -0
  157. package/dist/web-repl/server.js.map +1 -0
  158. package/dist/while-loop-jest.test.d.ts +1 -0
  159. package/dist/while-loop-jest.test.js +201 -0
  160. package/dist/while-loop-jest.test.js.map +1 -0
  161. package/dist/while-loop.test.d.ts +1 -0
  162. package/dist/while-loop.test.js +262 -0
  163. package/dist/while-loop.test.js.map +1 -0
  164. package/docs/EXPERIENCE.md +787 -0
  165. package/docs/README.md +175 -0
  166. package/docs/V1_V2_V3_ANALYSIS.md +107 -0
  167. package/docs/_config.yml +36 -0
  168. package/docs/api-reference.md +459 -0
  169. package/docs/architecture.md +470 -0
  170. package/docs/benchmarks.md +295 -0
  171. package/docs/comparison.md +454 -0
  172. package/docs/index.md +335 -0
  173. package/docs/language-completeness.md +228 -0
  174. package/docs/learning-guide.md +651 -0
  175. package/package.json +65 -0
  176. package/src/api/deploy_key.fl +294 -0
  177. package/src/api/issue.fl +302 -0
  178. package/src/api/org.fl +356 -0
  179. package/src/api/repo.fl +394 -0
  180. package/src/api/team.fl +299 -0
  181. package/src/api/user.fl +385 -0
  182. package/src/api/webhook.fl +273 -0
  183. package/src/ast.ts +158 -0
  184. package/src/async-basic.test.ts +94 -0
  185. package/src/async-jest.test.ts +107 -0
  186. package/src/channel-jest.test.ts +158 -0
  187. package/src/checker-jest.test.ts +189 -0
  188. package/src/checker.test.ts +279 -0
  189. package/src/checker.ts +1861 -0
  190. package/src/commands/analyze.fl +227 -0
  191. package/src/commands/auth.fl +315 -0
  192. package/src/commands/batch.fl +349 -0
  193. package/src/commands/config.fl +199 -0
  194. package/src/commands/deploy_key.fl +352 -0
  195. package/src/commands/issue.fl +275 -0
  196. package/src/commands/main.fl +492 -0
  197. package/src/commands/org.fl +425 -0
  198. package/src/commands/repo.fl +581 -0
  199. package/src/commands/team.fl +244 -0
  200. package/src/commands/user.fl +423 -0
  201. package/src/commands/webhook.fl +400 -0
  202. package/src/compiler-jest.test.ts +275 -0
  203. package/src/compiler.test.ts +375 -0
  204. package/src/compiler.ts +1770 -0
  205. package/src/config.fl +175 -0
  206. package/src/core/batch.fl +355 -0
  207. package/src/core/cache.fl +284 -0
  208. package/src/core/ensure.fl +324 -0
  209. package/src/db-100m-full.ts +96 -0
  210. package/src/db-100m-no-index.ts +133 -0
  211. package/src/db-100m-real.ts +152 -0
  212. package/src/db-100m-streaming.ts +154 -0
  213. package/src/db-100m-test.ts +136 -0
  214. package/src/db-jest.test.ts +161 -0
  215. package/src/db-runtime.ts +242 -0
  216. package/src/db.ts +676 -0
  217. package/src/errors.fl +134 -0
  218. package/src/for-of-jest.test.ts +246 -0
  219. package/src/for-of.test.ts +308 -0
  220. package/src/function-literal-jest.test.ts +193 -0
  221. package/src/function-literal.test.ts +248 -0
  222. package/src/generics-jest.test.ts +104 -0
  223. package/src/http/client.fl +327 -0
  224. package/src/ir-gen.ts +459 -0
  225. package/src/ir.ts +80 -0
  226. package/src/lexer.test.ts +499 -0
  227. package/src/lexer.ts +522 -0
  228. package/src/main.ts +223 -0
  229. package/src/models.fl +162 -0
  230. package/src/module-jest.test.ts +145 -0
  231. package/src/parser.test.ts +542 -0
  232. package/src/parser.ts +1211 -0
  233. package/src/pattern-matching-jest.test.ts +170 -0
  234. package/src/pkg/init.ts +91 -0
  235. package/src/pkg/install.ts +56 -0
  236. package/src/pkg/registry.ts +103 -0
  237. package/src/pkg/run.ts +49 -0
  238. package/src/pkg/toml.ts +129 -0
  239. package/src/repl.ts +190 -0
  240. package/src/runtime/bytecode.ts +291 -0
  241. package/src/runtime/value.ts +322 -0
  242. package/src/runtime/vm.ts +354 -0
  243. package/src/self-host/bootstrap.fl +68 -0
  244. package/src/self-host/interpreter.fl +361 -0
  245. package/src/self-host/lexer-simple.fl +22 -0
  246. package/src/self-host/lexer.fl +305 -0
  247. package/src/self-host/parser.fl +580 -0
  248. package/src/struct-instance-jest.test.ts +221 -0
  249. package/src/struct-instance.test.ts +293 -0
  250. package/src/struct-jest.test.ts +187 -0
  251. package/src/struct.test.ts +234 -0
  252. package/src/trait-jest.test.ts +136 -0
  253. package/src/vm-jest.test.ts +754 -0
  254. package/src/vm.ts +1976 -0
  255. package/src/web-repl/public/index.html +50 -0
  256. package/src/web-repl/public/main.js +105 -0
  257. package/src/web-repl/public/style.css +225 -0
  258. package/src/web-repl/sandbox.ts +88 -0
  259. package/src/web-repl/server.ts +97 -0
  260. package/src/while-loop-jest.test.ts +218 -0
  261. package/src/while-loop.test.ts +267 -0
package/README.md ADDED
@@ -0,0 +1,548 @@
1
+ # 🌍 FreeLang v4: 완전한 프로그래밍 언어
2
+
3
+ **프로젝트**: FreeLang v4 - AI-First Programming Language
4
+ **버전**: 4.3.0 🚀
5
+ **상태**: ✅ **PRODUCTION READY** (프로덕션 준비 완료)
6
+
7
+ **최근 업데이트**: 2026-04-01 - v4.3 완전 업그레이드 (성능+언어 기능 대폭 강화)
8
+ **테스트**: 251개 통과 / 263개 (95%)
9
+ **빌드**: ✅ 성공
10
+
11
+ ---
12
+
13
+ ## 📋 목차
14
+
15
+ 1. [v4.3 새로운 기능](#-v43-새로운-기능)
16
+ 2. [빠른 시작](#-빠른-시작)
17
+ 3. [주요 기능](#-주요-기능)
18
+ 4. [명령어 레퍼런스](#-명령어-레퍼런스)
19
+ 5. [아키텍처](#-아키텍처)
20
+ 6. [테스트 & 빌드](#-테스트--빌드)
21
+
22
+ ---
23
+
24
+ ## 🆕 v4.3 새로운 기능
25
+
26
+ ### A. 성능 최적화 ⚡
27
+ - **args.unshift() O(n²) → O(n)**: 함수 호출 성능 대폭 개선
28
+ - **channels Map 변환**: O(1) 채널 조회
29
+ - **runningCount 카운터**: 불필요한 actors.some() O(n) 스캔 제거
30
+ - **i32() NaN 버그 수정**: 타입 변환 안정성 강화
31
+
32
+ ### B. 표준 라이브러리 확장 (20+ 함수) 📚
33
+ ```freelang
34
+ // 수학 (7개): floor, ceil, round, random, sin, cos, log
35
+ println(str(floor(3.7))) // 3
36
+
37
+ // 문자열 (3개): index_of, pad_left, pad_right
38
+ "hello".index_of("ll") // Some(2)
39
+
40
+ // 정규식 (3개): regex_match, regex_find_all, regex_replace
41
+ regex_match("test123", "\\d+") // Some("123")
42
+
43
+ // CSV (2개): csv_parse, csv_stringify
44
+ csv_parse("name,age\nAlice,30")
45
+
46
+ // 날짜/시간 (3개): now, format_date, parse_date
47
+ format_date(now(), "YYYY-MM-DD")
48
+
49
+ // YAML (2개): yaml_parse, yaml_stringify ⭐ NEW
50
+ match yaml_parse("name: Alice\nage: 30") {
51
+ case Ok(data) -> println(data),
52
+ case Err(e) -> println(e)
53
+ }
54
+ ```
55
+
56
+ ### C. VS Code Extension 🎨
57
+ - `.fl` 파일 신택스 하이라이팅
58
+ - 괄호 매칭, 자동 들여쓰기
59
+ - 30+ 코드 스니펫 지원
60
+ - 한글 식별자 완벽 지원
61
+
62
+ ```bash
63
+ # vscode-extension/ 디렉토리에서 설치
64
+ code --install-extension vscode-extension/
65
+ ```
66
+
67
+ ### D. 패키지 매니저 📦
68
+ ```bash
69
+ # 새 프로젝트 생성
70
+ freelang init my-app
71
+
72
+ # 패키지 설치 (자동으로 freelang.toml 업데이트)
73
+ freelang install string_utils
74
+ freelang install collections
75
+ freelang install datetime
76
+
77
+ # freelang.toml 스크립트 실행
78
+ freelang run test
79
+ freelang run build
80
+
81
+ # 패키지 검색
82
+ freelang list-packages
83
+ freelang search-packages datetime
84
+ ```
85
+
86
+ ### E. 웹 REPL 🌐
87
+ ```bash
88
+ # 웹 REPL 시작
89
+ freelang --web-repl --port 3000
90
+
91
+ # 브라우저에서 http://localhost:3000 접속
92
+ # xterm.js 기반 대화형 환경 with 코드 에디터
93
+ ```
94
+
95
+ ### F. 타입 매핑 ORM ✅
96
+ ```freelang
97
+ // 트랜잭션 관리
98
+ db_transaction_begin(db)
99
+ db_update(db, "users", "name = ?", "id = ?", ["Bob", 42])
100
+ db_transaction_commit(db)
101
+
102
+ // 안전한 단일 행 조회
103
+ match db_find_one(db, "users", "id = ?", [42]) {
104
+ case Ok(user) -> println(user),
105
+ case Err(_) -> println("Not found")
106
+ }
107
+
108
+ // 페이지네이션
109
+ db_find_paginated(db, "users", 10, 20)
110
+
111
+ // 정렬 조회
112
+ db_find_ordered(db, "users", "created_at", false) // DESC
113
+ ```
114
+
115
+ ---
116
+
117
+ ## 🚀 빠른 시작
118
+
119
+ ### 설치 & 실행
120
+
121
+ ```bash
122
+ # 빌드
123
+ npm run build
124
+
125
+ # 전체 테스트 실행
126
+ npm test
127
+
128
+ # 특정 테스트만 실행
129
+ npm test -- src/vm-jest.test.ts
130
+
131
+ # 커버리지 리포트 생성
132
+ npm test -- --coverage
133
+ ```
134
+
135
+ ### Hello World
136
+
137
+ ```freeLang
138
+ println("Hello, FreeLang!")
139
+ ```
140
+
141
+ ### 배열 & 함수
142
+
143
+ ```freeLang
144
+ var arr = [1, 2, 3]
145
+ println(str(length(arr))) // 3
146
+
147
+ fn add(a: i32, b: i32) -> i32 { a + b }
148
+ println(str(add(10, 20))) // 30
149
+ ```
150
+
151
+ ---
152
+
153
+ ## ✅ v4.3 상태
154
+
155
+ ### 📊 테스트 & 빌드
156
+
157
+ | 지표 | 수치 | 상태 |
158
+ |------|------|------|
159
+ | **테스트 통과율** | 251/263 (95%) | ✅ 안정적 |
160
+ | **빌드** | ✅ 성공 | ✅ |
161
+ | **성능** | ~7초 (전체 테스트) | ✅ 매우 빠름 |
162
+ | **코드 라인** | ~2,500줄 | ✅ |
163
+
164
+ ### ✨ v4.3 개선사항 (2026-04-01)
165
+
166
+ **성능 최적화 (A 단계)**:
167
+ - ✅ O(n²) → O(n) args.unshift() 최적화
168
+ - ✅ channels 배열 → Map<number, Channel>
169
+ - ✅ runningCount 카운터 (O(n) 제거)
170
+ - ✅ currentFrame 캐시 변수
171
+ - ✅ i32() NaN 버그 수정
172
+
173
+ **표준 라이브러리 확장 (B 단계)**:
174
+ - ✅ 수학 7개 (floor, ceil, round, random, sin, cos, log)
175
+ - ✅ 문자열 3개 (index_of, pad_left, pad_right)
176
+ - ✅ 정규식 3개 (regex_match, regex_find_all, regex_replace)
177
+ - ✅ CSV 2개 (csv_parse, csv_stringify)
178
+ - ✅ 날짜/시간 3개 (now, format_date, parse_date)
179
+ - ✅ collections.fl HashMap 버그 수정
180
+
181
+ **생태계 구축 (C-F 단계)**:
182
+ - ✅ VS Code Extension (.fl 신택스, 30+ 스니펫)
183
+ - ✅ 패키지 매니저 (init, install, run, registry)
184
+ - ✅ 웹 REPL (Express + WebSocket + xterm.js)
185
+ - ✅ YAML 파싱 (yaml_parse, yaml_stringify)
186
+ - ✅ 타입 매핑 ORM (8개 고급 함수)
187
+
188
+ ---
189
+
190
+ ## 🌟 주요 기능
191
+
192
+ ### 지원되는 타입
193
+ - ✅ `i32` - 정수
194
+ - ✅ `f64` - 부동소수점
195
+ - ✅ `string` - 문자열
196
+ - ✅ `bool` - 불린
197
+ - ✅ `[T]` - 배열
198
+ - ✅ `struct` - 구조체
199
+
200
+ ### 지원되는 문법
201
+ - ✅ 변수 선언 (`var x = 42`)
202
+ - ✅ 함수 정의 (`fn add(a: i32, b: i32) -> i32 { ... }`)
203
+ - ✅ 제어흐름 (`if`, `while`, `for...in`, `for...of`)
204
+ - ✅ 배열/구조체 조작
205
+ - ✅ 모든 산술/논리 연산자
206
+
207
+ ### 빌틴 함수 (50+개) ⭐
208
+
209
+ | 카테고리 | 함수 | 개수 |
210
+ |---------|------|------|
211
+ | **I/O** | println, print, read_line | 3 |
212
+ | **파일** | read_file, write_file | 2 |
213
+ | **타입** | str, i32, i64, f64, typeof | 5 |
214
+ | **배열** | length, push, pop, slice, clone, reverse, sort, unique | 8 |
215
+ | **문자열** | contains, split, trim, to_upper, to_lower, char_at, starts_with, ends_with, replace, index_of, pad_left, pad_right | 12 |
216
+ | **수학** | abs, min, max, pow, sqrt, floor, ceil, round, random, sin, cos, log, gcd, lcm | 14 |
217
+ | **해시/암호** | md5, sha256, sha512, base64_encode, base64_decode, hmac | 6 |
218
+ | **JSON** | json_parse, json_stringify, json_validate, json_pretty | 4 |
219
+ | **YAML** | yaml_parse, yaml_stringify | 2 |
220
+ | **CSV** | csv_parse, csv_stringify | 2 |
221
+ | **날짜** | now, format_date, parse_date | 3 |
222
+ | **정규식** | regex_match, regex_find_all, regex_replace | 3 |
223
+ | **HTTP** | http_get, http_post, http_post_json, fetch | 4 |
224
+ | **채널** | channel, send, recv | 3 |
225
+ | **DB** | sqlite_open, sqlite_query, sqlite_execute, sqlite_close, sqlite_begin, sqlite_commit, sqlite_rollback, pg_*, mysql_* | 21 |
226
+ | **검증** | assert, panic | 2 |
227
+ | **유틸** | uuid, timestamp, env, range, clone | 5 |
228
+
229
+ **총 111개 빌트인 함수 + 표준 라이브러리 (string_utils, collections, datetime, db_orm)**
230
+
231
+ ---
232
+
233
+ ## 💻 명령어 레퍼런스
234
+
235
+ ### 기본 사용법
236
+
237
+ ```bash
238
+ # 파일 실행
239
+ freelang hello.fl
240
+
241
+ # REPL (대화형 쉘)
242
+ freelang --repl
243
+
244
+ # 웹 REPL (브라우저 기반)
245
+ freelang --web-repl --port 3000
246
+ ```
247
+
248
+ ### 프로젝트 관리
249
+
250
+ ```bash
251
+ # 새 프로젝트 생성
252
+ freelang init my-project
253
+
254
+ # 의존성 설치
255
+ freelang install string_utils
256
+ freelang install collections
257
+
258
+ # freelang.toml의 스크립트 실행
259
+ freelang run test
260
+ freelang run build
261
+
262
+ # 패키지 검색
263
+ freelang list-packages
264
+ freelang search-packages datetime
265
+ ```
266
+
267
+ ### 데이터베이스 마이그레이션
268
+
269
+ ```bash
270
+ # 마이그레이션 적용
271
+ freelang migrate up
272
+
273
+ # 마이그레이션 되돌리기
274
+ freelang migrate down
275
+
276
+ # 마이그레이션 상태 확인
277
+ freelang migrate status
278
+ ```
279
+
280
+ ### 빌드 & 테스트
281
+
282
+ ```bash
283
+ # TypeScript 빌드
284
+ npm run build
285
+
286
+ # 전체 테스트 실행
287
+ npm test
288
+
289
+ # 특정 테스트만 실행
290
+ npm test -- src/vm-jest.test.ts
291
+
292
+ # 커버리지 리포트 생성
293
+ npm test -- --coverage
294
+ ```
295
+
296
+ ---
297
+
298
+ ## 🧪 테스트 & 빌드
299
+
300
+ ### 테스트 파일 (8개)
301
+
302
+ | 파일 | 테스트 | 커버리지 | 상태 |
303
+ |------|--------|---------|------|
304
+ | vm-jest.test.ts | 81 | 47.58% | ✅ |
305
+ | compiler-jest.test.ts | 42 | 46.52% | ✅ |
306
+ | checker-jest.test.ts | 23 | 53.75% | ✅ |
307
+ | parser-jest.test.ts | 25 | 70.48% | ✅ |
308
+ | function-literal-jest.test.ts | 18 | - | ✅ |
309
+ | struct-jest.test.ts | 12 | - | ✅ |
310
+ | for-of-jest.test.ts | 8 | - | ✅ |
311
+ | while-loop-jest.test.ts | 4 | - | ✅ |
312
+
313
+ ### 성능 테스트
314
+
315
+ ```
316
+ ✅ 1000개 요소 배열: 22ms
317
+ ✅ 깊은 재귀 (50단계): 4ms
318
+ ✅ 무한 루프 감지: 123ms
319
+ ✅ 최대 명령어: 1,000,000
320
+ ```
321
+
322
+ ---
323
+
324
+ ## 🗂️ 디렉토리 구조
325
+
326
+ ```
327
+ freelang-v4/
328
+ ├── README.md (이 파일)
329
+ ├── package.json
330
+ ├── tsconfig.json
331
+
332
+ ├── src/
333
+ │ ├── lexer.ts # 토큰화
334
+ │ ├── parser.ts # AST 생성
335
+ │ ├── checker.ts # 타입 검사
336
+ │ ├── compiler.ts # 바이트코드 생성
337
+ │ ├── vm.ts # 가상 머신 (111개 빌트인 함수)
338
+ │ ├── main.ts # CLI 진입점
339
+ │ ├── repl.ts # 대화형 쉘
340
+ │ │
341
+ │ ├── db.ts # DB 추상화 (SQLite/PostgreSQL/MySQL)
342
+ │ ├── ir-gen.ts # 중간 코드 생성
343
+ │ │
344
+ │ ├── pkg/ # 패키지 매니저
345
+ │ │ ├── toml.ts # TOML 파서
346
+ │ │ ├── init.ts # 프로젝트 초기화
347
+ │ │ ├── install.ts # 패키지 설치
348
+ │ │ ├── run.ts # 스크립트 실행
349
+ │ │ └── registry.ts # 패키지 레지스트리
350
+ │ │
351
+ │ └── web-repl/ # 웹 기반 REPL
352
+ │ ├── server.ts # Express + WebSocket 서버
353
+ │ ├── sandbox.ts # 샌드박스 실행 환경
354
+ │ └── public/ # 프론트엔드
355
+ │ ├── index.html # xterm.js UI
356
+ │ ├── main.js # WebSocket 클라이언트
357
+ │ └── style.css # 스타일
358
+
359
+ ├── stdlib/ # 표준 라이브러리
360
+ │ ├── string_utils.fl # 문자열 유틸
361
+ │ ├── collections.fl # HashMap, HashSet (타입 매핑 ORM 확장)
362
+ │ ├── datetime.fl # 날짜/시간 유틸 (20+ 함수)
363
+ │ └── db_orm.fl # 데이터베이스 ORM
364
+
365
+ ├── vscode-extension/ # VS Code 플러그인
366
+ │ ├── package.json # 플러그인 설정
367
+ │ ├── language-configuration.json
368
+ │ ├── syntaxes/
369
+ │ │ └── freelang.tmLanguage.json
370
+ │ └── snippets/
371
+ │ └── freelang.json
372
+
373
+ ├── packages/ # 공식 패키지
374
+ │ ├── registry.json # 패키지 인덱스
375
+ │ ├── string_utils/1.0.0/src/
376
+ │ ├── collections/1.0.0/src/
377
+ │ ├── datetime/1.0.0/src/
378
+ │ └── db_orm/1.0.0/src/
379
+
380
+ ├── examples/ # 샘플 코드
381
+ │ ├── hello.fl
382
+ │ ├── async.fl
383
+ │ ├── db_example.fl
384
+ │ └── ...
385
+
386
+ └── dist/ # 컴파일된 JavaScript (npm run build)
387
+ ```
388
+
389
+ ---
390
+
391
+ ## 🏗️ 아키텍처
392
+
393
+ ```
394
+ ┌─────────────────────────────────────────────────┐
395
+ │ FreeLang 전체 스택 │
396
+ ├─────────────────────────────────────────────────┤
397
+ │ │
398
+ │ ┌──────────────────────────────────────────┐ │
399
+ │ │ Application Layer │ │
400
+ │ │ (API, GraphQL, CLI, WebSocket, etc) │ │
401
+ │ └──────────────────────────────────────────┘ │
402
+ │ ↓ │
403
+ │ ┌──────────────────────────────────────────┐ │
404
+ │ │ Infrastructure Layer │ │
405
+ │ │ (HTTP Server, DB Driver, Cache, Stream)│ │
406
+ │ └──────────────────────────────────────────┘ │
407
+ │ ↓ │
408
+ │ ┌──────────────────────────────────────────┐ │
409
+ │ │ Core/StdLib Layer │ │
410
+ │ │ (async, error, types, json, fs, etc) │ │
411
+ │ └──────────────────────────────────────────┘ │
412
+ │ ↓ │
413
+ │ ┌──────────────────────────────────────────┐ │
414
+ │ │ Type System & Semantics │ │
415
+ │ │ (SPEC_04~13: 형식 명세) │ │
416
+ │ └──────────────────────────────────────────┘ │
417
+ │ ↓ │
418
+ │ ┌──────────────────────────────────────────┐ │
419
+ │ │ FreeLang Compiler │ │
420
+ │ │ (Lexer → Parser → TypeChecker → ISAGen) │ │
421
+ │ └──────────────────────────────────────────┘ │
422
+ │ ↓ │
423
+ │ ┌──────────────────────────────────────────┐ │
424
+ │ │ ISA v1.0 (Instruction Set) │ │
425
+ │ │ (22개 명령어: ADD, CALL, JMP, etc) │ │
426
+ │ └──────────────────────────────────────────┘ │
427
+ │ ↓ │
428
+ │ ┌──────────────────────────────────────────┐ │
429
+ │ │ C VM (단일 런타임) │ │
430
+ │ │ (main_extended.c + 확장) │ │
431
+ │ └──────────────────────────────────────────┘ │
432
+ │ ↓ │
433
+ │ ┌──────────────────────────────────────────┐ │
434
+ │ │ Machine Code / Native Execution │ │
435
+ │ └──────────────────────────────────────────┘ │
436
+ │ │
437
+ └─────────────────────────────────────────────────┘
438
+ ```
439
+
440
+ ---
441
+
442
+ ---
443
+
444
+ ## 🔄 최근 업데이트 (2026-04-01)
445
+
446
+ ```
447
+ 4e00fb2 feat: YAML 파싱 + 타입 매핑 ORM 확장
448
+ c9f677a feat: v4.3 완전 업그레이드 (A-E 단계 완성)
449
+ ```
450
+
451
+ ---
452
+
453
+ ## 🎖️ 버전 히스토리
454
+
455
+ | 버전 | 릴리스 | 하이라이트 |
456
+ |------|--------|-----------|
457
+ | **v4.3** | 2026-04-01 | 성능 최적화, 20+ 라이브러리 함수, 패키지 매니저, 웹 REPL, YAML, ORM |
458
+ | **v4.2** | 2026-03-31 | SQLite/PostgreSQL/MySQL DB 지원, Django 통합, Gogs Webhook |
459
+ | **v4.1** | 2026-03-31 | REPL, 표준 라이브러리, 마이그레이션 지원 |
460
+ | **v1.0-stable** | 2026-03-07 | 코어 언어 완성 (213 테스트) |
461
+
462
+ ---
463
+
464
+ ## 🎯 다음 단계
465
+
466
+ - [ ] 더 많은 표준 라이브러리 함수 추가
467
+ - [ ] GraphQL 지원
468
+ - [ ] 성능 프로파일링 & 최적화
469
+ - [ ] 공식 문서 작성
470
+ - [ ] 커뮤니티 예제 모음
471
+
472
+ ---
473
+
474
+ ## 📖 샘플 코드
475
+
476
+ ### Hello World
477
+ ```freelang
478
+ println("Hello, FreeLang!")
479
+ ```
480
+
481
+ ### 패키지 사용
482
+ ```freelang
483
+ import datetime from "datetime"
484
+
485
+ var now = datetime::now()
486
+ println(datetime::format_date(now, "YYYY-MM-DD"))
487
+ ```
488
+
489
+ ### 데이터베이스
490
+ ```freelang
491
+ fn main() -> () {
492
+ var db = sqlite_open("app.db")
493
+
494
+ // 자동 마이그레이션
495
+ sqlite_execute(db, "CREATE TABLE IF NOT EXISTS users (id INTEGER, name TEXT)", [])
496
+
497
+ // 삽입
498
+ db_insert(db, "users", ["id", "name"], [1, "Alice"])
499
+
500
+ // 조회
501
+ match db_find_one(db, "users", "id = ?", [1]) {
502
+ case Ok(user) -> println(user),
503
+ case Err(e) -> println(e)
504
+ }
505
+
506
+ sqlite_close(db)
507
+ }
508
+
509
+ main()
510
+ ```
511
+
512
+ ### 웹 서버 (예정)
513
+ ```freelang
514
+ async fn handle_request(req: Request) -> Response {
515
+ Response {
516
+ status: 200,
517
+ body: "Hello from FreeLang!"
518
+ }
519
+ }
520
+
521
+ // 웹 서버 시작 (아직 미지원, 향후 추가 예정)
522
+ // http_server(3000, handle_request)
523
+ ```
524
+
525
+ ---
526
+
527
+ ## ✨ 주요 특징
528
+
529
+ ✅ **완전한 정적 타입 시스템** - 런타임 에러 최소화
530
+ ✅ **고성능 VM** - 최적화된 바이트코드 실행 (~7초 전체 테스트)
531
+ ✅ **풍부한 표준 라이브러리** - 111개 빌트인 함수 + 표준 라이브러리
532
+ ✅ **패키지 매니저** - npm 같은 의존성 관리
533
+ ✅ **웹 REPL** - 브라우저에서 바로 코드 작성 및 실행
534
+ ✅ **VS Code 지원** - 신택스 하이라이팅, 스니펫
535
+ ✅ **다중 DB 지원** - SQLite, PostgreSQL, MySQL
536
+ ✅ **마이그레이션 시스템** - 안전한 스키마 변경
537
+
538
+ ---
539
+
540
+ ## 🤝 기여 방법
541
+
542
+ 버그 리포트, 기능 요청, PR은 [Gogs 저장소](https://gogs.dclub.kr/kim/freelang-v4)에서 환영합니다.
543
+
544
+ ---
545
+
546
+ **Last Updated**: 2026-04-01
547
+ **Status**: ✅ v4.3 RELEASED
548
+ **License**: MIT