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
@@ -0,0 +1,651 @@
1
+ # 📚 FreeLang v4 - 10단계 학습 가이드
2
+
3
+ **총 학습 시간: 20시간**
4
+ - 초급: 8시간 (Step 1-4)
5
+ - 중급: 6시간 (Step 5-7)
6
+ - 고급: 6시간 (Step 8-10)
7
+
8
+ ---
9
+
10
+ ## 🎯 학습 목표
11
+
12
+ | Step | 제목 | 난이도 | 시간 | 목표 |
13
+ |------|------|--------|------|------|
14
+ | 1 | 언어 기초 | ⭐ | 2h | 변수, 타입 이해 |
15
+ | 2 | 함수와 제어 흐름 | ⭐ | 2h | 로직 구성 |
16
+ | 3 | 배열과 구조체 | ⭐⭐ | 2h | 데이터 구조 |
17
+ | 4 | 에러 처리 | ⭐⭐ | 2h | 안정성 |
18
+ | 5 | 함수형 프로그래밍 | ⭐⭐ | 2h | 고급 기법 |
19
+ | 6 | 모듈과 임포트 | ⭐⭐ | 2h | 코드 구조화 |
20
+ | 7 | 메모리 관리 | ⭐⭐⭐ | 2h | 성능 최적화 |
21
+ | 8 | 병렬 처리 | ⭐⭐⭐ | 2h | 동시성 |
22
+ | 9 | 분산 시스템 | ⭐⭐⭐⭐ | 2h | 확장성 |
23
+ | 10 | 실전 프로젝트 | ⭐⭐⭐⭐ | 2h | 종합 응용 |
24
+
25
+ ---
26
+
27
+ ## 📖 Step 1: 언어 기초 (2시간)
28
+
29
+ ### 학습 내용
30
+ - 변수 선언과 타입
31
+ - 기본 데이터 타입
32
+ - 입출력 (println)
33
+
34
+ ### 코드 샘플
35
+
36
+ ```freelang
37
+ // 변수 선언
38
+ let name = "Alice"
39
+ let age = 30
40
+ let score = 95.5
41
+ let active = true
42
+
43
+ // 타입 명시
44
+ let x: i32 = 42
45
+ let message: str = "Hello"
46
+ let values: [i32] = [1, 2, 3]
47
+
48
+ // 출력
49
+ println(name)
50
+ println(str(age))
51
+ println(str(score))
52
+ ```
53
+
54
+ ### 실습 과제
55
+
56
+ **과제 1**: 개인 정보 출력
57
+ ```freelang
58
+ // name, age, email, phone을 변수로 선언하고 출력하세요
59
+ ```
60
+
61
+ **과제 2**: 타입 변환
62
+ ```freelang
63
+ let num_str = "42"
64
+ // 문자열을 숫자로 변환해서 제곱을 계산하세요
65
+ ```
66
+
67
+ ### 검증
68
+
69
+ ```bash
70
+ node dist/vm.js step1-practice.fl
71
+ ```
72
+
73
+ ---
74
+
75
+ ## 📖 Step 2: 함수와 제어 흐름 (2시간)
76
+
77
+ ### 학습 내용
78
+ - 함수 정의와 호출
79
+ - if/else 조건문
80
+ - while/for 반복문
81
+
82
+ ### 코드 샘플
83
+
84
+ ```freelang
85
+ // 함수 정의
86
+ fn greet(name: str) -> str {
87
+ "Hello, " + name
88
+ }
89
+
90
+ fn add(a: i32, b: i32) -> i32 {
91
+ a + b
92
+ }
93
+
94
+ fn factorial(n: i32) -> i32 {
95
+ if n <= 1 {
96
+ 1
97
+ } else {
98
+ n * factorial(n - 1)
99
+ }
100
+ }
101
+
102
+ // 반복문
103
+ fn sum_range(start: i32, end: i32) -> i32 {
104
+ let sum = 0
105
+ let i = start
106
+ while i <= end {
107
+ sum = sum + i
108
+ i = i + 1
109
+ }
110
+ sum
111
+ }
112
+
113
+ fn print_numbers(n: i32) -> void {
114
+ for i in range(1, n) {
115
+ println(str(i))
116
+ }
117
+ }
118
+ ```
119
+
120
+ ### 실습 과제
121
+
122
+ **과제 1**: 간단한 함수
123
+ ```freelang
124
+ // 두 수를 입력받아 큰 수를 반환하는 max() 함수 작성
125
+ ```
126
+
127
+ **과제 2**: 반복 계산
128
+ ```freelang
129
+ // 1부터 n까지의 합을 계산하는 함수 작성
130
+ ```
131
+
132
+ **과제 3**: 조건 분기
133
+ ```freelang
134
+ // 성적을 입력받아 학점을 반환하는 함수 작성
135
+ // 90-100: A, 80-89: B, 70-79: C
136
+ ```
137
+
138
+ ---
139
+
140
+ ## 📖 Step 3: 배열과 구조체 (2시간)
141
+
142
+ ### 학습 내용
143
+ - 배열 선언과 조작
144
+ - 배열 메서드
145
+ - 구조체 정의와 사용
146
+
147
+ ### 코드 샘플
148
+
149
+ ```freelang
150
+ // 배열
151
+ let numbers = [1, 2, 3, 4, 5]
152
+ numbers.push(6)
153
+ let first = numbers[0]
154
+ let length = numbers.length()
155
+
156
+ // 배열 순회
157
+ for num in numbers {
158
+ println(str(num))
159
+ }
160
+
161
+ // 구조체
162
+ struct Person {
163
+ name: str,
164
+ age: i32,
165
+ email: str
166
+ }
167
+
168
+ let alice = Person("Alice", 30, "alice@example.com")
169
+ println(alice.name)
170
+ println(str(alice.age))
171
+
172
+ // 구조체 배열
173
+ let people = [
174
+ Person("Alice", 30, "alice@example.com"),
175
+ Person("Bob", 25, "bob@example.com"),
176
+ Person("Charlie", 35, "charlie@example.com")
177
+ ]
178
+
179
+ for person in people {
180
+ println(person.name)
181
+ }
182
+ ```
183
+
184
+ ### 실습 과제
185
+
186
+ **과제 1**: 학생 정보 관리
187
+ ```freelang
188
+ struct Student {
189
+ name: str,
190
+ grade: i32,
191
+ score: i32
192
+ }
193
+
194
+ // 학생 3명을 배열에 저장하고 평균 점수 계산
195
+ ```
196
+
197
+ **과제 2**: 배열 필터링
198
+ ```freelang
199
+ // 숫자 배열에서 10보다 큰 수만 출력
200
+ ```
201
+
202
+ ---
203
+
204
+ ## 📖 Step 4: 에러 처리 (2시간)
205
+
206
+ ### 학습 내용
207
+ - Result와 Option 타입
208
+ - match 표현식
209
+ - 에러 전파
210
+
211
+ ### 코드 샘플
212
+
213
+ ```freelang
214
+ // Option 타입
215
+ fn find_user(users: [str], name: str) -> Option(i32) {
216
+ for i in range(0, users.length()) {
217
+ if users[i] == name {
218
+ return Some(i)
219
+ }
220
+ }
221
+ None
222
+ }
223
+
224
+ // Result 타입
225
+ fn parse_age(age_str: str) -> Result(i32, str) {
226
+ match parse_int(age_str) {
227
+ case Ok(age) -> {
228
+ if age >= 0 && age <= 150 {
229
+ Ok(age)
230
+ } else {
231
+ Err("Age out of range")
232
+ }
233
+ },
234
+ case Err(e) -> Err(e)
235
+ }
236
+ }
237
+
238
+ // match 패턴 매칭
239
+ fn process_age(age_str: str) -> void {
240
+ match parse_age(age_str) {
241
+ case Ok(age) -> {
242
+ println("Valid age: " + str(age))
243
+ },
244
+ case Err(error) -> {
245
+ println("Error: " + error)
246
+ }
247
+ }
248
+ }
249
+ ```
250
+
251
+ ### 실습 과제
252
+
253
+ **과제 1**: 사용자 검색
254
+ ```freelang
255
+ // 사용자 목록에서 특정 사용자를 찾는 함수 (Option 반환)
256
+ ```
257
+
258
+ **과제 2**: 입력 검증
259
+ ```freelang
260
+ // 이메일 형식을 검증하는 함수 (Result 반환)
261
+ ```
262
+
263
+ ---
264
+
265
+ ## 📖 Step 5: 함수형 프로그래밍 (2시간)
266
+
267
+ ### 학습 내용
268
+ - 고차 함수 (Higher-order functions)
269
+ - 클로저와 람다
270
+ - fold, map, filter
271
+
272
+ ### 코드 샘플
273
+
274
+ ```freelang
275
+ // 고차 함수
276
+ fn apply_twice(fn: fn(i32) -> i32, x: i32) -> i32 {
277
+ fn(fn(x))
278
+ }
279
+
280
+ fn add_n(n: i32) -> fn(i32) -> i32 {
281
+ fn(x) -> x + n
282
+ }
283
+
284
+ // 클로저
285
+ let add_five = fn(x) -> x + 5
286
+ let result = add_five(10) // 15
287
+
288
+ // fold - 축약
289
+ let numbers = [1, 2, 3, 4, 5]
290
+ let sum = numbers.fold(0, fn(acc, x) -> acc + x)
291
+ let product = numbers.fold(1, fn(acc, x) -> acc * x)
292
+
293
+ // map - 변환
294
+ let doubled = numbers.fold([], fn(acc, x) -> {
295
+ acc.push(x * 2)
296
+ acc
297
+ })
298
+
299
+ // filter - 필터링
300
+ let evens = numbers.fold([], fn(acc, x) -> {
301
+ if x % 2 == 0 {
302
+ acc.push(x)
303
+ acc
304
+ } else {
305
+ acc
306
+ }
307
+ })
308
+ ```
309
+
310
+ ### 실습 과제
311
+
312
+ **과제 1**: 숫자 변환
313
+ ```freelang
314
+ // [1, 2, 3, 4, 5]를 fold를 사용해 제곱의 합 계산
315
+ ```
316
+
317
+ **과제 2**: 데이터 필터링
318
+ ```freelang
319
+ // 학생 배열에서 점수 80점 이상만 추출
320
+ ```
321
+
322
+ ---
323
+
324
+ ## 📖 Step 6: 모듈과 임포트 (2시간)
325
+
326
+ ### 학습 내용
327
+ - 모듈 구조
328
+ - import/export
329
+ - 네임스페이스
330
+
331
+ ### 코드 샘플
332
+
333
+ ```freelang
334
+ // math_utils.fl
335
+ export fn add(a: i32, b: i32) -> i32 {
336
+ a + b
337
+ }
338
+
339
+ export fn multiply(a: i32, b: i32) -> i32 {
340
+ a * b
341
+ }
342
+
343
+ // main.fl
344
+ import math_utils
345
+
346
+ fn main() -> void {
347
+ let result = math_utils.add(5, 3)
348
+ println(str(result))
349
+ }
350
+ ```
351
+
352
+ ### 실습 과제
353
+
354
+ **과제 1**: 유틸리티 모듈
355
+ ```freelang
356
+ // string_utils.fl 모듈 작성
357
+ // capitalize, to_upper, to_lower 함수 포함
358
+ ```
359
+
360
+ ---
361
+
362
+ ## 📖 Step 7: 메모리 관리 (2시간)
363
+
364
+ ### 학습 내용
365
+ - 메모리 할당과 해제
366
+ - 가비지 컬렉션
367
+ - 메모리 최적화
368
+
369
+ ### 코드 샘플
370
+
371
+ ```freelang
372
+ // 메모리 사용
373
+ fn process_data(size: i32) -> i32 {
374
+ let data = []
375
+ for i in range(0, size) {
376
+ data.push(i)
377
+ }
378
+ // 함수 종료 시 자동으로 메모리 해제
379
+ data.length()
380
+ }
381
+
382
+ // 메모리 풀
383
+ struct MemoryPool {
384
+ free_blocks: [MemoryBlock],
385
+ allocated: [MemoryBlock]
386
+ }
387
+
388
+ fn allocate(pool: MemoryPool, size: i32) -> MemoryBlock {
389
+ // 재사용 가능한 블록 찾기
390
+ match pool.free_blocks.pop() {
391
+ case Some(block) -> block,
392
+ case None -> MemoryBlock(size, false)
393
+ }
394
+ }
395
+ ```
396
+
397
+ ### 실습 과제
398
+
399
+ **과제 1**: 메모리 추적
400
+ ```freelang
401
+ // 대규모 배열 생성/삭제 시뮬레이션
402
+ ```
403
+
404
+ ---
405
+
406
+ ## 📖 Step 8: 병렬 처리 (2시간)
407
+
408
+ ### 학습 내용
409
+ - WorkerPool
410
+ - 작업 분산
411
+ - 결과 수집
412
+
413
+ ### 코드 샘플
414
+
415
+ ```freelang
416
+ // 워커 풀
417
+ struct WorkerPool {
418
+ workers: [WorkerThread],
419
+ task_queue: [Task]
420
+ }
421
+
422
+ fn worker_pool_new(size: i32) -> WorkerPool {
423
+ let workers = []
424
+ for i in range(0, size) {
425
+ workers.push(WorkerThread(i, TaskQueue()))
426
+ }
427
+ WorkerPool(workers, [])
428
+ }
429
+
430
+ fn worker_pool_process(pool: WorkerPool, task: Task) -> Result {
431
+ // 작업을 워커에 할당
432
+ let worker = pool.workers[task.id % pool.workers.length()]
433
+ worker.enqueue(task)
434
+ Ok("Task submitted")
435
+ }
436
+
437
+ // 병렬 계산
438
+ fn parallel_sum(numbers: [i32], worker_count: i32) -> i32 {
439
+ let pool = worker_pool_new(worker_count)
440
+ let chunk_size = numbers.length() / worker_count
441
+ let results = []
442
+
443
+ for i in range(0, worker_count) {
444
+ let start = i * chunk_size
445
+ let end = if i == worker_count - 1 {
446
+ numbers.length()
447
+ } else {
448
+ (i + 1) * chunk_size
449
+ }
450
+ // 작업 분산
451
+ }
452
+
453
+ // 결과 수집
454
+ 0
455
+ }
456
+ ```
457
+
458
+ ### 실습 과제
459
+
460
+ **과제 1**: 병렬 데이터 처리
461
+ ```freelang
462
+ // 대규모 배열을 4개 워커로 병렬 처리
463
+ ```
464
+
465
+ ---
466
+
467
+ ## 📖 Step 9: 분산 시스템 (2시간)
468
+
469
+ ### 학습 내용
470
+ - 클러스터 관리
471
+ - 작업 분산
472
+ - 장애 조치
473
+
474
+ ### 코드 샘플
475
+
476
+ ```freelang
477
+ // 노드
478
+ struct Node {
479
+ id: str,
480
+ addr: str,
481
+ status: str,
482
+ load: i32
483
+ }
484
+
485
+ // 클러스터
486
+ struct Cluster {
487
+ name: str,
488
+ nodes: [Node],
489
+ leader_id: str,
490
+ mode: str
491
+ }
492
+
493
+ fn cluster_new(name: str) -> Cluster {
494
+ Cluster(name, [], "", "standby")
495
+ }
496
+
497
+ fn cluster_add_node(cluster: Cluster, node: Node) -> Cluster {
498
+ cluster.nodes.push(node)
499
+ cluster
500
+ }
501
+
502
+ fn cluster_dispatch(cluster: Cluster, task: DistributedTask) -> TaskResult {
503
+ let node = cluster.nodes[task.id % cluster.nodes.length()]
504
+ // 라운드로빈 분산
505
+ TaskResult(task.id, node.id, "success", 10)
506
+ }
507
+
508
+ fn cluster_failover(cluster: Cluster, failed_node_id: str) -> Cluster {
509
+ // 장애 노드 제거 및 재조정
510
+ cluster
511
+ }
512
+ ```
513
+
514
+ ### 실습 과제
515
+
516
+ **과제 1**: 분산 작업 시뮬레이션
517
+ ```freelang
518
+ // 10개 작업을 3개 노드로 분산 처리
519
+ // 한 노드가 실패했을 때 동작 확인
520
+ ```
521
+
522
+ ---
523
+
524
+ ## 📖 Step 10: 실전 프로젝트 (2시간)
525
+
526
+ ### 프로젝트 요구사항
527
+
528
+ **프로젝트: 간단한 Task Management 시스템**
529
+
530
+ ```freelang
531
+ struct Task {
532
+ id: str,
533
+ title: str,
534
+ description: str,
535
+ status: str,
536
+ assignee: str,
537
+ priority: i32
538
+ }
539
+
540
+ struct TaskManager {
541
+ tasks: [Task],
542
+ users: [str]
543
+ }
544
+
545
+ fn task_manager_new() -> TaskManager {
546
+ TaskManager([], [])
547
+ }
548
+
549
+ fn create_task(manager: TaskManager, title: str, desc: str) -> Result {
550
+ let task = Task(
551
+ "task_" + str(manager.tasks.length()),
552
+ title,
553
+ desc,
554
+ "todo",
555
+ "",
556
+ 3
557
+ )
558
+ manager.tasks.push(task)
559
+ Ok("Task created")
560
+ }
561
+
562
+ fn assign_task(manager: TaskManager, task_id: str, assignee: str) -> Result {
563
+ // 작업을 사용자에게 할당
564
+ Ok("Task assigned")
565
+ }
566
+
567
+ fn update_status(manager: TaskManager, task_id: str, status: str) -> Result {
568
+ // 작업 상태 업데이트 (todo -> in_progress -> done)
569
+ Ok("Status updated")
570
+ }
571
+
572
+ fn list_tasks(manager: TaskManager) -> [Task] {
573
+ manager.tasks
574
+ }
575
+
576
+ fn get_user_tasks(manager: TaskManager, user: str) -> [Task] {
577
+ // 사용자의 모든 작업 반환
578
+ []
579
+ }
580
+ ```
581
+
582
+ ### 요구사항 체크리스트
583
+
584
+ - [ ] 구조체 정의 (Task, TaskManager)
585
+ - [ ] 함수 8개 이상 구현
586
+ - [ ] 에러 처리 (Result 사용)
587
+ - [ ] 배열 조작
588
+ - [ ] 반복문 활용
589
+ - [ ] 테스트 코드 작성
590
+
591
+ ### 평가 기준
592
+
593
+ | 항목 | 만점 |
594
+ |------|------|
595
+ | 코드 정확성 | 40점 |
596
+ | 에러 처리 | 20점 |
597
+ | 코드 가독성 | 20점 |
598
+ | 테스트 커버리지 | 20점 |
599
+
600
+ ---
601
+
602
+ ## 🎓 학습 팁
603
+
604
+ ### 효과적인 학습 방법
605
+
606
+ 1. **단계별 학습**
607
+ - 각 단계마다 코드 샘플 먼저 읽기
608
+ - 샘플을 직접 입력하고 실행해보기
609
+ - 작은 수정을 가해보기
610
+
611
+ 2. **실습 과제**
612
+ - 과제를 완료한 후 다음 단계로 진행
613
+ - 한 단계에 최소 1시간 이상 투자
614
+ - 막히면 샘플 코드를 다시 참고
615
+
616
+ 3. **프로젝트**
617
+ - Step 10은 모든 개념을 종합
618
+ - 실패를 두려워하지 말기
619
+ - 완벽한 코드보다 동작하는 코드 우선
620
+
621
+ ### 학습 자료
622
+
623
+ - 📖 [API 레퍼런스](api-reference.md)
624
+ - 📊 [언어 완성도](language-completeness.md)
625
+ - 📈 [성능 벤치마크](benchmarks.md)
626
+ - 🏗️ [아키텍처](architecture.md)
627
+
628
+ ---
629
+
630
+ ## 🏆 다음 단계
631
+
632
+ ### 초급 완료 후
633
+ - [x] Step 1-4 완료
634
+ - [ ] 다른 학습자와 코드 공유
635
+ - [ ] 간단한 유틸리티 프로그램 작성
636
+
637
+ ### 중급 완료 후
638
+ - [x] Step 5-7 완료
639
+ - [ ] 오픈소스 프로젝트 참여
640
+ - [ ] 성능 최적화 연구
641
+
642
+ ### 고급 완료 후
643
+ - [x] Step 8-10 완료
644
+ - [ ] 새로운 라이브러리 개발
645
+ - [ ] 커뮤니티에 기여
646
+
647
+ ---
648
+
649
+ **Happy Learning! 🚀**
650
+
651
+ Last Updated: 2026-04-05
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "freelang-v4",
3
+ "version": "4.3.0",
4
+ "description": "FreeLang v4 - AI-First Programming Language with complete Lexer→Parser→Compiler→VM implementation. Parallel processing and distributed systems built-in.",
5
+ "main": "dist/vm.js",
6
+ "types": "dist/types.d.ts",
7
+ "scripts": {
8
+ "build": "tsc",
9
+ "test": "jest",
10
+ "prepublishOnly": "npm run build"
11
+ },
12
+ "repository": {
13
+ "type": "git",
14
+ "url": "https://github.com/kimjindol2025/freelang-langv4.git"
15
+ },
16
+ "homepage": "https://github.com/kimjindol2025/freelang-langv4",
17
+ "bugs": {
18
+ "url": "https://github.com/kimjindol2025/freelang-langv4/issues"
19
+ },
20
+ "keywords": [
21
+ "freelang",
22
+ "programming-language",
23
+ "compiler",
24
+ "vm",
25
+ "interpreter",
26
+ "ai-first",
27
+ "parallel-processing",
28
+ "distributed-systems",
29
+ "lexer",
30
+ "parser",
31
+ "static-typed"
32
+ ],
33
+ "author": "Kim Jin Dol <contact@freelang.dev>",
34
+ "license": "MIT",
35
+ "files": [
36
+ "dist/",
37
+ "src/",
38
+ "v9/",
39
+ "docs/",
40
+ "README.md",
41
+ "LICENSE"
42
+ ],
43
+ "engines": {
44
+ "node": ">=16.0.0"
45
+ },
46
+ "dependencies": {
47
+ "@types/pg": "^8.20.0",
48
+ "express": "^4.18.0",
49
+ "mysql2": "^3.20.0",
50
+ "pg": "^8.20.0",
51
+ "sql.js": "^1.14.1",
52
+ "ws": "^8.14.0"
53
+ },
54
+ "devDependencies": {
55
+ "@types/express": "^4.17.0",
56
+ "@types/jest": "^29.0.0",
57
+ "@types/node": "^20.0.0",
58
+ "@types/sql.js": "^1.4.11",
59
+ "@types/ws": "^8.5.0",
60
+ "jest": "^29.0.0",
61
+ "ts-jest": "^29.0.0",
62
+ "ts-node": "^10.0.0",
63
+ "typescript": "^5.0.0"
64
+ }
65
+ }