vx-toolkit 1.16.2__py3-none-any.whl

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 (77) hide show
  1. vx_toolkit/__init__.py +10 -0
  2. vx_toolkit/_bin/headers/collections/vec.c +8 -0
  3. vx_toolkit/_bin/headers/collections/vec.vxh +2 -0
  4. vx_toolkit/_bin/headers/cpp/greet.cpp +11 -0
  5. vx_toolkit/_bin/headers/cpp/greet.hpp +6 -0
  6. vx_toolkit/_bin/headers/cpp/greet.vxh +4 -0
  7. vx_toolkit/_bin/headers/fmath.c +3 -0
  8. vx_toolkit/_bin/headers/fmath.vxh +5 -0
  9. vx_toolkit/_bin/headers/math.c +6 -0
  10. vx_toolkit/_bin/headers/math.vxh +4 -0
  11. vx_toolkit/_bin/headers/sys.c +9 -0
  12. vx_toolkit/_bin/headers/sys.vxh +3 -0
  13. vx_toolkit/_bin/headers/text.c +17 -0
  14. vx_toolkit/_bin/headers/text.vxh +6 -0
  15. vx_toolkit/_bin/libvxrt.a +0 -0
  16. vx_toolkit/_bin/libvxtidy.dylib +0 -0
  17. vx_toolkit/_bin/std/README.md +90 -0
  18. vx_toolkit/_bin/std/bytes.vx +65 -0
  19. vx_toolkit/_bin/std/char.vx +83 -0
  20. vx_toolkit/_bin/std/collections/hashmap.vx +31 -0
  21. vx_toolkit/_bin/std/collections/linked_list.vx +166 -0
  22. vx_toolkit/_bin/std/collections/mod.vx +8 -0
  23. vx_toolkit/_bin/std/collections/set.vx +102 -0
  24. vx_toolkit/_bin/std/collections/vec.vx +40 -0
  25. vx_toolkit/_bin/std/conv.vx +57 -0
  26. vx_toolkit/_bin/std/error.vx +165 -0
  27. vx_toolkit/_bin/std/io/dir.vx +50 -0
  28. vx_toolkit/_bin/std/io/file.vx +154 -0
  29. vx_toolkit/_bin/std/io/mod.vx +5 -0
  30. vx_toolkit/_bin/std/io/path.vx +105 -0
  31. vx_toolkit/_bin/std/io/stream.vx +82 -0
  32. vx_toolkit/_bin/std/io.vx +6 -0
  33. vx_toolkit/_bin/std/iter.vx +67 -0
  34. vx_toolkit/_bin/std/macros.vx +117 -0
  35. vx_toolkit/_bin/std/math/math.vx +341 -0
  36. vx_toolkit/_bin/std/math/mod.vx +6 -0
  37. vx_toolkit/_bin/std/math/random.vx +104 -0
  38. vx_toolkit/_bin/std/mem/allocator.vx +9 -0
  39. vx_toolkit/_bin/std/mem/arena.vx +41 -0
  40. vx_toolkit/_bin/std/mem/general.vx +35 -0
  41. vx_toolkit/_bin/std/mem/mod.vx +11 -0
  42. vx_toolkit/_bin/std/mem/page.vx +23 -0
  43. vx_toolkit/_bin/std/mod.vx +5 -0
  44. vx_toolkit/_bin/std/option.vx +68 -0
  45. vx_toolkit/_bin/std/prelude.vx +13 -0
  46. vx_toolkit/_bin/std/reflect/mod.vx +129 -0
  47. vx_toolkit/_bin/std/string/codec.vx +146 -0
  48. vx_toolkit/_bin/std/string/core.vx +28 -0
  49. vx_toolkit/_bin/std/string/iter.vx +49 -0
  50. vx_toolkit/_bin/std/string/mod.vx +7 -0
  51. vx_toolkit/_bin/std/string/pattern.vx +84 -0
  52. vx_toolkit/_bin/std/string/util.vx +369 -0
  53. vx_toolkit/_bin/std/sys/coroutine.vx +46 -0
  54. vx_toolkit/_bin/std/sys/datetime.vx +160 -0
  55. vx_toolkit/_bin/std/sys/duration.vx +53 -0
  56. vx_toolkit/_bin/std/sys/env.vx +43 -0
  57. vx_toolkit/_bin/std/sys/mod.vx +10 -0
  58. vx_toolkit/_bin/std/sys/sync.vx +132 -0
  59. vx_toolkit/_bin/std/sys/time.vx +28 -0
  60. vx_toolkit/_bin/std/sys.vx +6 -0
  61. vx_toolkit/_bin/std/tests/run_all.vx +627 -0
  62. vx_toolkit/_bin/std/tests/smoke.vx +4 -0
  63. vx_toolkit/_bin/std/tests/test_collections.vx +42 -0
  64. vx_toolkit/_bin/std/tests/test_string_io.vx +202 -0
  65. vx_toolkit/_bin/vfmt +0 -0
  66. vx_toolkit/_bin/vlnk +0 -0
  67. vx_toolkit/_bin/vmake +0 -0
  68. vx_toolkit/_bin/vmake-lsp +0 -0
  69. vx_toolkit/_bin/vx +0 -0
  70. vx_toolkit/_bin/vxc +0 -0
  71. vx_toolkit/_bin/vxls +0 -0
  72. vx_toolkit/_dispatch.py +121 -0
  73. vx_toolkit-1.16.2.dist-info/METADATA +13 -0
  74. vx_toolkit-1.16.2.dist-info/RECORD +77 -0
  75. vx_toolkit-1.16.2.dist-info/WHEEL +4 -0
  76. vx_toolkit-1.16.2.dist-info/entry_points.txt +8 -0
  77. vx_toolkit-1.16.2.dist-info/licenses/LICENSE +198 -0
@@ -0,0 +1,369 @@
1
+ # ============================================================
2
+ # std::string —— 字符串处理模块
3
+ # 扩展内建字符串操作
4
+ # ============================================================
5
+
6
+ import std.error
7
+ import std.collections.vec
8
+
9
+ # ---- String 工具类(静态方法集合)----
10
+ # 所有方法都是静态的,接收 string 作为首个参数
11
+ class StringUtil:
12
+
13
+ # ========== 基本信息 ==========
14
+
15
+ # 字符串长度
16
+ func size(s: var) -> int:
17
+ return len(s)
18
+
19
+ # 是否为空
20
+ func is_empty(s: var) -> bool:
21
+ if len(s) == 0:
22
+ return true
23
+ return false
24
+
25
+ # ========== 拼接 & 截取 ==========
26
+
27
+ # 字符串拼接(等于使用 + 运算符)
28
+ func concat(a: var, b: var) -> var:
29
+ return a + b
30
+
31
+ # 重复字符串 n 次
32
+ func repeat(s: var, n: int) -> var:
33
+ var result = ""
34
+ var i = 0
35
+ while i < n:
36
+ result = result + s
37
+ i = i + 1
38
+ return result
39
+
40
+ # 截取子串 [start, end)
41
+ func slice(s: var, start: int, end: int) -> var:
42
+ var s_len = len(s)
43
+ if start < 0:
44
+ start = 0
45
+ if end > s_len:
46
+ end = s_len
47
+ if start >= end:
48
+ return ""
49
+
50
+ var result = ""
51
+ var i = start
52
+ while i < end:
53
+ result = result + s[i]
54
+ i = i + 1
55
+ return result
56
+
57
+ # 从 start 到末尾
58
+ func slice_from(s: var, start: int) -> var:
59
+ return StringUtil.slice(s, start, len(s))
60
+
61
+ # 从头到 end
62
+ func slice_to(s: var, end: int) -> var:
63
+ return StringUtil.slice(s, 0, end)
64
+
65
+ # ========== 查找 & 匹配 ==========
66
+
67
+ # 查找子串首次出现位置,-1 表示未找到
68
+ func find(s: var, pattern: var) -> int:
69
+ var s_len = len(s)
70
+ var p_len = len(pattern)
71
+ if p_len == 0:
72
+ return 0
73
+ if p_len > s_len:
74
+ return -1
75
+
76
+ var i = 0
77
+ while i <= s_len - p_len:
78
+ var match = true
79
+ var j = 0
80
+ while j < p_len:
81
+ if s[i + j] != pattern[j]:
82
+ match = false
83
+ j = p_len
84
+ j = j + 1
85
+ if match:
86
+ return i
87
+ i = i + 1
88
+ return -1
89
+
90
+ # 从右侧查找
91
+ func rfind(s: var, pattern: var) -> int:
92
+ var s_len = len(s)
93
+ var p_len = len(pattern)
94
+ if p_len == 0:
95
+ return s_len
96
+ if p_len > s_len:
97
+ return -1
98
+
99
+ var i = s_len - p_len
100
+ while i >= 0:
101
+ var match = true
102
+ var j = 0
103
+ while j < p_len:
104
+ if s[i + j] != pattern[j]:
105
+ match = false
106
+ j = p_len
107
+ j = j + 1
108
+ if match:
109
+ return i
110
+ i = i - 1
111
+ return -1
112
+
113
+ # 是否包含子串
114
+ func contains(s: var, pattern: var) -> bool:
115
+ if StringUtil.find(s, pattern) >= 0:
116
+ return true
117
+ return false
118
+
119
+ # 是否以 prefix 开头
120
+ func starts_with(s: var, prefix: var) -> bool:
121
+ var p_len = len(prefix)
122
+ if p_len > len(s):
123
+ return false
124
+ var i = 0
125
+ while i < p_len:
126
+ if s[i] != prefix[i]:
127
+ return false
128
+ i = i + 1
129
+ return true
130
+
131
+ # 是否以 suffix 结尾
132
+ func ends_with(s: var, suffix: var) -> bool:
133
+ var s_len = len(s)
134
+ var sf_len = len(suffix)
135
+ if sf_len > s_len:
136
+ return false
137
+ var i = 0
138
+ while i < sf_len:
139
+ if s[s_len - sf_len + i] != suffix[i]:
140
+ return false
141
+ i = i + 1
142
+ return true
143
+
144
+ # 子串出现次数
145
+ func count(s: var, pattern: var) -> int:
146
+ var c = 0
147
+ var pos = StringUtil.find(s, pattern)
148
+ while pos >= 0:
149
+ c = c + 1
150
+ s = StringUtil.slice_from(s, pos + len(pattern))
151
+ pos = StringUtil.find(s, pattern)
152
+ return c
153
+
154
+ # ========== 变换 ==========
155
+
156
+ # 替换首次出现的子串
157
+ func replace(s: var, from: var, to: var) -> var:
158
+ var pos = StringUtil.find(s, from)
159
+ if pos < 0:
160
+ return s
161
+ var before = StringUtil.slice_to(s, pos)
162
+ var after = StringUtil.slice_from(s, pos + len(from))
163
+ return before + to + after
164
+
165
+ # 替换所有出现的子串
166
+ func replace_all(s: var, from: var, to: var) -> var:
167
+ var result = ""
168
+ var current = s
169
+ var pos = StringUtil.find(current, from)
170
+ while pos >= 0:
171
+ result = result + StringUtil.slice_to(current, pos) + to
172
+ current = StringUtil.slice_from(current, pos + len(from))
173
+ pos = StringUtil.find(current, from)
174
+ result = result + current
175
+ return result
176
+
177
+ # 去除首尾空白(空格、tab、换行)
178
+ func trim(s: var) -> var:
179
+ return StringUtil.trim_end(StringUtil.trim_start(s))
180
+
181
+ # 去除首部空白
182
+ func trim_start(s: var) -> var:
183
+ var i = 0
184
+ var s_len = len(s)
185
+ while i < s_len:
186
+ var ch = s[i]
187
+ if ch != " ":
188
+ if ch != "\t":
189
+ if ch != "\n":
190
+ if ch != "\r":
191
+ i = s_len
192
+ if i < s_len:
193
+ if ch != " ":
194
+ if ch != "\t":
195
+ if ch != "\n":
196
+ if ch != "\r":
197
+ i = s_len
198
+ else:
199
+ i = i + 1
200
+ return StringUtil.slice_from(s, i)
201
+
202
+ # 去除尾部空白
203
+ func trim_end(s: var) -> var:
204
+ var i = len(s) - 1
205
+ while i >= 0:
206
+ var ch = s[i]
207
+ if ch != " ":
208
+ if ch != "\t":
209
+ if ch != "\n":
210
+ if ch != "\r":
211
+ i = -1
212
+ if i >= 0:
213
+ if ch != " ":
214
+ if ch != "\t":
215
+ if ch != "\n":
216
+ if ch != "\r":
217
+ i = -1
218
+ else:
219
+ i = i - 1
220
+ return StringUtil.slice_to(s, i + 1)
221
+
222
+ # 转换为小写(ASCII)
223
+ func to_lower(s: var) -> var:
224
+ var result = ""
225
+ var i = 0
226
+ var s_len = len(s)
227
+ while i < s_len:
228
+ var ch = s[i]
229
+ # ASCII 'A'~'Z' = 65~90, 'a'~'z' = 97~122
230
+ var code = ch[0]
231
+ if code >= "A"[0]:
232
+ if code <= "Z"[0]:
233
+ # 转为小写:ch + 32
234
+ var lower_code = code - "A"[0] + "a"[0]
235
+ result = result + lower_code
236
+ i = i + 1
237
+ continue
238
+ result = result + ch
239
+ i = i + 1
240
+ return result
241
+
242
+ # 转换为大写(ASCII)
243
+ func to_upper(s: var) -> var:
244
+ var result = ""
245
+ var i = 0
246
+ var s_len = len(s)
247
+ while i < s_len:
248
+ var ch = s[i]
249
+ var code = ch[0]
250
+ if code >= "a"[0]:
251
+ if code <= "z"[0]:
252
+ var upper_code = code - "a"[0] + "A"[0]
253
+ result = result + upper_code
254
+ i = i + 1
255
+ continue
256
+ result = result + ch
257
+ i = i + 1
258
+ return result
259
+
260
+ # 首字母大写
261
+ func capitalize(s: var) -> var:
262
+ if len(s) == 0:
263
+ return ""
264
+ var first = StringUtil.to_upper(StringUtil.slice_to(s, 1))
265
+ var rest = StringUtil.to_lower(StringUtil.slice_from(s, 1))
266
+ return first + rest
267
+
268
+ # ========== 分割 & 连接 ==========
269
+
270
+ # 按分隔符分割
271
+ func split(s: var, delim: var) -> var:
272
+ var result = new Vec()
273
+ var current = s
274
+ var delim_len = len(delim)
275
+ if delim_len == 0:
276
+ # 拆分为单字符
277
+ var i = 0
278
+ while i < len(s):
279
+ result.push(StringUtil.slice(s, i, i + 1))
280
+ i = i + 1
281
+ return result
282
+
283
+ var pos = StringUtil.find(current, delim)
284
+ while pos >= 0:
285
+ var part = StringUtil.slice_to(current, pos)
286
+ result.push(part)
287
+ current = StringUtil.slice_from(current, pos + delim_len)
288
+ pos = StringUtil.find(current, delim)
289
+ result.push(current)
290
+ return result
291
+
292
+ # 按空白分割
293
+ func split_whitespace(s: var) -> var:
294
+ var result = new Vec()
295
+ var current = ""
296
+ var i = 0
297
+ var s_len = len(s)
298
+ while i < s_len:
299
+ var ch = s[i]
300
+ if ch == " ":
301
+ if current != "":
302
+ result.push(current)
303
+ current = ""
304
+ elif ch == "\t":
305
+ if current != "":
306
+ result.push(current)
307
+ current = ""
308
+ elif ch == "\n":
309
+ if current != "":
310
+ result.push(current)
311
+ current = ""
312
+ else:
313
+ current = current + ch
314
+ i = i + 1
315
+ if current != "":
316
+ result.push(current)
317
+ return result
318
+
319
+ # 按行分割
320
+ func lines(s: var) -> var:
321
+ var result = new Vec()
322
+ var current = ""
323
+ var i = 0
324
+ var s_len = len(s)
325
+ while i < s_len:
326
+ var ch = s[i]
327
+ if ch == "\n":
328
+ result.push(current)
329
+ current = ""
330
+ elif ch == "\r":
331
+ # 跳过 \r
332
+ if i + 1 < s_len:
333
+ if s[i + 1] == "\n":
334
+ i = i + 1
335
+ result.push(current)
336
+ current = ""
337
+ else:
338
+ current = current + ch
339
+ i = i + 1
340
+ # 最后一行(既使是空行)
341
+ result.push(current)
342
+ return result
343
+
344
+ # 用分隔符连接字符串数组
345
+ func join(strings: var, sep: var) -> var:
346
+ var result = ""
347
+ var i = 0
348
+ var n = len(strings)
349
+ while i < n:
350
+ if i > 0:
351
+ result = result + sep
352
+ result = result + strings[i]
353
+ i = i + 1
354
+ return result
355
+
356
+ # ========== 字符访问 ==========
357
+
358
+ # 安全字符访问(返回单字符字符串)
359
+ func char_at(s: var, idx: int) -> var:
360
+ var s_len = len(s)
361
+ if idx < 0:
362
+ return Result.err(error.value_error("char_at: index " + idx + " < 0"))
363
+ if idx >= s_len:
364
+ return Result.err(error.value_error("char_at: index " + idx + " out of bounds"))
365
+ return Result.ok(StringUtil.slice(s, idx, idx + 1))
366
+
367
+ # 获取所有字符列表
368
+ func chars(s: var) -> var:
369
+ return StringUtil.split(s, "")
@@ -0,0 +1,46 @@
1
+ # ============================================================
2
+ # std::sys::coroutine —— 协程(用户态轻量级并发)
3
+ # 第一版:占位定义,等待 VM 层支持
4
+ # ============================================================
5
+
6
+ import std.error
7
+
8
+ # ---- CoroutineState 枚举 ----
9
+ enum CoroutineState:
10
+ Ready = 0
11
+ Running = 1
12
+ Suspended = 2
13
+ Done = 3
14
+
15
+ # ---- Coroutine 类:协程句柄 ----
16
+ class Coroutine:
17
+ id: int
18
+ state: int
19
+
20
+ # 创建协程
21
+ func spawn(func: var) -> var:
22
+ # TODO: 需要 VM 层 CallFrame 保存/恢复机制
23
+ var co = new Coroutine()
24
+ co.id = 0
25
+ co.state = CoroutineState.Ready
26
+ return co
27
+
28
+ # 恢复执行
29
+ func resume() -> var:
30
+ # TODO: 需要 VM 支持
31
+ return Result.err(error.runtime_error("Coroutine.resume: not implemented"))
32
+
33
+ # 让出执行权
34
+ func yield_co():
35
+ # TODO: 需要 VM 支持
36
+ pass
37
+
38
+ # 是否完成
39
+ func is_done() -> bool:
40
+ if self.state == CoroutineState.Done:
41
+ return true
42
+ return false
43
+
44
+ # 获取协程 ID
45
+ func get_id() -> int:
46
+ return self.id
@@ -0,0 +1,160 @@
1
+ # ============================================================
2
+ # std::sys::datetime —— 日期时间
3
+ # ============================================================
4
+
5
+ import std.error
6
+ import std.math
7
+ import std.collections.vec
8
+
9
+ # ---- DateTime 类:日期时间表示 ----
10
+ class DateTime:
11
+ year: int
12
+ month: int
13
+ day: int
14
+ hour: int
15
+ minute: int
16
+ second: int
17
+ nanos: int
18
+ weekday: int # 0=Sunday ... 6=Saturday
19
+
20
+ # 请求当前日期时间(需要 VM 支持的系统时钟)
21
+ func now() -> var:
22
+ # TODO: 需要 VM 内建 system_time 指令
23
+ var dt = new DateTime()
24
+ dt.year = 1970
25
+ dt.month = 1
26
+ dt.day = 1
27
+ dt.hour = 0
28
+ dt.minute = 0
29
+ dt.second = 0
30
+ dt.nanos = 0
31
+ dt.weekday = 4 # 1970-01-01 是周四
32
+ return dt
33
+
34
+ # 从 Unix 时间戳创建
35
+ func from_timestamp(ts: int) -> var:
36
+ # 使用公历算法将 Unix 时间戳转为日期
37
+ var dt = new DateTime()
38
+
39
+ # 先转为从 1970-01-01 的天数
40
+ var days = ts / 86400
41
+ var secs_remain = ts % 86400
42
+ if secs_remain < 0:
43
+ secs_remain = secs_remain + 86400
44
+ days = days - 1
45
+
46
+ # 计算时分秒
47
+ dt.hour = secs_remain / 3600
48
+ secs_remain = secs_remain % 3600
49
+ dt.minute = secs_remain / 60
50
+ dt.second = secs_remain % 60
51
+ dt.nanos = 0
52
+
53
+ # 从 Epoch 1970-01-01 计算年月日
54
+ # 使用偏移算法:向前走到目标天数
55
+ var remaining_days = days
56
+ dt.year = 1970
57
+ dt.month = 1
58
+
59
+ # 按年推进
60
+ while remaining_days >= 365:
61
+ var days_in_this_year = 365
62
+ if DateTime._is_leap(dt.year):
63
+ days_in_this_year = 366
64
+ if remaining_days >= days_in_this_year:
65
+ remaining_days = remaining_days - days_in_this_year
66
+ dt.year = dt.year + 1
67
+ else:
68
+ break
69
+
70
+ # 按月推进
71
+ var days_in_months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
72
+ if DateTime._is_leap(dt.year):
73
+ days_in_months[1] = 29
74
+
75
+ var m = 0
76
+ while m < 12:
77
+ if remaining_days < days_in_months[m]:
78
+ dt.month = m + 1
79
+ dt.day = remaining_days + 1
80
+ break
81
+ remaining_days = remaining_days - days_in_months[m]
82
+ m = m + 1
83
+
84
+ # 计算星期几(Zeller 算法简化)
85
+ dt.weekday = DateTime._calc_weekday(dt.year, dt.month, dt.day)
86
+
87
+ return dt
88
+
89
+ # 转换回 Unix 时间戳
90
+ func to_timestamp() -> int:
91
+ var days = 0
92
+ # 从 1970 到当前年的天数
93
+ var y = 1970
94
+ while y < self.year:
95
+ days = days + 365
96
+ if DateTime._is_leap(y):
97
+ days = days + 1
98
+ y = y + 1
99
+
100
+ # 当年已过月份的天数
101
+ var days_in_months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
102
+ if DateTime._is_leap(self.year):
103
+ days_in_months[1] = 29
104
+
105
+ var m = 0
106
+ while m < self.month - 1:
107
+ days = days + days_in_months[m]
108
+ m = m + 1
109
+
110
+ days = days + (self.day - 1)
111
+
112
+ var total_secs = days * 86400
113
+ total_secs = total_secs + self.hour * 3600
114
+ total_secs = total_secs + self.minute * 60
115
+ total_secs = total_secs + self.second
116
+
117
+ return total_secs
118
+
119
+ # 格式化输出(ISO 8601 简化版)
120
+ func to_string() -> var:
121
+ return self.to_iso8601()
122
+
123
+ # ISO 8601 格式
124
+ func to_iso8601() -> var:
125
+ var s = ""
126
+ s = s + self.year
127
+ s = s + "-" + DateTime._pad2(self.month)
128
+ s = s + "-" + DateTime._pad2(self.day)
129
+ s = s + "T" + DateTime._pad2(self.hour)
130
+ s = s + ":" + DateTime._pad2(self.minute)
131
+ s = s + ":" + DateTime._pad2(self.second)
132
+ return s
133
+
134
+ # 填充两位数
135
+ func _pad2(n: int) -> var:
136
+ if n < 10:
137
+ return "0" + n
138
+ return n
139
+
140
+ # 判断闰年
141
+ func _is_leap(year: int) -> bool:
142
+ if year % 400 == 0:
143
+ return true
144
+ if year % 100 == 0:
145
+ return false
146
+ if year % 4 == 0:
147
+ return true
148
+ return false
149
+
150
+ # 计算星期几(Zeller 公式,返回 0=Sunday)
151
+ func _calc_weekday(year: int, month: int, day: int) -> int:
152
+ if month < 3:
153
+ month = month + 12
154
+ year = year - 1
155
+ var k = year % 100
156
+ var j = year / 100
157
+ var h = (day + (13 * (month + 1)) / 5 + k + k / 4 + j / 4 - 2 * j) % 7
158
+ if h < 0:
159
+ h = h + 7
160
+ return h
@@ -0,0 +1,53 @@
1
+ # ============================================================
2
+ # std::sys::duration —— 时间间隔
3
+ # ============================================================
4
+
5
+ # ---- Duration 类:时间段 ----
6
+ class Duration:
7
+ secs: int
8
+ nanos: int
9
+
10
+ # 从秒创建
11
+ func from_secs(s: float) -> var:
12
+ var dur = new Duration()
13
+ dur.secs = s
14
+ var frac = s - dur.secs
15
+ dur.nanos = frac * 1000000000.0
16
+ return dur
17
+
18
+ # 从毫秒创建
19
+ func from_millis(ms: int) -> var:
20
+ var dur = new Duration()
21
+ dur.secs = ms / 1000
22
+ dur.nanos = (ms % 1000) * 1000000
23
+ return dur
24
+
25
+ # 从微秒创建
26
+ func from_micros(us: int) -> var:
27
+ var dur = new Duration()
28
+ dur.secs = us / 1000000
29
+ dur.nanos = (us % 1000000) * 1000
30
+ return dur
31
+
32
+ # 从纳秒创建
33
+ func from_nanos(ns: int) -> var:
34
+ var dur = new Duration()
35
+ dur.secs = ns / 1000000000
36
+ dur.nanos = ns % 1000000000
37
+ return dur
38
+
39
+ # 转为秒(浮点)
40
+ func as_secs() -> float:
41
+ return self.secs + self.nanos / 1000000000.0
42
+
43
+ # 转为毫秒
44
+ func as_millis() -> int:
45
+ return self.secs * 1000 + self.nanos / 1000000
46
+
47
+ # 转为微秒
48
+ func as_micros() -> int:
49
+ return self.secs * 1000000 + self.nanos / 1000
50
+
51
+ # 转为纳秒
52
+ func as_nanos() -> int:
53
+ return self.secs * 1000000000 + self.nanos
@@ -0,0 +1,43 @@
1
+ # ============================================================
2
+ # std::sys::env —— 环境变量与进程控制
3
+ # ============================================================
4
+
5
+ import std.error
6
+ import std.collections.vec
7
+
8
+ # ---- Env 类:环境和进程工具(静态方法)----
9
+ class Env:
10
+ # 获取命令行参数(封装 VM 内建 sys_argv)
11
+ func args() -> var:
12
+ var raw = sys_argv()
13
+ if raw == nil:
14
+ return []
15
+ return raw
16
+
17
+ # 获取环境变量(占位)
18
+ func get(key: var) -> var:
19
+ # TODO: 需要 VM 内建 get_env 指令
20
+ return nil
21
+
22
+ # 设置环境变量(占位)
23
+ func set(key: var, val: var):
24
+ # TODO: 需要 VM 内建 set_env 指令
25
+ pass
26
+
27
+ # 删除环境变量(占位)
28
+ func remove(key: var):
29
+ # TODO: 需要 VM 内建 unset_env 指令
30
+ pass
31
+
32
+ # 退出进程
33
+ func exit(code: int):
34
+ # TODO: 需要 VM 内建 exit 指令
35
+ out("[EXIT] code=" + code)
36
+
37
+ # 获取当前工作目录(占位)
38
+ func current_dir() -> var:
39
+ return Result.err(error.system_error("Env.current_dir: not implemented"))
40
+
41
+ # 获取临时目录(占位)
42
+ func temp_dir() -> var:
43
+ return "/tmp"
@@ -0,0 +1,10 @@
1
+ # ============================================================
2
+ # std::sys —— 模块入口
3
+ # ============================================================
4
+
5
+ import std.sys.time
6
+ import std.sys.duration
7
+ import std.sys.datetime
8
+ import std.sys.coroutine
9
+ import std.sys.sync
10
+ import std.sys.env