Thu 15 Jun 2023

Exploring Dataflow Analysis in the Rust Compiler

Recently I’ve been working in static analysis land and as a part of that have been familiarizing myself with data flow analysis. I look at a fair amount of MIR and so decided to delve into the rustc_mir_dataflow crate to see how these things are handled in the rust compiler. There is a helpful introduction to this topic in the rustc dev guide, and this post fleshes things out a bit.

Source: Exploring Dataflow Analysis in the Rust Compiler, an article by David Anekstein.

Three techniques to adapt LLMs for any use case

Large language models (LLMs) have powerful general capabilities out of the box: they can answer questions, write poems and stories, invent recipes, and write code. But they may not precisely fit your use case. Their answers may be too vague, poorly formatted, or even incorrect.

Fortunately, you can adapt LLMs to meet your needs. There are three levels of LLM customization:

  1. Prompt engineering
  2. Embeddings via vector databases
  3. Fine-tuning

Each level is an order of magnitude more difficult and expensive than the previous, but offers far more customization.

Source: Three techniques to adapt LLMs for any use case, an article by Philip Kiely.

An Ode to Emacs. The Greatest Operating System

Emacs is one of those magical pieces of technology that manages to bridge the gap between being a tool that does useful work, and becoming a deeply personal component in a software developer’s life. It is one half of the editor war and is one of the longest running examples of programmers elevating their personal choices to moral imperatives. But beyond that, it is also a piece of software that has seen decades of iteration. It’s old enough that parts of it were contributed by people that have long since passed. They may be gone, but their code still lives on, making our lives just a bit easier.

Source: An Ode to Emacs. The Greatest Operating System, an article by Diego Crespo.