Hi there!

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.
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

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.

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

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
- National University of Singapore Outstanding Undergraduate Researcher Prize (2019)
- Dean's list: AY 2016/2017 Sem 2, AY 2017/2018 Sem 1, AY 2018/2019 Sem 1 and 2
- CS4215 Programming Languages: Letter of Commendation (AY 2018/2019 Sem 2)
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:
- Implementing
Stage
/Scene
as FXML root support in Gluon SceneBuilder - JavaFX: WICCreateImagingFactory: defer CoUninitialize() call to thread exit
- Diagnosing a bug in the TLSv1.3 implementation in OpenJDK (bug report is written by me)
- libuv: workaround broken pthread_sigmask on Android
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.
Other games that I really enjoyed include:
- Splatoon / Splatoon 2 / Splatoon 3
- The Advance Wars series
- Portal 2
- Mario & Luigi: Bowser's Inside Story
Reading List
Stuff that I have read and liked:
- On Understanding Data Abstraction, Revisited by William R. Cook which explores the difference between Objects and Abstract Data Types. A must read for developers who wish to gain a greater understanding of what OOP is!