@grain/stdlib 0.6.6 → 0.7.1

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 (137) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/LICENSE +1 -1
  3. package/README.md +2 -2
  4. package/array.gr +55 -7
  5. package/array.md +606 -560
  6. package/bigint.md +228 -228
  7. package/buffer.gr +85 -53
  8. package/buffer.md +442 -319
  9. package/bytes.gr +112 -35
  10. package/bytes.md +299 -219
  11. package/char.gr +201 -99
  12. package/char.md +447 -120
  13. package/exception.gr +11 -11
  14. package/exception.md +29 -4
  15. package/float32.gr +327 -3
  16. package/float32.md +698 -111
  17. package/float64.gr +320 -3
  18. package/float64.md +698 -111
  19. package/fs.gr +1082 -0
  20. package/fs.md +630 -0
  21. package/hash.gr +142 -88
  22. package/hash.md +105 -17
  23. package/int16.md +178 -178
  24. package/int32.gr +26 -5
  25. package/int32.md +266 -231
  26. package/int64.gr +27 -2
  27. package/int64.md +266 -231
  28. package/int8.md +178 -178
  29. package/json.gr +366 -51
  30. package/json.md +431 -15
  31. package/list.gr +328 -31
  32. package/list.md +759 -336
  33. package/map.gr +20 -12
  34. package/map.md +266 -260
  35. package/marshal.gr +41 -40
  36. package/marshal.md +14 -14
  37. package/number.gr +278 -35
  38. package/number.md +688 -269
  39. package/option.md +162 -162
  40. package/package.json +5 -3
  41. package/path.gr +48 -0
  42. package/path.md +180 -89
  43. package/pervasives.gr +2 -2
  44. package/pervasives.md +275 -275
  45. package/priorityqueue.gr +7 -7
  46. package/priorityqueue.md +131 -131
  47. package/queue.gr +183 -29
  48. package/queue.md +404 -148
  49. package/random.md +43 -43
  50. package/range.gr +4 -4
  51. package/range.md +42 -42
  52. package/rational.md +123 -123
  53. package/regex.gr +52 -51
  54. package/regex.md +102 -102
  55. package/result.md +118 -118
  56. package/runtime/atof/common.md +39 -39
  57. package/runtime/atof/decimal.gr +6 -6
  58. package/runtime/atof/decimal.md +14 -14
  59. package/runtime/atof/lemire.gr +5 -5
  60. package/runtime/atof/lemire.md +1 -1
  61. package/runtime/atof/parse.gr +16 -16
  62. package/runtime/atof/parse.md +2 -2
  63. package/runtime/atof/slow.md +1 -1
  64. package/runtime/atof/table.md +2 -2
  65. package/runtime/atoi/parse.gr +3 -3
  66. package/runtime/atoi/parse.md +1 -1
  67. package/runtime/bigint.gr +15 -47
  68. package/runtime/bigint.md +54 -60
  69. package/runtime/compare.gr +2 -2
  70. package/runtime/compare.md +8 -8
  71. package/runtime/dataStructures.md +211 -211
  72. package/runtime/debugPrint.gr +4 -1
  73. package/runtime/debugPrint.md +9 -9
  74. package/runtime/equal.gr +99 -77
  75. package/runtime/equal.md +8 -8
  76. package/runtime/exception.gr +62 -82
  77. package/runtime/exception.md +62 -11
  78. package/runtime/gc.gr +39 -45
  79. package/runtime/gc.md +4 -4
  80. package/runtime/malloc.gr +7 -7
  81. package/runtime/malloc.md +13 -13
  82. package/runtime/math/kernel/cos.gr +70 -0
  83. package/runtime/math/kernel/cos.md +14 -0
  84. package/runtime/math/kernel/sin.gr +65 -0
  85. package/runtime/math/kernel/sin.md +14 -0
  86. package/runtime/math/kernel/tan.gr +136 -0
  87. package/runtime/math/kernel/tan.md +14 -0
  88. package/runtime/math/rempio2.gr +244 -0
  89. package/runtime/math/rempio2.md +14 -0
  90. package/runtime/math/trig.gr +130 -0
  91. package/runtime/math/trig.md +28 -0
  92. package/runtime/math/umuldi.gr +26 -0
  93. package/runtime/math/umuldi.md +14 -0
  94. package/runtime/numberUtils.gr +29 -29
  95. package/runtime/numberUtils.md +12 -12
  96. package/runtime/numbers.gr +373 -381
  97. package/runtime/numbers.md +348 -342
  98. package/runtime/string.gr +37 -105
  99. package/runtime/string.md +20 -26
  100. package/runtime/unsafe/constants.md +24 -24
  101. package/runtime/unsafe/conv.md +19 -19
  102. package/runtime/unsafe/memory.gr +24 -20
  103. package/runtime/unsafe/memory.md +27 -7
  104. package/runtime/unsafe/offsets.gr +36 -0
  105. package/runtime/unsafe/offsets.md +88 -0
  106. package/runtime/unsafe/panic.gr +28 -0
  107. package/runtime/unsafe/panic.md +14 -0
  108. package/runtime/unsafe/tags.md +32 -32
  109. package/runtime/unsafe/wasmf32.md +28 -28
  110. package/runtime/unsafe/wasmf64.md +28 -28
  111. package/runtime/unsafe/wasmi32.md +47 -47
  112. package/runtime/unsafe/wasmi64.md +50 -50
  113. package/runtime/utf8.gr +189 -0
  114. package/runtime/utf8.md +117 -0
  115. package/runtime/wasi.gr +4 -2
  116. package/runtime/wasi.md +147 -147
  117. package/set.gr +18 -11
  118. package/set.md +253 -247
  119. package/stack.gr +171 -2
  120. package/stack.md +371 -89
  121. package/string.gr +352 -557
  122. package/string.md +298 -255
  123. package/uint16.md +170 -170
  124. package/uint32.gr +25 -4
  125. package/uint32.md +249 -214
  126. package/uint64.gr +25 -5
  127. package/uint64.md +249 -214
  128. package/uint8.md +170 -170
  129. package/uri.gr +57 -53
  130. package/uri.md +88 -89
  131. package/wasi/file.gr +67 -59
  132. package/wasi/file.md +308 -308
  133. package/wasi/process.md +26 -26
  134. package/wasi/random.md +12 -12
  135. package/wasi/time.md +16 -16
  136. package/runtime/utils/printing.gr +0 -60
  137. package/runtime/utils/printing.md +0 -26
package/wasi/process.md CHANGED
@@ -218,82 +218,82 @@ Functions and constants included in the Process module.
218
218
  ### Process.**argv**
219
219
 
220
220
  ```grain
221
- argv : () => Result<Array<String>, Exception>
221
+ argv: () => Result<Array<String>, Exception>
222
222
  ```
223
223
 
224
224
  Access command line arguments.
225
225
 
226
226
  Returns:
227
227
 
228
- |type|description|
229
- |----|-----------|
230
- |`Result<Array<String>, Exception>`|`Ok(args)` of an array containing positional string arguments to the process if successful or `Err(exception)` otherwise|
228
+ | type | description |
229
+ | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
230
+ | `Result<Array<String>, Exception>` | `Ok(args)` of an array containing positional string arguments to the process if successful or `Err(exception)` otherwise |
231
231
 
232
232
  ### Process.**env**
233
233
 
234
234
  ```grain
235
- env : () => Result<Array<String>, Exception>
235
+ env: () => Result<Array<String>, Exception>
236
236
  ```
237
237
 
238
238
  Access environment variables.
239
239
 
240
240
  Returns:
241
241
 
242
- |type|description|
243
- |----|-----------|
244
- |`Result<Array<String>, Exception>`|`Ok(vars)` of an array containing environment variables supplied to the process if successful or `Err(exception)` otherwise|
242
+ | type | description |
243
+ | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
244
+ | `Result<Array<String>, Exception>` | `Ok(vars)` of an array containing environment variables supplied to the process if successful or `Err(exception)` otherwise |
245
245
 
246
246
  ### Process.**exit**
247
247
 
248
248
  ```grain
249
- exit : (code: Number) => Result<Void, Exception>
249
+ exit: (code: Number) => Result<Void, Exception>
250
250
  ```
251
251
 
252
252
  Terminate the process normally.
253
253
 
254
254
  Parameters:
255
255
 
256
- |param|type|description|
257
- |-----|----|-----------|
258
- |`code`|`Number`|The value to exit with. An exit code of 0 is considered normal, with other values having meaning depending on the platform|
256
+ | param | type | description |
257
+ | ------ | -------- | -------------------------------------------------------------------------------------------------------------------------- |
258
+ | `code` | `Number` | The value to exit with. An exit code of 0 is considered normal, with other values having meaning depending on the platform |
259
259
 
260
260
  Returns:
261
261
 
262
- |type|description|
263
- |----|-----------|
264
- |`Result<Void, Exception>`|`Err(exception)` if unsuccessful. Will not actually return a value if successful, as the process has ended|
262
+ | type | description |
263
+ | ------------------------- | ---------------------------------------------------------------------------------------------------------- |
264
+ | `Result<Void, Exception>` | `Err(exception)` if unsuccessful. Will not actually return a value if successful, as the process has ended |
265
265
 
266
266
  ### Process.**sigRaise**
267
267
 
268
268
  ```grain
269
- sigRaise : (signal: Signal) => Result<Void, Exception>
269
+ sigRaise: (signal: Signal) => Result<Void, Exception>
270
270
  ```
271
271
 
272
272
  Send a signal to the process of the calling thread.
273
273
 
274
274
  Parameters:
275
275
 
276
- |param|type|description|
277
- |-----|----|-----------|
278
- |`signal`|`Signal`|The signal to send|
276
+ | param | type | description |
277
+ | -------- | -------- | ------------------ |
278
+ | `signal` | `Signal` | The signal to send |
279
279
 
280
280
  Returns:
281
281
 
282
- |type|description|
283
- |----|-----------|
284
- |`Result<Void, Exception>`|`Ok(void)` if successful or `Err(exception)` otherwise|
282
+ | type | description |
283
+ | ------------------------- | ------------------------------------------------------ |
284
+ | `Result<Void, Exception>` | `Ok(void)` if successful or `Err(exception)` otherwise |
285
285
 
286
286
  ### Process.**schedYield**
287
287
 
288
288
  ```grain
289
- schedYield : () => Result<Void, Exception>
289
+ schedYield: () => Result<Void, Exception>
290
290
  ```
291
291
 
292
292
  Yield execution to the calling thread.
293
293
 
294
294
  Returns:
295
295
 
296
- |type|description|
297
- |----|-----------|
298
- |`Result<Void, Exception>`|`Ok(void)` if successful or `Err(exception)` otherwise|
296
+ | type | description |
297
+ | ------------------------- | ------------------------------------------------------ |
298
+ | `Result<Void, Exception>` | `Ok(void)` if successful or `Err(exception)` otherwise |
299
299
 
package/wasi/random.md CHANGED
@@ -27,16 +27,16 @@ Functions and constants included in the Random module.
27
27
  </details>
28
28
 
29
29
  ```grain
30
- randomUint32 : () => Result<Uint32, Exception>
30
+ randomUint32: () => Result<Uint32, Exception>
31
31
  ```
32
32
 
33
33
  Produce a random 32-bit integer. This function can be slow, so it's best to seed a generator if lots of random data is needed.
34
34
 
35
35
  Returns:
36
36
 
37
- |type|description|
38
- |----|-----------|
39
- |`Result<Uint32, Exception>`|`Ok(num)` of a random Uint32 if successful or `Err(exception)` otherwise|
37
+ | type | description |
38
+ | --------------------------- | ------------------------------------------------------------------------ |
39
+ | `Result<Uint32, Exception>` | `Ok(num)` of a random Uint32 if successful or `Err(exception)` otherwise |
40
40
 
41
41
  ### Random.**randomUint64**
42
42
 
@@ -53,28 +53,28 @@ Returns:
53
53
  </details>
54
54
 
55
55
  ```grain
56
- randomUint64 : () => Result<Uint64, Exception>
56
+ randomUint64: () => Result<Uint64, Exception>
57
57
  ```
58
58
 
59
59
  Produce a random 64-bit integer. This function can be slow, so it's best to seed a generator if lots of random data is needed.
60
60
 
61
61
  Returns:
62
62
 
63
- |type|description|
64
- |----|-----------|
65
- |`Result<Uint64, Exception>`|`Ok(num)` of a random Uint64 if successful or `Err(exception)` otherwise|
63
+ | type | description |
64
+ | --------------------------- | ------------------------------------------------------------------------ |
65
+ | `Result<Uint64, Exception>` | `Ok(num)` of a random Uint64 if successful or `Err(exception)` otherwise |
66
66
 
67
67
  ### Random.**random**
68
68
 
69
69
  ```grain
70
- random : () => Result<Number, Exception>
70
+ random: () => Result<Number, Exception>
71
71
  ```
72
72
 
73
73
  Produce a random number. This function can be slow, so it's best to seed a generator if lots of random data is needed.
74
74
 
75
75
  Returns:
76
76
 
77
- |type|description|
78
- |----|-----------|
79
- |`Result<Number, Exception>`|`Ok(num)` of a random number if successful or `Err(exception)` otherwise|
77
+ | type | description |
78
+ | --------------------------- | ------------------------------------------------------------------------ |
79
+ | `Result<Number, Exception>` | `Ok(num)` of a random number if successful or `Err(exception)` otherwise |
80
80
 
package/wasi/time.md CHANGED
@@ -15,7 +15,7 @@ Functions and constants included in the Time module.
15
15
  ### Time.**realTime**
16
16
 
17
17
  ```grain
18
- realTime : () => Result<Int64, Exception>
18
+ realTime: () => Result<Int64, Exception>
19
19
  ```
20
20
 
21
21
  Get the current time, in nanoseconds.
@@ -23,14 +23,14 @@ Time value 0 corresponds with 1970-01-01T00:00:00Z.
23
23
 
24
24
  Returns:
25
25
 
26
- |type|description|
27
- |----|-----------|
28
- |`Result<Int64, Exception>`|`Ok(time)` of the current time if successful or `Err(exception)` otherwise|
26
+ | type | description |
27
+ | -------------------------- | -------------------------------------------------------------------------- |
28
+ | `Result<Int64, Exception>` | `Ok(time)` of the current time if successful or `Err(exception)` otherwise |
29
29
 
30
30
  ### Time.**monotonicTime**
31
31
 
32
32
  ```grain
33
- monotonicTime : () => Result<Int64, Exception>
33
+ monotonicTime: () => Result<Int64, Exception>
34
34
  ```
35
35
 
36
36
  Get the time of the system's high-resolution clock, in nanoseconds.
@@ -40,35 +40,35 @@ Useful for calculation of precise time intervals.
40
40
 
41
41
  Returns:
42
42
 
43
- |type|description|
44
- |----|-----------|
45
- |`Result<Int64, Exception>`|`Ok(time)` of the current time if successful or `Err(exception)` otherwise|
43
+ | type | description |
44
+ | -------------------------- | -------------------------------------------------------------------------- |
45
+ | `Result<Int64, Exception>` | `Ok(time)` of the current time if successful or `Err(exception)` otherwise |
46
46
 
47
47
  ### Time.**processCpuTime**
48
48
 
49
49
  ```grain
50
- processCpuTime : () => Result<Int64, Exception>
50
+ processCpuTime: () => Result<Int64, Exception>
51
51
  ```
52
52
 
53
53
  Get the number of nanoseconds elapsed since the process began.
54
54
 
55
55
  Returns:
56
56
 
57
- |type|description|
58
- |----|-----------|
59
- |`Result<Int64, Exception>`|`Ok(elapsed)` of the elapsed nanoseconds if successful or `Err(exception)` otherwise|
57
+ | type | description |
58
+ | -------------------------- | ------------------------------------------------------------------------------------ |
59
+ | `Result<Int64, Exception>` | `Ok(elapsed)` of the elapsed nanoseconds if successful or `Err(exception)` otherwise |
60
60
 
61
61
  ### Time.**threadCpuTime**
62
62
 
63
63
  ```grain
64
- threadCpuTime : () => Result<Int64, Exception>
64
+ threadCpuTime: () => Result<Int64, Exception>
65
65
  ```
66
66
 
67
67
  Get the number of nanoseconds elapsed since the thread began.
68
68
 
69
69
  Returns:
70
70
 
71
- |type|description|
72
- |----|-----------|
73
- |`Result<Int64, Exception>`|`Ok(elapsed)` of the elapsed nanoseconds if successful or `Err(exception)` otherwise|
71
+ | type | description |
72
+ | -------------------------- | ------------------------------------------------------------------------------------ |
73
+ | `Result<Int64, Exception>` | `Ok(elapsed)` of the elapsed nanoseconds if successful or `Err(exception)` otherwise |
74
74
 
@@ -1,60 +0,0 @@
1
- @noPervasives
2
- module Printing
3
-
4
- // Printing utilities for runtime code (primarily for debugging)
5
- from "runtime/unsafe/wasmi32" include WasmI32
6
- from "runtime/unsafe/memory" include Memory
7
- from "runtime/numberUtils" include NumberUtils
8
-
9
- foreign wasm fd_write:
10
- (WasmI32, WasmI32, WasmI32, WasmI32) => WasmI32 from "wasi_snapshot_preview1"
11
-
12
- @unsafe
13
- provide let numberToString = (n: WasmI64) => {
14
- NumberUtils.itoa64(n, 10n)
15
- }
16
-
17
- @unsafe
18
- provide let printNumber = (n: WasmI64) => {
19
- // like print(), but `s` should be a Grain string
20
- use WasmI32.{ (+) }
21
- let s = numberToString(n)
22
- let ptr = WasmI32.fromGrain(s)
23
- // iov: [<ptr to string> <nbytes of string> <ptr to newline> <nbytes of newline>] (32 bytes)
24
- // buf: <iov> <written> <newline char>
25
- // fd_write(STDOUT (1), iov, len(iov), written)
26
- let buf = Memory.malloc(37n)
27
- let iov = buf
28
- let written = buf + 32n
29
- let lf = buf + 36n
30
- WasmI32.store(iov, ptr + 8n, 0n)
31
- WasmI32.store(iov, WasmI32.load(ptr, 4n), 4n)
32
- WasmI32.store8(lf, 10n, 0n)
33
- WasmI32.store(iov, lf, 8n)
34
- WasmI32.store(iov, 1n, 12n)
35
- fd_write(1n, iov, 2n, written)
36
- Memory.free(buf)
37
- void
38
- }
39
-
40
- @unsafe
41
- provide let printString = (s: String) => {
42
- // like print(), but `s` should be a Grain string
43
- use WasmI32.{ (+) }
44
- let ptr = WasmI32.fromGrain(s)
45
- // iov: [<ptr to string> <nbytes of string> <ptr to newline> <nbytes of newline>] (32 bytes)
46
- // buf: <iov> <written> <newline char>
47
- // fd_write(STDOUT (1), iov, len(iov), written)
48
- let buf = Memory.malloc(37n)
49
- let iov = buf
50
- let written = buf + 32n
51
- let lf = buf + 36n
52
- WasmI32.store(iov, ptr + 8n, 0n)
53
- WasmI32.store(iov, WasmI32.load(ptr, 4n), 4n)
54
- WasmI32.store8(lf, 10n, 0n)
55
- WasmI32.store(iov, lf, 8n)
56
- WasmI32.store(iov, 1n, 12n)
57
- fd_write(1n, iov, 2n, written)
58
- Memory.free(buf)
59
- void
60
- }
@@ -1,26 +0,0 @@
1
- ---
2
- title: Printing
3
- ---
4
-
5
- ## Values
6
-
7
- Functions and constants included in the Printing module.
8
-
9
- ### Printing.**numberToString**
10
-
11
- ```grain
12
- numberToString : (n: WasmI64) => String
13
- ```
14
-
15
- ### Printing.**printNumber**
16
-
17
- ```grain
18
- printNumber : (n: WasmI64) => Void
19
- ```
20
-
21
- ### Printing.**printString**
22
-
23
- ```grain
24
- printString : (s: String) => Void
25
- ```
26
-