Yasser Arguelles

Compiler Engineer
Systems Engineer

github-link  Github Resume

Skill Summary

  • Proficient in C, skilled in C++, Assembly, and Java
  • Compiler toolchains (parsers, debug information, code generation, optimization, linkers)
  • Operating systems developer
cuik

Cuik

Cuik (Fast, Tiny, C compiler frontend)

  • 2x the preprocessor speed
  • less than 25k sloc
  • flexible compiler-as-library design
  • uses my custom language-agnostic backend, TB
  • aiming for spec compliance
Cuik repo

Cuik is a modern C compiler, the idea is to be significantly smaller without compromising on flexibility, errors or compile speed. Unlike standard compilers it can compile multiple files in parallel within the same process along with link by itself (on windows for now). It's not complete but every day it gets closer to self-hosting and eventually working as my daily driver.

Cuik compiling a GL demo

Here it is parsing a small amount of GLSL

Cuik parsing GLSL

TB

TB

  • Sea of nodes IR (like V8 and JVM Hotspot)
  • Language-agnostic library
  • Pure C11 code
  • Parallel by design
  • Linker capabilities included as a library
TB repo (it is a monorepo alongside Cuik but both projects capable of being used without the other)

TB is a custom backend made to combat issues with other popular backend options (LLVM, libgccjit). We focus on being both simple and very capable, the design allows for trivial parallel compilation and integrated linking.

TB uses sea-of-nodes which is an IR style similar to SSA (immutable values representing data flow) but instead of representing control flow via a separate graph where instructions/values are placed, certain nodes propagate control flow and it acts as any other form of data would. This way we abstract away a lot of scheduling details from the IR and leave clearer room for the code generator. A simple example is that sea of nodes doesn't require the IR to perform loop invariant code motion (moving operations outside of a loop if they don't change per iteration) because values simply "would not" exist in the loop. The point of type systems and IRs is to expose logical truths which we can optimize around or share with users and this style is in my opinion most suited for TB. TB IR in graphviz

The red edges represent control flow, nodes which imply ordering will depend on whatever must happen before them in a more intuitive style than basic blocks where certain operations don't have a strict ordering.


TB also contains a nearly complete PE linker, it's missing the ability to emit debug info but other than that can link EXEs from COFF files. The linker is highly parallel, relying heavily on a fast non-blocking hash map design derived from Cliff Click's work.

SockOS

SockOS

  • Microkernel
  • Multi-core
  • x64
  • simple XHCI support
  • Intel iGPU support (currently only able to use multiple display planes)
  • Fair thread scheduler (based on Linux's CFS)

This is a hobby OS I started with a small group, the design follows a microkernel and currently it's able to boot into userland and run simple services to handle USB via XHCI and graphics via custom drivers for Intel iGPUs. I've done a bit of work on using the GPU to accelerate the display composition. At the moment that means I can display cursor sprites using an Intel iGPU's display planes.

Here's a video of it booting on real Dell Optiplex hardware and using the iGPU to draw a simple purple sprite

Disclaimer: As this is a group project, I'd like to highlight that while I played a significant role in developing this OS, not all code in this project has been written by me.

Hire Me!

If you think my projects are interesting, I may be a good fit for your company.