[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-11718":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":13,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":31,"readmeContent":32,"aiSummary":33,"trendingCount":15,"starSnapshotCount":15,"syncStatus":34,"lastSyncTime":35,"discoverSource":36},11718,"blaise","graemeg\u002Fblaise","graemeg","A modern, self-hosting Object Pascal compiler built for the 2020s. Zero legacy, full ARC, and unified UTF-8.","",null,"Pascal",223,7,11,0,27,41,74,81,2.71,"Apache License 2.0",false,"master",true,[26,27,28,29,30],"compiler","pascal","pascal-compiler","pascal-language","pascal-programming","2026-06-12 02:02:33","= Blaise Pascal Compiler\n:icons: font\n:source-highlighter: rouge\n\n**The Pascal you love, reimagined for the modern era.**\n\nBlaise is a next-generation Object Pascal compiler built from the ground up to eliminate decades of legacy baggage. It prioritizes developer productivity, memory safety, and high-performance execution.\n\n\n== ✨ The Vision\n\nThe Object Pascal ecosystem has two options: Embarcadero Delphi (proprietary,\nWindows-first) and Free Pascal (open source but carrying 30 years of accumulated\ncomplexity — five language modes, five string types, and thousands of include files).\n\nThis compiler takes a different approach:\n\n* *One language mode.* No `{$mode}` switches; no legacy dialect support.\n* *One string type.* UTF-8 reference-counted string and 0-based indexing. `RawBytes` for binary data.\n* *One memory model.* Automatic reference counting applies uniformly to\n  strings, classes, and interfaces. No manual\u002Fauto split between `TObject`\n  and `TInterfacedObject`; `[Weak]` breaks cycles. `Free` is retained as a\n  synonym for immediate release.\n* *Clean interfaces.* No COM GUIDs; interface dispatch via compile-time vtable mapping.\n* *Reified generics.* Monomorphization at compile time — no type erasure.\n* *Modern build system.* PasBuild with `project.xml`; no makefiles.\n* *First-class debugger.* OPDF is the default debug format; DWARF is not required.\n\nSee link:docs\u002Fdesign.adoc[docs\u002Fdesign.adoc] for the full architecture and\nimplementation plan.\n\nThe result — A modern, cross-platform Object Pascal compiler targeting native code via\nhttps:\u002F\u002Fc9x.me\u002Fcompile\u002F[QBE] (and eventually LLVM). Single language mode,\nsingle string type, zero-GUID interfaces, reified generics, and first-class\nhttps:\u002F\u002Fgithub.com\u002Fgraemeg\u002Fopdebugger[OPDF] debug format support.\n\n\n== 🚀 Project Status\n\n* **Self-Hosting:** Yes. Blaise bootstraps and recompiles itself with byte-for-byte fixpoint. FPC is no longer required — the entire toolchain runs on Blaise alone.\n* **Testing:** 1934 tests and growing (Test-Driven Development from day one). The test suite itself compiles under Blaise.\n* **Backends:** Currently utilising a QBE backend, with an LLVM backend in active development.\n\n\n[cols=\"1,3,1\", options=\"header\"]\n|===\n| Phase | Goal | Status\n\n| 1\n| Bootstrap pipeline — Hello World on Linux x86_64 via PasBuild\n| Complete ✅\n\n| 2\n| Type system — classes, records, ARC, exceptions\n| Complete ✅\n\n| 3\n| Generics + zero-GUID interfaces\n| Complete ✅\n\n| 4\n| OPDF debug info emission\n| Complete ✅\n\n| 5\n| Self-hosting + LLVM + Windows + macOS ARM64\n| In-Progress\n\n| 6\n| LSP + VS Code extension\n| Planned\n\n| 7\n| Migration analyser for FPC\u002FDelphi codebases\n| Planned\n|===\n\n== What Is Dropped From Classic Pascal\n\n[cols=\"1,3\", options=\"header\"]\n|===\n| Feature | Reason for removal\n\n| `ShortString`, `AnsiString`, `WideString`, `UnicodeString`\n| Replaced by a single UTF-8 reference-counted `string` type\n\n| `with` statement\n| Source of hard-to-diagnose symbol resolution bugs; breaks static analysis\n\n| Old-style `object` types\n| Use `record` (stack\u002Fvalue) or `class` (heap\u002Freference) instead\n\n| COM-style interface GUIDs\n| Interface dispatch via compile-time vtable; GUIDs are unnecessary complexity\n\n| Multiple language modes\n| One dialect, maintained well, beats five dialects maintained poorly\n\n| `assign`, `reset`, `rewrite`, `blockread`\n| Replaced by a stream-based I\u002FO RTL\n\n| `TObject` vs `TInterfacedObject` split\n| One unified class model under automatic reference counting; `[Weak]`\n  breaks cycles\n|===\n\n== 📢 Community\n\nThe core architecture is still being finalised, so the project is not yet\naccepting code contributions. Feedback on language design, syntax choices, and\nthe future direction of Blaise is very welcome — please use the\nhttps:\u002F\u002Fgithub.com\u002Fgraemeg\u002Fblaise\u002Fdiscussions[Discussions] tab on GitHub.\n\n\n== Repository Layout\n\nThis project uses PasBuild's multi-module layout. Each subdirectory with a\n`project.xml` is an independent module; the root `project.xml` is the aggregator.\n\n....\nproject.xml                       Root aggregator (packaging=pom)\n│\n├── compiler\u002F                     The compiler binary (packaging=application)\n│   ├── project.xml\n│   └── src\u002F\n│       ├── main\u002Fpascal\u002F          uLexer, uParser, uAST, uCodeGenQBE, ...\n│       └── test\u002Fpascal\u002F          Test suite (blaise.testing, compiled by Blaise)\n│\n├── runtime\u002F                      Always-linked runtime (packaging=library)\n│   ├── project.xml\n│   ├── Makefile\n│   └── src\u002F\n│       ├── main\u002Fc\u002F               C shims (blaise_exc.c, blaise_io.c, ...)\n│       ├── main\u002Fpascal\u002F          system.pas, blaise_str.pas, blaise_arc.pas, ...\n│       └── test\u002Fpascal\u002F          Runtime tests (punit, compiled by Blaise)\n│\n├── stdlib\u002F                       Standard library — opt-in via uses clause\n│   ├── project.xml\n│   └── src\u002F\n│       └── main\u002Fpascal\u002F          sysutils.pas, classes.pas, math.pas, ...\n│\n├── tools\u002F\n│   └── migration-analyser\u002F       FPC\u002FDelphi migration report tool (packaging=application)\n│       ├── project.xml           depends on compiler module\n│       └── src\u002F\n│           ├── main\u002Fpascal\u002F\n│           └── test\u002Fpascal\u002F\n│\n├── vendor\u002Fqbe\u002F                   Vendored QBE backend source (pinned, built from source)\n└── docs\u002F                         Design documents and specifications\n....\n\nPasBuild compiles each module to its own `target\u002F` subdirectory. Build output is\nnever committed to the repository.\n\n== Building\n\n=== Prerequisites\n\n* A previously released Blaise binary (see `releases\u002F`)\n* https:\u002F\u002Fgithub.com\u002Fgraemeg\u002Fpasbuild[PasBuild]\n* A C compiler (`gcc` or `clang`) for building the vendored QBE backend and linking\n* GNU `make` for the runtime build\n\nNOTE: FPC is *not* required. Blaise is fully self-hosting — each release binary\ncompiles the next version. The bootstrap chain starts from the binary in\n`releases\u002F`.\n\n=== Bootstrap from a release\n\nThe runtime build compiles its Pascal units (`blaise_str.pas`, `blaise_arc.pas`,\n`blaise_sys.pas`) using the Blaise binary at `compiler\u002Ftarget\u002Fblaise`. On a\nclean checkout that binary does not exist yet, so the release binary must be\npassed explicitly via the `BLAISE` make variable.\n\n[source,shell]\n----\n# 0. Build the vendored QBE backend (once-off — not needed again unless\n#    you update vendor\u002Fqbe\u002F)\ncd vendor\u002Fqbe && make && cd ..\u002F..\n\n# 1. Build the runtime using the release binary (BLAISE= avoids chicken-and-egg)\ncd runtime && make BLAISE=..\u002Freleases\u002Fv0.7.0\u002Fblaise && make install && cd ..\n\n# 2. Compile the compiler using the latest release binary\nreleases\u002Fv0.7.0\u002Fblaise \\\n  --source compiler\u002Fsrc\u002Fmain\u002Fpascal\u002FBlaise.pas \\\n  --unit-path compiler\u002Fsrc\u002Fmain\u002Fpascal \\\n  --unit-path runtime\u002Fsrc\u002Fmain\u002Fpascal \\\n  --unit-path stdlib\u002Fsrc\u002Fmain\u002Fpascal \\\n  --emit-ir > \u002Ftmp\u002Fblaise.ssa\n\n# 3. Assemble and link\nvendor\u002Fqbe\u002Fqbe -o \u002Ftmp\u002Fblaise.s \u002Ftmp\u002Fblaise.ssa\ngcc -o compiler\u002Ftarget\u002Fblaise \u002Ftmp\u002Fblaise.s compiler\u002Ftarget\u002Fblaise_rtl.a\n----\n\nOnce `compiler\u002Ftarget\u002Fblaise` exists, subsequent RTL rebuilds (`make && make install`)\nwork without the override. The QBE build in step 0 is a one-off and does not\nneed to be repeated when rebuilding the compiler.\n\n=== Build via PasBuild\n\nPasBuild can drive the full compile and test cycle using a Blaise binary:\n\n[source,shell]\n----\npasbuild compile -m blaise-compiler --compiler compiler\u002Ftarget\u002Fblaise\npasbuild test -m blaise-compiler --compiler compiler\u002Ftarget\u002Fblaise\n----\n\n=== Run tests\n\n[source,shell]\n----\npasbuild test -m blaise-compiler --compiler compiler\u002Ftarget\u002Fblaise\n----\n\n=== Verify self-hosting fixpoint\n\nAfter any compiler change, verify that the compiler reproduces itself:\n\n[source,shell]\n----\n.\u002Fscripts\u002Ffixpoint.sh\n----\n\nThis generates stage-2 and stage-3 IR and confirms they are identical.\n\n=== Running the compiler\n\nOnce built, the compiler binary is at `compiler\u002Ftarget\u002Fblaise`.\n\n[source,shell]\n----\n# Compile a single-file program\ncompiler\u002Ftarget\u002Fblaise --source Hello.pas --emit-ir > Hello.ssa\nvendor\u002Fqbe\u002Fqbe -o Hello.s Hello.ssa\ngcc -o Hello Hello.s compiler\u002Ftarget\u002Fblaise_rtl.a\n\n# Compile with unit search paths\ncompiler\u002Ftarget\u002Fblaise --source MyApp.pas \\\n  --unit-path src\u002Funits \\\n  --emit-ir > MyApp.ssa\n\n# Emit QBE IR only (useful for debugging the compiler itself)\ncompiler\u002Ftarget\u002Fblaise --source Hello.pas --emit-ir\n----\n\n== Licence\n\nApache License v2.0 with Runtime Library Exception. See link:LICENSE[LICENSE].\n\n\n---\n*Built with ❤️ for the Pascal community by Graeme.*\n","Blaise 是一个为21世纪构建的现代化自托管Object Pascal编译器，旨在消除数十年来的遗留负担。它专注于提高开发人员生产力、内存安全性和高性能执行，采用统一的UTF-8字符串类型和自动引用计数（ARC）机制，摒弃了多种语言模式和复杂的字符串类型。此外，Blaise还支持单一内存模型、接口无GUID、具体化的泛型以及现代构建系统PasBuild等特性。该项目适合需要跨平台、高效且易于维护的Pascal开发场景，特别是在希望摆脱传统Pascal编译器复杂性的新项目或重构现有代码库时使用。",2,"2026-06-11 03:32:23","CREATED_QUERY"]