Implement the generic FSharp2 batch compiler pipeline

Aperta
#8 1 commento 0 reazioni 1 assegnatario Vedi su GitHub

@TheAngryByrd ci sta già lavorando.

Dal 18/7/2026.

Valutazione

Questa issue non è ancora stata valutata.

Descrizione

wayfinder:task

Outcome

Implement the independently authored FSharp2 batch compiler pipeline behind the compatible command-line and MSBuild surfaces. The existing issue #8 prototype is prior evidence and reusable scaffolding, not the production compiler architecture or language boundary.

The measured prototype result in .agents/docs/research/minimum-fsharp2-prototype-result.md answered the original tracer question negatively: it validated the NativeAOT host, MSBuild selection, retained-service seam, synthetic symbolic linker, transactional publication, and synthetic emitted-output gate, but it did not compile the declared real-world corpus. Later construct-by-construct commits do not change that boundary.

Corpus-neutral acceptance policy

  • Production code must not recognize IcedTasks paths, namespaces, types, members, target frameworks, source order, or expected failure locations.
  • Primary tests are organized by F# language construct and observable compiler behavior.
  • Every supported construct has small positive and negative Compatibility Oracle cases.
  • Reaching the next file or error in an external corpus is progress evidence, never ticket completion.
  • Unsupported experimental inputs fail explicitly; the official compiler and FSharp.Compiler.Service never provide production fallback.
  • External projects are end-to-end integration corpora. They may reveal missing generic behavior but may not define compiler module interfaces.
  • Tests cross durable compiler-module interfaces and do not expose internals only to make a corpus-shaped test pass.

Work breakdown

Foundation
  1. #25 — compiler request, result, and phase contracts
  2. #26 — differential harness and generic conformance manifest
  3. #27 — diagnostic policy and compatibility
Frontend and semantic inputs
  1. #28 — source text, lexing, directives, and layout
  2. #29 — immutable syntax trees and parser recovery
  3. #30 — metadata-only target-reference and F# signature import
Semantics and reusable typed state
  1. #31 — symbols, scopes, signatures, and name resolution
  2. #32 — core inference, unification, and generalization
  3. #33 — F# types, members, overloads, and constraints
  4. #34 — typed checkpoints and semantic fingerprints
Lowering and emission
  1. #35 — core language lowering
  2. #36 — computation expressions, sequences, quotations, and resumable code
  3. #37 — compatible optimization, debug, and tail-call modes
  4. #38 — generic ECMA-335 metadata and IL emission
  5. #39 — F# metadata and companion build/debug artifacts
Integration and evidence
  1. #40 — batch compiler, MSBuild, and transactional artifact contract
  2. #41 — declaration-granular incremental compilation and reusable state
  3. #42 — first Experimental Vertical Milestone

GitHub sub-issue relationships are canonical. The dependency lines in each child define the intended implementation waves.

Definition of done

  • Every child issue is complete against compiler-owned conformance programs and its declared Compatibility Oracle evidence.
  • Standalone, persistent-service, command-line, and MSBuild paths share the same compiler semantics and produce equivalent observable results.
  • Supported inputs traverse parsing, resolution, typing, lowering, optimization, emission, publication, loading, and execution without fallback.
  • The first real-world milestone passes only after generic subsystem gates pass.
  • Governed performance infrastructure remains #24; it admits timings only after compiler correctness.

Outside this workstream

FSharp.Compiler.Service API compatibility, F# Interactive and script execution, the Provider Broker implementation, full cross-platform release packaging, secure hosted evidence storage, and the remaining final Compatibility Gate expansion remain siblings or future children of #1.

Lingua principale
F#
Stelle
0
Fork
0
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Apri in Codespaces

Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.

  • Nessun Dockerfile né file Docker Compose
  • Ha un modello di pull request
  • Nessuna guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di TheAngryByrd/fsharp2

Tutte le issue di TheAngryByrd/fsharp2

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.