Types are a basic tool of software design (2018)
Static or dynamic, a program's design is written in its types.
The latest blog posts to take off on Hacker News. 246 posts.
Static or dynamic, a program's design is written in its types.
So I like to joke occasionally on the Fediverse that when looking at Wikipedia's list of programming languages supporting dependent types :
An implemenation of the SuperMemo-2 algorithm.
Introduction The more I learn about Lua's design and implementation, the more impressed I am. It's very rare to see software that does so much with so lit...
CPS, or continuation-passing style, is an intermediate representation for programs, particularly functional programs. It’s used in compilers for languages such as SML and Scheme. Much of its utility comes from its support for tail calls and nonlocal control flow such as call/cc, but it can also be used as an…
Where I try to explain why I feel like C\+\+ is so much fun, and to correct some misinformation.
A long time ago, I wrote a memoization library for Ruby. It was not easy, but I learned a great deal in the process. In this article, I am share these learnings and showing you how deep the memoization rabbit hole goes.
A few years ago, on a whim, I wrote YAIOUOM. YAOIOUM was a static analyzer for Rust that checked that the code was using units of measures correctly, e.g. a distance in meters is not a distance in centimeters, dividing meters by seconds gave you a value in m / s (aka m * s^-1). YAIOUOM was an example of a refinement…
I’ve been using Rust for hobby projects since 2016 and have been working professionally in Rust since 2021, so I tend to consider myself pretty knowledgeable about Rust. I’m already familiar with all the common limitations of Rust’s type system and how to work around them, so it’s pretty rare that I have to “fight the…
The ride is coming to an end. The experiment is done. We tried, but we admit defeat. Four years ago we started adding support for an alternative HTTP backend in curl. It would use a library written in rust, called hyper. The idea was to introduce an alternative implementation of HTTP internals that you could ……
A deep dive into how I use types to the fullest
Java has many features that make it well suited for large, long-lasting projects. But I find it surprisingly good for small tasks as well. Recent language features make it even better. The killer features are compile-time typing and great tool support.
Handling errors in Go is simple and flexible – yet no structure! It’s supposed to be simple, right? Just return an error , wrapped with a message, and move on. Well, that simplicity quickly turns into chaotic as our codebase grows with more packages, more developers, and more “quick fixes” that stay there forever…
Hi, I'm Peter Bex, a Scheme and free software enthusiast from the Netherlands. See my user page on the CHICKEN wiki or my git server for some of my projects.
A deep dive into Rust’s vec::Drain and its Drop implementation as an example of how ownership prevents subtle bugs—memory and otherwise!
I was honored to present a talk on Ruby concurrency at RubyConf 2024. It represents a high-level distillation of much of my writing and research over the past year. The conference itself was great, and presenting was such a fun experience. Here is the talk, titled “In-Depth Ruby Concurrency: Navigating the Ruby…
Scheme to the Spec is a series on the more complex, often overlooked aspects of programming language implementation.
A curated list of misconceptions about mainstream compilers.
There is a recent language comparison repo which has been getting shared a lot. In it, CRuby was the third slowest option, only beating out R and Python. The repo author, @BenjDicken, created a fun visualization of each language’s performance. Here’s one of the visualizations, which shows Ruby as the third slowest…
Dmitrii Kovanikov's Personas Web Space
Parenthetically Speaking: Articles by Shriram Krishnamurthi
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)…
Inspired by Jack Wrenn’s post on Undroppable Types in Rust, I set out to see if it’s possible to create types that must be used exactly once. From my understanding, those things are called linear types, but don’t quote me on that1. Unless you are quoting the title of this article which explicitly says linear types… I…
I wrote a book. It’s called Janet for Mortals, and it’s free, and it’s on the internet, and you can read it right now. And you should read it right now, instead of reading this blog post, because this blog post is not very interesting if you haven’t read the book. Heck, this blog post is not very interesting even if…
The dream of a single dialect-free C++ has probably been dead for many years, anyway.
Whether you have to do with data in the form of CSV, JSON or a full-blooded programming language like C, JavaScript, Scala, or maybe a query language like SQL, you always transform some sequence of characters (or binary values) into a structured representation. Whatever you’ll do with that representation depends on…
Update : I forgot that I did a brief analysis on this many years ago, using ROT13 as example.
Occurrence of Hyrum's law in Golang
I meant to write about this when I started my blog in 2009. Eventually Lush kind of faded out of my consciousness, as it was a lot easier to get work doing stuff in R or Matlab or whatever. The guy…
I am afraid to inform you that you have built a compiler. I know you wanted a “simple prototype” that would just add that one feature to your programming model. You said that “SSA is an overkill” and “it’s just way too much infrastructure to maintain for a simple task” and yet, six months later, you have pile of…