Hi there!

My Photo

I am Paul Tan, a computer engineer from Singapore. My interests are in computer graphics and the design and implementation of programming languages. I enjoy programming, and have worked on a large variety of projects and technologies. I try to keep a blog on my progress.

View my resume

Key Interests and Activities

Do take a look at my Projects List to get a good idea of my interests and what I'm actively working on. Historically, I've mostly done programming stuff to "scratch my own itch", and my projects reflect that.

Programming language design / Compiler Engineering

bpat running on the Powkiddy X55
bpat running on the Powkiddy X55

My journey in compiler techniques began as a possible way forward for me to achieve the holy grail of "write once, port anywhere" application development. I wasn't just interested in applications that can be easily re-compiled for different operating systems, but for the web as well. Since 2019, this has been accomplished via my own home-grown bpat framework, which heavily leans on an extensive system of DSLs (example), IDLs and code generation systems to provide platform-agnostic APIs while remaining maintainable by myself. After many years of steady development, bpat has grown to become the primary framework that I use for cross-platform app development and multimedia experiments.

rubber-lang
rubber-lang

Presently, I am also interested in exploring the use of compilers and programming language design to allow programmers to write more expressive code without sacrificing correctness or performance. One of my current efforts in this space is the rubber scripting language, which tries to fill a gap in the embeddable scripting language space where there doesn't seem to be a small-like-Lua statically-typed scripting language that supports stack-allocated structs. Such scripting languages are crucial for real-time scripting for interactive media such as video games.

Previously, I have also developed CIR as an experiment on using advanced metaprogramming techniques on top of C by pairing it with a compile-time JIT compiler.

Interactive media / 3d computer graphics

Skeletal animation implementation test
Skeletal animation implementation test

I find writing 3d computer graphics code extremely fun, and it's even better when the results turn out good. After my first foray into 3d graphics rendering with Bouncy Boar 3 where I used the well-established OGRE 3d rendering engine, I then placed my sights on developing my own 3d rendering engine from scratch using OpenGL. That was... a very long journey to say the least, but recently parts of the 3d rendering engine I've developed has shown up in projects such as DSL for Visual Novels in Scala as well as the web port of Bouncy Boar 3. Many new opportunities for me to showcase my rendering engine are on the way, so look out for it ;-).

Build systems

Aka make, ninja and friends. It's not that fun, really, but it's certainly important. I believe that a good build system setup is the lifeblood of any non-trivial project (especially one that cross-compiles to multiple platforms, like bpat), and so I've done some research/experimentation on them in the past, and keep track of any new developments. I use my own build system, ngkbuild, for some internal projects, which allows me to write the build scripts via Typescript/Javascript. Typescript compiles too slowly though, so I'm currently exploring swapping it with a custom statically typed scripting language (update: it's rubber-lang).

Accomplishments

Other Activities

Open source

Having benefited from open source projects, I try to contribute back when time permits and interests align. Some of my contributions include:

Video Games

Nowadays, I don't really have time to play video games, but when I do my go-to game is Splatoon 2, especially when I need more salt in my diet from playing ranked. I mostly play the Sloshing Machine and Bamboozler.

Me playing Splatoon 2

Other games that I really enjoyed include:

Reading List

Stuff that I have read and liked: