<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Roland Brake </title>
    <description>The latest articles on DEV Community by Roland Brake  (@rolandbrake).</description>
    <link>https://dev.to/rolandbrake</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3947695%2F9dffec69-1ca2-4819-9002-ba35d91596f1.jpeg</url>
      <title>DEV Community: Roland Brake </title>
      <link>https://dev.to/rolandbrake</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rolandbrake"/>
    <language>en</language>
    <item>
      <title>I Built a Programming Language and Tiny Game Engine in C — Meet Pilang</title>
      <dc:creator>Roland Brake </dc:creator>
      <pubDate>Sat, 23 May 2026 13:27:57 +0000</pubDate>
      <link>https://dev.to/rolandbrake/i-built-a-programming-language-and-tiny-game-engine-in-c-meet-pilang-2a5a</link>
      <guid>https://dev.to/rolandbrake/i-built-a-programming-language-and-tiny-game-engine-in-c-meet-pilang-2a5a</guid>
      <description>&lt;h1&gt;
  
  
  I Built a Functional Programming Language in C — Meet Pilang
&lt;/h1&gt;

&lt;p&gt;For the past months, I’ve been building a programming language from scratch in C called &lt;strong&gt;Pilang&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It started as an experiment to better understand virtual machines, parsers, interpreters, and low-level systems programming. But over time, it evolved into something much bigger: a lightweight functional programming language focused on mathematical notation, tensor operations, and expressive real-world scripting.&lt;/p&gt;

&lt;p&gt;The project is open source here:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/rolandbrake/pilang" rel="noopener noreferrer"&gt;https://github.com/rolandbrake/pilang&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this article I want to share:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why I started building a language&lt;/li&gt;
&lt;li&gt;How Pilang works internally&lt;/li&gt;
&lt;li&gt;The features I implemented&lt;/li&gt;
&lt;li&gt;The hard problems I faced&lt;/li&gt;
&lt;li&gt;What I learned from building a VM from scratch&lt;/li&gt;
&lt;li&gt;Where I want to take the project next&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Why Build a Programming Language?
&lt;/h1&gt;

&lt;p&gt;Most programmers eventually ask themselves:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Could I build my own language?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For me, the answer became “I have to try.”&lt;/p&gt;

&lt;p&gt;I didn’t want to build just another parser tutorial project. I wanted to create a language that could actually be useful for real programs while still remaining small and understandable.&lt;/p&gt;

&lt;p&gt;I was especially interested in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Functional programming&lt;/li&gt;
&lt;li&gt;Mathematical syntax&lt;/li&gt;
&lt;li&gt;Tensor operations&lt;/li&gt;
&lt;li&gt;Lightweight scripting&lt;/li&gt;
&lt;li&gt;Runtime design&lt;/li&gt;
&lt;li&gt;Language simplicity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also wanted complete control over the runtime.&lt;/p&gt;

&lt;p&gt;Using C gave me direct access to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Memory management&lt;/li&gt;
&lt;li&gt;Performance optimizations&lt;/li&gt;
&lt;li&gt;VM design&lt;/li&gt;
&lt;li&gt;Bytecode execution&lt;/li&gt;
&lt;li&gt;Runtime systems&lt;/li&gt;
&lt;li&gt;Garbage collection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal became:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Build a small but expressive language that combines functional programming ideas with mathematical notation while still remaining lightweight and practical.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  What is Pilang?
&lt;/h1&gt;

&lt;p&gt;Pilang is a custom interpreted programming language written in C.&lt;/p&gt;

&lt;p&gt;It includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A custom lexer&lt;/li&gt;
&lt;li&gt;A parser&lt;/li&gt;
&lt;li&gt;Bytecode compiler&lt;/li&gt;
&lt;li&gt;Virtual machine&lt;/li&gt;
&lt;li&gt;Garbage collector&lt;/li&gt;
&lt;li&gt;Functional programming utilities&lt;/li&gt;
&lt;li&gt;Tensor and matrix operations&lt;/li&gt;
&lt;li&gt;Mathematical notation support&lt;/li&gt;
&lt;li&gt;Lightweight scripting features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of the main ideas behind Pilang is making mathematical and functional code feel natural without forcing everything into object-oriented patterns.&lt;/p&gt;

&lt;p&gt;For example, instead of writing:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(...)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pilang uses explicit functional operations:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This keeps transformations predictable and keeps the language centered around functions and data instead of objects and methods.&lt;/p&gt;




&lt;h1&gt;
  
  
  Example Syntax
&lt;/h1&gt;

&lt;p&gt;Here’s a simple example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;fun&lt;/span&gt; &lt;span class="nf"&gt;fib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;fib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;fib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;fib&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pilang also supports arrow functions and functional-style utilities:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;nums&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
           &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; 
           &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The language tries to stay lightweight and expressive without becoming overly complicated.&lt;/p&gt;




&lt;h1&gt;
  
  
  Building the VM
&lt;/h1&gt;

&lt;p&gt;The virtual machine is the heart of the project.&lt;/p&gt;

&lt;p&gt;The execution flow roughly looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Source Code
    ↓
Lexer
    ↓
Parser
    ↓
AST / Bytecode
    ↓
Virtual Machine
    ↓
Runtime Execution
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At first, I underestimated how difficult VM design actually is.&lt;/p&gt;

&lt;p&gt;Simple things quickly become complicated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Closures&lt;/li&gt;
&lt;li&gt;Garbage collection&lt;/li&gt;
&lt;li&gt;Variable scope&lt;/li&gt;
&lt;li&gt;Function calls&lt;/li&gt;
&lt;li&gt;Native functions&lt;/li&gt;
&lt;li&gt;Memory ownership&lt;/li&gt;
&lt;li&gt;Arrays and objects&lt;/li&gt;
&lt;li&gt;Error handling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of the hardest parts was implementing closures correctly without objects being garbage collected too early.&lt;/p&gt;

&lt;p&gt;I eventually moved toward a tri-color marking garbage collector after running into random crashes caused by premature collection.&lt;/p&gt;

&lt;p&gt;That debugging process alone taught me more about runtime systems than any tutorial ever could.&lt;/p&gt;




&lt;h1&gt;
  
  
  Mathematical and Tensor Operations
&lt;/h1&gt;

&lt;p&gt;One of the most important goals for Pilang is making mathematical programming feel natural.&lt;/p&gt;

&lt;p&gt;The language includes built-in support for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Matrices&lt;/li&gt;
&lt;li&gt;Tensors&lt;/li&gt;
&lt;li&gt;Vector operations&lt;/li&gt;
&lt;li&gt;Matrix multiplication&lt;/li&gt;
&lt;li&gt;Dot products&lt;/li&gt;
&lt;li&gt;Cross products&lt;/li&gt;
&lt;li&gt;Numeric transformations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of relying entirely on external libraries, many mathematical operations are implemented directly in the runtime for simplicity and performance.&lt;/p&gt;

&lt;p&gt;I wanted mathematical code to feel like a core part of the language itself rather than an afterthought.&lt;/p&gt;




&lt;h1&gt;
  
  
  Functional Programming Utilities
&lt;/h1&gt;

&lt;p&gt;Pilang also includes built-in functional programming helpers like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;map&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;filter&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;reduce&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Iterators&lt;/li&gt;
&lt;li&gt;Arrow functions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;nums&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;reduce&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nums&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nf"&gt;println&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Implementing this inside a custom VM was surprisingly challenging because functions themselves become runtime objects.&lt;/p&gt;

&lt;p&gt;That means closures, scopes, and references all have to work correctly with garbage collection.&lt;/p&gt;




&lt;h1&gt;
  
  
  Building the VM
&lt;/h1&gt;

&lt;p&gt;The virtual machine is the heart of the project.&lt;/p&gt;

&lt;p&gt;The execution flow roughly looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Source Code
    ↓
Lexer
    ↓
Parser
    ↓
AST / Bytecode
    ↓
Virtual Machine
    ↓
Runtime Execution
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At first, I underestimated how difficult VM design actually is.&lt;/p&gt;

&lt;p&gt;Simple things quickly become complicated:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Closures&lt;/li&gt;
&lt;li&gt;Garbage collection&lt;/li&gt;
&lt;li&gt;Variable scope&lt;/li&gt;
&lt;li&gt;Function calls&lt;/li&gt;
&lt;li&gt;Native functions&lt;/li&gt;
&lt;li&gt;Memory ownership&lt;/li&gt;
&lt;li&gt;Arrays and objects&lt;/li&gt;
&lt;li&gt;Error handling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One of the hardest parts was implementing closures correctly without objects being garbage collected too early.&lt;/p&gt;

&lt;p&gt;I eventually moved toward a tri-color marking garbage collector after running into random crashes caused by premature collection.&lt;/p&gt;

&lt;p&gt;That debugging process alone taught me more about runtime systems than any tutorial ever could.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why Functional Programming?
&lt;/h1&gt;

&lt;p&gt;I’ve always liked how functional programming encourages thinking in terms of transformations instead of mutable state.&lt;/p&gt;

&lt;p&gt;Instead of attaching behavior to objects everywhere, Pilang tries to keep functions explicit and composable.&lt;/p&gt;

&lt;p&gt;This makes many operations easier to reason about, especially when working with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Numerical data&lt;/li&gt;
&lt;li&gt;Matrix operations&lt;/li&gt;
&lt;li&gt;Tensor transformations&lt;/li&gt;
&lt;li&gt;Data pipelines&lt;/li&gt;
&lt;li&gt;Scripting utilities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The language is not purely functional, but functional ideas strongly influence its design.&lt;/p&gt;




&lt;h1&gt;
  
  
  Hard Lessons Learned
&lt;/h1&gt;

&lt;p&gt;Building a language sounds fun.&lt;/p&gt;

&lt;p&gt;And it is.&lt;/p&gt;

&lt;p&gt;But it also forces you to confront some brutal engineering problems.&lt;/p&gt;

&lt;p&gt;Here are a few things I learned:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Memory management is hard
&lt;/h2&gt;

&lt;p&gt;You don’t truly understand memory management until your interpreter starts randomly crashing after 30 minutes because one closure was freed too early.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Parsers become messy very quickly
&lt;/h2&gt;

&lt;p&gt;Small syntax additions can explode parser complexity.&lt;/p&gt;

&lt;p&gt;Adding assignment expressions, arrow functions, and custom operators required major parser refactoring.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Language design becomes complicated very quickly
&lt;/h2&gt;

&lt;p&gt;Small syntax additions can have surprisingly large consequences.&lt;/p&gt;

&lt;p&gt;Adding features like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Arrow functions&lt;/li&gt;
&lt;li&gt;Assignment expressions&lt;/li&gt;
&lt;li&gt;Functional transformations&lt;/li&gt;
&lt;li&gt;Tensor operations&lt;/li&gt;
&lt;li&gt;Mathematical notation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;required major parser and VM refactoring&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Performance matters everywhere
&lt;/h2&gt;

&lt;p&gt;Even tiny inefficiencies become noticeable inside interpreters.&lt;/p&gt;

&lt;p&gt;I spent a lot of time optimizing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Parser functions&lt;/li&gt;
&lt;li&gt;Object allocations&lt;/li&gt;
&lt;li&gt;Array handling&lt;/li&gt;
&lt;li&gt;Matrix operations&lt;/li&gt;
&lt;li&gt;VM dispatch loops&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Why I’m Continuing the Project
&lt;/h1&gt;

&lt;p&gt;Most hobby languages eventually die.&lt;/p&gt;

&lt;p&gt;But Pilang has become more than a learning experiment for me.&lt;/p&gt;

&lt;p&gt;It’s now a platform where I can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Experiment with language design&lt;/li&gt;
&lt;li&gt;Experiment with language design&lt;/li&gt;
&lt;li&gt;Learn compiler theory&lt;/li&gt;
&lt;li&gt;Explore VM optimization&lt;/li&gt;
&lt;li&gt;Improve functional programming systems&lt;/li&gt;
&lt;li&gt;Experiment with mathematical abstractions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The deeper I go into the project, the more I realize how much there still is to learn.&lt;/p&gt;

&lt;p&gt;And honestly, that’s the fun part.&lt;/p&gt;




&lt;h1&gt;
  
  
  Future Plans
&lt;/h1&gt;

&lt;p&gt;Some things I want to add next:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Better package/resource system&lt;/li&gt;
&lt;li&gt;Better tensor operations&lt;/li&gt;
&lt;li&gt;Improved tooling&lt;/li&gt;
&lt;li&gt;Better documentation&lt;/li&gt;
&lt;li&gt;More optimized garbage collection&lt;/li&gt;
&lt;li&gt;Better debugging tools&lt;/li&gt;
&lt;li&gt;WebAssembly support&lt;/li&gt;
&lt;li&gt;Better package management&lt;/li&gt;
&lt;li&gt;More mathematical utilities&lt;/li&gt;
&lt;li&gt;Better standard library support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m also interested in making Pilang easier for other developers to try.&lt;/p&gt;

&lt;p&gt;Right now the project is very low-level and experimental, but that’s also part of its identity.&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Thoughts
&lt;/h1&gt;

&lt;p&gt;Building a programming language completely changed the way I think about software.&lt;/p&gt;

&lt;p&gt;It made me better at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;C programming&lt;/li&gt;
&lt;li&gt;Debugging&lt;/li&gt;
&lt;li&gt;Memory management&lt;/li&gt;
&lt;li&gt;System design&lt;/li&gt;
&lt;li&gt;Performance optimization&lt;/li&gt;
&lt;li&gt;Math&lt;/li&gt;
&lt;li&gt;Tooling&lt;/li&gt;
&lt;li&gt;Software architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More importantly, it reminded me why programming is fun.&lt;/p&gt;

&lt;p&gt;Sometimes the best projects are the ones that seem impossibly ambitious at first.&lt;/p&gt;

&lt;p&gt;Pilang is still evolving, but it has already taught me more than almost any other project I’ve worked on.&lt;/p&gt;

&lt;p&gt;If you’re interested in interpreters, virtual machines, functional programming, or language design, feel free to check out the repository and follow the project.&lt;/p&gt;

&lt;p&gt;GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/rolandbrake/pilang" rel="noopener noreferrer"&gt;https://github.com/rolandbrake/pilang&lt;/a&gt;&lt;/p&gt;

</description>
      <category>computerscience</category>
      <category>opensource</category>
      <category>programming</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
