Top posts
Every blog post that took off on Hacker News, ranked by the votes of its best submission. 3,709 posts.
Dreaming of a Parser Generator for Language Design
Trying to design a new programming language, I’m faced with the question of how to implement a parser for it. Various parser generators are available and sup...
Learning a new language, or how I gained familiarity with Go
How I've eased into a new language, Go, as a Senior Software Engineer, and some initial thoughts on the language.
Porting a Golang and Rust CLI tool to D
Programming, retrogaming, hacking and computer stuff.
Who Says C is Simple? (2010)
When I (George) started to write CIL I thought it was going to take two weeks. Exactly a year has passed since then and I am still fixing bugs in it. This gross underestimate was due to the fact that I thought parsing and making sense of C is simple. You probably think the same. What I did not expect was how many dark…
Faster Sorting with Go Generics
Recently, a new set of sorting functions has landed in Go's golang.org/x/exp/slices package [1] . These functions leverage Go generics to provide a more ergonomic API for sorting (without requiring users to implement sort.Interface ), and also deliver a nice performance improvement, as the CL demonstrates.
ECMAScript 4: The Missing Version
In your build tools, you may have noticed that you have an ECMAScript 3 target, and 5 and up, but never a 4. Why is that?
Learning Clojure: comparing with Java streams
This is the 6th post in the Learning Clojure focus series. In general, one learns by comparing to what one already knows: I’m learning Clojure in that way. Coming from a Java background, I naturally want to use streaming features. So, what would be the Clojure counterparts of Java’s functions filter(), map(), etc.?
Coalton Playground: Type-Safe Lisp in the Browser
I wanted to share a side project I’ve been tinkering with for a while and finally got around to shipping: Coalton Playground – basically a web-based REPL for Coalton, which is this inte…
Rebol vs. Lisp Macros
Author: HostileFork, Title: Rebol vs. Lisp Macros, Date: 19-Apr-2016, Length: 2220 words
Smalltalk Envy
I myself was not on the famous C3 (Chrysler Comprehensive Compensation System) project in 1996-2000 that is pivotal to ‘Extreme Programming’ (XP). That project used Smalltalk, and team contribution was provided by Object Technology International’s ENVY version control system. I wanted to know more about that so I…
The Python GIL Visualized
In preparation for my upcoming PyCON'2010 talk on "Understanding the Python GIL", I've been working on a variety of new material--including some graphical visualization of the GIL behavior described in my earlier talk . I'm still experimenting, but check it out.
Query-Based Compiler Architectures
What a query-based compiler is and what they are good for.
Debugging Lisp (2015)
This post is for all of the miscellaneous features that arent large enough to get their own individual posts. If you havent read all of them, here are the links to the previous posts on recompilation , inspection , class … Read the rest
New Edition of “Programming in Haskell” Now Available
An extensively updated and expanded version of the best-selling first edition. Now covers recent and more advanced features of Haskell.
Little Lisp interpreter
Little Lisp is an interpreter that supports function invocation, lambdas, lets, ifs, numbers, strings, a few library functions, and lists. I wrote it for a l...
Clojure from the ground up: Macros
In Chapter 1 , I asserted that the grammar of Lisp is uniform: every expression is a list, beginning with a verb, and followed by some arguments. Evaluation proceeds from left to right, and every element of the list must be evaluated before evaluating the list itself. Yet we just saw, at the end of Sequences , an…
Software Security Is a Programming Languages Issue (2018)
Software security must be addressed by all programmers, not just security experts. So we teach it in CS 330, a programming (languages) class.
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…
Let futures be futures
In the early-to-mid 2010s, there was a renaissance in languages exploring new ways of doing concurrency. In the midst of this renaissance, one abstraction for achieving concurrent operations that was developed was the “future” or “promise” abstraction, which represented a unit of work that will maybe eventually…
A different view on Functional Programming
If you have never heard about functional programming before, I’ll have the honor to instill in you my view on it. If you have, you might know that it’s usually defined by some of …
The Arduino Uno Q is a weird hybrid SBC
The Arduino Uno Q is... a weird board. It's the first product born out of Qualcomm's buyout of Arduino. It's like if you married an Intel CPU, and a Raspberry Pi RP2040 microcontroller—oh wait, Radxa's X4 did that. Arduino even tried it before with their old Yún board, which had Linux running on a MIPS CPU, married to…