My views on NeoHaskell
A rundown and critique of the NeoHaskell project
Haskell is not category theory
What, why, who?
Unpacking Elixir: Syntax
Elixir is a language with syntactical roots in Ruby. It also carries the Erlang legacy. Legacy used here as in "a great legacy" and not as in "system you don't like anymore". Ruby is an object-oriented language. Elixir is functional language. The Erlang part has an impact as Elixir was designed to provide strong…
Nibbles of Rust – Restructuring Patterns
In Rust, there is this feature known as “pattern matching”, whereby you can take apart a piece of structured data by writing out patterns which bind to parts of it. This process is known as “destructuring”, because you’re breaking a structure into parts.
Racket frustrates me
2024-07-06 I’ve archived this post Looking for the post Racket frustrates me? You can read the original post on The Internet Archive’s Wayback Machine. Why archive this post? It’s been about a year since I published this post and since realized something: I don’t have any skin in the game anymore. My workflow is now…
Kalyn: A self-hosting compiler for x86-64
Over the course of my Spring 2020 semester at Harvey Mudd College , I developed a self-hosting compiler entirely from scratch. This article walks through many interesting parts of the project. It’s laid out so you can just read from beginning to end, but if you’re more interested in a particular topic, feel free to…
A toy programming language in 137 lines of Python code
I thought it would be fun to go outside of my comfort zone of web development topics and write about something completely different and new, something I have never written about before. So today, I'm…
Just how constexpr is C++20’s std:string?
In C++20, string and vector are marked constexpr, which means they’re somewhat usable in compile-time programming. For example, we can write:
Why Learn Compilers (2021)
A sufficient understanding of computers is impossible without learning how compilers and their parts work. It is like stepping into the computer's mind and seeing how it feels from the inside. Compil...
Custom Allocators in Rust
Posts and writings by Nical
Interactive Common Lisp Development
Common Lisp programming is often presented as “interactive”. In most languages, modifications to your program are applied by recompiling it and restarting it. In contrast, Common Lisp lets…
A Critique of the Cap'n Proto Schema Language (2019)
Historical reference to Ian Denhardt’s A Critique of the Cap'n Proto Schema Language (2019-06-25), with archive and current documentation links.
Rust Cryptography Should Be Written in Rust
Rust should be improved to provide the necessary building blocks that are needed to write cryptography code that is free from timing side channels and similar hazards. These facilities should not be restricted to code within Rust -provided or -endorsed libraries; anybody should be able to use them to publish a crate…
An alternative front end for Haskell?
λm.me - An alternative frontend for Haskell?
Come Break My Compiler
Don’t worry … it’s super easy 🙃
God writes Haskell
God famously does not play dice with the universe, but he seems to enjoy writing Haskell :
C++ at the End of 2022
I must admit that some previous years for C++ might feel a bit “boring” and “stable”. New features, new standard every three years, meetings, conferences… life as usual (apart from some additional World/Economy/public Health events…). This year seems different as it looks like a “breakpoint” in the history of C++… and…
JavaScript private class fields considered harmful
Today I mourn. What am I mourning? Encapsulation. At least in my projects. As a library author, I’ve decided to avoid private class fields from now on and gradually refactor them out of my existing libraries. Why did I make such a drastic decision? It all started a few days ago, when I was building a Vue 3 app that…
Designing a Language Without a Parser
Designing a language, types first
My encounter with Medley Interlisp
Imagine someone let you into an alien spaceship they landed in your backyard, sat you at the controls, and encouraged you to fly the ship...
Which Interpreters Are Faster, AST or Bytecode?
A brief overview of our study of abstract-syntax-tree and bytecode interpreters on top of RPython and the GraalVM metacompilation systems.
Implementing Value Speculation in OCaml
Lucas Pluvinage's website
Interaction Nets, Combinators, and Calculus – HVM
Experiments, technology, and thoughts on life.
Calling Rust from Python
I recently watched GOTO conferences' talk Calling Functions Across Languages by Richard Feldman. I’m afraid I have to disagree with using the term 'language' in this context. It’s a no-brainer to call Java from Kotlin or Scala or to call Java from Kotlin. Hence, in the rest, I’ll use 'stack'.
A Forth Vocabulary for Iteration
I recently wrote a small 16-bit Forth for 8086 PCs running DOS. I built the basic one-liner loop words that can trivially be built with j...
Memory safety without borrow checking, reference counting, or garbage collection
Single ownership is one of those concepts that's both easier and more powerful than we realize.