Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
134 commits
Select commit Hold shift + click to select a range
69dbf6a
docs(compiler): define semantic baseline and IR architecture
pchalamet Aug 23, 2026
06bcc87
refactor(language): expose resolved expression types
pchalamet Aug 23, 2026
417ad50
feat(compiler): introduce validated typed HIR
pchalamet Aug 23, 2026
b5ba5b4
feat(compiler): execute core FScript LIR
pchalamet Aug 23, 2026
0a9bd52
feat(go): generate minimal FScript Go projects
pchalamet Aug 23, 2026
60d0f64
feat(compiler): add versioned LIR artifacts
pchalamet Aug 23, 2026
429cb44
feat(cli): add IR and Go compile targets
pchalamet Aug 23, 2026
0a95e42
feat(compiler): execute aggregate LIR values
pchalamet Aug 23, 2026
a3d9d8a
feat(compiler): lower lexical bindings and failures
pchalamet Aug 23, 2026
461d50e
feat(compiler): lower pattern decision trees
pchalamet Aug 23, 2026
e5e1cba
feat(compiler): execute collection and data expressions
pchalamet Aug 23, 2026
3eb070c
feat(compiler): preserve declared unions
pchalamet Aug 23, 2026
be74622
feat(compiler): execute deterministic ordered maps
pchalamet Aug 23, 2026
2b9906b
feat(compiler): initialize recursive closure groups
pchalamet Aug 23, 2026
f3cf99c
feat(compiler): add portable runtime intrinsics
pchalamet Aug 23, 2026
7889dc2
feat(compiler): retain inert host extern linkage
pchalamet Aug 23, 2026
2634b34
refactor(compiler): split LIR consumers into assemblies
pchalamet Aug 23, 2026
365dfda
feat(compiler): lower iteration and binding patterns
pchalamet Aug 23, 2026
6a0dc4f
test(compiler): isolate backend consumer suites
pchalamet Aug 23, 2026
b81097e
feat(go): execute higher-order runtime intrinsics
pchalamet Aug 23, 2026
0a64b7b
feat(compiler): preserve top-level execution order
pchalamet Aug 23, 2026
19f9810
feat(compiler): execute local recursive groups
pchalamet Aug 23, 2026
a539ad1
feat(compiler): execute map and type patterns
pchalamet Aug 23, 2026
feeb1a0
refactor(language): resolve typed symbol references
pchalamet Aug 23, 2026
8d4ae46
feat(compiler): harden versioned IR metadata
pchalamet Aug 23, 2026
a11e59e
feat(compiler): supply runtime execution context
pchalamet Aug 23, 2026
a469559
feat(go): emit initial Go import bindings
pchalamet Aug 23, 2026
783d77b
test(go): enforce FScript semantic conformance
pchalamet Aug 23, 2026
134683c
feat(compiler): validate typed IR invariants
pchalamet Aug 23, 2026
433cc12
feat(compiler): preserve deferred task linkage
pchalamet Aug 23, 2026
4505c26
refactor(compiler): separate extern descriptions
pchalamet Aug 23, 2026
fbcb1ba
feat(compiler): preserve portable console output
pchalamet Aug 23, 2026
b7792a2
feat(go): emit canonical formatted projects
pchalamet Aug 23, 2026
00f1c86
feat(compiler): expose LIR optimization stage
pchalamet Aug 23, 2026
8c8bde8
feat(go): preserve tuple representations
pchalamet Aug 23, 2026
0c7b8fe
feat(go): adapt imported record bindings
pchalamet Aug 23, 2026
4710009
refactor(language): expose recursive resolved expressions
pchalamet Aug 23, 2026
dbacb8b
feat(compiler): record explicit closure captures
pchalamet Aug 23, 2026
e8d62a3
feat(compiler): lift LIR function bodies
pchalamet Aug 23, 2026
7b95347
feat(cli): harden compiler output commands
pchalamet Aug 23, 2026
0da1967
feat(go): reject reachable host externs
pchalamet Aug 23, 2026
fe8eb5f
feat(compiler): preserve structured export metadata
pchalamet Aug 23, 2026
6531d82
test(compiler): snapshot canonical typed IR
pchalamet Aug 23, 2026
5c3918b
feat(go): preserve named record representations
pchalamet Aug 23, 2026
b1dc0cf
refactor(compiler): preserve resolved symbol identities
pchalamet Aug 23, 2026
e9201da
feat(go): emit concrete declared unions
pchalamet Aug 23, 2026
ad1a8d2
test(go): broaden structural conformance
pchalamet Aug 23, 2026
ecf6df8
feat(language): retain structured declaration attributes
pchalamet Aug 23, 2026
72eeed9
feat(compiler): preserve default runtime extern linkage
pchalamet Aug 23, 2026
05d2476
refactor(language): emit semantic resolved trees
pchalamet Aug 23, 2026
195df67
fix(go): preserve intrinsic and result semantics
pchalamet Aug 23, 2026
7937f39
feat(language): retain custom declaration attributes
pchalamet Aug 23, 2026
0ccb079
refactor(go): execute serialized pattern plans
pchalamet Aug 23, 2026
a2eea80
fix(compiler): short-circuit LIR execution failures
pchalamet Aug 23, 2026
573699b
fix(go): validate LIR before generation
pchalamet Aug 23, 2026
bb489ee
test(compiler): harden artifact and Go gates
pchalamet Aug 23, 2026
6d9c3ab
fix(compiler): preserve ordered map construction
pchalamet Aug 23, 2026
723365f
refactor(language): project legacy typed inference
pchalamet Aug 23, 2026
14a6504
feat(compiler): lower executable pattern plans
pchalamet Aug 23, 2026
d90b73b
fix(compiler): compile complete sample semantics
pchalamet Aug 23, 2026
d95ab32
fix(compiler): harden IR validation invariants
pchalamet Aug 23, 2026
34fac25
test(go): complete structural failure conformance
pchalamet Aug 23, 2026
dcbd84b
fix(language): preserve top-level shadowing identities
pchalamet Aug 23, 2026
af81c4f
feat(language): short circuit boolean operators
pchalamet Aug 23, 2026
1abf299
test(compiler): cover runtime equality boundaries
pchalamet Aug 23, 2026
1c78898
fix(compiler): complete numeric and list failures
pchalamet Aug 23, 2026
68b42f2
fix(go): preserve floating point runtime semantics
pchalamet Aug 23, 2026
20677d3
docs(compiler): specify HIR LIR and execution workflows
pchalamet Aug 23, 2026
c38d637
docs(website): add Go and IR compiler paths
pchalamet Aug 23, 2026
07babcb
feat(backends): support portable console input
pchalamet Aug 23, 2026
2536610
fix(go): compare erased numeric values
pchalamet Aug 23, 2026
7d91b34
docs(go): define zero-erasure representation policy
pchalamet Aug 23, 2026
2845aec
feat(go): specialize reachable HM instantiations
pchalamet Aug 23, 2026
0885e67
feat(go): monomorphize typed LIR for Go
pchalamet Aug 23, 2026
109e04c
feat(go): emit typed functions and core aggregates
pchalamet Aug 23, 2026
fe0b2a5
feat(go): emit typed records unions maps and patterns
pchalamet Aug 23, 2026
004e323
feat(go): specialize builtins equality and formatting
pchalamet Aug 23, 2026
2f616e1
refactor(go): remove erased runtime representations
pchalamet Aug 23, 2026
c6501ae
test(go): enforce zero-erasure conformance
pchalamet Aug 23, 2026
a3a25c2
fix(go): specialize contextual polymorphic values
pchalamet Aug 24, 2026
93992c5
feat(go): support filesystem regex and tasks
pchalamet Aug 24, 2026
b61c529
docs(website): document host standard library
pchalamet Aug 24, 2026
1ab0bea
fix(go): widen structural record updates
pchalamet Aug 24, 2026
a373ddc
feat(compiler): optimize reachable LIR
pchalamet Aug 24, 2026
97f49e0
feat(compiler): trampoline proper tail calls
pchalamet Aug 24, 2026
7e702fe
feat(go): lower self tail calls to loops
pchalamet Aug 24, 2026
2fea39f
feat(go): emit statement-oriented control flow
pchalamet Aug 24, 2026
d590158
feat(go): raise saturated function applications
pchalamet Aug 24, 2026
fbf2080
feat(go): fuse safe collection pipelines
pchalamet Aug 24, 2026
a49262f
refactor(go): remove static pattern branches
pchalamet Aug 24, 2026
54e1e78
feat(go): specialize structural record representations
pchalamet Aug 24, 2026
1d52262
fix(go): convert nested record option fields
pchalamet Aug 24, 2026
af11033
refactor(go): fold constant map pattern checks
pchalamet Aug 24, 2026
063f2e7
refactor(go): omit unused pattern bindings
pchalamet Aug 24, 2026
d8d9fdd
feat(go): emit saturated intrinsic applications
pchalamet Aug 24, 2026
5a02e73
feat(go): flatten immutable list construction
pchalamet Aug 24, 2026
8066fab
feat(go): optimize closed specialized programs
pchalamet Aug 24, 2026
b18cae5
feat(go): simplify ordered map patterns
pchalamet Aug 24, 2026
a872ecf
refactor(go): streamline tail match emission
pchalamet Aug 24, 2026
a57accb
feat(go): loop mutual tail recursion
pchalamet Aug 24, 2026
183476c
feat(go): split generated source modules
pchalamet Aug 24, 2026
d3f180f
docs(website): remove compiler internals pages
pchalamet Aug 24, 2026
7226fad
docs(website): give homepage a distinct voice
pchalamet Aug 24, 2026
5c31daa
docs(website): make homepage stories vivid
pchalamet Aug 24, 2026
4303cb9
docs(website): focus JavaScript story on live rules
pchalamet Aug 24, 2026
7584351
docs(website): simplify homepage introductions
pchalamet Aug 24, 2026
0d7e6af
docs(website): remove oversized homepage scenes
pchalamet Aug 24, 2026
08fb642
feat(interpreter): support embedded LIR programs
pchalamet Aug 24, 2026
1ce7aa1
fix(interpreter): preserve host runtime overrides
pchalamet Aug 24, 2026
2bc041a
refactor(compiler): reuse frontend export metadata
pchalamet Aug 24, 2026
3951ba5
feat(go): specialize discriminated union layouts
pchalamet Sep 28, 2026
837de5c
build(go): add sample transpilation target
pchalamet Sep 29, 2026
95ab0da
perf(go): fold static range direction
pchalamet Sep 29, 2026
ce0f94f
merge: integrate main FFI frontend with compiler backends
pchalamet Oct 24, 2026
163f360
refactor(compiler): share native specialization and CLR linkage
pchalamet Oct 24, 2026
561ea38
feat(dotnet): generate typed CSharp and standalone CLR assemblies
pchalamet Oct 24, 2026
f103752
feat(dotnet): compile SDK providers and foreign callbacks
pchalamet Oct 24, 2026
659eb93
test(dotnet): enforce native semantic and FFI conformance
pchalamet Oct 24, 2026
8a8750e
feat(dotnet): optimize static calls closures and tail recursion
pchalamet Oct 24, 2026
f5543c5
fix(samples): identify running BASIC executable in usage
pchalamet Oct 24, 2026
a13b1ab
fix(dotnet): avoid rooting namespaces during assembly pruning
pchalamet Oct 24, 2026
b5fa7f3
feat(dotnet): publish standalone executables with prunable typed FFI
pchalamet Oct 24, 2026
7b281f8
refactor(compiler): remove Go backend and toolchain integration
pchalamet Oct 24, 2026
69f41f3
test(javascript): align export syntax coverage with parser
pchalamet Oct 25, 2026
1ad0390
fix(language): restrict exports to contextual declarations
pchalamet Oct 25, 2026
e97cc2e
docs(compiler): document native targets and optimization pipeline
pchalamet Oct 25, 2026
baa3b14
feat(compiler): honor trusted FFI purity contracts
pchalamet Oct 25, 2026
a21074a
fix(stdlib): make string replacement total
pchalamet Oct 25, 2026
0f345b7
feat(compiler): share pure common-subexpression elimination across ba…
pchalamet Oct 25, 2026
c862795
fix(cli): explain invalid runtime identifiers and SDK requirements
pchalamet Oct 25, 2026
df8e07f
feat(cli): default executable runtime to the current platform
pchalamet Oct 25, 2026
f6314e6
fix(backends): stop printing compiled program results
pchalamet Oct 25, 2026
0d2b70f
feat(runtime): separate result display from execution exit status
pchalamet Oct 25, 2026
a9b5bc1
docs(changelog): summarize compiler work in three bullets
pchalamet Oct 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/workflows/ci-main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@ jobs:
with:
dotnet-version: 10.0.401

- name: Install Native AOT toolchain
run: sudo apt-get update && sudo apt-get install -y clang zlib1g-dev

- name: Restore
run: dotnet restore FScript.sln

Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/ci-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,9 @@ jobs:
with:
dotnet-version: 10.0.401

- name: Install Native AOT toolchain
run: sudo apt-get update && sudo apt-get install -y clang zlib1g-dev

- name: Restore
run: dotnet restore FScript.sln

Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ TestResults/
.DS_Store
Thumbs.db
.out
/out/

vscode-fscript/dist/
vscode-fscript/*.vsix
Expand Down
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ All notable changes to FScript are documented in this file.

## [Unreleased]

- Added C# and .NET compilation with FFI support, self-contained executables, and Native AOT publishing.
- Added typed HIR/LIR, versioned `.fsir` artifacts, and a reference LIR interpreter, with specialization, `Pure`-guided pruning, common-subexpression elimination, and .NET tail-call optimizations.
- Added execution-local `Env.setExitCode` and `--no-result` controls, and updated the website and documentation for compilation and embedding.

## [0.83.3]


Expand Down
120 changes: 120 additions & 0 deletions FScript.sln
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,16 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{827E0CD3-B72
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FScript.Language", "src\FScript.Language\FScript.Language.fsproj", "{73C9C013-4E93-45EC-A69D-E490788D8E2B}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FScript.Compiler", "src\FScript.Compiler\FScript.Compiler.fsproj", "{D2D66D0D-2D54-4B13-A847-C94732038E17}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FScript", "src\FScript\FScript.fsproj", "{56151E59-268A-4A4B-BE94-B7AD2E8B32FA}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{0AB3BF05-4346-4AA6-1389-037BE0695223}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FScript.Language.Tests", "tests\FScript.Language.Tests\FScript.Language.Tests.fsproj", "{9C62883E-EFB0-4D9E-84F3-4138C123F55E}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FScript.Compiler.Tests", "tests\FScript.Compiler.Tests\FScript.Compiler.Tests.fsproj", "{61460CC8-4B1A-4A32-B95B-85DF17DCC54B}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FScript.Runtime", "src\FScript.Runtime\FScript.Runtime.fsproj", "{8C2C5767-857A-44B0-80C2-DC90E0A60F4D}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FScript.Runtime.Tests", "tests\FScript.Runtime.Tests\FScript.Runtime.Tests.fsproj", "{1E2C7B34-04B8-42C9-880D-CC47DEC156A7}"
Expand Down Expand Up @@ -43,6 +47,18 @@ Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FScript.Cli.Tests.Fixtures.
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FScript.DebugAdapter", "src\FScript.DebugAdapter\FScript.DebugAdapter.csproj", "{FE5D4A9E-1936-489C-B489-8133DB47E063}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FScript.Interpreter.Lir", "src\FScript.Interpreter.Lir\FScript.Interpreter.Lir.fsproj", "{88B1BFFA-B93F-49FE-8C70-AB070A21135F}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FScript.Interpreter.Lir.Tests", "tests\FScript.Interpreter.Lir.Tests\FScript.Interpreter.Lir.Tests.fsproj", "{CCC7F576-D284-4B29-A30F-9685929F4E36}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FScript.Conformance.Tests", "tests\FScript.Conformance.Tests\FScript.Conformance.Tests.fsproj", "{A5495111-E8DD-4862-BF4E-BE13CB96F9DC}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FScript.Backend.CSharp", "src\FScript.Backend.CSharp\FScript.Backend.CSharp.fsproj", "{2BDE00DA-0440-4AB4-8E42-DB0F690CC146}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FScript.Backend.DotNet", "src\FScript.Backend.DotNet\FScript.Backend.DotNet.fsproj", "{32CFD1D1-1087-4275-8D15-73EC0D4CEA9A}"
EndProject
Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FScript.Backend.DotNet.Tests", "tests\FScript.Backend.DotNet.Tests\FScript.Backend.DotNet.Tests.fsproj", "{65E0671A-8A76-4E25-979E-BCA7D57DF84E}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand All @@ -65,6 +81,18 @@ Global
{73C9C013-4E93-45EC-A69D-E490788D8E2B}.Release|x64.Build.0 = Release|Any CPU
{73C9C013-4E93-45EC-A69D-E490788D8E2B}.Release|x86.ActiveCfg = Release|Any CPU
{73C9C013-4E93-45EC-A69D-E490788D8E2B}.Release|x86.Build.0 = Release|Any CPU
{D2D66D0D-2D54-4B13-A847-C94732038E17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D2D66D0D-2D54-4B13-A847-C94732038E17}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D2D66D0D-2D54-4B13-A847-C94732038E17}.Debug|x64.ActiveCfg = Debug|Any CPU
{D2D66D0D-2D54-4B13-A847-C94732038E17}.Debug|x64.Build.0 = Debug|Any CPU
{D2D66D0D-2D54-4B13-A847-C94732038E17}.Debug|x86.ActiveCfg = Debug|Any CPU
{D2D66D0D-2D54-4B13-A847-C94732038E17}.Debug|x86.Build.0 = Debug|Any CPU
{D2D66D0D-2D54-4B13-A847-C94732038E17}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D2D66D0D-2D54-4B13-A847-C94732038E17}.Release|Any CPU.Build.0 = Release|Any CPU
{D2D66D0D-2D54-4B13-A847-C94732038E17}.Release|x64.ActiveCfg = Release|Any CPU
{D2D66D0D-2D54-4B13-A847-C94732038E17}.Release|x64.Build.0 = Release|Any CPU
{D2D66D0D-2D54-4B13-A847-C94732038E17}.Release|x86.ActiveCfg = Release|Any CPU
{D2D66D0D-2D54-4B13-A847-C94732038E17}.Release|x86.Build.0 = Release|Any CPU
{56151E59-268A-4A4B-BE94-B7AD2E8B32FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{56151E59-268A-4A4B-BE94-B7AD2E8B32FA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{56151E59-268A-4A4B-BE94-B7AD2E8B32FA}.Debug|x64.ActiveCfg = Debug|Any CPU
Expand All @@ -89,6 +117,18 @@ Global
{9C62883E-EFB0-4D9E-84F3-4138C123F55E}.Release|x64.Build.0 = Release|Any CPU
{9C62883E-EFB0-4D9E-84F3-4138C123F55E}.Release|x86.ActiveCfg = Release|Any CPU
{9C62883E-EFB0-4D9E-84F3-4138C123F55E}.Release|x86.Build.0 = Release|Any CPU
{61460CC8-4B1A-4A32-B95B-85DF17DCC54B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{61460CC8-4B1A-4A32-B95B-85DF17DCC54B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{61460CC8-4B1A-4A32-B95B-85DF17DCC54B}.Debug|x64.ActiveCfg = Debug|Any CPU
{61460CC8-4B1A-4A32-B95B-85DF17DCC54B}.Debug|x64.Build.0 = Debug|Any CPU
{61460CC8-4B1A-4A32-B95B-85DF17DCC54B}.Debug|x86.ActiveCfg = Debug|Any CPU
{61460CC8-4B1A-4A32-B95B-85DF17DCC54B}.Debug|x86.Build.0 = Debug|Any CPU
{61460CC8-4B1A-4A32-B95B-85DF17DCC54B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{61460CC8-4B1A-4A32-B95B-85DF17DCC54B}.Release|Any CPU.Build.0 = Release|Any CPU
{61460CC8-4B1A-4A32-B95B-85DF17DCC54B}.Release|x64.ActiveCfg = Release|Any CPU
{61460CC8-4B1A-4A32-B95B-85DF17DCC54B}.Release|x64.Build.0 = Release|Any CPU
{61460CC8-4B1A-4A32-B95B-85DF17DCC54B}.Release|x86.ActiveCfg = Release|Any CPU
{61460CC8-4B1A-4A32-B95B-85DF17DCC54B}.Release|x86.Build.0 = Release|Any CPU
{8C2C5767-857A-44B0-80C2-DC90E0A60F4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8C2C5767-857A-44B0-80C2-DC90E0A60F4D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8C2C5767-857A-44B0-80C2-DC90E0A60F4D}.Debug|x64.ActiveCfg = Debug|Any CPU
Expand Down Expand Up @@ -245,14 +285,88 @@ Global
{FE5D4A9E-1936-489C-B489-8133DB47E063}.Release|x64.Build.0 = Release|Any CPU
{FE5D4A9E-1936-489C-B489-8133DB47E063}.Release|x86.ActiveCfg = Release|Any CPU
{FE5D4A9E-1936-489C-B489-8133DB47E063}.Release|x86.Build.0 = Release|Any CPU
{88B1BFFA-B93F-49FE-8C70-AB070A21135F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{88B1BFFA-B93F-49FE-8C70-AB070A21135F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{88B1BFFA-B93F-49FE-8C70-AB070A21135F}.Debug|x64.ActiveCfg = Debug|Any CPU
{88B1BFFA-B93F-49FE-8C70-AB070A21135F}.Debug|x64.Build.0 = Debug|Any CPU
{88B1BFFA-B93F-49FE-8C70-AB070A21135F}.Debug|x86.ActiveCfg = Debug|Any CPU
{88B1BFFA-B93F-49FE-8C70-AB070A21135F}.Debug|x86.Build.0 = Debug|Any CPU
{88B1BFFA-B93F-49FE-8C70-AB070A21135F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{88B1BFFA-B93F-49FE-8C70-AB070A21135F}.Release|Any CPU.Build.0 = Release|Any CPU
{88B1BFFA-B93F-49FE-8C70-AB070A21135F}.Release|x64.ActiveCfg = Release|Any CPU
{88B1BFFA-B93F-49FE-8C70-AB070A21135F}.Release|x64.Build.0 = Release|Any CPU
{88B1BFFA-B93F-49FE-8C70-AB070A21135F}.Release|x86.ActiveCfg = Release|Any CPU
{88B1BFFA-B93F-49FE-8C70-AB070A21135F}.Release|x86.Build.0 = Release|Any CPU
{CCC7F576-D284-4B29-A30F-9685929F4E36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CCC7F576-D284-4B29-A30F-9685929F4E36}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CCC7F576-D284-4B29-A30F-9685929F4E36}.Debug|x64.ActiveCfg = Debug|Any CPU
{CCC7F576-D284-4B29-A30F-9685929F4E36}.Debug|x64.Build.0 = Debug|Any CPU
{CCC7F576-D284-4B29-A30F-9685929F4E36}.Debug|x86.ActiveCfg = Debug|Any CPU
{CCC7F576-D284-4B29-A30F-9685929F4E36}.Debug|x86.Build.0 = Debug|Any CPU
{CCC7F576-D284-4B29-A30F-9685929F4E36}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CCC7F576-D284-4B29-A30F-9685929F4E36}.Release|Any CPU.Build.0 = Release|Any CPU
{CCC7F576-D284-4B29-A30F-9685929F4E36}.Release|x64.ActiveCfg = Release|Any CPU
{CCC7F576-D284-4B29-A30F-9685929F4E36}.Release|x64.Build.0 = Release|Any CPU
{CCC7F576-D284-4B29-A30F-9685929F4E36}.Release|x86.ActiveCfg = Release|Any CPU
{CCC7F576-D284-4B29-A30F-9685929F4E36}.Release|x86.Build.0 = Release|Any CPU
{A5495111-E8DD-4862-BF4E-BE13CB96F9DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A5495111-E8DD-4862-BF4E-BE13CB96F9DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A5495111-E8DD-4862-BF4E-BE13CB96F9DC}.Debug|x64.ActiveCfg = Debug|Any CPU
{A5495111-E8DD-4862-BF4E-BE13CB96F9DC}.Debug|x64.Build.0 = Debug|Any CPU
{A5495111-E8DD-4862-BF4E-BE13CB96F9DC}.Debug|x86.ActiveCfg = Debug|Any CPU
{A5495111-E8DD-4862-BF4E-BE13CB96F9DC}.Debug|x86.Build.0 = Debug|Any CPU
{A5495111-E8DD-4862-BF4E-BE13CB96F9DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A5495111-E8DD-4862-BF4E-BE13CB96F9DC}.Release|Any CPU.Build.0 = Release|Any CPU
{A5495111-E8DD-4862-BF4E-BE13CB96F9DC}.Release|x64.ActiveCfg = Release|Any CPU
{A5495111-E8DD-4862-BF4E-BE13CB96F9DC}.Release|x64.Build.0 = Release|Any CPU
{A5495111-E8DD-4862-BF4E-BE13CB96F9DC}.Release|x86.ActiveCfg = Release|Any CPU
{A5495111-E8DD-4862-BF4E-BE13CB96F9DC}.Release|x86.Build.0 = Release|Any CPU
{2BDE00DA-0440-4AB4-8E42-DB0F690CC146}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2BDE00DA-0440-4AB4-8E42-DB0F690CC146}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2BDE00DA-0440-4AB4-8E42-DB0F690CC146}.Debug|x64.ActiveCfg = Debug|Any CPU
{2BDE00DA-0440-4AB4-8E42-DB0F690CC146}.Debug|x64.Build.0 = Debug|Any CPU
{2BDE00DA-0440-4AB4-8E42-DB0F690CC146}.Debug|x86.ActiveCfg = Debug|Any CPU
{2BDE00DA-0440-4AB4-8E42-DB0F690CC146}.Debug|x86.Build.0 = Debug|Any CPU
{2BDE00DA-0440-4AB4-8E42-DB0F690CC146}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2BDE00DA-0440-4AB4-8E42-DB0F690CC146}.Release|Any CPU.Build.0 = Release|Any CPU
{2BDE00DA-0440-4AB4-8E42-DB0F690CC146}.Release|x64.ActiveCfg = Release|Any CPU
{2BDE00DA-0440-4AB4-8E42-DB0F690CC146}.Release|x64.Build.0 = Release|Any CPU
{2BDE00DA-0440-4AB4-8E42-DB0F690CC146}.Release|x86.ActiveCfg = Release|Any CPU
{2BDE00DA-0440-4AB4-8E42-DB0F690CC146}.Release|x86.Build.0 = Release|Any CPU
{32CFD1D1-1087-4275-8D15-73EC0D4CEA9A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{32CFD1D1-1087-4275-8D15-73EC0D4CEA9A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{32CFD1D1-1087-4275-8D15-73EC0D4CEA9A}.Debug|x64.ActiveCfg = Debug|Any CPU
{32CFD1D1-1087-4275-8D15-73EC0D4CEA9A}.Debug|x64.Build.0 = Debug|Any CPU
{32CFD1D1-1087-4275-8D15-73EC0D4CEA9A}.Debug|x86.ActiveCfg = Debug|Any CPU
{32CFD1D1-1087-4275-8D15-73EC0D4CEA9A}.Debug|x86.Build.0 = Debug|Any CPU
{32CFD1D1-1087-4275-8D15-73EC0D4CEA9A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{32CFD1D1-1087-4275-8D15-73EC0D4CEA9A}.Release|Any CPU.Build.0 = Release|Any CPU
{32CFD1D1-1087-4275-8D15-73EC0D4CEA9A}.Release|x64.ActiveCfg = Release|Any CPU
{32CFD1D1-1087-4275-8D15-73EC0D4CEA9A}.Release|x64.Build.0 = Release|Any CPU
{32CFD1D1-1087-4275-8D15-73EC0D4CEA9A}.Release|x86.ActiveCfg = Release|Any CPU
{32CFD1D1-1087-4275-8D15-73EC0D4CEA9A}.Release|x86.Build.0 = Release|Any CPU
{65E0671A-8A76-4E25-979E-BCA7D57DF84E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{65E0671A-8A76-4E25-979E-BCA7D57DF84E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{65E0671A-8A76-4E25-979E-BCA7D57DF84E}.Debug|x64.ActiveCfg = Debug|Any CPU
{65E0671A-8A76-4E25-979E-BCA7D57DF84E}.Debug|x64.Build.0 = Debug|Any CPU
{65E0671A-8A76-4E25-979E-BCA7D57DF84E}.Debug|x86.ActiveCfg = Debug|Any CPU
{65E0671A-8A76-4E25-979E-BCA7D57DF84E}.Debug|x86.Build.0 = Debug|Any CPU
{65E0671A-8A76-4E25-979E-BCA7D57DF84E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{65E0671A-8A76-4E25-979E-BCA7D57DF84E}.Release|Any CPU.Build.0 = Release|Any CPU
{65E0671A-8A76-4E25-979E-BCA7D57DF84E}.Release|x64.ActiveCfg = Release|Any CPU
{65E0671A-8A76-4E25-979E-BCA7D57DF84E}.Release|x64.Build.0 = Release|Any CPU
{65E0671A-8A76-4E25-979E-BCA7D57DF84E}.Release|x86.ActiveCfg = Release|Any CPU
{65E0671A-8A76-4E25-979E-BCA7D57DF84E}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{73C9C013-4E93-45EC-A69D-E490788D8E2B} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{D2D66D0D-2D54-4B13-A847-C94732038E17} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{56151E59-268A-4A4B-BE94-B7AD2E8B32FA} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{9C62883E-EFB0-4D9E-84F3-4138C123F55E} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
{61460CC8-4B1A-4A32-B95B-85DF17DCC54B} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
{8C2C5767-857A-44B0-80C2-DC90E0A60F4D} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{1E2C7B34-04B8-42C9-880D-CC47DEC156A7} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
{B734E1E1-59C2-47E0-8D19-A9C5C95938F1} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
Expand All @@ -267,5 +381,11 @@ Global
{CCD6A5F1-38D4-4719-9BB2-B17BB4E2D423} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
{D5E47861-ECF0-4678-8B8E-4B30B4FFC52C} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
{FE5D4A9E-1936-489C-B489-8133DB47E063} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{88B1BFFA-B93F-49FE-8C70-AB070A21135F} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{CCC7F576-D284-4B29-A30F-9685929F4E36} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
{A5495111-E8DD-4862-BF4E-BE13CB96F9DC} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
{2BDE00DA-0440-4AB4-8E42-DB0F690CC146} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{32CFD1D1-1087-4275-8D15-73EC0D4CEA9A} = {827E0CD3-B72D-47B6-A68D-7590B98EB39B}
{65E0671A-8A76-4E25-979E-BCA7D57DF84E} = {0AB3BF05-4346-4AA6-1389-037BE0695223}
EndGlobalSection
EndGlobal
1 change: 1 addition & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ smoke-tests:
dotnet run --project src/FScript -- samples/ffi/main.fss -- --headless; \
echo "All smoke tests passed."


verify-changelog:
REQUIRE_CHANGELOG_ALWAYS=true .github/scripts/check-unreleased-changelog.sh

Expand Down
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,12 @@ It is designed for host applications that need:
- **Host-first extensibility**: add external functions with explicit type schemes and runtime implementations.
- **Security-aware embedding**: script capabilities are defined by what the host exposes.

## Compilation

FScript also compiles to optimized .NET assemblies and independently buildable C# projects. The .NET backend supports self-contained single-file and Native AOT executables, including typed FFI bindings.

See [Compilation](docs/guides/compilation.md) for target selection, [.NET output](docs/guides/compile-to-dotnet.md), [C# projects](docs/guides/compile-to-csharp.md), and [optimization behavior](docs/guides/compiler-optimizations.md).

## Language Snapshot

FScript currently includes:
Expand Down
9 changes: 9 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,15 @@ This folder is organized into three layers:
- FScript vs F# / OCaml: [`guides/fsharp-ocaml-differences.md`](./guides/fsharp-ocaml-differences.md)
- Language rationale: [`guides/language-choices.md`](./guides/language-choices.md)

## Compilation

- [Choose a compilation target](./guides/compilation.md)
- [Compile to .NET](./guides/compile-to-dotnet.md): assemblies, single-file executables, Native AOT, and typed FFI
- [Compile to C#](./guides/compile-to-csharp.md): generated projects, source layout, and managed references
- [Compilation and optimizations](./guides/compiler-optimizations.md): shared passes, assembly-only transformations, and pruning limits
- [Compiler CLI reference](./guides/compiler-cli.md)
- [Compile and interpret IR](./guides/interpret-ir.md)

## User references

The [website manual sources](../website/docs/intro.md) separate a guided learning path from lookup material:
Expand Down
1 change: 1 addition & 0 deletions docs/architecture/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@ How the repository and assemblies are organized.

- Assemblies and roles: [`assemblies-and-roles.md`](./assemblies-and-roles.md)
- REPL architecture: [`repl-architecture.md`](./repl-architecture.md)
- Typed IR and backends: [`typed-ir-and-backends.md`](./typed-ir-and-backends.md)
37 changes: 36 additions & 1 deletion docs/architecture/assemblies-and-roles.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,38 @@ Use this when:
- You want to embed the language in another .NET application.
- You need language processing independently from default runtime extern catalog.

### `FScript.Compiler`
Role:
- Reusable .NET compiler pipeline for typed HIR, executable LIR, and IR artifacts.

Responsibilities:
- Consume the resolved typed result produced by `FScript.Language`.
- Validate and lower HIR to backend-independent LIR.
- Serialize and validate whole-program `.fsir` artifacts.

`FScript.Compiler` depends on `FScript.Language` and is intentionally excluded from the Fable JavaScript package.

### `FScript.Interpreter.Lir`
Role:
- Backend-independent execution engine for validated LIR.

Responsibilities:
- Execute LIR values, closures, decision trees, aggregates, intrinsics, and failures.
- Validate caller-provided LIR and return one structured execution diagnostic on failure.
- Supply script identity and arguments through `InterpreterContext`.
- Reject reachable unsupported target or host linkage with interpreter diagnostics.

`FScript.Interpreter.Lir` depends on `FScript.Compiler`; the core compiler has no dependency on the interpreter.

### `FScript.Backend.CSharp` and `FScript.Backend.DotNet`
Role:
- Consume validated LIR to emit an independent C# project or optimized .NET assembly.
- Share concrete HM specialization and simplification in `FScript.Compiler`.
- Bind FFI calls and external types to the CLR; report target-specific diagnostics.
- Optionally publish self-contained or Native AOT executables through the .NET SDK.

Consumer tests follow the same boundary: `FScript.Interpreter.Lir.Tests` owns LIR execution; `FScript.Backend.DotNet.Tests` owns native generation. `FScript.Compiler.Tests` covers HIR, lowering, LIR validation, and artifacts.

NuGet:
- `MagnusOpera.FScript.Language`

Expand Down Expand Up @@ -141,11 +173,14 @@ Use this when:

## Dependency direction
- `FScript.Language` has no dependency on `FScript.Runtime`.
- `FScript.Compiler` depends only on `FScript.Language`.
- `FScript.Interpreter.Lir` and `FScript.Backend.CSharp` each depend on `FScript.Compiler`.
- `FScript.Backend.CSharp` depends on `FScript.Compiler`; `FScript.Backend.DotNet` uses that emitter and Roslyn to produce PE assemblies.
- `FScript.JavaScript` depends on `FScript.Language` and Fable packages.
- `FScript.Runtime` depends on `FScript.Language` types.
- `FScript.CSharpInterop` depends on both `FScript.Language` and `FScript.Runtime`.
- `FScript.LanguageServer` depends on `FScript.CSharpInterop`.
- `FScript` depends on both `FScript.Language` and `FScript.Runtime`.
- `FScript` depends on `FScript.Language`, `FScript.Runtime`, `FScript.Compiler`, `FScript.Interpreter.Lir`, `FScript.Backend.CSharp`, and `FScript.Backend.DotNet`.

This keeps the language engine reusable while runtime capabilities remain host-configurable. The JavaScript facade is intentionally separate from `.NET` runtime externs: v1 exposes core language hosting, virtual imports, tagged values, and JS-provided externs, while filesystem, console, task, and other runtime modules stay in the .NET runtime layer.

Expand Down
Loading
Loading