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
package/doc/LANGUAGE.md
DELETED
|
@@ -1,255 +0,0 @@
|
|
|
1
|
-
# FunctionalScript Programming Language
|
|
2
|
-
|
|
3
|
-
Principles:
|
|
4
|
-
|
|
5
|
-
- FunctionalScript VM should behaves the same way as a JavaScript VM,
|
|
6
|
-
- Any unsupported feature should be reported at compile-time.
|
|
7
|
-
|
|
8
|
-
## 1. Module Ecosystem
|
|
9
|
-
|
|
10
|
-
FunctionalScript uses ESM conventions as a module ecosystem. For example,
|
|
11
|
-
|
|
12
|
-
```js
|
|
13
|
-
import thirdPartyModule from 'third-party-package/module'
|
|
14
|
-
|
|
15
|
-
const result = thirdPartyModule.someFunction('hello')
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## 2. Packages
|
|
19
|
-
|
|
20
|
-
FunctionalScript uses a `package.json` file to define a package. This file is compatible with [Node.js `package.json`](https://nodejs.org/en/knowledge/getting-started/npm/what-is-the-file-package-json/).
|
|
21
|
-
The preferred way to reference dependencies is to use a GitHub URL. These dependencies in a `package.json` file could look like this,
|
|
22
|
-
|
|
23
|
-
```json
|
|
24
|
-
{
|
|
25
|
-
// ...
|
|
26
|
-
"dependencies": {
|
|
27
|
-
"third-party-package": "github:exampleorg/thirdpartypackage"
|
|
28
|
-
}
|
|
29
|
-
// ...
|
|
30
|
-
}
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
**Note:** this repository is also a FunctionalScript package, and it can be used as a library. To install this package, use
|
|
34
|
-
|
|
35
|
-
```
|
|
36
|
-
npm install -S github:functionalscript/functionalscript
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
## 3. Module Structure
|
|
40
|
-
|
|
41
|
-
A module is a file with the `.js` extension. It contains three parts: references to other modules, definitions, and exports. For example
|
|
42
|
-
|
|
43
|
-
`./first.f.mjs`
|
|
44
|
-
```js
|
|
45
|
-
// 1. references
|
|
46
|
-
import math from 'math'
|
|
47
|
-
|
|
48
|
-
// 2. definitions
|
|
49
|
-
const myConst = 42
|
|
50
|
-
// addition(a)(b) = a + b
|
|
51
|
-
const addition = a => b => a + b
|
|
52
|
-
const add42 = addition(42)
|
|
53
|
-
const _10digitsOfPi = math.calculatePi(10)
|
|
54
|
-
|
|
55
|
-
// 3. exports
|
|
56
|
-
export default {
|
|
57
|
-
addition,
|
|
58
|
-
add42,
|
|
59
|
-
_10digitsOfPi,
|
|
60
|
-
}
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
`./second.f.mjs`
|
|
64
|
-
```js
|
|
65
|
-
// 1. references
|
|
66
|
-
import first from './first.f.mjs'
|
|
67
|
-
|
|
68
|
-
// 2. definitions
|
|
69
|
-
const _42plus7 = first.add42(7)
|
|
70
|
-
|
|
71
|
-
// 3. exports
|
|
72
|
-
export default {
|
|
73
|
-
_42plus7,
|
|
74
|
-
}
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
## 4. References To Other Modules
|
|
78
|
-
|
|
79
|
-
The format of references is `import ANYNAME from 'PATH_TO_A_MODULE'`. For example,
|
|
80
|
-
|
|
81
|
-
```js
|
|
82
|
-
import math from 'math'
|
|
83
|
-
import algebra from 'math/algebra'
|
|
84
|
-
import localFile from '../some-directory/some-file.f.mjs'
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
## 5. Definitions
|
|
88
|
-
|
|
89
|
-
The format of definitions is `const NAME = EXPRESSION`, where the `EXPRESSION` is a subset of [JavaScript expressions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators).
|
|
90
|
-
|
|
91
|
-
```js
|
|
92
|
-
const myConst = 42
|
|
93
|
-
const functionDouble = a => a * 2
|
|
94
|
-
const structure = { name: "John", surname: "Smith" }
|
|
95
|
-
const array = [1, 2, 3]
|
|
96
|
-
const nestedStructure = {
|
|
97
|
-
address: null,
|
|
98
|
-
serialNumber: "123-45-78",
|
|
99
|
-
sum: 14 + myConst + functionDouble(4),
|
|
100
|
-
moreInfo: {
|
|
101
|
-
name: "Ivan",
|
|
102
|
-
surname: "Terrible",
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
See [Expressions](#7-Expressions).
|
|
108
|
-
|
|
109
|
-
### 6. Exports
|
|
110
|
-
|
|
111
|
-
The format of exports is `export default { A_LIST_OF_EXPORTED_DEFINITIONS }`. There should be only one `export default` at
|
|
112
|
-
the end of a FunctionalScript file. For example,
|
|
113
|
-
|
|
114
|
-
```js
|
|
115
|
-
export default {
|
|
116
|
-
nestedStructure,
|
|
117
|
-
array,
|
|
118
|
-
structure,
|
|
119
|
-
}
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
## 7. Expressions
|
|
123
|
-
|
|
124
|
-
Expressions could fall under these categories:
|
|
125
|
-
|
|
126
|
-
- Literals:
|
|
127
|
-
- Number Literals, e.g. `0`, `3.14`, `4e8`
|
|
128
|
-
- Boolean Literals: `true` or `false`
|
|
129
|
-
- A `null` Literal
|
|
130
|
-
- An `undefined` Literal
|
|
131
|
-
- String Literals, e.g. `"Hello world!"`
|
|
132
|
-
- Complex Structures
|
|
133
|
-
- Arrays, e.g. `[2, 5]`
|
|
134
|
-
- Objects, e.g. `{ a: "Hello", b: "world!" }`
|
|
135
|
-
- Arrow functions, e.g. `x => x * 2`
|
|
136
|
-
- Operators
|
|
137
|
-
- Comparison Operators: `===`, `!==`, `>`, `>=`, `<`, `<=`
|
|
138
|
-
- Arithmetic Operators: `+`, `-`, `*`, `/`, `%`, `**`
|
|
139
|
-
- Bitwise Operators: `&`, `|`, `^`, `~`, `<<`, `>>`, `>>>`
|
|
140
|
-
- Logical Operators: `&&`, `||`, `!`, `??`
|
|
141
|
-
- Conditional Operator, e.g. `condition ? val1 : val2`
|
|
142
|
-
- Template Literals, e.g. `string ${expression}`
|
|
143
|
-
- `typeof`
|
|
144
|
-
- Relations Operators: `in`, `instanceof`.
|
|
145
|
-
- Member Operators: `.`, `[]`.
|
|
146
|
-
|
|
147
|
-
**Note:** the `.` member operator has prohibited property names, such as `constructor` and `push`. To access such properties, it's recommended to use the
|
|
148
|
-
[Object.getOwnPropertyDescriptor](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Reflect/getOwnPropertyDescriptor) function.
|
|
149
|
-
`[]` accepts only numbers. For example `+'0'`
|
|
150
|
-
|
|
151
|
-
## 8. Arrow Functions
|
|
152
|
-
|
|
153
|
-
An arrow function is also known as [a lambda function](https://en.wikipedia.org/wiki/Anonymous_function).
|
|
154
|
-
The format of an arrow function is `ARGUMENT_NAME => FUNCTION_BODY`. An arrow function must have either a single argument or no arguments at all. For example
|
|
155
|
-
|
|
156
|
-
```js
|
|
157
|
-
x => x * 2
|
|
158
|
-
a => a + 4
|
|
159
|
-
s => `template literal ${s}`
|
|
160
|
-
a => b => a + b // an arrow functions that returns another arrow functions.
|
|
161
|
-
() => 'hello' // an arrow function with no arguments
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
A function body is either an expression or a block statement. A block statement format is `{ A_LIST_OF_STATEMENTS }`. For example
|
|
165
|
-
|
|
166
|
-
```js
|
|
167
|
-
// a function with one argument and a block statement
|
|
168
|
-
const f = x => {
|
|
169
|
-
const a = 2 + x
|
|
170
|
-
const r = a + 4
|
|
171
|
-
return r
|
|
172
|
-
}
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
## 9. Statements
|
|
176
|
-
|
|
177
|
-
`{ A_LIST_OF_STATEMENTS }` is one or many statements separated by the newline control character. One of these statements mentioned earlier was [definition](#5-Definitions), also known as a [const](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/const) statement. The other statements are described below.
|
|
178
|
-
|
|
179
|
-
### 9.1. Let
|
|
180
|
-
|
|
181
|
-
[Let](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let) declares a local mutable alias for immutable objects. For example
|
|
182
|
-
|
|
183
|
-
```js
|
|
184
|
-
let x = [5]
|
|
185
|
-
// you can assign another immutable object to the alias at any time.
|
|
186
|
-
x = [3, 4]
|
|
187
|
-
//but you can't change the properties of the immutable object.
|
|
188
|
-
x[0] = 3 // < invalid
|
|
189
|
-
//let aliases can not be referenced from another arrow function.
|
|
190
|
-
const f = () => x // < invalid
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
### 9.2. Return
|
|
194
|
-
|
|
195
|
-
[Return](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/return)
|
|
196
|
-
|
|
197
|
-
### 9.3. If...Else
|
|
198
|
-
|
|
199
|
-
[If...Else](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/if...else)
|
|
200
|
-
|
|
201
|
-
### 9.4. Switch
|
|
202
|
-
|
|
203
|
-
[Switch](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch)
|
|
204
|
-
|
|
205
|
-
### 9.5. Throw
|
|
206
|
-
|
|
207
|
-
[Throw](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/throw). FunctionalScript allows to throw exceptions, but the language has no syntax to catch them. Developers should only use the 'throw' statement in non-recoverable situations. Throwing an exception could be compared to [panic in Rust](https://doc.rust-lang.org/std/macro.panic.html).
|
|
208
|
-
|
|
209
|
-
### 9.6. While
|
|
210
|
-
|
|
211
|
-
[While](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/while)
|
|
212
|
-
|
|
213
|
-
### 9.7. Block
|
|
214
|
-
|
|
215
|
-
[Block](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/block)
|
|
216
|
-
|
|
217
|
-
## 10. Generators
|
|
218
|
-
|
|
219
|
-
For compatibility reason, FunctionalScript allows to create generators as implementation of `[Symbol.iterator]` function. However, it doesn't allow to read the `[Symbol.iterator]` property. For example
|
|
220
|
-
|
|
221
|
-
This code is allowed
|
|
222
|
-
|
|
223
|
-
```js
|
|
224
|
-
/** @type {<T>(list: List<T>) => Iterable<T>} */
|
|
225
|
-
const iterable = list => ({
|
|
226
|
-
*[Symbol.iterator]() {
|
|
227
|
-
let i = list
|
|
228
|
-
while (true) {
|
|
229
|
-
const r = next(i)
|
|
230
|
-
if (r === null) { return }
|
|
231
|
-
yield r.first
|
|
232
|
-
i = r.tail
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
})
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
The following code is not allowed, because `iterator` is a mutated object by design in JavaScript.
|
|
239
|
-
|
|
240
|
-
```js
|
|
241
|
-
const it = [0, 1, 2][Symbol.iterator] //< compilation error.
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
Use `Iterable` instead of `Iterator`.
|
|
245
|
-
|
|
246
|
-
```js
|
|
247
|
-
const x = () => {
|
|
248
|
-
const a = [0, 1, 2] // iterable
|
|
249
|
-
let sum = 0;
|
|
250
|
-
for (let i in a) {
|
|
251
|
-
sum = sum + i
|
|
252
|
-
}
|
|
253
|
-
return sum;
|
|
254
|
-
}
|
|
255
|
-
```
|
package/doc/README.md
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
# Documentation
|
|
2
|
-
|
|
3
|
-
FunctionalScript files have `.f.mjs` file extensions because it's using the ES module system.
|
|
4
|
-
|
|
5
|
-
## 1. Language
|
|
6
|
-
|
|
7
|
-
### 1.1. Exports
|
|
8
|
-
|
|
9
|
-
```js
|
|
10
|
-
export default 'Hello world!'
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
```js
|
|
14
|
-
export default { a: 'hello', b: 42 }
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
```js
|
|
18
|
-
export default x => x * x
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
### 1.2. Reference Another Module
|
|
22
|
-
|
|
23
|
-
#### 1.2.1. Local File
|
|
24
|
-
|
|
25
|
-
```js
|
|
26
|
-
import x from './folder/main.f.mjs'
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
### 1.2.2. External Module
|
|
30
|
-
|
|
31
|
-
Run `npm install -D github:USER/REPO`
|
|
32
|
-
|
|
33
|
-
```js
|
|
34
|
-
import x from `REPO/DIR/FILE.f.mjs`
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
### 1.3. Functions
|
|
38
|
-
|
|
39
|
-
```js
|
|
40
|
-
const f = x => x * x
|
|
41
|
-
const fResult = f(42)
|
|
42
|
-
|
|
43
|
-
const plus = a => b => a + b
|
|
44
|
-
const plusResult = plus(a)(b)
|
|
45
|
-
|
|
46
|
-
const sum = ar => ar.reduce((a, i) => a + i, 0)
|
|
47
|
-
const sumResult = sum([1, 2, 3])
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
## 2. Advanced
|
|
51
|
-
|
|
52
|
-
### 2.1. Generators
|
|
53
|
-
|
|
54
|
-
```js
|
|
55
|
-
const range5 = {*[System.iterator]() {
|
|
56
|
-
yield 0
|
|
57
|
-
yield 1
|
|
58
|
-
yield 2
|
|
59
|
-
yield 3
|
|
60
|
-
}}
|
|
61
|
-
```
|
package/doc/byte-code.md
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
# Byte Code
|
|
2
|
-
|
|
3
|
-
This format is designed for fast and straightforward serialization and doesn't depend on a particular VM implementation.
|
|
4
|
-
|
|
5
|
-
**Requirements:**
|
|
6
|
-
- VM serializer/deserializer should be very simple.
|
|
7
|
-
- string: UTF16
|
|
8
|
-
- number: in a binary format
|
|
9
|
-
- bigint: in a binary format
|
|
10
|
-
- len: u32
|
|
11
|
-
- the byte code doesn't know anything about importing modules or I/O functions.
|
|
12
|
-
- the byte code shouldn't contain syntax sugar.
|
|
13
|
-
- serialized in a byte array so we can save it into a file. One byte is one unit.
|
|
14
|
-
- least-significant byte first.
|
|
15
|
-
|
|
16
|
-
```rust
|
|
17
|
-
struct Array<T> {
|
|
18
|
-
len: u32,
|
|
19
|
-
array: [T; self.len],
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
type String = Array<u16>;
|
|
23
|
-
|
|
24
|
-
// LSB first.
|
|
25
|
-
type BigUInt = Array<u64>;
|
|
26
|
-
|
|
27
|
-
type Object = Array<(String, Any)>;
|
|
28
|
-
|
|
29
|
-
// This is the main structure for serialization.
|
|
30
|
-
type Code = Array<u8>;
|
|
31
|
-
|
|
32
|
-
struct Function {
|
|
33
|
-
length: u32
|
|
34
|
-
code: Code
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// This structure is not for serialization because
|
|
38
|
-
// a serialized module should resolve all imports.
|
|
39
|
-
struct Module {
|
|
40
|
-
import: Array<String>
|
|
41
|
-
code: Code
|
|
42
|
-
}
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
|format|any |Tag| |
|
|
46
|
-
|------|---------------|---|-----------------------|
|
|
47
|
-
|JSON |null | 00| |
|
|
48
|
-
| |number | 01|u64 |
|
|
49
|
-
| |false | 02| |
|
|
50
|
-
| |true | 03| |
|
|
51
|
-
| |string | 04|String |
|
|
52
|
-
| |object | 05|Object |
|
|
53
|
-
| |array | 06|Array<Any> |
|
|
54
|
-
|DJS |ref | 07|u32 |
|
|
55
|
-
| |positive_bigint| 08|BigUInt |
|
|
56
|
-
| |negative_bigint| 09|BigUInt |
|
|
57
|
-
|FJS |function | 0A|Function |
|
|
58
|
-
| |arg_ref | 0B|u32 |
|
|
59
|
-
| |undefined | 0C| |
|
package/doc/fa.md
DELETED
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
# FA
|
|
2
|
-
|
|
3
|
-
```
|
|
4
|
-
F ::= A 'hello'
|
|
5
|
-
F ::= A 'help'
|
|
6
|
-
```
|
|
7
|
-
|
|
8
|
-
## Classic FA
|
|
9
|
-
|
|
10
|
-
```
|
|
11
|
-
S0 ::= A 'h'
|
|
12
|
-
S1 ::= S0 'e'
|
|
13
|
-
S2 ::= S1 'l'
|
|
14
|
-
S3 ::= S2 'l'
|
|
15
|
-
F ::= S3 'o'
|
|
16
|
-
|
|
17
|
-
X0 ::= A 'h'
|
|
18
|
-
X1 ::= X0 'e'
|
|
19
|
-
X2 ::= X1 'l'
|
|
20
|
-
F ::= X2 'p'
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## DFA
|
|
24
|
-
|
|
25
|
-
```
|
|
26
|
-
{S0,X0} = A 'h'
|
|
27
|
-
{S1,X1} ::= {S0,X0} 'e'
|
|
28
|
-
{S2,X2} ::= {S1,X1} 'l'
|
|
29
|
-
S3 ::= {S2,X2} 'l'
|
|
30
|
-
F ::= {S2,X2} 'p'
|
|
31
|
-
F ::= S3 'o'
|
|
32
|
-
|
|
33
|
-
P0 = A 'h'
|
|
34
|
-
P1 ::= P0 'e'
|
|
35
|
-
P2 ::= P1 'l'
|
|
36
|
-
S3 ::= P2 'l'
|
|
37
|
-
F ::= P2 'p'
|
|
38
|
-
F ::= S3 'o'
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
## Tokenizer FA
|
|
42
|
-
|
|
43
|
-
```
|
|
44
|
-
T ::= I 'true' // T0, T1, T2
|
|
45
|
-
F ::= I 'false' // F0, F2, F2, F3
|
|
46
|
-
N ::= I 'null' // N0, N1, N2
|
|
47
|
-
Id ::= I letter
|
|
48
|
-
Id ::= Id letter
|
|
49
|
-
Id ::= Id digit
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## Tokenizer DFA
|
|
53
|
-
|
|
54
|
-
```
|
|
55
|
-
{T0,Id} = I 't'
|
|
56
|
-
{T1,Id} = {T0,Id} 'r'
|
|
57
|
-
Id = {T0,Id} letter(except 'r')
|
|
58
|
-
Id = {T0,Id} digit
|
|
59
|
-
|
|
60
|
-
{a..b}{c..d}{e..f}
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
```js
|
|
64
|
-
const t0 = [[init, one('t')]]
|
|
65
|
-
const t1 = [[t0, one('r')]]
|
|
66
|
-
const t2 = [[t1, one('u')]]
|
|
67
|
-
const t = [[t2, one('e')]]
|
|
68
|
-
|
|
69
|
-
const id = [
|
|
70
|
-
[init, letter]
|
|
71
|
-
[() => id, letter]
|
|
72
|
-
[() => id, digit]
|
|
73
|
-
]
|
|
74
|
-
|
|
75
|
-
const dfa = ([t, f, n, id]) => ?
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
## Set
|
|
79
|
-
|
|
80
|
-
```js
|
|
81
|
-
const letter = byteSet(['_', '$', ['a', 'z'], ['A', 'Z']])
|
|
82
|
-
```
|
|
83
|
-
|
|
84
|
-
Letters and digits
|
|
85
|
-
|
|
86
|
-
| | |
|
|
87
|
-
|------|------------|
|
|
88
|
-
|`$` |`0x24` |
|
|
89
|
-
|`0..9`|`0x30..0x39`|
|
|
90
|
-
|`A..Z`|`0x41..0x5A`|
|
|
91
|
-
|`_` |`0x5F` |
|
|
92
|
-
|`a..z`|`0x61..0x7A`|
|
|
93
|
-
|
|
94
|
-
## Bit set
|
|
95
|
-
|
|
96
|
-
For a byte, it is an array of 8 uint32, bigint (0..2^256-1), or string of 16 characters.
|
|
97
|
-
|
|
98
|
-
### 16 bit set.
|
|
99
|
-
|
|
100
|
-
It can use an intermediate state.
|
|
101
|
-
|
|
102
|
-
| | | |
|
|
103
|
-
|---|-------|--------|
|
|
104
|
-
|`2`|`4` |`$` |
|
|
105
|
-
|`3`|`..9` |`0..9` |
|
|
106
|
-
|`4`|`1..` |`A..O` |
|
|
107
|
-
|`5`|`..A,F`|`P..Z,_`|
|
|
108
|
-
|`6`|`1..` |`a..o` |
|
|
109
|
-
|`7`|`..A` |`p..z` |
|
|
110
|
-
|
|
111
|
-
```js
|
|
112
|
-
const init = [
|
|
113
|
-
_, _, i2, _,
|
|
114
|
-
i4, i5, i4, i7,
|
|
115
|
-
_, _, _, _,
|
|
116
|
-
_, _, _, _]
|
|
117
|
-
|
|
118
|
-
const i2 = [
|
|
119
|
-
_, _, _, _,
|
|
120
|
-
id, _, _, _,
|
|
121
|
-
_, _, _, _,
|
|
122
|
-
_, _, _, _]
|
|
123
|
-
|
|
124
|
-
const i3 = [
|
|
125
|
-
id, id, id, id,
|
|
126
|
-
id, id, id, id,
|
|
127
|
-
id, id, _, _,
|
|
128
|
-
_, _, _, _]
|
|
129
|
-
|
|
130
|
-
const i4 = [
|
|
131
|
-
_, id, id, id,
|
|
132
|
-
id, id, id, id,
|
|
133
|
-
id, id, id, id,
|
|
134
|
-
id, id, id, id]
|
|
135
|
-
|
|
136
|
-
const i5 = [
|
|
137
|
-
id, id, id, id,
|
|
138
|
-
id, id, id, id,
|
|
139
|
-
id, id, id, _,
|
|
140
|
-
_, _, _, id]
|
|
141
|
-
|
|
142
|
-
const i7 = [
|
|
143
|
-
id, id, id, id,
|
|
144
|
-
id, id, id, id,
|
|
145
|
-
id, id, id, _,
|
|
146
|
-
_, _, _, _]
|
|
147
|
-
|
|
148
|
-
const id = [
|
|
149
|
-
_, _, i2, i3,
|
|
150
|
-
i4, i5, i4, i7,
|
|
151
|
-
_, _, _, _,
|
|
152
|
-
_, _, _, _]
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
```js
|
|
156
|
-
const init =
|
|
157
|
-
000_000_001_000
|
|
158
|
-
010_011_100_101
|
|
159
|
-
000_000_000_000
|
|
160
|
-
000_000_000_000
|
|
161
|
-
|
|
162
|
-
const i = [
|
|
163
|
-
// 1
|
|
164
|
-
0000_1000_0000_0000,
|
|
165
|
-
// 2
|
|
166
|
-
1111_1111_1100_0000,
|
|
167
|
-
// 3
|
|
168
|
-
0111_1111_1111_1111,
|
|
169
|
-
// 4
|
|
170
|
-
1111_1111_1110_0001,
|
|
171
|
-
// 5
|
|
172
|
-
1111_1111_1110_0000,
|
|
173
|
-
]
|
|
174
|
-
```
|
package/doc/predefined.md
DELETED
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
# Predefined Object And Properties
|
|
2
|
-
|
|
3
|
-
## Global Objects
|
|
4
|
-
|
|
5
|
-
Global objects. Global objects can't be assigned to something `const r = Object`. They can only be used as namespaces `Object.getOwnProperties()`.
|
|
6
|
-
|
|
7
|
-
### Value properties
|
|
8
|
-
|
|
9
|
-
- [x] `Infinity`
|
|
10
|
-
- [x] `NaN`
|
|
11
|
-
- [ ] `undefined`
|
|
12
|
-
- [ ] `globalThis`
|
|
13
|
-
|
|
14
|
-
### Function properties
|
|
15
|
-
|
|
16
|
-
- [ ] `eval`
|
|
17
|
-
- [x] `isFinite()`
|
|
18
|
-
- [x] `isNan()`
|
|
19
|
-
- [x] `parseFloat()`
|
|
20
|
-
- [x] `parseInt()`
|
|
21
|
-
- [ ] `encodeURI()`
|
|
22
|
-
- [ ] `encodeURIComponent()`
|
|
23
|
-
- [ ] `decodeURI()`
|
|
24
|
-
- [ ] `decodeURIComponent()`
|
|
25
|
-
|
|
26
|
-
### Fundamental objects
|
|
27
|
-
|
|
28
|
-
- [x] `Object`. For example `Object.entries`, `Object.fromEntries`.
|
|
29
|
-
- [ ] `Function`
|
|
30
|
-
- [ ] `Boolean`
|
|
31
|
-
- [ ] `Symbol`
|
|
32
|
-
|
|
33
|
-
### Error objects
|
|
34
|
-
|
|
35
|
-
- [ ] `Number`
|
|
36
|
-
- [ ] `BigInt`
|
|
37
|
-
- [ ] `Math`
|
|
38
|
-
- [ ] `Date`
|
|
39
|
-
|
|
40
|
-
### Text processing
|
|
41
|
-
|
|
42
|
-
- [ ] `String`
|
|
43
|
-
- [ ] `RegExp`
|
|
44
|
-
|
|
45
|
-
### Indexed collections:
|
|
46
|
-
|
|
47
|
-
- [x] `Array`. For example `x instanceof Array`
|
|
48
|
-
- [ ] `Int8Array`
|
|
49
|
-
- [ ] `UInt8Array`
|
|
50
|
-
- [ ] `UInt8ClampedArray`
|
|
51
|
-
- [ ] `Int16Array`
|
|
52
|
-
- [ ] `UInt16Array`
|
|
53
|
-
- [ ] `Int32Array`
|
|
54
|
-
- [ ] `UInt32Array`
|
|
55
|
-
- [ ] `Float32Array`
|
|
56
|
-
- [ ] `Float64Array`
|
|
57
|
-
- [ ] `BigInt64Array`
|
|
58
|
-
- [ ] `BigUint64Array`
|
|
59
|
-
|
|
60
|
-
### Keyed collections:
|
|
61
|
-
|
|
62
|
-
- [ ] `Map`
|
|
63
|
-
- [ ] `Set`
|
|
64
|
-
- [ ] `WeakMap`
|
|
65
|
-
- [ ] `WeakSet`
|
|
66
|
-
|
|
67
|
-
### Structured data:
|
|
68
|
-
|
|
69
|
-
- [ ] `ArrayBuffer`
|
|
70
|
-
- [ ] `SharedArrayBuffer`
|
|
71
|
-
- [ ] `Atomics`
|
|
72
|
-
- [ ] `DataView`
|
|
73
|
-
- [x] `JSON`. For example `JSON.stringify`
|
|
74
|
-
|
|
75
|
-
### Control abstraction objects
|
|
76
|
-
|
|
77
|
-
- [ ] `Promise`
|
|
78
|
-
- [ ] `Generator`
|
|
79
|
-
- [ ] `GeneratorFunction`
|
|
80
|
-
- [ ] `AsyncFunction`
|
|
81
|
-
- [ ] `AsyncGeneratorFunction`
|
|
82
|
-
|
|
83
|
-
### Reflection
|
|
84
|
-
|
|
85
|
-
- [ ] `Reflect`
|
|
86
|
-
- [ ] `Proxy`
|
|
87
|
-
|
|
88
|
-
### Internalization
|
|
89
|
-
|
|
90
|
-
- [ ] `Intl`
|
|
91
|
-
|
|
92
|
-
### WebAssembly
|
|
93
|
-
|
|
94
|
-
- [ ] `WebAssembly`
|
|
95
|
-
- [ ] `WebAssembly.Module`
|
|
96
|
-
- [ ] `WebAssembly.Instance`
|
|
97
|
-
- [ ] `WebAssembly.Memory`
|
|
98
|
-
- [ ] `WebAssembly.Table`
|
|
99
|
-
- [ ] `WebAssembly.CompileError`
|
|
100
|
-
- [ ] `WebAssembly.LinkError`
|
|
101
|
-
- [ ] `WebAssembly.RuntimeError`
|
|
102
|
-
|
|
103
|
-
## Prohibited Properties
|
|
104
|
-
|
|
105
|
-
Allowed types:
|
|
106
|
-
|
|
107
|
-
- object `{}`
|
|
108
|
-
- `null` has no properties
|
|
109
|
-
- array `[]`
|
|
110
|
-
- number `-3`
|
|
111
|
-
- bigint `42n`
|
|
112
|
-
- string `"xx"`
|
|
113
|
-
- boolean `true`
|
|
114
|
-
- function `x => x * x`
|
|
115
|
-
- `undefined` has no properties
|
|
116
|
-
|
|
117
|
-
### Object
|
|
118
|
-
|
|
119
|
-
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object
|
|
120
|
-
|
|
121
|
-
- [ ] ! `constructor`. The property can create a new function. For example
|
|
122
|
-
```js
|
|
123
|
-
const f = (() => null).constructor('a', 'return a * a')
|
|
124
|
-
```
|
|
125
|
-
- [ ] deprecated `__proto__`
|
|
126
|
-
- [ ] ! deprecated `__defineGetter__`. The property can mutate an object.
|
|
127
|
-
- [ ] ! deprecated `__defineSetter__`. The property can mutate an object.
|
|
128
|
-
- [ ] deprecated `__lookupGetter__`
|
|
129
|
-
- [ ] deprecated `__lookupSetter__`
|
|
130
|
-
|
|
131
|
-
### Array
|
|
132
|
-
|
|
133
|
-
These properties can mutate an array:
|
|
134
|
-
|
|
135
|
-
- [ ] ! `copyWithin`.
|
|
136
|
-
- [ ] ! `fill`
|
|
137
|
-
- [ ] ! `pop`
|
|
138
|
-
- [ ] ! `push`
|
|
139
|
-
- [ ] ! `reverse`
|
|
140
|
-
- [ ] ! `shift`
|
|
141
|
-
- [ ] ! `sort`
|
|
142
|
-
- [ ] ! `splice`
|
|
143
|
-
- [ ] ! `unshift`
|
package/doc/proposals.md
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# ECMAScripts Proposals
|
|
2
|
-
|
|
3
|
-
ECMAScript proposals that may affect FunctionalScript
|
|
4
|
-
|
|
5
|
-
- Type Annotations: https://github.com/tc39/proposal-type-annotations
|
|
6
|
-
```js
|
|
7
|
-
const add = (a: bigint) => (b: bigint) => a + b
|
|
8
|
-
```
|
|
9
|
-
- Deeply Immutable Record and Tuples: https://github.com/tc39/proposal-record-tuple
|
|
10
|
-
```js
|
|
11
|
-
const r = #{ x: 4, y: "s" }
|
|
12
|
-
const t = #[5, "hello"]
|
|
13
|
-
```
|
|
14
|
-
Because these types are deeply immutable and the equality operator '===' works as deep equality, it's a good candidate for content-addressable type system.
|
|
15
|
-
- Pipeline operator https://github.com/tc39/proposal-pipeline-operator
|
|
16
|
-
```js
|
|
17
|
-
const double = a => a + a
|
|
18
|
-
const munis1 = a => a - 1
|
|
19
|
-
const f = a => a |> double(%) |> minus1(%)
|
|
20
|
-
```
|
|
21
|
-
I, Sergey, still prefer F# pipeline operator and strongly believe that it's possible to have both syntax in the language.
|