functionalscript 0.3.4 → 0.3.6
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.
- package/com/cpp/module.f.d.ts +10 -0
- package/com/cpp/module.f.js +107 -0
- package/com/cpp/test.f.d.ts +2 -0
- package/com/cpp/{test.f.ts → test.f.js} +9 -11
- package/com/cpp/testlib.f.d.ts +2 -0
- package/com/cpp/testlib.f.js +5 -0
- package/com/cs/module.f.d.ts +12 -0
- package/com/cs/module.f.js +80 -0
- package/com/cs/test.f.d.ts +2 -0
- package/com/cs/{test.f.ts → test.f.js} +9 -11
- package/com/cs/testlib.f.d.ts +2 -0
- package/com/cs/testlib.f.js +5 -0
- package/com/rust/module.f.d.ts +15 -0
- package/com/rust/module.f.js +169 -0
- package/com/rust/test.f.d.ts +2 -0
- package/com/rust/{test.f.ts → test.f.js} +7 -7
- package/com/rust/testlib.f.d.ts +2 -0
- package/com/rust/testlib.f.js +5 -0
- package/com/test/build.f.d.ts +20 -0
- package/com/test/build.f.js +58 -0
- package/com/types/module.f.d.ts +28 -0
- package/com/types/module.f.js +8 -0
- package/com/types/testlib.f.d.ts +44 -0
- package/com/types/{testlib.f.ts → testlib.f.js} +2 -3
- package/commonjs/build/module.f.d.ts +6 -0
- package/commonjs/build/module.f.js +69 -0
- package/commonjs/build/test.f.d.ts +2 -0
- package/commonjs/build/test.f.js +96 -0
- package/commonjs/module/function/{module.f.ts → module.f.d.ts} +5 -10
- package/commonjs/module/function/module.f.js +4 -0
- package/commonjs/module/module.f.d.ts +18 -0
- package/commonjs/module/module.f.js +12 -0
- package/commonjs/module.f.d.ts +6 -0
- package/commonjs/module.f.js +1 -0
- package/commonjs/package/dependencies/module.f.d.ts +7 -0
- package/commonjs/package/dependencies/module.f.js +13 -0
- package/commonjs/package/dependencies/test.f.d.ts +2 -0
- package/commonjs/package/dependencies/test.f.js +15 -0
- package/commonjs/package/module.f.d.ts +17 -0
- package/commonjs/package/module.f.js +18 -0
- package/commonjs/package/test.f.d.ts +2 -0
- package/commonjs/package/test.f.js +27 -0
- package/commonjs/path/module.f.d.ts +24 -0
- package/commonjs/path/module.f.js +114 -0
- package/commonjs/path/test.f.d.ts +25 -0
- package/commonjs/path/{test.f.ts → test.f.js} +123 -89
- package/crypto/prime_field/module.f.d.ts +43 -0
- package/crypto/prime_field/module.f.js +78 -0
- package/crypto/prime_field/test.f.d.ts +13 -0
- package/crypto/prime_field/test.f.js +149 -0
- package/crypto/secp/module.f.d.ts +68 -0
- package/crypto/secp/module.f.js +127 -0
- package/crypto/secp/test.f.d.ts +5 -0
- package/crypto/secp/test.f.js +72 -0
- package/crypto/sha2/module.f.d.ts +13 -0
- package/crypto/sha2/module.f.js +145 -0
- package/crypto/sha2/test.f.d.ts +9 -0
- package/crypto/sha2/test.f.js +82 -0
- package/dev/module.f.d.ts +1 -0
- package/dev/module.f.js +1 -0
- package/dev/test/module.f.d.ts +20 -0
- package/dev/test/module.f.js +75 -0
- package/dev/test.f.d.ts +9 -0
- package/dev/{test.f.ts → test.f.js} +22 -24
- package/djs/module.f.d.ts +17 -0
- package/djs/module.f.js +63 -0
- package/djs/parser/module.f.d.ts +12 -0
- package/djs/parser/module.f.js +333 -0
- package/djs/parser/test.f.d.ts +12 -0
- package/djs/parser/test.f.js +717 -0
- package/djs/serializer/module.f.d.ts +9 -0
- package/djs/serializer/module.f.js +81 -0
- package/djs/test/input.f.d.ts +2 -0
- package/djs/test/input.f.js +4 -0
- package/djs/test/m.f.d.ts +2 -0
- package/djs/test/m.f.js +1 -0
- package/djs/test.f.d.ts +12 -0
- package/djs/test.f.js +84 -0
- package/djs/tokenizer/module.f.d.ts +8 -0
- package/djs/tokenizer/module.f.js +60 -0
- package/djs/tokenizer/test.f.d.ts +7 -0
- package/djs/tokenizer/test.f.js +529 -0
- package/fsc/module.f.d.ts +5 -0
- package/fsc/module.f.js +75 -0
- package/fsc/test.f.d.ts +4 -0
- package/fsc/test.f.js +19 -0
- package/fsm/module.f.d.ts +13 -0
- package/fsm/module.f.js +59 -0
- package/fsm/test.f.d.ts +5 -0
- package/fsm/test.f.js +137 -0
- package/html/module.f.d.ts +13 -0
- package/html/module.f.js +58 -0
- package/html/test.f.d.ts +9 -0
- package/html/test.f.js +42 -0
- package/issues/test.f.d.ts +16 -0
- package/issues/test.f.js +70 -0
- package/js/tokenizer/module.f.d.ts +86 -0
- package/js/tokenizer/module.f.js +503 -0
- package/js/tokenizer/test.f.d.ts +9 -0
- package/js/tokenizer/test.f.js +905 -0
- package/json/module.f.d.ts +20 -0
- package/json/module.f.js +68 -0
- package/json/parser/module.f.d.ts +5 -0
- package/json/parser/module.f.js +155 -0
- package/json/parser/test.f.d.ts +5 -0
- package/json/parser/test.f.js +328 -0
- package/json/serializer/module.f.d.ts +7 -0
- package/json/serializer/module.f.js +21 -0
- package/json/serializer/test.f.d.ts +8 -0
- package/json/serializer/test.f.js +87 -0
- package/json/test.f.d.ts +8 -0
- package/json/test.f.js +61 -0
- package/json/tokenizer/module.f.d.ts +8 -0
- package/json/tokenizer/module.f.js +52 -0
- package/json/tokenizer/test.f.d.ts +6 -0
- package/json/tokenizer/test.f.js +419 -0
- package/nanvm-lib/tests/test.f.d.ts +27 -0
- package/nanvm-lib/tests/test.f.js +84 -0
- package/nodejs/version/module.f.d.ts +11 -0
- package/nodejs/version/module.f.js +16 -0
- package/nodejs/version/test.f.d.ts +2 -0
- package/nodejs/version/{test.f.ts → test.f.js} +13 -22
- package/package.json +9 -5
- package/text/ascii/module.f.d.ts +129 -0
- package/text/ascii/module.f.js +148 -0
- package/text/ascii/test.f.d.ts +4 -0
- package/text/ascii/test.f.js +14 -0
- package/text/module.f.d.ts +8 -0
- package/text/module.f.js +10 -0
- package/text/sgr/module.f.d.ts +8 -0
- package/text/sgr/module.f.js +8 -0
- package/text/test.f.d.ts +2 -0
- package/text/test.f.js +18 -0
- package/text/utf16/module.f.d.ts +9 -0
- package/text/utf16/module.f.js +66 -0
- package/text/utf16/test.f.d.ts +6 -0
- package/text/utf16/test.f.js +144 -0
- package/text/utf8/module.f.d.ts +6 -0
- package/text/utf8/module.f.js +112 -0
- package/text/utf8/test.f.d.ts +6 -0
- package/text/utf8/test.f.js +175 -0
- package/types/array/module.f.d.ts +21 -0
- package/types/array/module.f.js +23 -0
- package/types/array/test.f.d.ts +10 -0
- package/types/array/test.f.js +116 -0
- package/types/bigfloat/module.f.d.ts +3 -0
- package/types/bigfloat/module.f.js +66 -0
- package/types/bigfloat/test.f.d.ts +6 -0
- package/types/bigfloat/test.f.js +349 -0
- package/types/bigint/module.f.d.ts +54 -0
- package/types/bigint/{module.f.ts → module.f.js} +42 -65
- package/types/bigint/test.f.d.ts +16 -0
- package/types/bigint/test.f.js +199 -0
- package/types/bit_vec/module.f.d.ts +134 -0
- package/types/bit_vec/{module.f.ts → module.f.js} +47 -65
- package/types/bit_vec/test.f.d.ts +22 -0
- package/types/bit_vec/test.f.js +210 -0
- package/types/btree/find/module.f.d.ts +20 -0
- package/types/btree/find/module.f.js +84 -0
- package/types/btree/find/test.f.d.ts +2 -0
- package/types/btree/find/test.f.js +152 -0
- package/types/btree/module.f.d.ts +4 -0
- package/types/btree/module.f.js +31 -0
- package/types/btree/remove/module.f.d.ts +4 -0
- package/types/btree/remove/module.f.js +174 -0
- package/types/btree/remove/test.f.d.ts +5 -0
- package/types/btree/remove/test.f.js +634 -0
- package/types/btree/set/module.f.d.ts +3 -0
- package/types/btree/set/module.f.js +103 -0
- package/types/btree/set/test.f.d.ts +2 -0
- package/types/btree/set/test.f.js +360 -0
- package/types/btree/test.f.d.ts +8 -0
- package/types/btree/test.f.js +75 -0
- package/types/btree/types/module.f.d.ts +11 -0
- package/types/btree/types/module.f.js +1 -0
- package/types/byte_set/module.f.d.ts +16 -0
- package/types/byte_set/module.f.js +28 -0
- package/types/byte_set/test.f.d.ts +12 -0
- package/types/byte_set/test.f.js +122 -0
- package/types/function/compare/module.f.d.ts +10 -0
- package/types/function/compare/module.f.js +7 -0
- package/types/function/compare/test.f.d.ts +2 -0
- package/types/function/compare/test.f.js +8 -0
- package/types/function/module.f.d.ts +28 -0
- package/types/function/module.f.js +19 -0
- package/types/function/operator/module.f.d.ts +20 -0
- package/types/function/operator/module.f.js +18 -0
- package/types/function/test.f.d.ts +2 -0
- package/types/function/test.f.js +12 -0
- package/types/list/module.f.d.ts +50 -0
- package/types/list/module.f.js +171 -0
- package/types/list/test.f.d.ts +22 -0
- package/types/list/test.f.js +395 -0
- package/types/map/module.f.d.ts +14 -0
- package/types/map/module.f.js +31 -0
- package/types/map/test.f.d.ts +5 -0
- package/types/map/test.f.js +114 -0
- package/types/nibble_set/module.f.d.ts +10 -0
- package/types/nibble_set/module.f.js +9 -0
- package/types/nibble_set/test.f.d.ts +12 -0
- package/types/nibble_set/test.f.js +90 -0
- package/types/nullable/module.f.d.ts +3 -0
- package/types/nullable/module.f.js +2 -0
- package/types/nullable/test.f.d.ts +2 -0
- package/types/nullable/test.f.js +12 -0
- package/types/number/module.f.d.ts +6 -0
- package/types/number/module.f.js +8 -0
- package/types/number/test.f.d.ts +11 -0
- package/types/number/test.f.js +124 -0
- package/types/object/module.f.d.ts +10 -0
- package/types/object/module.f.js +12 -0
- package/types/object/test.f.d.ts +5 -0
- package/types/object/test.f.js +17 -0
- package/types/range/module.f.d.ts +3 -0
- package/types/range/module.f.js +2 -0
- package/types/range/test.f.d.ts +2 -0
- package/types/range/test.f.js +18 -0
- package/types/range_map/module.f.d.ts +14 -0
- package/types/range_map/module.f.js +51 -0
- package/types/range_map/test.f.d.ts +6 -0
- package/types/range_map/test.f.js +176 -0
- package/types/result/module.f.d.ts +7 -0
- package/types/result/module.f.js +8 -0
- package/types/sorted_list/module.f.d.ts +16 -0
- package/types/sorted_list/module.f.js +56 -0
- package/types/sorted_list/test.f.d.ts +5 -0
- package/types/sorted_list/test.f.js +64 -0
- package/types/sorted_set/module.f.d.ts +7 -0
- package/types/sorted_set/module.f.js +14 -0
- package/types/sorted_set/test.f.d.ts +6 -0
- package/types/sorted_set/test.f.js +78 -0
- package/types/string/module.f.d.ts +6 -0
- package/types/string/module.f.js +11 -0
- package/types/string/test.f.d.ts +15 -0
- package/types/string/test.f.js +58 -0
- package/types/string_set/module.f.d.ts +9 -0
- package/types/string_set/module.f.js +22 -0
- package/types/string_set/test.f.d.ts +5 -0
- package/types/string_set/test.f.js +65 -0
- package/.github/FUNDING.yml +0 -12
- package/.github/dependabot.yml +0 -11
- package/.github/workflows/ci.yml +0 -88
- package/.github/workflows/npm-publish.yml +0 -53
- package/CHANGELOG.md +0 -29
- package/Cargo.lock +0 -18
- package/Cargo.toml +0 -7
- package/com/README.md +0 -3
- package/com/cpp/README.md +0 -80
- package/com/cpp/module.f.ts +0 -180
- package/com/cpp/nanocom.hpp +0 -195
- package/com/cpp/testlib.f.ts +0 -8
- package/com/cs/module.f.ts +0 -145
- package/com/cs/testlib.f.ts +0 -8
- package/com/proposals.md +0 -28
- package/com/rust/module.f.ts +0 -287
- package/com/rust/nanocom/Cargo.lock +0 -7
- package/com/rust/nanocom/Cargo.toml +0 -15
- package/com/rust/nanocom/README.md +0 -56
- package/com/rust/nanocom/src/class.rs +0 -6
- package/com/rust/nanocom/src/cobject.rs +0 -90
- package/com/rust/nanocom/src/guid.rs +0 -15
- package/com/rust/nanocom/src/hresult.rs +0 -7
- package/com/rust/nanocom/src/interface.rs +0 -9
- package/com/rust/nanocom/src/iunknown.rs +0 -13
- package/com/rust/nanocom/src/lib.rs +0 -20
- package/com/rust/nanocom/src/object.rs +0 -34
- package/com/rust/nanocom/src/ref.rs +0 -57
- package/com/rust/nanocom/src/vmt.rs +0 -7
- package/com/rust/nanocom/tests/it.rs +0 -186
- package/com/rust/nanocom/tests/itmod.rs +0 -195
- package/com/rust/testlib.f.ts +0 -8
- package/com/test/build.f.ts +0 -111
- package/com/test/build.ts +0 -45
- package/com/test/cpp/main.cpp +0 -74
- package/com/test/cs/Program.cs +0 -31
- package/com/test/cs/cs.csproj +0 -16
- package/com/test/rust/Cargo.toml +0 -12
- package/com/test/rust/src/lib.rs +0 -56
- package/com/types/module.f.ts +0 -62
- package/commonjs/README.md +0 -94
- package/commonjs/build/module.f.ts +0 -100
- package/commonjs/build/test.f.ts +0 -107
- package/commonjs/module/module.f.ts +0 -41
- package/commonjs/module.f.ts +0 -7
- package/commonjs/module.ts +0 -31
- package/commonjs/package/dependencies/module.f.ts +0 -22
- package/commonjs/package/dependencies/test.f.ts +0 -8
- package/commonjs/package/module.f.ts +0 -31
- package/commonjs/package/test.f.ts +0 -12
- package/commonjs/path/README.md +0 -17
- package/commonjs/path/module.f.ts +0 -171
- package/commonjs/test.ts +0 -64
- package/crypto/README.md +0 -3
- package/crypto/prime_field/module.f.ts +0 -114
- package/crypto/prime_field/test.f.ts +0 -95
- package/crypto/secp/module.f.ts +0 -182
- package/crypto/secp/test.f.ts +0 -68
- package/crypto/sha2/module.f.ts +0 -215
- package/crypto/sha2/test.f.ts +0 -83
- package/deno.json +0 -71
- package/dev/README.md +0 -8
- package/dev/index.ts +0 -3
- package/dev/module.f.ts +0 -1
- package/dev/module.ts +0 -195
- package/dev/test/module.f.ts +0 -135
- package/dev/test.ts +0 -53
- package/djs/README.md +0 -54
- package/djs/module.f.ts +0 -76
- package/djs/parser/module.f.ts +0 -509
- package/djs/parser/test.f.ts +0 -461
- package/djs/serializer/module.f.ts +0 -90
- package/djs/test.f.ts +0 -67
- package/djs/tokenizer/module.f.ts +0 -99
- package/djs/tokenizer/test.f.ts +0 -364
- package/doc/LANGUAGE.md +0 -255
- package/doc/README.md +0 -61
- package/doc/byte-code.md +0 -59
- package/doc/fa.md +0 -174
- package/doc/predefined.md +0 -143
- package/doc/proposals.md +0 -21
- package/doc/vm/README.md +0 -24
- package/doc/vm-rearchitecture.md +0 -129
- package/doc/vm.md +0 -150
- package/fsc/README.md +0 -111
- package/fsc/module.f.ts +0 -122
- package/fsc/test.f.ts +0 -21
- package/fsm/README.md +0 -113
- package/fsm/module.f.ts +0 -107
- package/fsm/test.f.ts +0 -139
- package/funding.json +0 -61
- package/html/README.md +0 -32
- package/html/module.f.ts +0 -109
- package/html/test.f.ts +0 -37
- package/issues/01-test-debug.md +0 -3
- package/issues/02-esm.md +0 -8
- package/issues/03-djs.md +0 -57
- package/issues/05-publish.md +0 -40
- package/issues/11-fs-load.md +0 -13
- package/issues/17-djs-extension.md +0 -6
- package/issues/README.md +0 -42
- package/issues/lang/1000-json.md +0 -50
- package/issues/lang/2110-default-export.md +0 -11
- package/issues/lang/2120-const.md +0 -14
- package/issues/lang/2130-default-import.md +0 -10
- package/issues/lang/2210-block-comment.md +0 -12
- package/issues/lang/2220-namespace-import.md +0 -25
- package/issues/lang/2310-undefined.md +0 -7
- package/issues/lang/2320-bigint.md +0 -7
- package/issues/lang/2330-property-accessor.md +0 -225
- package/issues/lang/2340-operators.md +0 -41
- package/issues/lang/2350-grouping.md +0 -11
- package/issues/lang/2360-built-in.md +0 -81
- package/issues/lang/2410-identifier-property.md +0 -9
- package/issues/lang/2420-line-comment.md +0 -10
- package/issues/lang/2430-trailing-comma.md +0 -13
- package/issues/lang/2440-shorthand.md +0 -8
- package/issues/lang/2450-destructuring.md +0 -12
- package/issues/lang/3110-function.md +0 -35
- package/issues/lang/3120-parameters.md +0 -9
- package/issues/lang/3130-body-const.md +0 -12
- package/issues/lang/3220-let.md +0 -11
- package/issues/lang/3240-export.md +0 -44
- package/issues/lang/3370-type-inference.md +0 -69
- package/issues/lang/3380-promise.md +0 -22
- package/issues/lang/3390-class.md +0 -3
- package/issues/lang/3410-expression.md +0 -12
- package/issues/lang/3420-one-parameter.md +0 -10
- package/issues/lang/3430-assignments.md +0 -23
- package/issues/lang/README.md +0 -193
- package/issues/test.f.ts +0 -58
- package/js/tokenizer/module.f.ts +0 -882
- package/js/tokenizer/test.f.ts +0 -617
- package/json/html/README.md +0 -49
- package/json/module.f.ts +0 -94
- package/json/parser/module.f.ts +0 -221
- package/json/parser/test.f.ts +0 -255
- package/json/serializer/module.f.ts +0 -74
- package/json/serializer/test.f.ts +0 -64
- package/json/test.f.ts +0 -48
- package/json/tokenizer/module.f.ts +0 -85
- package/json/tokenizer/test.f.ts +0 -290
- package/nanvm-lib/Cargo.toml +0 -6
- package/nanvm-lib/src/extension.rs +0 -130
- package/nanvm-lib/src/interface.rs +0 -133
- package/nanvm-lib/src/lib.rs +0 -7
- package/nanvm-lib/src/naive.rs +0 -236
- package/nanvm-lib/src/nanenum.rs +0 -236
- package/nanvm-lib/src/nullish.rs +0 -7
- package/nanvm-lib/src/sign.rs +0 -5
- package/nanvm-lib/src/simple.rs +0 -32
- package/nanvm-lib/tests/test.f.ts +0 -80
- package/nanvm-lib/tests/test.rs +0 -108
- package/nodejs/version/main.ts +0 -4
- package/nodejs/version/module.f.ts +0 -42
- package/text/README.md +0 -110
- package/text/ascii/module.f.ts +0 -219
- package/text/ascii/test.f.ts +0 -14
- package/text/module.f.ts +0 -30
- package/text/sgr/README.md +0 -3
- package/text/sgr/module.f.ts +0 -11
- package/text/test.f.ts +0 -19
- package/text/utf16/module.f.ts +0 -120
- package/text/utf16/test.f.ts +0 -107
- package/text/utf8/module.f.ts +0 -116
- package/text/utf8/test.f.ts +0 -125
- package/tsconfig.json +0 -104
- package/types/array/module.f.ts +0 -89
- package/types/array/test.f.ts +0 -88
- package/types/bigfloat/module.f.ts +0 -93
- package/types/bigfloat/test.f.ts +0 -218
- package/types/bigint/README.md +0 -35
- package/types/bigint/test.f.ts +0 -144
- package/types/bit_vec/README.md +0 -18
- package/types/bit_vec/test.f.ts +0 -129
- package/types/btree/README.md +0 -160
- package/types/btree/find/module.f.ts +0 -92
- package/types/btree/find/test.f.ts +0 -122
- package/types/btree/module.f.ts +0 -35
- package/types/btree/remove/module.f.ts +0 -151
- package/types/btree/remove/test.f.ts +0 -498
- package/types/btree/set/module.f.ts +0 -89
- package/types/btree/set/test.f.ts +0 -415
- package/types/btree/test.f.ts +0 -92
- package/types/btree/types/module.f.ts +0 -27
- package/types/byte_set/module.f.ts +0 -73
- package/types/byte_set/test.f.ts +0 -84
- package/types/function/compare/module.f.ts +0 -26
- package/types/function/compare/test.f.ts +0 -7
- package/types/function/module.f.ts +0 -43
- package/types/function/operator/module.f.ts +0 -65
- package/types/function/test.f.ts +0 -20
- package/types/list/module.f.ts +0 -350
- package/types/list/test.f.ts +0 -327
- package/types/map/module.f.ts +0 -65
- package/types/map/test.f.ts +0 -76
- package/types/nibble_set/module.f.ts +0 -34
- package/types/nibble_set/test.f.ts +0 -57
- package/types/nullable/module.f.ts +0 -9
- package/types/nullable/test.f.ts +0 -9
- package/types/number/module.f.ts +0 -20
- package/types/number/test.f.ts +0 -194
- package/types/object/module.f.ts +0 -30
- package/types/object/test.f.ts +0 -14
- package/types/range/module.f.ts +0 -10
- package/types/range/test.f.ts +0 -9
- package/types/range_map/module.f.ts +0 -70
- package/types/range_map/test.f.ts +0 -189
- package/types/result/module.f.ts +0 -20
- package/types/result/module.ts +0 -18
- package/types/sorted_list/module.f.ts +0 -83
- package/types/sorted_list/test.f.ts +0 -57
- package/types/sorted_set/module.f.ts +0 -36
- package/types/sorted_set/test.f.ts +0 -67
- package/types/string/module.f.ts +0 -26
- package/types/string/test.f.ts +0 -43
- package/types/string_set/module.f.ts +0 -37
- package/types/string_set/test.f.ts +0 -34
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
# Type Inference
|
|
2
|
-
|
|
3
|
-
We need type inference to prove that specific values have specific types. Type annotations can help, but we can't trust them.
|
|
4
|
-
|
|
5
|
-
## Level 1
|
|
6
|
-
|
|
7
|
-
```rust
|
|
8
|
-
enum Type {
|
|
9
|
-
Unknown,
|
|
10
|
-
Null,
|
|
11
|
-
Undefined,
|
|
12
|
-
Bool,
|
|
13
|
-
Number,
|
|
14
|
-
String,
|
|
15
|
-
BigInt,
|
|
16
|
-
Object,
|
|
17
|
-
Array,
|
|
18
|
-
Function,
|
|
19
|
-
// ...
|
|
20
|
-
}
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## Level 2
|
|
24
|
-
|
|
25
|
-
It is a set. For example,
|
|
26
|
-
|
|
27
|
-
```rust
|
|
28
|
-
Set<Type>
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
On this level, we can extend our `Type` definition with some known finite values:
|
|
32
|
-
|
|
33
|
-
```rs
|
|
34
|
-
enum Type {
|
|
35
|
-
Unknown,
|
|
36
|
-
Null,
|
|
37
|
-
Undefined,
|
|
38
|
-
False,
|
|
39
|
-
True,
|
|
40
|
-
Number,
|
|
41
|
-
String,
|
|
42
|
-
BigInt,
|
|
43
|
-
Object,
|
|
44
|
-
Array,
|
|
45
|
-
Function,
|
|
46
|
-
// ...
|
|
47
|
-
// ...
|
|
48
|
-
EmptyString,
|
|
49
|
-
NumberZero,
|
|
50
|
-
NumberNaN,
|
|
51
|
-
NumberPositive,
|
|
52
|
-
NumberNegative,
|
|
53
|
-
NumberPInf,
|
|
54
|
-
NumberNInf,
|
|
55
|
-
BigIntZero,
|
|
56
|
-
BigIntPositive,
|
|
57
|
-
BigIntNegative,
|
|
58
|
-
EmptyObject,
|
|
59
|
-
EmptyArray,
|
|
60
|
-
FunctionId,
|
|
61
|
-
// ...
|
|
62
|
-
}
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
The set is finite and can be implemented using a bit-set.
|
|
66
|
-
|
|
67
|
-
### Level 3
|
|
68
|
-
|
|
69
|
-
Compared to level 2, this level contains dynamic information about subsets of the type.
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# Promise
|
|
2
|
-
|
|
3
|
-
It could be blocked until we solve the ownership problem.
|
|
4
|
-
|
|
5
|
-
Promise is the main object. `async` and `await` are syntax sugars. If we can safely work with promises, we can transform a FunctionalScript program with `async` functions into a normal function with Promises.
|
|
6
|
-
|
|
7
|
-
## `.then()`
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
a.then(f)
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
```ts
|
|
14
|
-
const g0 = async(a) => f(await a)
|
|
15
|
-
// g0 = a => a.then(f)
|
|
16
|
-
|
|
17
|
-
const g1 = async(a) => f(await a)
|
|
18
|
-
|
|
19
|
-
const a = io.wrtieFile('a', 'x')
|
|
20
|
-
const p0 = g0(a)
|
|
21
|
-
const p1 = g1(a)
|
|
22
|
-
```
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
# Classes
|
|
2
|
-
|
|
3
|
-
Classes are [nominal types](https://en.wikipedia.org/wiki/Nominal_type_system). In other words, their definitions are location-based, not content-based. This can cause many problems, such as duplicate incompatible class definitions during serialization and code importing. So, the best way to use classes would be to use CA VM.
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
# Additional Assignment Operators
|
|
2
|
-
|
|
3
|
-
These operators can be transformed into two operations in VM byte code.
|
|
4
|
-
|
|
5
|
-
|Type |Operator|Priority|
|
|
6
|
-
|-----------|--------|--------|
|
|
7
|
-
|Assignment |`+=` |2 |
|
|
8
|
-
| |`-=` |2 |
|
|
9
|
-
| |`*=` |2 |
|
|
10
|
-
| |`/=` |2 |
|
|
11
|
-
| |`%=` |2 |
|
|
12
|
-
| |`**=` |2 |
|
|
13
|
-
| |`<<=` |2 |
|
|
14
|
-
| |`>>=` |2 |
|
|
15
|
-
| |`>>>=` |2 |
|
|
16
|
-
| |`&=` |2 |
|
|
17
|
-
| |`^=` |2 |
|
|
18
|
-
| |`\|=` |2 |
|
|
19
|
-
| |`&&=` |2 |
|
|
20
|
-
| |`\|\|=` |2 |
|
|
21
|
-
| |`??=` |2 |
|
|
22
|
-
|Arithmetic |`++` |3 |
|
|
23
|
-
| |`--` |3 |
|
package/issues/lang/README.md
DELETED
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
# FunctionalScript Language
|
|
2
|
-
|
|
3
|
-
Two main FunctionsScript principles:
|
|
4
|
-
|
|
5
|
-
1. if FS code passes validation/compilation, then it doesn't have side-effects,
|
|
6
|
-
2. the code that passed validation/compilation should behave on FunctionalScript VM the same way as on any other modern JavaScript engine.
|
|
7
|
-
|
|
8
|
-
When we implement features of FunctionalScript, the first priority is a simplification of the VM.
|
|
9
|
-
|
|
10
|
-
File Types:
|
|
11
|
-
|
|
12
|
-
|File Type|Extension |Notes |
|
|
13
|
-
|---------|-----------------|------------|
|
|
14
|
-
|JSON |`.json` |Not a graph.|
|
|
15
|
-
|DJS |`.d.js`, `.d.mjs`|A graph. |
|
|
16
|
-
|FJS |`.f.js`, `.f.mjs`|Functions. |
|
|
17
|
-
|
|
18
|
-
**Note**: An FJS value can't be serialized without additional run-time infrastructure.
|
|
19
|
-
|
|
20
|
-
## 1. JSON
|
|
21
|
-
|
|
22
|
-
- [ ] [JSON](./1000-json.md).
|
|
23
|
-
|
|
24
|
-
**VM**:
|
|
25
|
-
|
|
26
|
-
We are introducing new commands in such a way that every new command depends only on previous commands.
|
|
27
|
-
|
|
28
|
-
|format|any |Tag| |
|
|
29
|
-
|------|--------------|---|----------|
|
|
30
|
-
|JSON |null | 00| |
|
|
31
|
-
| |number | 01|u64 |
|
|
32
|
-
| |false | 02| |
|
|
33
|
-
| |true | 03| |
|
|
34
|
-
| |string | 04|String |
|
|
35
|
-
| |array | 05|Array<Any>|
|
|
36
|
-
| |object | 06|Object |
|
|
37
|
-
|
|
38
|
-
## 2. DJS
|
|
39
|
-
|
|
40
|
-
The DJS form a graph of values. It can be serialized without additional run-time information.
|
|
41
|
-
|
|
42
|
-
File extensions: `.d.js` and `.d.mjs`.
|
|
43
|
-
|
|
44
|
-
|format|any |Tag| |Notes |
|
|
45
|
-
|------|------------------------|---|----------|------------------------------------------------|
|
|
46
|
-
|DJS |const_ref | 07|u32 |[const](./2120-const.md) |
|
|
47
|
-
| |bigint_plus | 08|Array<u64>|[bigint](./2320-bigint.md) |
|
|
48
|
-
| |bigint_minus | 09|Array<u64>|[bigint](./2320-bigint.md) |
|
|
49
|
-
| |undefined | 0A| |[undefined](./2310-undefined.md) |
|
|
50
|
-
| |own_property | 0B| |[property-accessor](./2330-property-accessor.md)|
|
|
51
|
-
| |instance_property | 0C| |[property-accessor](./2330-property-accessor.md)|
|
|
52
|
-
| |instance_method_call | 0D| |[property-accessor](./2330-property-accessor.md)|
|
|
53
|
-
| |at | 0E| |[property-accessor](./2330-property-accessor.md)|
|
|
54
|
-
| |operators | | |[operators](./2340-operators.md) |
|
|
55
|
-
|
|
56
|
-
### 2.1. Required
|
|
57
|
-
|
|
58
|
-
1. [ ] [default-export](./2110-default-export.md),
|
|
59
|
-
2. [ ] [const](./2120-const.md),
|
|
60
|
-
3. [ ] [default-import](./2130-default-import.md).
|
|
61
|
-
|
|
62
|
-
### 2.2. Priority 1
|
|
63
|
-
|
|
64
|
-
We need it to use JSDoc and TypeScript.
|
|
65
|
-
|
|
66
|
-
1. [ ] [block-comment](./2210-block-comment.md),
|
|
67
|
-
2. [ ] [namespace-import](./2220-namespace-import.md).
|
|
68
|
-
|
|
69
|
-
### 2.3. Priority 2
|
|
70
|
-
|
|
71
|
-
1. [ ] [undefined](./2310-undefined.md),
|
|
72
|
-
2. [ ] [bigint](./2320-bigint.md),
|
|
73
|
-
3. [ ] [property-accessor](./2330-property-accessor.md),
|
|
74
|
-
4. [ ] [operators](./2340-operators.md),
|
|
75
|
-
5. [ ] [grouping](./2350-grouping.md),
|
|
76
|
-
6. [ ] [built-in](./2360-built-in.md).
|
|
77
|
-
|
|
78
|
-
### 2.4. Syntactic Sugar
|
|
79
|
-
|
|
80
|
-
1. [ ] [identifier-property](./2410-identifier-property.md),
|
|
81
|
-
2. [ ] [line-comment](./2420-line-comment.md),
|
|
82
|
-
3. [ ] [trailing-comma](./2430-trailing-comma.md),
|
|
83
|
-
4. [ ] [shorthand](./2440-shorthand.md),
|
|
84
|
-
5. [ ] [destructuring](./2450-destructuring.md).
|
|
85
|
-
|
|
86
|
-
## 3. FJS
|
|
87
|
-
|
|
88
|
-
The FJS can have functions. The format requires additional run-time information for serialization.
|
|
89
|
-
|
|
90
|
-
File extensions: `.f.js` and `.f.mjs`.
|
|
91
|
-
|
|
92
|
-
|format|any |Tag| |Notes |
|
|
93
|
-
|------|--------|---|----|--------------------------------|
|
|
94
|
-
|FJS |function| |Func|[function](./3110-function.md) |
|
|
95
|
-
|
|
96
|
-
### 3.1. Required
|
|
97
|
-
|
|
98
|
-
1. [ ] [function](./3110-function.md)
|
|
99
|
-
2. [ ] [parameters](./3120-parameters.md)
|
|
100
|
-
3. [ ] [body-const](./3130-body-const.md)
|
|
101
|
-
|
|
102
|
-
### 3.2. Priority 2
|
|
103
|
-
|
|
104
|
-
1. [ ] `if`. See https://developer.mozilla.org/en-US/docs/Glossary/Falsy
|
|
105
|
-
2. [ ] [let](./3220-let.md)
|
|
106
|
-
3. [ ] `while`
|
|
107
|
-
4. [ ] [export](./3240-export.md)
|
|
108
|
-
5. [ ] Ownership of Mutable Objects (Singletons)
|
|
109
|
-
|
|
110
|
-
### 3.3. Priority 3
|
|
111
|
-
|
|
112
|
-
1. [ ] Regular Expressions
|
|
113
|
-
2. [ ] [type inference](./3370-type-inference.md)
|
|
114
|
-
3. [ ] [promise](./3380-promise.md)
|
|
115
|
-
4. [ ] [class](./3390-class.md)
|
|
116
|
-
|
|
117
|
-
### 3.4. Syntactic Sugar
|
|
118
|
-
|
|
119
|
-
1. [ ] [expression](./3410-expression.md)
|
|
120
|
-
2. [ ] [one-parameter](./3420-one-parameter.md)
|
|
121
|
-
3. [ ] [assignments](./3430-assignments.md)
|
|
122
|
-
4. [ ] `async`/`await`. Depends on the implementation of promises.
|
|
123
|
-
|
|
124
|
-
## 4. ECMAScript Proposals
|
|
125
|
-
|
|
126
|
-
1. [ ] [Type Annotations](https://github.com/tc39/proposal-type-annotations), Stage 1:
|
|
127
|
-
- [Node.js](https://nodejs.org/en/learn/typescript/run-natively),
|
|
128
|
-
- `Deno` supports TypeScript,
|
|
129
|
-
- `Bun` supports TypeScript,
|
|
130
|
-
- most browsers don't support the feature.
|
|
131
|
-
2. [ ] [Pipe Operator `|>`](https://github.com/tc39/proposal-pipeline-operator), Stage 2.
|
|
132
|
-
3. [ ] [Records and Tuples](https://github.com/tc39/proposal-record-tuple), Stage 2.
|
|
133
|
-
|
|
134
|
-
## 5. I/O
|
|
135
|
-
|
|
136
|
-
### 5.1. Isolated I/O
|
|
137
|
-
|
|
138
|
-
Using dependency injection.
|
|
139
|
-
|
|
140
|
-
This implementation of VM requires external function implementation.
|
|
141
|
-
|
|
142
|
-
### 5.2 Isolated Asynchronous I/O
|
|
143
|
-
|
|
144
|
-
It requires a promise implementation.
|
|
145
|
-
|
|
146
|
-
### 5.3. State Machine with Asynchronous Requests
|
|
147
|
-
|
|
148
|
-
VM doesn't need to implement external functions or promises.
|
|
149
|
-
|
|
150
|
-
```ts
|
|
151
|
-
type RequestType = ...;
|
|
152
|
-
type Request = readonly[Input, Continuation];
|
|
153
|
-
type Continuation = (_: Output) => Request;
|
|
154
|
-
type Main = Request
|
|
155
|
-
```
|
|
156
|
-
|
|
157
|
-
## 6. Content-Addressable VM
|
|
158
|
-
|
|
159
|
-
See also [Unison](https://www.unison-lang.org/).
|
|
160
|
-
|
|
161
|
-
The main target is run-time performance.
|
|
162
|
-
|
|
163
|
-
Hash function: most likely SHA256 because there is a lot of hardware support from modern processors.
|
|
164
|
-
|
|
165
|
-
Hash structure: we will use several initial hashes for a compress function.
|
|
166
|
-
|
|
167
|
-
We may use CDT for huge arrays, objects, strings, and BigInts.
|
|
168
|
-
|
|
169
|
-
The first bit of a hash is reserved for a tag. If the tag is `0`, we have raw data with `1` at the end. A hash with all zeroes is used for `undefined`. If the first bit is `0`, then the value is a hash. So, we have only 255 bits for a hash.
|
|
170
|
-
|
|
171
|
-
Because we use tagged hash, we can keep small values in a `nanenum`. So it may reuse a lot from non-content addressable VM and ref-values can keep a hash value inside.
|
|
172
|
-
|
|
173
|
-
Instead of an address, we can use a prefix, hash. 48 bits should be enough for most cases. However, we also need a mechanism to resolve collisions (even if they are rare). For example, our value can be an enum like this
|
|
174
|
-
|
|
175
|
-
```rust
|
|
176
|
-
enum Value {
|
|
177
|
-
Data(...),
|
|
178
|
-
Hash(u48),
|
|
179
|
-
Ref(u48),
|
|
180
|
-
}
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
However, while the `===` operation can be faster, `Value::Hash` is slower when we need to access the object's internals because it requires two dereference operations. So, we may come back to using only references.
|
|
184
|
-
|
|
185
|
-
```rust
|
|
186
|
-
enum Value {
|
|
187
|
-
Data(...)
|
|
188
|
-
Ref(u48)
|
|
189
|
-
}
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
Collision probability for 48 bits is 50% for `16777216 = 2^24` hashes (birthday attack).
|
|
193
|
-
|
package/issues/test.f.ts
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
const at
|
|
2
|
-
: (a: unknown) => (i: any) =>unknown
|
|
3
|
-
= a => i => Object.getOwnPropertyDescriptor(a, i)?.value
|
|
4
|
-
|
|
5
|
-
export default {
|
|
6
|
-
ownProperty: {
|
|
7
|
-
nullish: () => {
|
|
8
|
-
/* // panic
|
|
9
|
-
const v = Object.getOwnPropertyDescriptor(null, 0)
|
|
10
|
-
if (v !== undefined) {
|
|
11
|
-
throw v
|
|
12
|
-
}
|
|
13
|
-
*/
|
|
14
|
-
/* // panic
|
|
15
|
-
const v = Object.getOwnPropertyDescriptor(undefined, 0)
|
|
16
|
-
if (v !== undefined) {
|
|
17
|
-
throw v
|
|
18
|
-
}
|
|
19
|
-
*/
|
|
20
|
-
},
|
|
21
|
-
bool: () => {
|
|
22
|
-
const v = at(true)('x')
|
|
23
|
-
if (v !== undefined) {
|
|
24
|
-
throw v
|
|
25
|
-
}
|
|
26
|
-
},
|
|
27
|
-
array: () => {
|
|
28
|
-
const a = ['42']
|
|
29
|
-
{
|
|
30
|
-
const v = at(a)('0')
|
|
31
|
-
if (v !== '42') { throw v }
|
|
32
|
-
}
|
|
33
|
-
{
|
|
34
|
-
const v = at(a)(0)
|
|
35
|
-
if (v !== '42') { throw v }
|
|
36
|
-
}
|
|
37
|
-
},
|
|
38
|
-
object: {
|
|
39
|
-
null: () => {
|
|
40
|
-
const o = { null: 'hello' }
|
|
41
|
-
const v = at(o)(null)
|
|
42
|
-
if (v !== 'hello') { throw v }
|
|
43
|
-
},
|
|
44
|
-
undefined: () => {
|
|
45
|
-
const o = { undefined: 'hello' }
|
|
46
|
-
const v = at(o)(undefined)
|
|
47
|
-
if (v !== 'hello') { throw v }
|
|
48
|
-
}
|
|
49
|
-
},
|
|
50
|
-
string: {
|
|
51
|
-
number: () => {
|
|
52
|
-
const o = 'hello'
|
|
53
|
-
const v = at(o)(1)
|
|
54
|
-
if (v !== 'e') { throw v }
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|