Repository files navigation

Fifth Language

CILicense.NET

A .NET systems programming language with native support for knowledge graphs and semantic web technologies.
Fifth is still under active development, and is not yet ready for mission-critical use.
I invite you to get involved and play with it, and tell me what you do and don't love.


Language Features

Fifth uniquely combines imperative and functional programming with first-class RDF and SPARQL support. Mostly, it's a lot like C#, but it takes the syntax for Function overloading, Destructuring, and nested Guard Clauses from languages like Erlang. For a tour of the language, take a look at the Learn Fifth in Y Minutes Guide.

More docs here including installation instructions.

Basic Language Features

  • Classes with methods and properties
  • Function overloading with parameter constraints (guards)
  • Parameter Destructuring with guard clauses
  • All of the usual control-constructs
  • Exception handling: try/catch/finally blocks
  • Multiple module support with namespaces
  • Namespace imports with aliasing support
  • Type system: Primitives, classes, lists, Arrays
  • List comprehensions with projection and filtering: [expr from var in source where constraint]
    • Breaking change: Legacy in/# syntax replaced with from/where syntax
    • SPARQL comprehensions: Use property access on iteration variable (e.g., [x.age from x in query <- store])
    • SPARQL variables accessed as properties: x.propertyName instead of ?variable
    • See migration guide for full details

Knowledge Graph Primitives

  • Native RDF types: graph, triple, store, query are built-in language primitives
  • Built-in KG runtime: Fifth.System.KG provides graph creation, triple management, and store operations
  • Built-in high performance Triple Store (QuadStore)
  • Triple literals: <subject, predicate, object> syntax for inline RDF construction
  • TriG blocks: Multi-line graph literals with full TriG syntax support
  • SPARQL literals: Embed SPARQL queries directly in source code with ?<SELECT...>
  • Operator syntax provides clean and intuitive ways to work with triples, graphs, triple-stores and queries.
  • Transparent persistence: Save graphs to remote stores with simple assignment: myStore += graph;

What Works

  • Full .NET IL compilation pipeline (via Roslyn back-end)
  • Multi-platform support (Linux, macOS, Windows)
  • MSBuild integration with .5thproj project files (very basic at this stage)
  • Parameter destructuring in functions
  • Classes with methods and properties
  • Control flow statements (if/else, while)
  • Exception handling with try/catch/finally
  • Function overloading with parameter guards
  • List comprehensions with new from/where syntax: [projection from var in source where constraints]
  • Knowledge graph operations (TriG literals, SPARQL literals, graph operations)
  • Comprehensive test suite (xUnit + FluentAssertions)
  • Published MSBuild SDK and compiler support via Nuget
  • Direct Consumption of Query Results in List Comprehensions

Planned Improvements

See our architectural roadmap for detailed plans. Key priorities:

  • Architectural Improvements to support modern compiler tool chains: auto-complete, LSP, go to definition &c
  • Parser error recovery: Better handling of syntax errors for IDE support
  • Incremental compilation: Faster rebuild times for large projects

Full analysis available in architectural review.

Quick Start

Prerequisites

Installation

Download the latest release from the releases page or build from source:

git clone https://github.com/aabs/fifthlang.git
cd fifthlang
dotnet build fifthlang.sln

Your First Fifth Program

Create a file hello.5th:

main(): int {
x: int = 42;
return x;
}

Build and run with a .5thproj file (see below for project setup).

Working with Knowledge Graphs

Create a file kg-example.5th:

// Connect to a SPARQL store
alias x as <http://example.com/blah#>;
alias rdf as <http://www.w3.org/1999/02/22-rdf-syntax-ns#>;
myStore : store = sparql_store(<http://localhost:8080/graphdb>);
main(): int {
// Create a graph and add triples
g: graph = @< >;
g += <x:Alice, x:age, 42>;
g += <x:Alice, rdf:type, x:Person>;
// Save to the store
myStore += g;
// SPARQL Literals embedded in 5th code...
age: int = 42;
rq: query = ?<
PREFIX x: <http://example.com/blah#>
SELECT ?person
WHERE {
?person x:age age .
}
>;
fortyTwoYearOlds: result = rq <- myStore ; // query application on a store
// go do something with the results
return 0;
}

Creating Fifth Projects

Fifth integrates with .NET's build system using .5thproj files:

<!-- MyApp.5thproj -->
<ProjectSdk="Fifth.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
</Project>

Build like any .NET project:

dotnet build MyApp.5thproj
dotnet run --project MyApp.5thproj

See Fifth.Sdk documentation for more details.


Roadmap

  • Introduction of Dataset and separation of datasets and stores.
  • Graph/Dataset Destructuring Into Object Instances
  • SPARQL integration into List Comprehensions. (ideas)
  • MSBUILD SDK Support for full Visual Studio integration with Project Templates published via Nuget.
  • Inference Support

Recently Completed

  • Multi-platform release pipeline (spec 014)
  • Constructors (spec 013)
  • Generics (spec 012)
  • Query Application (spec 011)
  • TriG literal expressions (spec 009) - Multi-line graph blocks with TriG syntax
  • SPARQL literal expressions (spec 010) - Embedded SPARQL queries
  • System KG types (spec 008) - Runtime graph operations via Fifth.System.KG
  • Roslyn backend (spec 006) - IL emission and compilation pipeline
  • Exception handling (spec 005) - Try/catch/finally control flow
  • Guard clauses (spec 002) - Parameter constraints for function overloading
  • Namespace imports (spec 004) - Import directives with aliasing
  1. Q1 2026: Error recovery + diagnostic improvements
  2. Q2 2026: Language Server Protocol (LSP) + incremental compilation
  3. Q3 2026: Symbol table enhancements + testing architecture

See roadmap details and issue templates.


Documentation

Getting Started

Language Reference

Community


Contributing

We welcome contributions from the community. Areas where help is particularly valuable:

  • Language design feedback and suggestions
  • Documentation improvements and examples
  • Bug reports with minimal reproductions
  • Feature proposals with use cases

To get started:

  1. Check open issues tagged good-first-issue
  2. Read development instructions if you want to work on the compiler
  3. Start a discussion for questions or proposals

License

Fifth is distributed under the MIT License. See LICENSE for details.


Project Structure

src/
├── parser/ ANTLR-based parser (FifthLexer.g4, FifthParser.g4)
├── ast-model/ Core AST definitions (AstMetamodel.cs)
├── ast-generated/ Auto-generated builders & visitors
├── compiler/ Transformation pipeline (18 phases)
├── code_generator/ IL emission (Roslyn-based)
├── fifthlang.system/ Runtime library (KG operations)
└── Fifth.Sdk/ MSBuild integration
test/
├── ast-tests/ AST builder & visitor tests
├── syntax-parser-tests/ Grammar & parsing tests
├── runtime-integration-tests/ End-to-end execution tests
└── kg-smoke-tests/ Knowledge graph feature tests

Built with: C# 14, .NET 10.0, ANTLR 4.8, dotNetRDF, Roslyn, xUnit

Status: Active development | Experimental | Pre-release

About

Fifth is a .NET 10.0 systems programming language combining imperative and functional programming with first-class knowledge graph and semantic web support. It offers a modified C#-like syntax enhanced with Erlang-inspired function overloading, parameter destructuring, and guard clauses.

Topics

Resources

Code of conduct

Stars

14 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Fifth Language

CILicense.NET

A .NET systems programming language with native support for knowledge graphs and semantic web technologies.
Fifth is still under active development, and is not yet ready for mission-critical use.
I invite you to get involved and play with it, and tell me what you do and don't love.


Language Features

Fifth uniquely combines imperative and functional programming with first-class RDF and SPARQL support. Mostly, it's a lot like C#, but it takes the syntax for Function overloading, Destructuring, and nested Guard Clauses from languages like Erlang. For a tour of the language, take a look at the Learn Fifth in Y Minutes Guide.

More docs here including installation instructions.

Basic Language Features

  • Classes with methods and properties
  • Function overloading with parameter constraints (guards)
  • Parameter Destructuring with guard clauses
  • All of the usual control-constructs
  • Exception handling: try/catch/finally blocks
  • Multiple module support with namespaces
  • Namespace imports with aliasing support
  • Type system: Primitives, classes, lists, Arrays
  • List comprehensions with projection and filtering: [expr from var in source where constraint]
    • Breaking change: Legacy in/# syntax replaced with from/where syntax
    • SPARQL comprehensions: Use property access on iteration variable (e.g., [x.age from x in query <- store])
    • SPARQL variables accessed as properties: x.propertyName instead of ?variable
    • See migration guide for full details

Knowledge Graph Primitives

  • Native RDF types: graph, triple, store, query are built-in language primitives
  • Built-in KG runtime: Fifth.System.KG provides graph creation, triple management, and store operations
  • Built-in high performance Triple Store (QuadStore)
  • Triple literals: <subject, predicate, object> syntax for inline RDF construction
  • TriG blocks: Multi-line graph literals with full TriG syntax support
  • SPARQL literals: Embed SPARQL queries directly in source code with ?<SELECT...>
  • Operator syntax provides clean and intuitive ways to work with triples, graphs, triple-stores and queries.
  • Transparent persistence: Save graphs to remote stores with simple assignment: myStore += graph;

What Works

  • Full .NET IL compilation pipeline (via Roslyn back-end)
  • Multi-platform support (Linux, macOS, Windows)
  • MSBuild integration with .5thproj project files (very basic at this stage)
  • Parameter destructuring in functions
  • Classes with methods and properties
  • Control flow statements (if/else, while)
  • Exception handling with try/catch/finally
  • Function overloading with parameter guards
  • List comprehensions with new from/where syntax: [projection from var in source where constraints]
  • Knowledge graph operations (TriG literals, SPARQL literals, graph operations)
  • Comprehensive test suite (xUnit + FluentAssertions)
  • Published MSBuild SDK and compiler support via Nuget
  • Direct Consumption of Query Results in List Comprehensions

Planned Improvements

See our architectural roadmap for detailed plans. Key priorities:

  • Architectural Improvements to support modern compiler tool chains: auto-complete, LSP, go to definition &c
  • Parser error recovery: Better handling of syntax errors for IDE support
  • Incremental compilation: Faster rebuild times for large projects

Full analysis available in architectural review.

Quick Start

Prerequisites

Installation

Download the latest release from the releases page or build from source:

git clone https://github.com/aabs/fifthlang.git
cd fifthlang
dotnet build fifthlang.sln

Your First Fifth Program

Create a file hello.5th:

main(): int {
x: int = 42;
return x;
}

Build and run with a .5thproj file (see below for project setup).

Working with Knowledge Graphs

Create a file kg-example.5th:

// Connect to a SPARQL store
alias x as <http://example.com/blah#>;
alias rdf as <http://www.w3.org/1999/02/22-rdf-syntax-ns#>;
myStore : store = sparql_store(<http://localhost:8080/graphdb>);
main(): int {
// Create a graph and add triples
g: graph = @< >;
g += <x:Alice, x:age, 42>;
g += <x:Alice, rdf:type, x:Person>;
// Save to the store
myStore += g;
// SPARQL Literals embedded in 5th code...
age: int = 42;
rq: query = ?<
PREFIX x: <http://example.com/blah#>
SELECT ?person
WHERE {
?person x:age age .
}
>;
fortyTwoYearOlds: result = rq <- myStore ; // query application on a store
// go do something with the results
return 0;
}

Creating Fifth Projects

Fifth integrates with .NET's build system using .5thproj files:

<!-- MyApp.5thproj -->
<ProjectSdk="Fifth.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
</Project>

Build like any .NET project:

dotnet build MyApp.5thproj
dotnet run --project MyApp.5thproj

See Fifth.Sdk documentation for more details.


Roadmap

  • Introduction of Dataset and separation of datasets and stores.
  • Graph/Dataset Destructuring Into Object Instances
  • SPARQL integration into List Comprehensions. (ideas)
  • MSBUILD SDK Support for full Visual Studio integration with Project Templates published via Nuget.
  • Inference Support

Recently Completed

  • Multi-platform release pipeline (spec 014)
  • Constructors (spec 013)
  • Generics (spec 012)
  • Query Application (spec 011)
  • TriG literal expressions (spec 009) - Multi-line graph blocks with TriG syntax
  • SPARQL literal expressions (spec 010) - Embedded SPARQL queries
  • System KG types (spec 008) - Runtime graph operations via Fifth.System.KG
  • Roslyn backend (spec 006) - IL emission and compilation pipeline
  • Exception handling (spec 005) - Try/catch/finally control flow
  • Guard clauses (spec 002) - Parameter constraints for function overloading
  • Namespace imports (spec 004) - Import directives with aliasing
  1. Q1 2026: Error recovery + diagnostic improvements
  2. Q2 2026: Language Server Protocol (LSP) + incremental compilation
  3. Q3 2026: Symbol table enhancements + testing architecture

See roadmap details and issue templates.


Documentation

Getting Started

Language Reference

Community


Contributing

We welcome contributions from the community. Areas where help is particularly valuable:

  • Language design feedback and suggestions
  • Documentation improvements and examples
  • Bug reports with minimal reproductions
  • Feature proposals with use cases

To get started:

  1. Check open issues tagged good-first-issue
  2. Read development instructions if you want to work on the compiler
  3. Start a discussion for questions or proposals

License

Fifth is distributed under the MIT License. See LICENSE for details.


Project Structure

src/
├── parser/ ANTLR-based parser (FifthLexer.g4, FifthParser.g4)
├── ast-model/ Core AST definitions (AstMetamodel.cs)
├── ast-generated/ Auto-generated builders & visitors
├── compiler/ Transformation pipeline (18 phases)
├── code_generator/ IL emission (Roslyn-based)
├── fifthlang.system/ Runtime library (KG operations)
└── Fifth.Sdk/ MSBuild integration
test/
├── ast-tests/ AST builder & visitor tests
├── syntax-parser-tests/ Grammar & parsing tests
├── runtime-integration-tests/ End-to-end execution tests
└── kg-smoke-tests/ Knowledge graph feature tests

Built with: C# 14, .NET 10.0, ANTLR 4.8, dotNetRDF, Roslyn, xUnit

Status: Active development | Experimental | Pre-release

About

Fifth is a .NET 10.0 systems programming language combining imperative and functional programming with first-class knowledge graph and semantic web support. It offers a modified C#-like syntax enhanced with Erlang-inspired function overloading, parameter destructuring, and guard clauses.

Topics

Resources

Code of conduct

Stars

14 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Fifth Language

CILicense.NET

A .NET systems programming language with native support for knowledge graphs and semantic web technologies.
Fifth is still under active development, and is not yet ready for mission-critical use.
I invite you to get involved and play with it, and tell me what you do and don't love.


Language Features

Fifth uniquely combines imperative and functional programming with first-class RDF and SPARQL support. Mostly, it's a lot like C#, but it takes the syntax for Function overloading, Destructuring, and nested Guard Clauses from languages like Erlang. For a tour of the language, take a look at the Learn Fifth in Y Minutes Guide.

More docs here including installation instructions.

Basic Language Features

  • Classes with methods and properties
  • Function overloading with parameter constraints (guards)
  • Parameter Destructuring with guard clauses
  • All of the usual control-constructs
  • Exception handling: try/catch/finally blocks
  • Multiple module support with namespaces
  • Namespace imports with aliasing support
  • Type system: Primitives, classes, lists, Arrays
  • List comprehensions with projection and filtering: [expr from var in source where constraint]
    • Breaking change: Legacy in/# syntax replaced with from/where syntax
    • SPARQL comprehensions: Use property access on iteration variable (e.g., [x.age from x in query <- store])
    • SPARQL variables accessed as properties: x.propertyName instead of ?variable
    • See migration guide for full details

Knowledge Graph Primitives

  • Native RDF types: graph, triple, store, query are built-in language primitives
  • Built-in KG runtime: Fifth.System.KG provides graph creation, triple management, and store operations
  • Built-in high performance Triple Store (QuadStore)
  • Triple literals: <subject, predicate, object> syntax for inline RDF construction
  • TriG blocks: Multi-line graph literals with full TriG syntax support
  • SPARQL literals: Embed SPARQL queries directly in source code with ?<SELECT...>
  • Operator syntax provides clean and intuitive ways to work with triples, graphs, triple-stores and queries.
  • Transparent persistence: Save graphs to remote stores with simple assignment: myStore += graph;

What Works

  • Full .NET IL compilation pipeline (via Roslyn back-end)
  • Multi-platform support (Linux, macOS, Windows)
  • MSBuild integration with .5thproj project files (very basic at this stage)
  • Parameter destructuring in functions
  • Classes with methods and properties
  • Control flow statements (if/else, while)
  • Exception handling with try/catch/finally
  • Function overloading with parameter guards
  • List comprehensions with new from/where syntax: [projection from var in source where constraints]
  • Knowledge graph operations (TriG literals, SPARQL literals, graph operations)
  • Comprehensive test suite (xUnit + FluentAssertions)
  • Published MSBuild SDK and compiler support via Nuget
  • Direct Consumption of Query Results in List Comprehensions

Planned Improvements

See our architectural roadmap for detailed plans. Key priorities:

  • Architectural Improvements to support modern compiler tool chains: auto-complete, LSP, go to definition &c
  • Parser error recovery: Better handling of syntax errors for IDE support
  • Incremental compilation: Faster rebuild times for large projects

Full analysis available in architectural review.

Quick Start

Prerequisites

Installation

Download the latest release from the releases page or build from source:

git clone https://github.com/aabs/fifthlang.git
cd fifthlang
dotnet build fifthlang.sln

Your First Fifth Program

Create a file hello.5th:

main(): int {
x: int = 42;
return x;
}

Build and run with a .5thproj file (see below for project setup).

Working with Knowledge Graphs

Create a file kg-example.5th:

// Connect to a SPARQL store
alias x as <http://example.com/blah#>;
alias rdf as <http://www.w3.org/1999/02/22-rdf-syntax-ns#>;
myStore : store = sparql_store(<http://localhost:8080/graphdb>);
main(): int {
// Create a graph and add triples
g: graph = @< >;
g += <x:Alice, x:age, 42>;
g += <x:Alice, rdf:type, x:Person>;
// Save to the store
myStore += g;
// SPARQL Literals embedded in 5th code...
age: int = 42;
rq: query = ?<
PREFIX x: <http://example.com/blah#>
SELECT ?person
WHERE {
?person x:age age .
}
>;
fortyTwoYearOlds: result = rq <- myStore ; // query application on a store
// go do something with the results
return 0;
}

Creating Fifth Projects

Fifth integrates with .NET's build system using .5thproj files:

<!-- MyApp.5thproj -->
<ProjectSdk="Fifth.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
</Project>

Build like any .NET project:

dotnet build MyApp.5thproj
dotnet run --project MyApp.5thproj

See Fifth.Sdk documentation for more details.


Roadmap

  • Introduction of Dataset and separation of datasets and stores.
  • Graph/Dataset Destructuring Into Object Instances
  • SPARQL integration into List Comprehensions. (ideas)
  • MSBUILD SDK Support for full Visual Studio integration with Project Templates published via Nuget.
  • Inference Support

Recently Completed

  • Multi-platform release pipeline (spec 014)
  • Constructors (spec 013)
  • Generics (spec 012)
  • Query Application (spec 011)
  • TriG literal expressions (spec 009) - Multi-line graph blocks with TriG syntax
  • SPARQL literal expressions (spec 010) - Embedded SPARQL queries
  • System KG types (spec 008) - Runtime graph operations via Fifth.System.KG
  • Roslyn backend (spec 006) - IL emission and compilation pipeline
  • Exception handling (spec 005) - Try/catch/finally control flow
  • Guard clauses (spec 002) - Parameter constraints for function overloading
  • Namespace imports (spec 004) - Import directives with aliasing
  1. Q1 2026: Error recovery + diagnostic improvements
  2. Q2 2026: Language Server Protocol (LSP) + incremental compilation
  3. Q3 2026: Symbol table enhancements + testing architecture

See roadmap details and issue templates.


Documentation

Getting Started

Language Reference

Community


Contributing

We welcome contributions from the community. Areas where help is particularly valuable:

  • Language design feedback and suggestions
  • Documentation improvements and examples
  • Bug reports with minimal reproductions
  • Feature proposals with use cases

To get started:

  1. Check open issues tagged good-first-issue
  2. Read development instructions if you want to work on the compiler
  3. Start a discussion for questions or proposals

License

Fifth is distributed under the MIT License. See LICENSE for details.


Project Structure

src/
├── parser/ ANTLR-based parser (FifthLexer.g4, FifthParser.g4)
├── ast-model/ Core AST definitions (AstMetamodel.cs)
├── ast-generated/ Auto-generated builders & visitors
├── compiler/ Transformation pipeline (18 phases)
├── code_generator/ IL emission (Roslyn-based)
├── fifthlang.system/ Runtime library (KG operations)
└── Fifth.Sdk/ MSBuild integration
test/
├── ast-tests/ AST builder & visitor tests
├── syntax-parser-tests/ Grammar & parsing tests
├── runtime-integration-tests/ End-to-end execution tests
└── kg-smoke-tests/ Knowledge graph feature tests

Built with: C# 14, .NET 10.0, ANTLR 4.8, dotNetRDF, Roslyn, xUnit

Status: Active development | Experimental | Pre-release

About

Fifth is a .NET 10.0 systems programming language combining imperative and functional programming with first-class knowledge graph and semantic web support. It offers a modified C#-like syntax enhanced with Erlang-inspired function overloading, parameter destructuring, and guard clauses.

Topics

Resources

Code of conduct

Stars

14 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Fifth Language

CILicense.NET

A .NET systems programming language with native support for knowledge graphs and semantic web technologies.
Fifth is still under active development, and is not yet ready for mission-critical use.
I invite you to get involved and play with it, and tell me what you do and don't love.


Language Features

Fifth uniquely combines imperative and functional programming with first-class RDF and SPARQL support. Mostly, it's a lot like C#, but it takes the syntax for Function overloading, Destructuring, and nested Guard Clauses from languages like Erlang. For a tour of the language, take a look at the Learn Fifth in Y Minutes Guide.

More docs here including installation instructions.

Basic Language Features

  • Classes with methods and properties
  • Function overloading with parameter constraints (guards)
  • Parameter Destructuring with guard clauses
  • All of the usual control-constructs
  • Exception handling: try/catch/finally blocks
  • Multiple module support with namespaces
  • Namespace imports with aliasing support
  • Type system: Primitives, classes, lists, Arrays
  • List comprehensions with projection and filtering: [expr from var in source where constraint]
    • Breaking change: Legacy in/# syntax replaced with from/where syntax
    • SPARQL comprehensions: Use property access on iteration variable (e.g., [x.age from x in query <- store])
    • SPARQL variables accessed as properties: x.propertyName instead of ?variable
    • See migration guide for full details

Knowledge Graph Primitives

  • Native RDF types: graph, triple, store, query are built-in language primitives
  • Built-in KG runtime: Fifth.System.KG provides graph creation, triple management, and store operations
  • Built-in high performance Triple Store (QuadStore)
  • Triple literals: <subject, predicate, object> syntax for inline RDF construction
  • TriG blocks: Multi-line graph literals with full TriG syntax support
  • SPARQL literals: Embed SPARQL queries directly in source code with ?<SELECT...>
  • Operator syntax provides clean and intuitive ways to work with triples, graphs, triple-stores and queries.
  • Transparent persistence: Save graphs to remote stores with simple assignment: myStore += graph;

What Works

  • Full .NET IL compilation pipeline (via Roslyn back-end)
  • Multi-platform support (Linux, macOS, Windows)
  • MSBuild integration with .5thproj project files (very basic at this stage)
  • Parameter destructuring in functions
  • Classes with methods and properties
  • Control flow statements (if/else, while)
  • Exception handling with try/catch/finally
  • Function overloading with parameter guards
  • List comprehensions with new from/where syntax: [projection from var in source where constraints]
  • Knowledge graph operations (TriG literals, SPARQL literals, graph operations)
  • Comprehensive test suite (xUnit + FluentAssertions)
  • Published MSBuild SDK and compiler support via Nuget
  • Direct Consumption of Query Results in List Comprehensions

Planned Improvements

See our architectural roadmap for detailed plans. Key priorities:

  • Architectural Improvements to support modern compiler tool chains: auto-complete, LSP, go to definition &c
  • Parser error recovery: Better handling of syntax errors for IDE support
  • Incremental compilation: Faster rebuild times for large projects

Full analysis available in architectural review.

Quick Start

Prerequisites

Installation

Download the latest release from the releases page or build from source:

git clone https://github.com/aabs/fifthlang.git
cd fifthlang
dotnet build fifthlang.sln

Your First Fifth Program

Create a file hello.5th:

main(): int {
x: int = 42;
return x;
}

Build and run with a .5thproj file (see below for project setup).

Working with Knowledge Graphs

Create a file kg-example.5th:

// Connect to a SPARQL store
alias x as <http://example.com/blah#>;
alias rdf as <http://www.w3.org/1999/02/22-rdf-syntax-ns#>;
myStore : store = sparql_store(<http://localhost:8080/graphdb>);
main(): int {
// Create a graph and add triples
g: graph = @< >;
g += <x:Alice, x:age, 42>;
g += <x:Alice, rdf:type, x:Person>;
// Save to the store
myStore += g;
// SPARQL Literals embedded in 5th code...
age: int = 42;
rq: query = ?<
PREFIX x: <http://example.com/blah#>
SELECT ?person
WHERE {
?person x:age age .
}
>;
fortyTwoYearOlds: result = rq <- myStore ; // query application on a store
// go do something with the results
return 0;
}

Creating Fifth Projects

Fifth integrates with .NET's build system using .5thproj files:

<!-- MyApp.5thproj -->
<ProjectSdk="Fifth.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
</Project>

Build like any .NET project:

dotnet build MyApp.5thproj
dotnet run --project MyApp.5thproj

See Fifth.Sdk documentation for more details.


Roadmap

  • Introduction of Dataset and separation of datasets and stores.
  • Graph/Dataset Destructuring Into Object Instances
  • SPARQL integration into List Comprehensions. (ideas)
  • MSBUILD SDK Support for full Visual Studio integration with Project Templates published via Nuget.
  • Inference Support

Recently Completed

  • Multi-platform release pipeline (spec 014)
  • Constructors (spec 013)
  • Generics (spec 012)
  • Query Application (spec 011)
  • TriG literal expressions (spec 009) - Multi-line graph blocks with TriG syntax
  • SPARQL literal expressions (spec 010) - Embedded SPARQL queries
  • System KG types (spec 008) - Runtime graph operations via Fifth.System.KG
  • Roslyn backend (spec 006) - IL emission and compilation pipeline
  • Exception handling (spec 005) - Try/catch/finally control flow
  • Guard clauses (spec 002) - Parameter constraints for function overloading
  • Namespace imports (spec 004) - Import directives with aliasing
  1. Q1 2026: Error recovery + diagnostic improvements
  2. Q2 2026: Language Server Protocol (LSP) + incremental compilation
  3. Q3 2026: Symbol table enhancements + testing architecture

See roadmap details and issue templates.


Documentation

Getting Started

Language Reference

Community


Contributing

We welcome contributions from the community. Areas where help is particularly valuable:

  • Language design feedback and suggestions
  • Documentation improvements and examples
  • Bug reports with minimal reproductions
  • Feature proposals with use cases

To get started:

  1. Check open issues tagged good-first-issue
  2. Read development instructions if you want to work on the compiler
  3. Start a discussion for questions or proposals

License

Fifth is distributed under the MIT License. See LICENSE for details.


Project Structure

src/
├── parser/ ANTLR-based parser (FifthLexer.g4, FifthParser.g4)
├── ast-model/ Core AST definitions (AstMetamodel.cs)
├── ast-generated/ Auto-generated builders & visitors
├── compiler/ Transformation pipeline (18 phases)
├── code_generator/ IL emission (Roslyn-based)
├── fifthlang.system/ Runtime library (KG operations)
└── Fifth.Sdk/ MSBuild integration
test/
├── ast-tests/ AST builder & visitor tests
├── syntax-parser-tests/ Grammar & parsing tests
├── runtime-integration-tests/ End-to-end execution tests
└── kg-smoke-tests/ Knowledge graph feature tests

Built with: C# 14, .NET 10.0, ANTLR 4.8, dotNetRDF, Roslyn, xUnit

Status: Active development | Experimental | Pre-release

About

Fifth is a .NET 10.0 systems programming language combining imperative and functional programming with first-class knowledge graph and semantic web support. It offers a modified C#-like syntax enhanced with Erlang-inspired function overloading, parameter destructuring, and guard clauses.

Topics

Resources

Code of conduct

Stars

14 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Fifth Language

CILicense.NET

A .NET systems programming language with native support for knowledge graphs and semantic web technologies.
Fifth is still under active development, and is not yet ready for mission-critical use.
I invite you to get involved and play with it, and tell me what you do and don't love.


Language Features

Fifth uniquely combines imperative and functional programming with first-class RDF and SPARQL support. Mostly, it's a lot like C#, but it takes the syntax for Function overloading, Destructuring, and nested Guard Clauses from languages like Erlang. For a tour of the language, take a look at the Learn Fifth in Y Minutes Guide.

More docs here including installation instructions.

Basic Language Features

  • Classes with methods and properties
  • Function overloading with parameter constraints (guards)
  • Parameter Destructuring with guard clauses
  • All of the usual control-constructs
  • Exception handling: try/catch/finally blocks
  • Multiple module support with namespaces
  • Namespace imports with aliasing support
  • Type system: Primitives, classes, lists, Arrays
  • List comprehensions with projection and filtering: [expr from var in source where constraint]
    • Breaking change: Legacy in/# syntax replaced with from/where syntax
    • SPARQL comprehensions: Use property access on iteration variable (e.g., [x.age from x in query <- store])
    • SPARQL variables accessed as properties: x.propertyName instead of ?variable
    • See migration guide for full details

Knowledge Graph Primitives

  • Native RDF types: graph, triple, store, query are built-in language primitives
  • Built-in KG runtime: Fifth.System.KG provides graph creation, triple management, and store operations
  • Built-in high performance Triple Store (QuadStore)
  • Triple literals: <subject, predicate, object> syntax for inline RDF construction
  • TriG blocks: Multi-line graph literals with full TriG syntax support
  • SPARQL literals: Embed SPARQL queries directly in source code with ?<SELECT...>
  • Operator syntax provides clean and intuitive ways to work with triples, graphs, triple-stores and queries.
  • Transparent persistence: Save graphs to remote stores with simple assignment: myStore += graph;

What Works

  • Full .NET IL compilation pipeline (via Roslyn back-end)
  • Multi-platform support (Linux, macOS, Windows)
  • MSBuild integration with .5thproj project files (very basic at this stage)
  • Parameter destructuring in functions
  • Classes with methods and properties
  • Control flow statements (if/else, while)
  • Exception handling with try/catch/finally
  • Function overloading with parameter guards
  • List comprehensions with new from/where syntax: [projection from var in source where constraints]
  • Knowledge graph operations (TriG literals, SPARQL literals, graph operations)
  • Comprehensive test suite (xUnit + FluentAssertions)
  • Published MSBuild SDK and compiler support via Nuget
  • Direct Consumption of Query Results in List Comprehensions

Planned Improvements

See our architectural roadmap for detailed plans. Key priorities:

  • Architectural Improvements to support modern compiler tool chains: auto-complete, LSP, go to definition &c
  • Parser error recovery: Better handling of syntax errors for IDE support
  • Incremental compilation: Faster rebuild times for large projects

Full analysis available in architectural review.

Quick Start

Prerequisites

Installation

Download the latest release from the releases page or build from source:

git clone https://github.com/aabs/fifthlang.git
cd fifthlang
dotnet build fifthlang.sln

Your First Fifth Program

Create a file hello.5th:

main(): int {
x: int = 42;
return x;
}

Build and run with a .5thproj file (see below for project setup).

Working with Knowledge Graphs

Create a file kg-example.5th:

// Connect to a SPARQL store
alias x as <http://example.com/blah#>;
alias rdf as <http://www.w3.org/1999/02/22-rdf-syntax-ns#>;
myStore : store = sparql_store(<http://localhost:8080/graphdb>);
main(): int {
// Create a graph and add triples
g: graph = @< >;
g += <x:Alice, x:age, 42>;
g += <x:Alice, rdf:type, x:Person>;
// Save to the store
myStore += g;
// SPARQL Literals embedded in 5th code...
age: int = 42;
rq: query = ?<
PREFIX x: <http://example.com/blah#>
SELECT ?person
WHERE {
?person x:age age .
}
>;
fortyTwoYearOlds: result = rq <- myStore ; // query application on a store
// go do something with the results
return 0;
}

Creating Fifth Projects

Fifth integrates with .NET's build system using .5thproj files:

<!-- MyApp.5thproj -->
<ProjectSdk="Fifth.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
</Project>

Build like any .NET project:

dotnet build MyApp.5thproj
dotnet run --project MyApp.5thproj

See Fifth.Sdk documentation for more details.


Roadmap

  • Introduction of Dataset and separation of datasets and stores.
  • Graph/Dataset Destructuring Into Object Instances
  • SPARQL integration into List Comprehensions. (ideas)
  • MSBUILD SDK Support for full Visual Studio integration with Project Templates published via Nuget.
  • Inference Support

Recently Completed

  • Multi-platform release pipeline (spec 014)
  • Constructors (spec 013)
  • Generics (spec 012)
  • Query Application (spec 011)
  • TriG literal expressions (spec 009) - Multi-line graph blocks with TriG syntax
  • SPARQL literal expressions (spec 010) - Embedded SPARQL queries
  • System KG types (spec 008) - Runtime graph operations via Fifth.System.KG
  • Roslyn backend (spec 006) - IL emission and compilation pipeline
  • Exception handling (spec 005) - Try/catch/finally control flow
  • Guard clauses (spec 002) - Parameter constraints for function overloading
  • Namespace imports (spec 004) - Import directives with aliasing
  1. Q1 2026: Error recovery + diagnostic improvements
  2. Q2 2026: Language Server Protocol (LSP) + incremental compilation
  3. Q3 2026: Symbol table enhancements + testing architecture

See roadmap details and issue templates.


Documentation

Getting Started

Language Reference

Community


Contributing

We welcome contributions from the community. Areas where help is particularly valuable:

  • Language design feedback and suggestions
  • Documentation improvements and examples
  • Bug reports with minimal reproductions
  • Feature proposals with use cases

To get started:

  1. Check open issues tagged good-first-issue
  2. Read development instructions if you want to work on the compiler
  3. Start a discussion for questions or proposals

License

Fifth is distributed under the MIT License. See LICENSE for details.


Project Structure

src/
├── parser/ ANTLR-based parser (FifthLexer.g4, FifthParser.g4)
├── ast-model/ Core AST definitions (AstMetamodel.cs)
├── ast-generated/ Auto-generated builders & visitors
├── compiler/ Transformation pipeline (18 phases)
├── code_generator/ IL emission (Roslyn-based)
├── fifthlang.system/ Runtime library (KG operations)
└── Fifth.Sdk/ MSBuild integration
test/
├── ast-tests/ AST builder & visitor tests
├── syntax-parser-tests/ Grammar & parsing tests
├── runtime-integration-tests/ End-to-end execution tests
└── kg-smoke-tests/ Knowledge graph feature tests

Built with: C# 14, .NET 10.0, ANTLR 4.8, dotNetRDF, Roslyn, xUnit

Status: Active development | Experimental | Pre-release

About

Fifth is a .NET 10.0 systems programming language combining imperative and functional programming with first-class knowledge graph and semantic web support. It offers a modified C#-like syntax enhanced with Erlang-inspired function overloading, parameter destructuring, and guard clauses.

Topics

Resources

Code of conduct

Stars

14 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Fifth Language

CILicense.NET

A .NET systems programming language with native support for knowledge graphs and semantic web technologies.
Fifth is still under active development, and is not yet ready for mission-critical use.
I invite you to get involved and play with it, and tell me what you do and don't love.


Language Features

Fifth uniquely combines imperative and functional programming with first-class RDF and SPARQL support. Mostly, it's a lot like C#, but it takes the syntax for Function overloading, Destructuring, and nested Guard Clauses from languages like Erlang. For a tour of the language, take a look at the Learn Fifth in Y Minutes Guide.

More docs here including installation instructions.

Basic Language Features

  • Classes with methods and properties
  • Function overloading with parameter constraints (guards)
  • Parameter Destructuring with guard clauses
  • All of the usual control-constructs
  • Exception handling: try/catch/finally blocks
  • Multiple module support with namespaces
  • Namespace imports with aliasing support
  • Type system: Primitives, classes, lists, Arrays
  • List comprehensions with projection and filtering: [expr from var in source where constraint]
    • Breaking change: Legacy in/# syntax replaced with from/where syntax
    • SPARQL comprehensions: Use property access on iteration variable (e.g., [x.age from x in query <- store])
    • SPARQL variables accessed as properties: x.propertyName instead of ?variable
    • See migration guide for full details

Knowledge Graph Primitives

  • Native RDF types: graph, triple, store, query are built-in language primitives
  • Built-in KG runtime: Fifth.System.KG provides graph creation, triple management, and store operations
  • Built-in high performance Triple Store (QuadStore)
  • Triple literals: <subject, predicate, object> syntax for inline RDF construction
  • TriG blocks: Multi-line graph literals with full TriG syntax support
  • SPARQL literals: Embed SPARQL queries directly in source code with ?<SELECT...>
  • Operator syntax provides clean and intuitive ways to work with triples, graphs, triple-stores and queries.
  • Transparent persistence: Save graphs to remote stores with simple assignment: myStore += graph;

What Works

  • Full .NET IL compilation pipeline (via Roslyn back-end)
  • Multi-platform support (Linux, macOS, Windows)
  • MSBuild integration with .5thproj project files (very basic at this stage)
  • Parameter destructuring in functions
  • Classes with methods and properties
  • Control flow statements (if/else, while)
  • Exception handling with try/catch/finally
  • Function overloading with parameter guards
  • List comprehensions with new from/where syntax: [projection from var in source where constraints]
  • Knowledge graph operations (TriG literals, SPARQL literals, graph operations)
  • Comprehensive test suite (xUnit + FluentAssertions)
  • Published MSBuild SDK and compiler support via Nuget
  • Direct Consumption of Query Results in List Comprehensions

Planned Improvements

See our architectural roadmap for detailed plans. Key priorities:

  • Architectural Improvements to support modern compiler tool chains: auto-complete, LSP, go to definition &c
  • Parser error recovery: Better handling of syntax errors for IDE support
  • Incremental compilation: Faster rebuild times for large projects

Full analysis available in architectural review.

Quick Start

Prerequisites

Installation

Download the latest release from the releases page or build from source:

git clone https://github.com/aabs/fifthlang.git
cd fifthlang
dotnet build fifthlang.sln

Your First Fifth Program

Create a file hello.5th:

main(): int {
x: int = 42;
return x;
}

Build and run with a .5thproj file (see below for project setup).

Working with Knowledge Graphs

Create a file kg-example.5th:

// Connect to a SPARQL store
alias x as <http://example.com/blah#>;
alias rdf as <http://www.w3.org/1999/02/22-rdf-syntax-ns#>;
myStore : store = sparql_store(<http://localhost:8080/graphdb>);
main(): int {
// Create a graph and add triples
g: graph = @< >;
g += <x:Alice, x:age, 42>;
g += <x:Alice, rdf:type, x:Person>;
// Save to the store
myStore += g;
// SPARQL Literals embedded in 5th code...
age: int = 42;
rq: query = ?<
PREFIX x: <http://example.com/blah#>
SELECT ?person
WHERE {
?person x:age age .
}
>;
fortyTwoYearOlds: result = rq <- myStore ; // query application on a store
// go do something with the results
return 0;
}

Creating Fifth Projects

Fifth integrates with .NET's build system using .5thproj files:

<!-- MyApp.5thproj -->
<ProjectSdk="Fifth.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
</Project>

Build like any .NET project:

dotnet build MyApp.5thproj
dotnet run --project MyApp.5thproj

See Fifth.Sdk documentation for more details.


Roadmap

  • Introduction of Dataset and separation of datasets and stores.
  • Graph/Dataset Destructuring Into Object Instances
  • SPARQL integration into List Comprehensions. (ideas)
  • MSBUILD SDK Support for full Visual Studio integration with Project Templates published via Nuget.
  • Inference Support

Recently Completed

  • Multi-platform release pipeline (spec 014)
  • Constructors (spec 013)
  • Generics (spec 012)
  • Query Application (spec 011)
  • TriG literal expressions (spec 009) - Multi-line graph blocks with TriG syntax
  • SPARQL literal expressions (spec 010) - Embedded SPARQL queries
  • System KG types (spec 008) - Runtime graph operations via Fifth.System.KG
  • Roslyn backend (spec 006) - IL emission and compilation pipeline
  • Exception handling (spec 005) - Try/catch/finally control flow
  • Guard clauses (spec 002) - Parameter constraints for function overloading
  • Namespace imports (spec 004) - Import directives with aliasing
  1. Q1 2026: Error recovery + diagnostic improvements
  2. Q2 2026: Language Server Protocol (LSP) + incremental compilation
  3. Q3 2026: Symbol table enhancements + testing architecture

See roadmap details and issue templates.


Documentation

Getting Started

Language Reference

Community


Contributing

We welcome contributions from the community. Areas where help is particularly valuable:

  • Language design feedback and suggestions
  • Documentation improvements and examples
  • Bug reports with minimal reproductions
  • Feature proposals with use cases

To get started:

  1. Check open issues tagged good-first-issue
  2. Read development instructions if you want to work on the compiler
  3. Start a discussion for questions or proposals

License

Fifth is distributed under the MIT License. See LICENSE for details.


Project Structure

src/
├── parser/ ANTLR-based parser (FifthLexer.g4, FifthParser.g4)
├── ast-model/ Core AST definitions (AstMetamodel.cs)
├── ast-generated/ Auto-generated builders & visitors
├── compiler/ Transformation pipeline (18 phases)
├── code_generator/ IL emission (Roslyn-based)
├── fifthlang.system/ Runtime library (KG operations)
└── Fifth.Sdk/ MSBuild integration
test/
├── ast-tests/ AST builder & visitor tests
├── syntax-parser-tests/ Grammar & parsing tests
├── runtime-integration-tests/ End-to-end execution tests
└── kg-smoke-tests/ Knowledge graph feature tests

Built with: C# 14, .NET 10.0, ANTLR 4.8, dotNetRDF, Roslyn, xUnit

Status: Active development | Experimental | Pre-release

About

Fifth is a .NET 10.0 systems programming language combining imperative and functional programming with first-class knowledge graph and semantic web support. It offers a modified C#-like syntax enhanced with Erlang-inspired function overloading, parameter destructuring, and guard clauses.

Topics

Resources

Code of conduct

Stars

14 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Fifth Language

CILicense.NET

A .NET systems programming language with native support for knowledge graphs and semantic web technologies.
Fifth is still under active development, and is not yet ready for mission-critical use.
I invite you to get involved and play with it, and tell me what you do and don't love.


Language Features

Fifth uniquely combines imperative and functional programming with first-class RDF and SPARQL support. Mostly, it's a lot like C#, but it takes the syntax for Function overloading, Destructuring, and nested Guard Clauses from languages like Erlang. For a tour of the language, take a look at the Learn Fifth in Y Minutes Guide.

More docs here including installation instructions.

Basic Language Features

  • Classes with methods and properties
  • Function overloading with parameter constraints (guards)
  • Parameter Destructuring with guard clauses
  • All of the usual control-constructs
  • Exception handling: try/catch/finally blocks
  • Multiple module support with namespaces
  • Namespace imports with aliasing support
  • Type system: Primitives, classes, lists, Arrays
  • List comprehensions with projection and filtering: [expr from var in source where constraint]
    • Breaking change: Legacy in/# syntax replaced with from/where syntax
    • SPARQL comprehensions: Use property access on iteration variable (e.g., [x.age from x in query <- store])
    • SPARQL variables accessed as properties: x.propertyName instead of ?variable
    • See migration guide for full details

Knowledge Graph Primitives

  • Native RDF types: graph, triple, store, query are built-in language primitives
  • Built-in KG runtime: Fifth.System.KG provides graph creation, triple management, and store operations
  • Built-in high performance Triple Store (QuadStore)
  • Triple literals: <subject, predicate, object> syntax for inline RDF construction
  • TriG blocks: Multi-line graph literals with full TriG syntax support
  • SPARQL literals: Embed SPARQL queries directly in source code with ?<SELECT...>
  • Operator syntax provides clean and intuitive ways to work with triples, graphs, triple-stores and queries.
  • Transparent persistence: Save graphs to remote stores with simple assignment: myStore += graph;

What Works

  • Full .NET IL compilation pipeline (via Roslyn back-end)
  • Multi-platform support (Linux, macOS, Windows)
  • MSBuild integration with .5thproj project files (very basic at this stage)
  • Parameter destructuring in functions
  • Classes with methods and properties
  • Control flow statements (if/else, while)
  • Exception handling with try/catch/finally
  • Function overloading with parameter guards
  • List comprehensions with new from/where syntax: [projection from var in source where constraints]
  • Knowledge graph operations (TriG literals, SPARQL literals, graph operations)
  • Comprehensive test suite (xUnit + FluentAssertions)
  • Published MSBuild SDK and compiler support via Nuget
  • Direct Consumption of Query Results in List Comprehensions

Planned Improvements

See our architectural roadmap for detailed plans. Key priorities:

  • Architectural Improvements to support modern compiler tool chains: auto-complete, LSP, go to definition &c
  • Parser error recovery: Better handling of syntax errors for IDE support
  • Incremental compilation: Faster rebuild times for large projects

Full analysis available in architectural review.

Quick Start

Prerequisites

Installation

Download the latest release from the releases page or build from source:

git clone https://github.com/aabs/fifthlang.git
cd fifthlang
dotnet build fifthlang.sln

Your First Fifth Program

Create a file hello.5th:

main(): int {
x: int = 42;
return x;
}

Build and run with a .5thproj file (see below for project setup).

Working with Knowledge Graphs

Create a file kg-example.5th:

// Connect to a SPARQL store
alias x as <http://example.com/blah#>;
alias rdf as <http://www.w3.org/1999/02/22-rdf-syntax-ns#>;
myStore : store = sparql_store(<http://localhost:8080/graphdb>);
main(): int {
// Create a graph and add triples
g: graph = @< >;
g += <x:Alice, x:age, 42>;
g += <x:Alice, rdf:type, x:Person>;
// Save to the store
myStore += g;
// SPARQL Literals embedded in 5th code...
age: int = 42;
rq: query = ?<
PREFIX x: <http://example.com/blah#>
SELECT ?person
WHERE {
?person x:age age .
}
>;
fortyTwoYearOlds: result = rq <- myStore ; // query application on a store
// go do something with the results
return 0;
}

Creating Fifth Projects

Fifth integrates with .NET's build system using .5thproj files:

<!-- MyApp.5thproj -->
<ProjectSdk="Fifth.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
</Project>

Build like any .NET project:

dotnet build MyApp.5thproj
dotnet run --project MyApp.5thproj

See Fifth.Sdk documentation for more details.


Roadmap

  • Introduction of Dataset and separation of datasets and stores.
  • Graph/Dataset Destructuring Into Object Instances
  • SPARQL integration into List Comprehensions. (ideas)
  • MSBUILD SDK Support for full Visual Studio integration with Project Templates published via Nuget.
  • Inference Support

Recently Completed

  • Multi-platform release pipeline (spec 014)
  • Constructors (spec 013)
  • Generics (spec 012)
  • Query Application (spec 011)
  • TriG literal expressions (spec 009) - Multi-line graph blocks with TriG syntax
  • SPARQL literal expressions (spec 010) - Embedded SPARQL queries
  • System KG types (spec 008) - Runtime graph operations via Fifth.System.KG
  • Roslyn backend (spec 006) - IL emission and compilation pipeline
  • Exception handling (spec 005) - Try/catch/finally control flow
  • Guard clauses (spec 002) - Parameter constraints for function overloading
  • Namespace imports (spec 004) - Import directives with aliasing
  1. Q1 2026: Error recovery + diagnostic improvements
  2. Q2 2026: Language Server Protocol (LSP) + incremental compilation
  3. Q3 2026: Symbol table enhancements + testing architecture

See roadmap details and issue templates.


Documentation

Getting Started

Language Reference

Community


Contributing

We welcome contributions from the community. Areas where help is particularly valuable:

  • Language design feedback and suggestions
  • Documentation improvements and examples
  • Bug reports with minimal reproductions
  • Feature proposals with use cases

To get started:

  1. Check open issues tagged good-first-issue
  2. Read development instructions if you want to work on the compiler
  3. Start a discussion for questions or proposals

License

Fifth is distributed under the MIT License. See LICENSE for details.


Project Structure

src/
├── parser/ ANTLR-based parser (FifthLexer.g4, FifthParser.g4)
├── ast-model/ Core AST definitions (AstMetamodel.cs)
├── ast-generated/ Auto-generated builders & visitors
├── compiler/ Transformation pipeline (18 phases)
├── code_generator/ IL emission (Roslyn-based)
├── fifthlang.system/ Runtime library (KG operations)
└── Fifth.Sdk/ MSBuild integration
test/
├── ast-tests/ AST builder & visitor tests
├── syntax-parser-tests/ Grammar & parsing tests
├── runtime-integration-tests/ End-to-end execution tests
└── kg-smoke-tests/ Knowledge graph feature tests

Built with: C# 14, .NET 10.0, ANTLR 4.8, dotNetRDF, Roslyn, xUnit

Status: Active development | Experimental | Pre-release

About

Fifth is a .NET 10.0 systems programming language combining imperative and functional programming with first-class knowledge graph and semantic web support. It offers a modified C#-like syntax enhanced with Erlang-inspired function overloading, parameter destructuring, and guard clauses.

Topics

Resources

Code of conduct

Stars

14 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Fifth Language

CILicense.NET

A .NET systems programming language with native support for knowledge graphs and semantic web technologies.
Fifth is still under active development, and is not yet ready for mission-critical use.
I invite you to get involved and play with it, and tell me what you do and don't love.


Language Features

Fifth uniquely combines imperative and functional programming with first-class RDF and SPARQL support. Mostly, it's a lot like C#, but it takes the syntax for Function overloading, Destructuring, and nested Guard Clauses from languages like Erlang. For a tour of the language, take a look at the Learn Fifth in Y Minutes Guide.

More docs here including installation instructions.

Basic Language Features

  • Classes with methods and properties
  • Function overloading with parameter constraints (guards)
  • Parameter Destructuring with guard clauses
  • All of the usual control-constructs
  • Exception handling: try/catch/finally blocks
  • Multiple module support with namespaces
  • Namespace imports with aliasing support
  • Type system: Primitives, classes, lists, Arrays
  • List comprehensions with projection and filtering: [expr from var in source where constraint]
    • Breaking change: Legacy in/# syntax replaced with from/where syntax
    • SPARQL comprehensions: Use property access on iteration variable (e.g., [x.age from x in query <- store])
    • SPARQL variables accessed as properties: x.propertyName instead of ?variable
    • See migration guide for full details

Knowledge Graph Primitives

  • Native RDF types: graph, triple, store, query are built-in language primitives
  • Built-in KG runtime: Fifth.System.KG provides graph creation, triple management, and store operations
  • Built-in high performance Triple Store (QuadStore)
  • Triple literals: <subject, predicate, object> syntax for inline RDF construction
  • TriG blocks: Multi-line graph literals with full TriG syntax support
  • SPARQL literals: Embed SPARQL queries directly in source code with ?<SELECT...>
  • Operator syntax provides clean and intuitive ways to work with triples, graphs, triple-stores and queries.
  • Transparent persistence: Save graphs to remote stores with simple assignment: myStore += graph;

What Works

  • Full .NET IL compilation pipeline (via Roslyn back-end)
  • Multi-platform support (Linux, macOS, Windows)
  • MSBuild integration with .5thproj project files (very basic at this stage)
  • Parameter destructuring in functions
  • Classes with methods and properties
  • Control flow statements (if/else, while)
  • Exception handling with try/catch/finally
  • Function overloading with parameter guards
  • List comprehensions with new from/where syntax: [projection from var in source where constraints]
  • Knowledge graph operations (TriG literals, SPARQL literals, graph operations)
  • Comprehensive test suite (xUnit + FluentAssertions)
  • Published MSBuild SDK and compiler support via Nuget
  • Direct Consumption of Query Results in List Comprehensions

Planned Improvements

See our architectural roadmap for detailed plans. Key priorities:

  • Architectural Improvements to support modern compiler tool chains: auto-complete, LSP, go to definition &c
  • Parser error recovery: Better handling of syntax errors for IDE support
  • Incremental compilation: Faster rebuild times for large projects

Full analysis available in architectural review.

Quick Start

Prerequisites

Installation

Download the latest release from the releases page or build from source:

git clone https://github.com/aabs/fifthlang.git
cd fifthlang
dotnet build fifthlang.sln

Your First Fifth Program

Create a file hello.5th:

main(): int {
x: int = 42;
return x;
}

Build and run with a .5thproj file (see below for project setup).

Working with Knowledge Graphs

Create a file kg-example.5th:

// Connect to a SPARQL store
alias x as <http://example.com/blah#>;
alias rdf as <http://www.w3.org/1999/02/22-rdf-syntax-ns#>;
myStore : store = sparql_store(<http://localhost:8080/graphdb>);
main(): int {
// Create a graph and add triples
g: graph = @< >;
g += <x:Alice, x:age, 42>;
g += <x:Alice, rdf:type, x:Person>;
// Save to the store
myStore += g;
// SPARQL Literals embedded in 5th code...
age: int = 42;
rq: query = ?<
PREFIX x: <http://example.com/blah#>
SELECT ?person
WHERE {
?person x:age age .
}
>;
fortyTwoYearOlds: result = rq <- myStore ; // query application on a store
// go do something with the results
return 0;
}

Creating Fifth Projects

Fifth integrates with .NET's build system using .5thproj files:

<!-- MyApp.5thproj -->
<ProjectSdk="Fifth.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup>
</Project>

Build like any .NET project:

dotnet build MyApp.5thproj
dotnet run --project MyApp.5thproj

See Fifth.Sdk documentation for more details.


Roadmap

  • Introduction of Dataset and separation of datasets and stores.
  • Graph/Dataset Destructuring Into Object Instances
  • SPARQL integration into List Comprehensions. (ideas)
  • MSBUILD SDK Support for full Visual Studio integration with Project Templates published via Nuget.
  • Inference Support

Recently Completed

  • Multi-platform release pipeline (spec 014)
  • Constructors (spec 013)
  • Generics (spec 012)
  • Query Application (spec 011)
  • TriG literal expressions (spec 009) - Multi-line graph blocks with TriG syntax
  • SPARQL literal expressions (spec 010) - Embedded SPARQL queries
  • System KG types (spec 008) - Runtime graph operations via Fifth.System.KG
  • Roslyn backend (spec 006) - IL emission and compilation pipeline
  • Exception handling (spec 005) - Try/catch/finally control flow
  • Guard clauses (spec 002) - Parameter constraints for function overloading
  • Namespace imports (spec 004) - Import directives with aliasing
  1. Q1 2026: Error recovery + diagnostic improvements
  2. Q2 2026: Language Server Protocol (LSP) + incremental compilation
  3. Q3 2026: Symbol table enhancements + testing architecture

See roadmap details and issue templates.


Documentation

Getting Started

Language Reference

Community


Contributing

We welcome contributions from the community. Areas where help is particularly valuable:

  • Language design feedback and suggestions
  • Documentation improvements and examples
  • Bug reports with minimal reproductions
  • Feature proposals with use cases

To get started:

  1. Check open issues tagged good-first-issue
  2. Read development instructions if you want to work on the compiler
  3. Start a discussion for questions or proposals

License

Fifth is distributed under the MIT License. See LICENSE for details.


Project Structure

src/
├── parser/ ANTLR-based parser (FifthLexer.g4, FifthParser.g4)
├── ast-model/ Core AST definitions (AstMetamodel.cs)
├── ast-generated/ Auto-generated builders & visitors
├── compiler/ Transformation pipeline (18 phases)
├── code_generator/ IL emission (Roslyn-based)
├── fifthlang.system/ Runtime library (KG operations)
└── Fifth.Sdk/ MSBuild integration
test/
├── ast-tests/ AST builder & visitor tests
├── syntax-parser-tests/ Grammar & parsing tests
├── runtime-integration-tests/ End-to-end execution tests
└── kg-smoke-tests/ Knowledge graph feature tests

Built with: C# 14, .NET 10.0, ANTLR 4.8, dotNetRDF, Roslyn, xUnit

Status: Active development | Experimental | Pre-release

About

Fifth is a .NET 10.0 systems programming language combining imperative and functional programming with first-class knowledge graph and semantic web support. It offers a modified C#-like syntax enhanced with Erlang-inspired function overloading, parameter destructuring, and guard clauses.

Topics

Resources

Code of conduct

Stars

14 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages