Compiling History: A brief tour of C compilers
As the story of C’s birth goes hand in hand with the creation of Unix, the first C compiler can be traced back to the early 1970’s.
Topics /
The most popular blog posts about software engineering on Hacker News. 1,116 posts.
As the story of C’s birth goes hand in hand with the creation of Unix, the first C compiler can be traced back to the early 1970’s.
The current article describes a series of Java Virtual Machine (JVM) benchmarks with a primary focus on top-tier Just-In-Time (JIT) compilers, such as C2 JIT, and Graal JIT. The benchmarks are structured in three distinct (artificial) categories:
By Devine Lu Linvega
Given the current register state for a thread, and read-only access to memory, what would the register state hypothetically become if the current function was to immediately return and execution was to resume in its caller?
I've created a set of install scripts for Windows that helps people install many different programming languages using standard tools.
I had never been a fan of devops/server-admin work. The sheer number of headaches involved in setting up the services, configuring them, automating them, and ensuring their reliability were just annoying and time-consuming. PaaS offerings like Heroku, AWS—and later—Railway, and Render, were appealing options out of…
The other day I was interviewing a developer for a position at Wallapop. The candidate was a little bit junior, but I enjoyed their technical assignment and the conversation was going great. One of the questions I had to ask was
4NF presented in a straightforward way, with some investigation of history of teaching 4NF.
A deep dive into how I automated my now page on my personal website by creating a Go script and making use of GitHub Actions.
PowerPC Macs were produced in huge numbers, and a lot of this hardware is still viable for use today, with professional software such as Photoshop CS2 and Propellerheads Reason. They're still good workstations, with lots of productivity software, and no always-online tracking or distractions. Originally, I got mine…
I saw a project a couple weeks back which allows writing and running Crystal methods inline inside a Ruby file. It’s a neat project, and I don’t want to take away from it but something in the README example looked off to me. require 'crystalruby' require 'benchmark' module Fibonnaci crystalize [n:
Update Nov 30: I've added a version 2, which makes the benchmarks and design overview section in this article outdated. See the github repo for updated benchmarks.
I am using a very simple system for remembering commands and procedures, and for tracking what I work on. I have two plain text files called notes.txt and worktime.txt. In the notes file, I write d…
Within the LLVM project, MC is a library responsible for handling assembly, disassembly, and object file formats. Intro to the LLVM MC Project, which was written back in 2010, remains a good source to understand the high-level structures. In the latest release cycle, substantial effort has been dedicated to refining…
One of the hardest things for people to understand with distributed systems is that eventual consistency is the same thing as eventual inconsistency. The very...
Generative Adversarial Networks (GANs), discovered by Ian Goodfellow in 2014, were an early method in the area of generative AI. I will focus on image generation as set out in the paper Generative Adversarial Nets 1 . This paper is the focal point of the post, I will guide you through the implementation of the paper…
We need a fast way to query multiple potentially large sets of data on-demand at interactive speeds. Sometimes the easiest solution to a hard problem is to build the right tool for the job.
Update: The paper version of this post is accepted at PLDI SOAP 2024. Take a look at the preprint (PDF).
Getting started with Zig's meta programming capabilities by leveraging a few useful functions
I just finished reading the paper Borrow checking Hylo . It outlines the basic design of Hylo . Hylo is an early-stage programming language, but unlike other contenders of C++, it provides memory safety like rust. Specifically it merges rust’s borrow checking ideas into the framework of moveable value semantics (MVS)…
Static or dynamic, a program's design is written in its types.
Efficient software development benefits from local development, it enables faster iteration, better debugging and ensures consistency between local and production environments.
How I learnt Elm (its good parts and bad) by porting a medium-sized web frontend from React.
Usually in C identifiers are not directly followed by strings. But when U prefixed literals were introduced in C. there still were some rare clashes with existing code. This happened were a macro U…
Academic website for Stefan Abi-Karam.
Three months ago, I wrote about why you might want to use panics for error handling. Even though it’s a catchy title, panics are hardly suited for this goal, even if you try to hack around with macros and libraries. The real star is the unwinding mechanism, which powers panics. This post is the first in a series…
In keeping with the Commodore tradition of cost cutting, most consumer models of their Amiga line of computers came with severely watered down documentation. The Amiga 500 was an exception from this rule, but owners of later machines - such as the A1200 - may not have gotten any documentation for the command line part…
And why it is so easy to get wrong...
Building an intuition for the mathematics behind the "TLA" in "TLA+"
Back in 2019, Nick Fitzgerald published always bump downwards, an article making the case that for bump allocators, bumping “down” (towards lower addresses) is better than bumping up. The biggest reasons for this are bumping up requires 3 branches vs 2 for bumping down and rounding down requires fewer instructions…